From fe3ebd1c23f8b3e022fbba2e663a78ae3e29175c Mon Sep 17 00:00:00 2001 From: Daniela Soares Feitosa Date: Wed, 26 Mar 2014 10:15:00 +0000 Subject: [PATCH] Added pagination on events --- app/controllers/public/events_controller.rb | 7 +++++-- app/controllers/public/search_controller.rb | 14 +++++++++----- app/models/event.rb | 3 --- app/views/events/_events.rhtml | 4 +++- features/events.feature | 35 +++++++++++++++++++++++++++++++++++ public/stylesheets/application.css | 17 ++++++++++------- test/functional/events_controller_test.rb | 8 ++++++++ test/functional/search_controller_test.rb | 8 ++++++++ 8 files changed, 78 insertions(+), 18 deletions(-) diff --git a/app/controllers/public/events_controller.rb b/app/controllers/public/events_controller.rb index 23b9c49..0595d05 100644 --- a/app/controllers/public/events_controller.rb +++ b/app/controllers/public/events_controller.rb @@ -7,11 +7,11 @@ class EventsController < PublicController @date = build_date(params[:year], params[:month], params[:day]) if !params[:year] && !params[:month] && !params[:day] - @events = profile.events.next_events_from_month(@date) + @events = profile.events.next_events_from_month(@date).paginate(:per_page => per_page, :page => params[:page]) end if params[:year] || params[:month] - @events = profile.events.by_month(@date) + @events = profile.events.by_month(@date).paginate(:per_page => per_page, :page => params[:page]) end events_in_range = profile.events.by_range((@date - 1.month).at_beginning_of_month .. (@date + 1.month).at_end_of_month) @@ -29,4 +29,7 @@ class EventsController < PublicController include EventsHelper + def per_page + 20 + end end diff --git a/app/controllers/public/search_controller.rb b/app/controllers/public/search_controller.rb index 7cf89c1..c078bc1 100644 --- a/app/controllers/public/search_controller.rb +++ b/app/controllers/public/search_controller.rb @@ -99,14 +99,14 @@ class SearchController < PublicController @events = [] if params[:day] || !params[:year] && !params[:month] @events = @category ? - environment.events.by_day(@date).in_category(Category.find(@category_id)) : - environment.events.by_day(@date) + environment.events.by_day(@date).in_category(Category.find(@category_id)).paginate(:per_page => per_page, :page => params[:page]) : + environment.events.by_day(@date).paginate(:per_page => per_page, :page => params[:page]) end if params[:year] || params[:month] @events = @category ? - environment.events.by_month(@date).in_category(Category.find(@category_id)) : - environment.events.by_month(@date) + environment.events.by_month(@date).in_category(Category.find(@category_id)).paginate(:per_page => per_page, :page => params[:page]) : + environment.events.by_month(@date).paginate(:per_page => per_page, :page => params[:page]) end @scope = date_range && params[:action] == 'events' ? environment.events.by_range(date_range) : environment.events @@ -139,7 +139,7 @@ class SearchController < PublicController def events_by_day @date = build_date(params[:year], params[:month], params[:day]) - @events = environment.events.by_day(@date) + @events = environment.events.by_day(@date).paginate(:per_page => per_page, :page => params[:page]) render :partial => 'events/events' end @@ -224,4 +224,8 @@ class SearchController < PublicController @environment.send(klass.name.underscore.pluralize).visible.includes(relations) end + def per_page + 20 + end + end diff --git a/app/models/event.rb b/app/models/event.rb index c6320ef..2b8e864 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -38,15 +38,12 @@ class Event < Article named_scope :next_events_from_month, lambda { |date| date_temp = date.strftime("%Y-%m-%d") { :conditions => ["start_date >= ?","#{date_temp}"], - :limit => 10, :order => 'start_date ASC' } } named_scope :by_month, lambda { |date| - date_temp = date.strftime("%Y-%m") { :conditions => ["EXTRACT(YEAR FROM start_date) = ? AND EXTRACT(MONTH FROM start_date) = ?",date.year,date.month], - :limit => 10, :order => 'start_date ASC' } } diff --git a/app/views/events/_events.rhtml b/app/views/events/_events.rhtml index d29736e..018a66b 100644 --- a/app/views/events/_events.rhtml +++ b/app/views/events/_events.rhtml @@ -1 +1,3 @@ -<%= list_events(@date, @events) %> \ No newline at end of file +<%= list_events(@date, @events) %> + +<%= pagination_links @events, :param_name => 'page' %> diff --git a/features/events.feature b/features/events.feature index 269fbc0..fb6340d 100644 --- a/features/events.feature +++ b/features/events.feature @@ -244,3 +244,38 @@ Feature: events Given I am on /profile/josesilva/events/2009/10 When I follow "Oktoberfest" Then I should see "Oktoberfest" + + Scenario: list events paginated for a specific profile for the month + Given I am logged in as admin + And the following users + | login | + | josemanuel | + And I am logged in as "josemanuel" + And the following events + | owner | name | start_date | + | josemanuel | Event 5 | 2009-10-12 | + | josemanuel | Event 3 | 2009-10-15 | + | josemanuel | Test Event | 2009-10-15 | + | josemanuel | Oktoberfest | 2009-10-19 | + | josemanuel | WikiSym | 2009-10-21 | + | josemanuel | Free Software | 2009-10-22 | + | josemanuel | Rachel Birthday | 2009-10-23 | + | josemanuel | Manuel Birthday | 2009-10-24 | + | josemanuel | Michelle Birthday | 2009-10-25 | + | josemanuel | Lecture Allien 10 | 2009-10-26 | + | josemanuel | Lecture Allien 11 | 2009-10-26 | + | josemanuel | Lecture Allien 12 | 2009-10-26 | + | josemanuel | Lecture Allien 13 | 2009-10-26 | + | josemanuel | Lecture Allien 14 | 2009-10-26 | + | josemanuel | Lecture Allien 15 | 2009-10-26 | + | josemanuel | Lecture Allien 16 | 2009-10-26 | + | josemanuel | Lecture Allien 17 | 2009-10-26 | + | josemanuel | Lecture Allien 18 | 2009-10-26 | + | josemanuel | Lecture Allien 19 | 2009-10-26 | + | josemanuel | Lecture Allien 20 | 2009-10-26 | + | josemanuel | Party On | 2009-10-27 | + + When I am on /profile/josemanuel/events/2009/10 + Then I should not see "Party On" within "#agenda-items" + When I follow "Next" + Then I should see "Party On" within "#agenda-items" diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 70eba18..c9a142a 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -3578,9 +3578,10 @@ div#article-parent { } #agenda .agenda-calendar { width: 50%; + display: inline-block; } #agenda td, #agenda th { - padding: 15px; + padding: 10px; padding-right: 0px; } #agenda .agenda-calendar .previous-month td, #agenda .agenda-calendar .previous-month th, #agenda .agenda-calendar .next-month td, #agenda .agenda-calendar .next-month th { @@ -3638,26 +3639,25 @@ div#article-parent { vertical-align: middle; } #agenda .agenda-calendar .current-month caption { - margin-bottom: 10px; + margin: 10px 0px; } #agenda #events-of-the-day { - position: absolute; - left: 50%; width: 45%; - top: 0px; height: 100%; padding-left: 20px; + display: inline-block; + vertical-align: top; } #agenda #events-of-the-day #agenda-items { display: block; overflow: auto; overflow-x: hidden; - height: 80%; + height: 250px; background: white; border: none; } #agenda-toolbar { - float: right; + text-align: right; font-variant: normal; font-weight: normal; } @@ -3680,6 +3680,9 @@ h1#agenda-title { display: block; margin-top: 10px; } +#agenda .pagination { + margin-top: 15px; +} /* ==> public/stylesheets/controller_favorite_enterprises.css <== */ /* ==> @import url(manage_contacts_list.css); <== */ diff --git a/test/functional/events_controller_test.rb b/test/functional/events_controller_test.rb index 072eeca..57a5e30 100644 --- a/test/functional/events_controller_test.rb +++ b/test/functional/events_controller_test.rb @@ -38,4 +38,12 @@ class EventsControllerTest < ActionController::TestCase assert_tag :tag =>'a', :attributes => {:href => "/profile/#{profile.identifier}/events/#{next_month.year}/#{next_month.month}"}, :content => next_month_name end + should 'see the events paginated' do + 30.times do |i| + profile.events << Event.new(:name => "Lesson #{i}", :start_date => Date.today) + end + get :events, :profile => profile.identifier + assert_equal 20, assigns(:events).count + end + end diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index b630f84..ece3820 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -370,6 +370,14 @@ class SearchControllerTest < ActionController::TestCase assert_equal [ 'upcoming event 1' ], assigns(:searches)[:events][:results].map(&:name) end + should 'see the events paginated' do + 30.times do |i| + create_event(person, :name => "Event #{i}", :start_date => Date.today) + end + get :events + assert_equal 20, assigns(:events).count + end + %w[ people enterprises articles events communities products ].each do |asset| should "render asset-specific template when searching for #{asset}" do get "#{asset}" -- libgit2 0.21.2