Commit 4548480c0a7fec9141c9a6e90674e9cecac28084
Committed by
Antonio Terceiro
1 parent
0f6c78ef
Exists in
master
and in
23 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 | 32 | end |
| 33 | 33 | |
| 34 | 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 | 38 | if request.post? |
| 37 | 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 | 41 | env.portal_folders = folders |
| 40 | 42 | if env.save |
| 41 | 43 | flash[:notice] = _('Saved the portal folders') |
| 42 | 44 | redirect_to :action => 'index' |
| 43 | 45 | end |
| 44 | 46 | end |
| 45 | - @selected = (environment.portal_folders || []).map(&:id) | |
| 46 | 47 | end |
| 47 | 48 | end | ... | ... |
app/models/environment.rb
| ... | ... | @@ -622,7 +622,7 @@ class Environment < ActiveRecord::Base |
| 622 | 622 | end |
| 623 | 623 | |
| 624 | 624 | def portal_folders=(folders) |
| 625 | - settings[:portal_folders] = folders.map(&:id) | |
| 625 | + settings[:portal_folders] = folders ? folders.map(&:id) : nil | |
| 626 | 626 | end |
| 627 | 627 | |
| 628 | 628 | def help_message_to_add_enterprise | ... | ... |
app/views/admin_panel/set_portal_folders.rhtml
| 1 | 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 | 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 | 36 | <% button_bar do %> |
| 11 | 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 | 160 | env.save! |
| 161 | 161 | |
| 162 | 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 | 200 | end |
| 167 | 201 | |
| 168 | 202 | should 'save a list of folders as portal folders for the environment' do |
| ... | ... | @@ -180,4 +214,16 @@ class AdminPanelControllerTest < Test::Unit::TestCase |
| 180 | 214 | |
| 181 | 215 | assert_equal [local, politics, tech].map(&:id), env.portal_folders.map(&:id) |
| 182 | 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 | 229 | end | ... | ... |
test/unit/environment_test.rb
| ... | ... | @@ -741,6 +741,15 @@ class EnvironmentTest < Test::Unit::TestCase |
| 741 | 741 | assert_equal [], e.portal_folders |
| 742 | 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 | 753 | should 'have roles with names independent of other environments' do |
| 745 | 754 | e1 = Environment.create!(:name => 'a test environment') |
| 746 | 755 | role1 = Role.create!(:name => 'test_role', :environment => e1) | ... | ... |