Commit 40be915c2dd4c08647c890457f16ca566bce3701
1 parent
6e3050fd
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
add enable/disable blocks feature
Showing
7 changed files
with
116 additions
and
6 deletions
Show diff stats
app/controllers/admin/environment_design_controller.rb
| 1 | 1 | class EnvironmentDesignController < BoxOrganizerController |
| 2 | - | |
| 2 | + | |
| 3 | 3 | protect 'edit_environment_design', :environment |
| 4 | 4 | |
| 5 | + def filtered_available_blocks(blocks=nil) | |
| 6 | + filtered_available_blocks = [] | |
| 7 | + blocks.each { |block| filtered_available_blocks << block if @environment.enabled_blocks.include?(block.name) } | |
| 8 | + filtered_available_blocks | |
| 9 | + end | |
| 10 | + | |
| 5 | 11 | def available_blocks |
| 6 | 12 | # TODO EnvironmentStatisticsBlock is DEPRECATED and will be removed from |
| 7 | 13 | # the Noosfero core soon, see ActionItem3045 | ... | ... |
app/controllers/admin/features_controller.rb
| 1 | 1 | class FeaturesController < AdminController |
| 2 | + | |
| 2 | 3 | protect 'edit_environment_features', :environment |
| 3 | - | |
| 4 | + | |
| 4 | 5 | def index |
| 5 | 6 | @features = Environment.available_features.sort_by{|k,v|v} |
| 6 | 7 | end |
| 7 | 8 | |
| 9 | + def manage_blocks | |
| 10 | + @blocks = [ ArticleBlock, | |
| 11 | + TagsBlock, | |
| 12 | + RecentDocumentsBlock, | |
| 13 | + ProfileInfoBlock, | |
| 14 | + LinkListBlock, | |
| 15 | + MyNetworkBlock, | |
| 16 | + FeedReaderBlock, | |
| 17 | + ProfileImageBlock, | |
| 18 | + LocationBlock, | |
| 19 | + SlideshowBlock, | |
| 20 | + ProfileSearchBlock, | |
| 21 | + HighlightsBlock, | |
| 22 | + FriendsBlock, | |
| 23 | + FavoriteEnterprisesBlock, | |
| 24 | + CommunitiesBlock, | |
| 25 | + EnterprisesBlock, | |
| 26 | + MembersBlock, | |
| 27 | + DisabledEnterpriseMessageBlock, | |
| 28 | + ProductCategoriesBlock, | |
| 29 | + FeaturedProductsBlock, | |
| 30 | + FansBlock, | |
| 31 | + ProductsBlock ] | |
| 32 | + | |
| 33 | + @blocks += plugins.dispatch(:extra_blocks) | |
| 34 | + @blocks.sort_by! { |block| block.name } | |
| 35 | + end | |
| 36 | + | |
| 8 | 37 | post_only :update |
| 9 | 38 | def update |
| 10 | 39 | if @environment.update_attributes(params[:environment]) |
| ... | ... | @@ -15,6 +44,16 @@ class FeaturesController < AdminController |
| 15 | 44 | end |
| 16 | 45 | end |
| 17 | 46 | |
| 47 | + post_only :update_blocks | |
| 48 | + def update_blocks | |
| 49 | + if @environment.update_attributes(params[:environment]) | |
| 50 | + session[:notice] = _('Blocks updated successfully.') | |
| 51 | + redirect_to :action => 'manage_blocks' | |
| 52 | + else | |
| 53 | + render :action => 'manage_blocks' | |
| 54 | + end | |
| 55 | + end | |
| 56 | + | |
| 18 | 57 | def manage_fields |
| 19 | 58 | @person_fields = Person.fields |
| 20 | 59 | @enterprise_fields = Enterprise.fields | ... | ... |
app/controllers/box_organizer_controller.rb
| ... | ... | @@ -68,8 +68,8 @@ class BoxOrganizerController < ApplicationController |
| 68 | 68 | raise ArgumentError.new("Type %s is not allowed. Go away." % type) |
| 69 | 69 | end |
| 70 | 70 | else |
| 71 | - @center_block_types = (Box.acceptable_center_blocks & available_blocks) + plugins.dispatch(:extra_blocks, :type => boxes_holder.class, :position => 1) | |
| 72 | - @side_block_types = (Box.acceptable_side_blocks & available_blocks) + plugins.dispatch(:extra_blocks, :type => boxes_holder.class, :position => [2,3]) | |
| 71 | + @center_block_types = filtered_available_blocks((Box.acceptable_center_blocks & available_blocks) + plugins.dispatch(:extra_blocks, :type => boxes_holder.class, :position => 1)) | |
| 72 | + @side_block_types = filtered_available_blocks((Box.acceptable_side_blocks & available_blocks) + plugins.dispatch(:extra_blocks, :type => boxes_holder.class, :position => [2,3])) | |
| 73 | 73 | @boxes = boxes_holder.boxes.with_position |
| 74 | 74 | render :action => 'add_block', :layout => false |
| 75 | 75 | end | ... | ... |
app/controllers/my_profile/profile_design_controller.rb
| ... | ... | @@ -3,7 +3,13 @@ class ProfileDesignController < BoxOrganizerController |
| 3 | 3 | needs_profile |
| 4 | 4 | |
| 5 | 5 | protect 'edit_profile_design', :profile |
| 6 | - | |
| 6 | + | |
| 7 | + def filtered_available_blocks(blocks=nil) | |
| 8 | + filtered_available_blocks = [] | |
| 9 | + blocks.each { |block| filtered_available_blocks << block if @environment.enabled_blocks.include?(block.name) } | |
| 10 | + filtered_available_blocks | |
| 11 | + end | |
| 12 | + | |
| 7 | 13 | def available_blocks |
| 8 | 14 | blocks = [ ArticleBlock, TagsBlock, RecentDocumentsBlock, ProfileInfoBlock, LinkListBlock, MyNetworkBlock, FeedReaderBlock, ProfileImageBlock, LocationBlock, SlideshowBlock, ProfileSearchBlock, HighlightsBlock ] |
| 9 | 15 | ... | ... |
app/models/environment.rb
| ... | ... | @@ -3,7 +3,7 @@ |
| 3 | 3 | # domains. |
| 4 | 4 | class Environment < ActiveRecord::Base |
| 5 | 5 | |
| 6 | - attr_accessible :name, :is_default, :signup_welcome_text_subject, :signup_welcome_text_body, :terms_of_use, :message_for_disabled_enterprise, :news_amount_by_folder, :default_language, :languages, :description, :organization_approval_method, :enabled_plugins, :enabled_features, :redirection_after_login, :redirection_after_signup, :contact_email, :theme, :reports_lower_bound | |
| 6 | + attr_accessible :name, :is_default, :signup_welcome_text_subject, :signup_welcome_text_body, :terms_of_use, :message_for_disabled_enterprise, :news_amount_by_folder, :default_language, :languages, :description, :organization_approval_method, :enabled_plugins, :enabled_features, :enabled_blocks, :redirection_after_login, :redirection_after_signup, :contact_email, :theme, :reports_lower_bound | |
| 7 | 7 | |
| 8 | 8 | has_many :users |
| 9 | 9 | |
| ... | ... | @@ -289,6 +289,8 @@ class Environment < ActiveRecord::Base |
| 289 | 289 | |
| 290 | 290 | settings_items :enabled_plugins, :type => Array, :default => [] |
| 291 | 291 | |
| 292 | + settings_items :enabled_blocks, :type => Array, :default => [] | |
| 293 | + | |
| 292 | 294 | settings_items :search_hints, :type => Hash, :default => {} |
| 293 | 295 | |
| 294 | 296 | # Set to return http forbidden to host not on the allow origin list bellow |
| ... | ... | @@ -337,6 +339,10 @@ class Environment < ActiveRecord::Base |
| 337 | 339 | enabled_plugins.include?(plugin.to_s) |
| 338 | 340 | end |
| 339 | 341 | |
| 342 | + def block_enabled?(block) | |
| 343 | + enabled_blocks.include?(block.to_s) | |
| 344 | + end | |
| 345 | + | |
| 340 | 346 | # enables the features identified by <tt>features</tt>, which is expected to |
| 341 | 347 | # be an Enumarable object containing the identifiers of the desired features. |
| 342 | 348 | # Passing <tt>nil</tt> is the same as passing an empty Array. | ... | ... |
app/views/admin_panel/index.html.erb
| ... | ... | @@ -11,6 +11,7 @@ |
| 11 | 11 | <tr><td><%= link_to _('Homepage'), :action => 'set_portal_community' %></td></tr> |
| 12 | 12 | <tr><td><%= link_to _('Licenses'), :controller =>'licenses' %></td></tr> |
| 13 | 13 | <tr><td><%= link_to _('Trusted sites'), :controller =>'trusted_sites' %></td></tr> |
| 14 | + <tr><td><%= link_to _('Blocks'), :controller => 'features', :action => 'manage_blocks' %></td></tr> | |
| 14 | 15 | </table> |
| 15 | 16 | |
| 16 | 17 | <h2><%= _('Profiles') %></h2> | ... | ... |
| ... | ... | @@ -0,0 +1,52 @@ |
| 1 | +<h1><%= _('System blocks') %></h1> | |
| 2 | + | |
| 3 | +<h2><%= _('Enable/Disable blocks') %></h2> | |
| 4 | + | |
| 5 | +<p> | |
| 6 | +<%= _('Here you can enable or disable blocks of your environment.') %> | |
| 7 | +</p> | |
| 8 | + | |
| 9 | +<%= labelled_form_for(:environment, :url => {:action => 'update_blocks'}) do |f| %> | |
| 10 | + | |
| 11 | +<table id='blocks-grid' class="blocks-grid" align="center" style="width: auto"> | |
| 12 | + <tr> | |
| 13 | + <th width="33%"><%= _('Block') %></th> | |
| 14 | + <th width="33%"><%= _('Description') %></th> | |
| 15 | + <th width="33%"><%= _('Enabled?') %></th> | |
| 16 | + </tr> | |
| 17 | + | |
| 18 | + <% @blocks.each do |block| %> | |
| 19 | + <tr> | |
| 20 | + <td> | |
| 21 | + <%= _(block.name.humanize) %> | |
| 22 | + </td> | |
| 23 | + <td> | |
| 24 | + <%= _(block.description) %> | |
| 25 | + </td> | |
| 26 | + <td align="center"> | |
| 27 | + <%= check_box_tag "environment[enabled_blocks][]", block, @environment.block_enabled?(block) %> | |
| 28 | + </td> | |
| 29 | + </tr> | |
| 30 | + <% end %> | |
| 31 | +</table> | |
| 32 | + | |
| 33 | +<script type='text/javascript'>// <!-- | |
| 34 | + var trs = jQuery('#blocks-grid tr'); | |
| 35 | + | |
| 36 | + var tr, td2; | |
| 37 | + for ( var i=2; tr=trs[i]; i++ ) { | |
| 38 | + if ( td2 = tr.getElementsByTagName('td')[1] ) { | |
| 39 | + td2.getElementsByTagName('input')[1].onclick(); | |
| 40 | + } | |
| 41 | + } | |
| 42 | + // --> | |
| 43 | +</script> | |
| 44 | + | |
| 45 | +<div> | |
| 46 | + <% button_bar do %> | |
| 47 | + <%= submit_button('save', _('Save changes'), :id=>"save_blocks") %> | |
| 48 | + <%= button :back, _('Back to admin panel'), :controller => 'admin_panel', :action => 'index' %> | |
| 49 | + <% end %> | |
| 50 | +</div> | |
| 51 | + | |
| 52 | +<% end %> | ... | ... |