Commit 43a5b25562c90ee74d201847d986233e6fc9d70e
1 parent
a29cb0b0
Exists in
master
and in
29 other branches
ActionItem26: several things to integrate events
* in the search * editing * etc git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1880 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
12 changed files
with
114 additions
and
7 deletions
Show diff stats
app/controllers/public/search_controller.rb
@@ -54,7 +54,8 @@ class SearchController < ApplicationController | @@ -54,7 +54,8 @@ class SearchController < ApplicationController | ||
54 | [ :enterprises, N_('Enterprises') ], | 54 | [ :enterprises, N_('Enterprises') ], |
55 | [ :people, N_('People') ], | 55 | [ :people, N_('People') ], |
56 | [ :communities, N_('Communities') ], | 56 | [ :communities, N_('Communities') ], |
57 | - [ :products, N_('Products') ] | 57 | + [ :products, N_('Products') ], |
58 | + [ :events, N_('Events') ] | ||
58 | ] | 59 | ] |
59 | 60 | ||
60 | # TODO don't hardcode like this >:-( | 61 | # TODO don't hardcode like this >:-( |
app/helpers/assets_helper.rb
@@ -10,6 +10,7 @@ module AssetsHelper | @@ -10,6 +10,7 @@ module AssetsHelper | ||
10 | [ options.merge(:asset => 'enterprises'), "icon-menu-enterprise", _('Enterprises') ], | 10 | [ options.merge(:asset => 'enterprises'), "icon-menu-enterprise", _('Enterprises') ], |
11 | [ options.merge(:asset => 'communities'), "icon-menu-community", _('Communities') ], | 11 | [ options.merge(:asset => 'communities'), "icon-menu-community", _('Communities') ], |
12 | [ options.merge(:asset => 'comments'), "icon-menu-comments", _('Comments') ], | 12 | [ options.merge(:asset => 'comments'), "icon-menu-comments", _('Comments') ], |
13 | + [ options.merge(:asset => 'events'), "icon-menu-events", _('Events') ], | ||
13 | 14 | ||
14 | ].map do |target,css_class,name| | 15 | ].map do |target,css_class,name| |
15 | content_tag('li', | 16 | content_tag('li', |
app/models/category_finder.rb
@@ -50,7 +50,7 @@ class CategoryFinder | @@ -50,7 +50,7 @@ class CategoryFinder | ||
50 | {:select => 'distinct comments.*', :joins => 'inner join articles_categories on articles_categories.article_id = comments.article_id', :conditions => ['articles_categories.category_id in (?)', category_ids]}.merge!(options) | 50 | {:select => 'distinct comments.*', :joins => 'inner join articles_categories on articles_categories.article_id = comments.article_id', :conditions => ['articles_categories.category_id in (?)', category_ids]}.merge!(options) |
51 | when 'Product' | 51 | when 'Product' |
52 | {:select => 'distinct products.*', :joins => 'inner join categories_profiles on products.enterprise_id = categories_profiles.profile_id', :conditions => ['categories_profiles.category_id in (?)', category_ids]}.merge!(options) | 52 | {:select => 'distinct products.*', :joins => 'inner join categories_profiles on products.enterprise_id = categories_profiles.profile_id', :conditions => ['categories_profiles.category_id in (?)', category_ids]}.merge!(options) |
53 | - when 'Article', 'Person', 'Community', 'Enterprise' | 53 | + when 'Article', 'Person', 'Community', 'Enterprise', 'Event' |
54 | {:include => 'categories', :conditions => ['categories.id IN (?)', category_ids]}.merge!(options) | 54 | {:include => 'categories', :conditions => ['categories.id IN (?)', category_ids]}.merge!(options) |
55 | else | 55 | else |
56 | raise "unreconized class #{klass.name}" | 56 | raise "unreconized class #{klass.name}" |
app/models/environment.rb
@@ -218,6 +218,8 @@ class Environment < ActiveRecord::Base | @@ -218,6 +218,8 @@ class Environment < ActiveRecord::Base | ||
218 | self.articles.recent(limit) | 218 | self.articles.recent(limit) |
219 | end | 219 | end |
220 | 220 | ||
221 | + has_many :events, :through => :profiles, :source => :articles, :class_name => 'Event' | ||
222 | + | ||
221 | # FIXME is this the better/faster way to do this? | 223 | # FIXME is this the better/faster way to do this? |
222 | has_many :comments, :through => :articles | 224 | has_many :comments, :through => :articles |
223 | 225 |
app/models/event.rb
@@ -4,9 +4,7 @@ class Event < Article | @@ -4,9 +4,7 @@ class Event < Article | ||
4 | 4 | ||
5 | settings_items :description, :type => :string | 5 | settings_items :description, :type => :string |
6 | settings_items :link, :type => :string | 6 | settings_items :link, :type => :string |
7 | - | ||
8 | - settings_items :start_date, :type => :date | ||
9 | - settings_items :end_date, :type => :date | 7 | + settings_items :address, :type => :string |
10 | 8 | ||
11 | validates_presence_of :title, :start_date | 9 | validates_presence_of :title, :start_date |
12 | 10 |
app/views/cms/_event.rhtml
@@ -5,8 +5,13 @@ | @@ -5,8 +5,13 @@ | ||
5 | 5 | ||
6 | <%= f.text_field('name', :size => '64') %> | 6 | <%= f.text_field('name', :size => '64') %> |
7 | 7 | ||
8 | -<%= labelled_form_field(_('Description:'), text_area(:article, :description, :cols => 64)) %> | ||
9 | - | ||
10 | <%= labelled_form_field(_('Start date'), calendar_date_select(:article, :start_date)) %> | 8 | <%= labelled_form_field(_('Start date'), calendar_date_select(:article, :start_date)) %> |
11 | 9 | ||
12 | <%= labelled_form_field(_('End date'), calendar_date_select(:article, :end_date)) %> | 10 | <%= labelled_form_field(_('End date'), calendar_date_select(:article, :end_date)) %> |
11 | + | ||
12 | +<%= labelled_form_field(_('Event website:'), text_field(:article, :link)) %> | ||
13 | + | ||
14 | +<%= labelled_form_field(_('Address:'), text_field(:article, :address)) %> | ||
15 | + | ||
16 | +<%= labelled_form_field(_('Information about the event:'), text_area(:article, :description, :cols => 64)) %> | ||
17 | + |
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +class AddDatesToArticles < ActiveRecord::Migration | ||
2 | + | ||
3 | + def self.each_table | ||
4 | + [ :articles, :article_versions ].each do |table| | ||
5 | + yield(table) | ||
6 | + end | ||
7 | + end | ||
8 | + | ||
9 | + def self.up | ||
10 | + each_table do |table| | ||
11 | + add_column table, :start_date, :type => :date | ||
12 | + add_column table, :end_date, :type => :date | ||
13 | + end | ||
14 | + end | ||
15 | + | ||
16 | + def self.down | ||
17 | + each_table do |table| | ||
18 | + remove_column table, :start_date | ||
19 | + remove_column table, :end_date | ||
20 | + end | ||
21 | + end | ||
22 | +end |
public/designs/icons/default/style.css
@@ -37,6 +37,7 @@ | @@ -37,6 +37,7 @@ | ||
37 | .icon-menu-logout { background-image: url(exit-HC.gif) } | 37 | .icon-menu-logout { background-image: url(exit-HC.gif) } |
38 | .icon-menu-search { background-image: url(search-HC.gif) } | 38 | .icon-menu-search { background-image: url(search-HC.gif) } |
39 | .icon-menu-ed-design { background-image: url(edit-design-HC.gif) } | 39 | .icon-menu-ed-design { background-image: url(edit-design-HC.gif) } |
40 | +.icon-menu-events { background-image: url(calendar.gif) } | ||
40 | .icon-todo { background-image: url(stock_todo.png); } | 41 | .icon-todo { background-image: url(stock_todo.png); } |
41 | 42 | ||
42 | .icon-menu-articles { background-image: url(edit-HC.gif) } | 43 | .icon-menu-articles { background-image: url(edit-HC.gif) } |
test/functional/search_controller_test.rb
@@ -839,4 +839,74 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -839,4 +839,74 @@ class SearchControllerTest < Test::Unit::TestCase | ||
839 | assert_not_includes assigns(:regions), r2 | 839 | assert_not_includes assigns(:regions), r2 |
840 | assert_no_tag :tag => 'ul', :descendant => { :tag => 'li', :content => r2.name } | 840 | assert_no_tag :tag => 'ul', :descendant => { :tag => 'li', :content => r2.name } |
841 | end | 841 | end |
842 | + | ||
843 | + should 'search for events' do | ||
844 | + person = create_user('teste').person | ||
845 | + ev = create_event(person, :name => 'an event to be found') | ||
846 | + | ||
847 | + get 'index', :query => 'event found', :find_in => [ 'events' ] | ||
848 | + | ||
849 | + assert_includes assigns(:results)[:events], ev | ||
850 | + end | ||
851 | + | ||
852 | + should 'search for events in a specific category' do | ||
853 | + person = create_user('teste').person | ||
854 | + | ||
855 | + # in category | ||
856 | + ev1 = create_event(person, :name => 'an event to be found') | ||
857 | + ev1.categories << @category | ||
858 | + ev1.save! | ||
859 | + | ||
860 | + # not in category | ||
861 | + ev2 = create_event(person, :name => 'another event to be found') | ||
862 | + ev2.save! | ||
863 | + | ||
864 | + get :index, :category_path => [ 'my-category' ], :query => 'event found', :find_in => [ 'events' ] | ||
865 | + | ||
866 | + assert_includes assigns(:results)[:events], ev1 | ||
867 | + assert_not_includes assigns(:results)[:events], ev2 | ||
868 | + end | ||
869 | + | ||
870 | + # 'assets' outside any category | ||
871 | + should 'list events in general' do | ||
872 | + person = create_user('testuser').person | ||
873 | + person2 = create_user('anotheruser').person | ||
874 | + | ||
875 | + ev1 = create_event(person, :name => 'one event', :categories => [@category]) | ||
876 | + | ||
877 | + ev2 = create_event(person2, :name => 'two event', :categories => [@category]) | ||
878 | + | ||
879 | + get :assets, :asset => 'events' | ||
880 | + | ||
881 | + assert_includes assigns(:results)[:events], ev1 | ||
882 | + assert_includes assigns(:results)[:events], ev2 | ||
883 | + end | ||
884 | + | ||
885 | + # 'assets' inside a category | ||
886 | + should 'list events in a specific category' do | ||
887 | + person = create_user('testuser').person | ||
888 | + | ||
889 | + # in category | ||
890 | + ev1 = create_event(person, :name => 'one event', :categories => [@category]) | ||
891 | + ev2 = create_event(person, :name => 'other event', :categories => [@category]) | ||
892 | + | ||
893 | + # not in category | ||
894 | + ev3 = create_event(person, :name => 'another event') | ||
895 | + | ||
896 | + get :assets, :asset => 'events', :category_path => ['my-category'] | ||
897 | + | ||
898 | + assert_includes assigns(:results)[:events], ev1 | ||
899 | + assert_includes assigns(:results)[:events], ev2 | ||
900 | + assert_not_includes assigns(:results)[:events], ev3 | ||
901 | + end | ||
902 | + | ||
903 | + ################################################################## | ||
904 | + ################################################################## | ||
905 | + | ||
906 | + def create_event(profile, options) | ||
907 | + ev = Event.new({ :name => 'some event', :start_date => Date.new(2008,1,1) }.merge(options)) | ||
908 | + ev.profile = profile | ||
909 | + ev.save! | ||
910 | + ev | ||
911 | + end | ||
842 | end | 912 | end |
test/unit/event_test.rb
@@ -24,6 +24,11 @@ class EventTest < ActiveSupport::TestCase | @@ -24,6 +24,11 @@ class EventTest < ActiveSupport::TestCase | ||
24 | assert_equal 'http://some.nice.site/', e.link | 24 | assert_equal 'http://some.nice.site/', e.link |
25 | end | 25 | end |
26 | 26 | ||
27 | + should 'have an address' do | ||
28 | + e = Event.new(:address => 'South Noosfero street, 88') | ||
29 | + assert_equal 'South Noosfero street, 88', e.address | ||
30 | + end | ||
31 | + | ||
27 | should 'have a start date' do | 32 | should 'have a start date' do |
28 | e = Event.new | 33 | e = Event.new |
29 | e.start_date = Date.today | 34 | e.start_date = Date.today |