Commit 4548480c0a7fec9141c9a6e90674e9cecac28084
Committed by
Antonio Terceiro
1 parent
0f6c78ef
Exists in
master
and in
28 other branches
ActionItem1218: allowing admin decide number of news boxes
Showing
6 changed files
with
104 additions
and
11 deletions
Show diff stats
app/controllers/admin/admin_panel_controller.rb
@@ -32,16 +32,17 @@ class AdminPanelController < AdminController | @@ -32,16 +32,17 @@ class AdminPanelController < AdminController | ||
32 | end | 32 | end |
33 | 33 | ||
34 | def set_portal_folders | 34 | def set_portal_folders |
35 | - @portal_folders = environment.portal_community.folders | 35 | + @selected = (environment.portal_folders || []) |
36 | + @available_portal_folders = environment.portal_community.folders - @selected | ||
37 | + | ||
36 | if request.post? | 38 | if request.post? |
37 | env = environment | 39 | env = environment |
38 | - folders = params[:folders].map{|fid| Folder.find(:first, :conditions => {:profile_id => env.portal_community, :id => fid})} | 40 | + folders = params[:folders].map{|fid| Folder.find(:first, :conditions => {:profile_id => env.portal_community, :id => fid})} if params[:folders] |
39 | env.portal_folders = folders | 41 | env.portal_folders = folders |
40 | if env.save | 42 | if env.save |
41 | flash[:notice] = _('Saved the portal folders') | 43 | flash[:notice] = _('Saved the portal folders') |
42 | redirect_to :action => 'index' | 44 | redirect_to :action => 'index' |
43 | end | 45 | end |
44 | end | 46 | end |
45 | - @selected = (environment.portal_folders || []).map(&:id) | ||
46 | end | 47 | end |
47 | end | 48 | end |
app/models/environment.rb
@@ -622,7 +622,7 @@ class Environment < ActiveRecord::Base | @@ -622,7 +622,7 @@ class Environment < ActiveRecord::Base | ||
622 | end | 622 | end |
623 | 623 | ||
624 | def portal_folders=(folders) | 624 | def portal_folders=(folders) |
625 | - settings[:portal_folders] = folders.map(&:id) | 625 | + settings[:portal_folders] = folders ? folders.map(&:id) : nil |
626 | end | 626 | end |
627 | 627 | ||
628 | def help_message_to_add_enterprise | 628 | def help_message_to_add_enterprise |
app/views/admin_panel/set_portal_folders.rhtml
1 | <h1><%= _('Select folders') %></h1> | 1 | <h1><%= _('Select folders') %></h1> |
2 | 2 | ||
3 | -<p><%= _('Select what folder will hold the news for witch area of the initial page of the environment') %></p> | 3 | +<p><%= _('Select the folders that will hold the news of the initial page of the environment') %></p> |
4 | + | ||
5 | +<script type="text/javascript"> | ||
6 | + jQuery(document).ready(function() { | ||
7 | + jQuery('#add').click(function() { | ||
8 | + return !jQuery('#portal-folders-list option:selected').remove().appendTo('#selected-folders'); | ||
9 | + }); | ||
10 | + jQuery('#remove').click(function() { | ||
11 | + return !jQuery('#selected-folders option:selected').remove().appendTo('#portal-folders-list'); | ||
12 | + }); | ||
13 | + | ||
14 | + jQuery('form').submit(function() { | ||
15 | + jQuery('#selected-folders option').each(function(i) { | ||
16 | + jQuery(this).attr('selected','selected'); | ||
17 | + }); | ||
18 | + }); | ||
19 | + }); | ||
20 | + </script> | ||
21 | + | ||
22 | +<div id='available-folders'> | ||
23 | + <%= labelled_form_field(_('Available folders'), select_tag( 'folders[]', options_from_collection_for_select(@available_portal_folders, :id, :name, nil), {:id => 'portal-folders-list', :multiple => true, :size => 6 }) ) %> | ||
24 | +</div> | ||
25 | + | ||
26 | +<div id='selection-buttons'> | ||
27 | + <%= button :down, _('Add'), '#', { :id => 'add' } %> | ||
28 | + <%= button :up, _('Remove'), '#', { :id => 'remove' } %> | ||
29 | +</div> | ||
4 | 30 | ||
5 | <% form_tag do %> | 31 | <% form_tag do %> |
6 | - <% (1..4).each do |i| %> | ||
7 | - <%= labelled_select _('Area %d: ') % i, 'folders[]', :id, :name, @selected[i-1], @portal_folders %> <br> | ||
8 | - <% end %> | 32 | + <div id='portal-folders'> |
33 | + <%= labelled_form_field(_('Portal folders'), select_tag( 'folders[]', options_from_collection_for_select(@selected, :id, :name, nil), {:id => 'selected-folders', :multiple => true, :size => 6 })) %> | ||
34 | + </div> | ||
9 | 35 | ||
10 | <% button_bar do %> | 36 | <% button_bar do %> |
11 | <%= submit_button 'save', _('Save'), :cancel => {:action => 'index'} %> | 37 | <%= submit_button 'save', _('Save'), :cancel => {:action => 'index'} %> |
test/functional/admin_panel_controller_test.rb
@@ -160,9 +160,43 @@ class AdminPanelControllerTest < Test::Unit::TestCase | @@ -160,9 +160,43 @@ class AdminPanelControllerTest < Test::Unit::TestCase | ||
160 | env.save! | 160 | env.save! |
161 | 161 | ||
162 | get :set_portal_folders | 162 | get :set_portal_folders |
163 | - assert_tag :tag => 'option', :attributes => {:value => local.id}, :content => local.name | ||
164 | - assert_tag :tag => 'option', :attributes => {:value => tech.id}, :content => tech.name | ||
165 | - assert_tag :tag => 'option', :attributes => {:value => politics.id}, :content => politics.name | 163 | + [local, tech, politics].each do |folder| |
164 | + assert_tag :tag => 'div', :attributes => {:id => 'available-folders'}, :descendant => {:tag => 'option', :attributes => {:value => folder.id}, :content => folder.name} | ||
165 | + end | ||
166 | + end | ||
167 | + | ||
168 | + should 'not display not portal folders on portal-folders' do | ||
169 | + env = Environment.default | ||
170 | + c = Community.create!(:name => 'portal') | ||
171 | + env.portal_community = c | ||
172 | + local = Folder.create!(:profile => c, :name => 'local news') | ||
173 | + tech = Folder.create!(:profile => c, :name => 'tech news') | ||
174 | + politics = Folder.create!(:profile => c, :name => 'politics news') | ||
175 | + env.save! | ||
176 | + | ||
177 | + get :set_portal_folders | ||
178 | + [local, tech, politics].each do |folder| | ||
179 | + assert_no_tag :tag => 'div', :attributes => {:id => 'portal-folders'}, :descendant => {:tag => 'option', :attributes => {:value => folder.id}, :content => folder.name} | ||
180 | + end | ||
181 | + end | ||
182 | + | ||
183 | + should 'list portal folders for removal' do | ||
184 | + env = Environment.default | ||
185 | + c = Community.create!(:name => 'portal') | ||
186 | + env.portal_community = c | ||
187 | + local = Folder.create!(:profile => c, :name => 'local news') | ||
188 | + tech = Folder.create!(:profile => c, :name => 'tech news') | ||
189 | + politics = Folder.create!(:profile => c, :name => 'politics news') | ||
190 | + env.save! | ||
191 | + env.portal_folders = [local, tech] | ||
192 | + env.save! | ||
193 | + | ||
194 | + get :set_portal_folders | ||
195 | + [local, tech].each do |folder| | ||
196 | + assert_tag :tag => 'div', :attributes => {:id => 'portal-folders'}, :descendant => {:tag => 'option', :attributes => {:value => folder.id}, :content => folder.name} | ||
197 | + end | ||
198 | + | ||
199 | + assert_no_tag :tag => 'div', :attributes => {:id => 'portal-folders'}, :descendant => {:tag => 'option', :attributes => {:value => politics.id}, :content => politics.name} | ||
166 | end | 200 | end |
167 | 201 | ||
168 | should 'save a list of folders as portal folders for the environment' do | 202 | should 'save a list of folders as portal folders for the environment' do |
@@ -180,4 +214,16 @@ class AdminPanelControllerTest < Test::Unit::TestCase | @@ -180,4 +214,16 @@ class AdminPanelControllerTest < Test::Unit::TestCase | ||
180 | 214 | ||
181 | assert_equal [local, politics, tech].map(&:id), env.portal_folders.map(&:id) | 215 | assert_equal [local, politics, tech].map(&:id), env.portal_folders.map(&:id) |
182 | end | 216 | end |
217 | + | ||
218 | + should 'remove all folders as portal folders for the environment' do | ||
219 | + env = Environment.default | ||
220 | + @controller.stubs(:environment).returns(env) | ||
221 | + c = Community.create!(:name => 'portal') | ||
222 | + env.portal_community = c | ||
223 | + env.save! | ||
224 | + | ||
225 | + post :set_portal_folders | ||
226 | + | ||
227 | + assert_equal [], env.portal_folders | ||
228 | + end | ||
183 | end | 229 | end |
test/unit/environment_test.rb
@@ -741,6 +741,15 @@ class EnvironmentTest < Test::Unit::TestCase | @@ -741,6 +741,15 @@ class EnvironmentTest < Test::Unit::TestCase | ||
741 | assert_equal [], e.portal_folders | 741 | assert_equal [], e.portal_folders |
742 | end | 742 | end |
743 | 743 | ||
744 | + should 'remove all portal folders' do | ||
745 | + e = Environment.default | ||
746 | + | ||
747 | + e.portal_folders = nil | ||
748 | + e.save!; e.reload | ||
749 | + | ||
750 | + assert_equal [], e.portal_folders | ||
751 | + end | ||
752 | + | ||
744 | should 'have roles with names independent of other environments' do | 753 | should 'have roles with names independent of other environments' do |
745 | e1 = Environment.create!(:name => 'a test environment') | 754 | e1 = Environment.create!(:name => 'a test environment') |
746 | role1 = Role.create!(:name => 'test_role', :environment => e1) | 755 | role1 = Role.create!(:name => 'test_role', :environment => e1) |