Commit 0ce0492c12a5944772e6fd2a54003520a0863dea

Authored by AntonioTerceiro
1 parent 5486976a

ActionItem70: actually assigning categories to the menu



git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@540 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/models/category.rb
@@ -5,6 +5,9 @@ class Category < ActiveRecord::Base @@ -5,6 +5,9 @@ class Category < ActiveRecord::Base
5 validates_uniqueness_of :slug,:scope => [ :environment_id, :parent_id ], :message => N_('%{fn} is already being used by another category.') 5 validates_uniqueness_of :slug,:scope => [ :environment_id, :parent_id ], :message => N_('%{fn} is already being used by another category.')
6 belongs_to :environment 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 acts_as_tree :order => 'name' 11 acts_as_tree :order => 'name'
9 12
10 def full_name(sep = '/') 13 def full_name(sep = '/')
app/views/categories/_form.rhtml
@@ -5,6 +5,19 @@ @@ -5,6 +5,19 @@
5 <%= hidden_field_tag('parent_id', @category.parent.id) %> 5 <%= hidden_field_tag('parent_id', @category.parent.id) %>
6 <% end %> 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 <%= f.text_field 'name' %> 21 <%= f.text_field 'name' %>
9 <%= submit_tag _('Save') %> 22 <%= submit_tag _('Save') %>
10 <% end %> 23 <% end %>
app/views/shared/categories_menu.rhtml
1 <ul> 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 </ul> 12 </ul>
db/migrate/016_create_categories.rb
@@ -5,6 +5,8 @@ class CreateCategories &lt; ActiveRecord::Migration @@ -5,6 +5,8 @@ class CreateCategories &lt; ActiveRecord::Migration
5 t.column :slug, :string 5 t.column :slug, :string
6 t.column :path, :text, :default => '' 6 t.column :path, :text, :default => ''
7 7
  8 + t.column :display_color, :integer
  9 +
8 t.column :environment_id, :integer 10 t.column :environment_id, :integer
9 t.column :parent_id, :integer 11 t.column :parent_id, :integer
10 t.column :type, :string 12 t.column :type, :string
test/unit/category_test.rb
@@ -151,4 +151,38 @@ class CategoryTest &lt; Test::Unit::TestCase @@ -151,4 +151,38 @@ class CategoryTest &lt; Test::Unit::TestCase
151 151
152 end 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 end 188 end