Commit 0ce0492c12a5944772e6fd2a54003520a0863dea
1 parent
5486976a
Exists in
master
and in
23 other branches
ActionItem70: actually assigning categories to the menu
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@540 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
5 changed files
with
62 additions
and
56 deletions
Show diff stats
app/models/category.rb
| ... | ... | @@ -5,6 +5,9 @@ class Category < ActiveRecord::Base |
| 5 | 5 | validates_uniqueness_of :slug,:scope => [ :environment_id, :parent_id ], :message => N_('%{fn} is already being used by another category.') |
| 6 | 6 | belongs_to :environment |
| 7 | 7 | |
| 8 | + validates_inclusion_of :display_color, :in => [ 1, 2, 3, 4, nil ] | |
| 9 | + validates_uniqueness_of :display_color, :scope => :environment_id, :if => (lambda { |cat| ! cat.display_color.nil? }), :message => N_('%{fn} was already assigned to another category.') | |
| 10 | + | |
| 8 | 11 | acts_as_tree :order => 'name' |
| 9 | 12 | |
| 10 | 13 | def full_name(sep = '/') | ... | ... |
app/views/categories/_form.rhtml
| ... | ... | @@ -5,6 +5,19 @@ |
| 5 | 5 | <%= hidden_field_tag('parent_id', @category.parent.id) %> |
| 6 | 6 | <% end %> |
| 7 | 7 | |
| 8 | + <% if @category.top_level? %> | |
| 9 | + <% | |
| 10 | + options = [ | |
| 11 | + [ _('Do not display at the menu'), nil ], | |
| 12 | + [ _('Blue'), 1 ], | |
| 13 | + [ _('Red'), 2 ], | |
| 14 | + [ _('Green'), 3 ], | |
| 15 | + [ _('Orange'), 4 ], | |
| 16 | + ] | |
| 17 | + %> | |
| 18 | + <%= labelled_form_field(_('Display at the menu?'), f.select('display_color', options)) %> | |
| 19 | + <% end %> | |
| 20 | + | |
| 8 | 21 | <%= f.text_field 'name' %> |
| 9 | 22 | <%= submit_tag _('Save') %> |
| 10 | 23 | <% end %> | ... | ... |
app/views/shared/categories_menu.rhtml
| 1 | 1 | <ul> |
| 2 | - <li id='category1' class='active'> | |
| 3 | - Noosfero | |
| 4 | - <ul> | |
| 5 | - <li><a href=''><span>Iteam 1</span></a></li> | |
| 6 | - <li><a href=''><span>Itemdasd 2</span></a></li> | |
| 7 | - <li><a href=''><span>Iteaam 3</span></a></li> | |
| 8 | - <li><a href=''><span>Iteaam 4</span></a></li> | |
| 9 | - <li><a href=''><span>Itemdasds 5</span></a></li> | |
| 10 | - <li><a href=''><span>Itesdm 2</span></a></li> | |
| 11 | - <li><a href=''><span>Iteam 3</span></a></li> | |
| 12 | - <li><a href=''><span>Iteasdasdm 4</span></a></li> | |
| 13 | - <li><a href=''><span>Itesdasm 5</span></a></li> | |
| 14 | - <li><a href=''><span>Itesdm 2</span></a></li> | |
| 15 | - <li><a href=''><span>Itedsadm 3</span></a></li> | |
| 16 | - <li><a href=''><span>Itedsm 4</span></a></li> | |
| 17 | - <li><a href=''><span>Itessdsm 5</span></a></li> | |
| 18 | - <li><a href=''><span>Itessasm 2</span></a></li> | |
| 19 | - <li><a href=''><span>Isssssstesm 3</span></a></li> | |
| 20 | - <li><a href=''><span>Iteasdm 3</span></a></li> | |
| 21 | - <li><a href=''><span>Itessm 4</span></a></li> | |
| 22 | - <li><a href=''><span>Iteasdm 5</span></a></li> | |
| 23 | - </ul> | |
| 24 | - </li> | |
| 25 | - | |
| 26 | - <li id='category2'> | |
| 27 | - Territorios | |
| 28 | - <ul> | |
| 29 | - <li><a href=''><span>Item 1</span></a></li> | |
| 30 | - <li><a href=''><span>Itssssem 2</span></a></li> | |
| 31 | - <li><a href=''><span>Itsssssem 3</span></a></li> | |
| 32 | - <li><a href=''><span>Item 4</span></a></li> | |
| 33 | - <li><a href=''><span>Itssssem 5</span></a></li> | |
| 34 | - </ul> | |
| 35 | - </li> | |
| 36 | - | |
| 37 | - <li id='category3'> | |
| 38 | - Lalala | |
| 39 | - <ul> | |
| 40 | - <li><a href=''><span>Item 1</span></a></li> | |
| 41 | - <li><a href=''><span>Issstem 2</span></a></li> | |
| 42 | - <li><a href=''><span>Itsssem 3</span></a></li> | |
| 43 | - <li><a href=''><span>Item 4</span></a></li> | |
| 44 | - <li><a href=''><span>Itssem 5</span></a></li> | |
| 45 | - </ul> | |
| 46 | - </li> | |
| 47 | - | |
| 48 | - <li id='category4'> | |
| 49 | - Lalala | |
| 50 | - <ul> | |
| 51 | - <li><a href=''><span>Iaaaatem 1</span></a></li> | |
| 52 | - <li><a href=''><span>Item 2</span></a></li> | |
| 53 | - <li><a href=''><span>Itaaaem 3</span></a></li> | |
| 54 | - <li><a href=''><span>Itaaem 4</span></a></li> | |
| 55 | - <li><a href=''><span>Itaaaaaaaaem 5</span></a></li> | |
| 56 | - </ul> | |
| 57 | - </li> | |
| 2 | + <% @environment.display_categories.each do |item| %> | |
| 3 | + <li id='category<%= item.display_color %>'> | |
| 4 | + <%= item.name %> | |
| 5 | + <ul> | |
| 6 | + <% item.children.each do |child| %> | |
| 7 | + <li><%= link_to(content_tag('span', child.name), :controller => 'category', :path => child.path) %></li> | |
| 8 | + <% end %> | |
| 9 | + </ul> | |
| 10 | + </li> | |
| 11 | + <% end %> | |
| 58 | 12 | </ul> | ... | ... |
db/migrate/016_create_categories.rb
| ... | ... | @@ -5,6 +5,8 @@ class CreateCategories < ActiveRecord::Migration |
| 5 | 5 | t.column :slug, :string |
| 6 | 6 | t.column :path, :text, :default => '' |
| 7 | 7 | |
| 8 | + t.column :display_color, :integer | |
| 9 | + | |
| 8 | 10 | t.column :environment_id, :integer |
| 9 | 11 | t.column :parent_id, :integer |
| 10 | 12 | t.column :type, :string | ... | ... |
test/unit/category_test.rb
| ... | ... | @@ -151,4 +151,38 @@ class CategoryTest < Test::Unit::TestCase |
| 151 | 151 | |
| 152 | 152 | end |
| 153 | 153 | |
| 154 | + should "limit the possibile display colors" do | |
| 155 | + c = Category.new(:name => 'test category', :environment_id => @env.id) | |
| 156 | + | |
| 157 | + | |
| 158 | + c.display_color = 10 | |
| 159 | + c.valid? | |
| 160 | + assert c.errors.invalid?(:display_color) | |
| 161 | + | |
| 162 | + valid = %w[ 1 2 3 4 ].map { |item| item.to_i } | |
| 163 | + valid.each do |item| | |
| 164 | + c.display_color = item | |
| 165 | + c.valid? | |
| 166 | + assert !c.errors.invalid?(:display_color) | |
| 167 | + end | |
| 168 | + | |
| 169 | + end | |
| 170 | + | |
| 171 | + should 'avoid duplicated display colors' do | |
| 172 | + | |
| 173 | + @env.categories.destroy_all | |
| 174 | + | |
| 175 | + c1 = Category.create!(:name => 'test category', :environment_id => @env.id, :display_color => 1) | |
| 176 | + | |
| 177 | + c = Category.new(:name => 'lalala', :environment_id => @env.id) | |
| 178 | + c.display_color = 1 | |
| 179 | + assert !c.valid? | |
| 180 | + assert c.errors.invalid?(:display_color) | |
| 181 | + | |
| 182 | + c.display_color = 2 | |
| 183 | + c.valid? | |
| 184 | + assert !c.errors.invalid?(:display_color) | |
| 185 | + | |
| 186 | + end | |
| 187 | + | |
| 154 | 188 | end | ... | ... |