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 %> | ... | ... |