Commit fe3ebd1c23f8b3e022fbba2e663a78ae3e29175c

Authored by Daniela Feitosa
1 parent a349f151

Added pagination on events

agenda_improvements: Changed the limit to show the events

Signed-off-by: Gabriela Navarro <navarro1703@gmail.com>
Signed-off-by: Luiz Matos <luizff.matos@gmail.com>

(ActionItem3048)
app/controllers/public/events_controller.rb
... ... @@ -7,11 +7,11 @@ class EventsController &lt; PublicController
7 7 @date = build_date(params[:year], params[:month], params[:day])
8 8  
9 9 if !params[:year] && !params[:month] && !params[:day]
10   - @events = profile.events.next_events_from_month(@date)
  10 + @events = profile.events.next_events_from_month(@date).paginate(:per_page => per_page, :page => params[:page])
11 11 end
12 12  
13 13 if params[:year] || params[:month]
14   - @events = profile.events.by_month(@date)
  14 + @events = profile.events.by_month(@date).paginate(:per_page => per_page, :page => params[:page])
15 15 end
16 16  
17 17 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 &lt; PublicController
29 29  
30 30 include EventsHelper
31 31  
  32 + def per_page
  33 + 20
  34 + end
32 35 end
... ...
app/controllers/public/search_controller.rb
... ... @@ -99,14 +99,14 @@ class SearchController &lt; PublicController
99 99 @events = []
100 100 if params[:day] || !params[:year] && !params[:month]
101 101 @events = @category ?
102   - environment.events.by_day(@date).in_category(Category.find(@category_id)) :
103   - environment.events.by_day(@date)
  102 + environment.events.by_day(@date).in_category(Category.find(@category_id)).paginate(:per_page => per_page, :page => params[:page]) :
  103 + environment.events.by_day(@date).paginate(:per_page => per_page, :page => params[:page])
104 104 end
105 105  
106 106 if params[:year] || params[:month]
107 107 @events = @category ?
108   - environment.events.by_month(@date).in_category(Category.find(@category_id)) :
109   - environment.events.by_month(@date)
  108 + environment.events.by_month(@date).in_category(Category.find(@category_id)).paginate(:per_page => per_page, :page => params[:page]) :
  109 + environment.events.by_month(@date).paginate(:per_page => per_page, :page => params[:page])
110 110 end
111 111  
112 112 @scope = date_range && params[:action] == 'events' ? environment.events.by_range(date_range) : environment.events
... ... @@ -139,7 +139,7 @@ class SearchController &lt; PublicController
139 139  
140 140 def events_by_day
141 141 @date = build_date(params[:year], params[:month], params[:day])
142   - @events = environment.events.by_day(@date)
  142 + @events = environment.events.by_day(@date).paginate(:per_page => per_page, :page => params[:page])
143 143 render :partial => 'events/events'
144 144 end
145 145  
... ... @@ -224,4 +224,8 @@ class SearchController &lt; PublicController
224 224 @environment.send(klass.name.underscore.pluralize).visible.includes(relations)
225 225 end
226 226  
  227 + def per_page
  228 + 20
  229 + end
  230 +
227 231 end
... ...
app/models/event.rb
... ... @@ -38,15 +38,12 @@ class Event &lt; Article
38 38 named_scope :next_events_from_month, lambda { |date|
39 39 date_temp = date.strftime("%Y-%m-%d")
40 40 { :conditions => ["start_date >= ?","#{date_temp}"],
41   - :limit => 10,
42 41 :order => 'start_date ASC'
43 42 }
44 43 }
45 44  
46 45 named_scope :by_month, lambda { |date|
47   - date_temp = date.strftime("%Y-%m")
48 46 { :conditions => ["EXTRACT(YEAR FROM start_date) = ? AND EXTRACT(MONTH FROM start_date) = ?",date.year,date.month],
49   - :limit => 10,
50 47 :order => 'start_date ASC'
51 48 }
52 49 }
... ...
app/views/events/_events.rhtml
1   -<%= list_events(@date, @events) %>
2 1 \ No newline at end of file
  2 +<%= list_events(@date, @events) %>
  3 +
  4 +<%= pagination_links @events, :param_name => 'page' %>
... ...
features/events.feature
... ... @@ -244,3 +244,38 @@ Feature: events
244 244 Given I am on /profile/josesilva/events/2009/10
245 245 When I follow "Oktoberfest"
246 246 Then I should see "Oktoberfest"
  247 +
  248 + Scenario: list events paginated for a specific profile for the month
  249 + Given I am logged in as admin
  250 + And the following users
  251 + | login |
  252 + | josemanuel |
  253 + And I am logged in as "josemanuel"
  254 + And the following events
  255 + | owner | name | start_date |
  256 + | josemanuel | Event 5 | 2009-10-12 |
  257 + | josemanuel | Event 3 | 2009-10-15 |
  258 + | josemanuel | Test Event | 2009-10-15 |
  259 + | josemanuel | Oktoberfest | 2009-10-19 |
  260 + | josemanuel | WikiSym | 2009-10-21 |
  261 + | josemanuel | Free Software | 2009-10-22 |
  262 + | josemanuel | Rachel Birthday | 2009-10-23 |
  263 + | josemanuel | Manuel Birthday | 2009-10-24 |
  264 + | josemanuel | Michelle Birthday | 2009-10-25 |
  265 + | josemanuel | Lecture Allien 10 | 2009-10-26 |
  266 + | josemanuel | Lecture Allien 11 | 2009-10-26 |
  267 + | josemanuel | Lecture Allien 12 | 2009-10-26 |
  268 + | josemanuel | Lecture Allien 13 | 2009-10-26 |
  269 + | josemanuel | Lecture Allien 14 | 2009-10-26 |
  270 + | josemanuel | Lecture Allien 15 | 2009-10-26 |
  271 + | josemanuel | Lecture Allien 16 | 2009-10-26 |
  272 + | josemanuel | Lecture Allien 17 | 2009-10-26 |
  273 + | josemanuel | Lecture Allien 18 | 2009-10-26 |
  274 + | josemanuel | Lecture Allien 19 | 2009-10-26 |
  275 + | josemanuel | Lecture Allien 20 | 2009-10-26 |
  276 + | josemanuel | Party On | 2009-10-27 |
  277 +
  278 + When I am on /profile/josemanuel/events/2009/10
  279 + Then I should not see "Party On" within "#agenda-items"
  280 + When I follow "Next"
  281 + Then I should see "Party On" within "#agenda-items"
... ...
public/stylesheets/application.css
... ... @@ -3578,9 +3578,10 @@ div#article-parent {
3578 3578 }
3579 3579 #agenda .agenda-calendar {
3580 3580 width: 50%;
  3581 + display: inline-block;
3581 3582 }
3582 3583 #agenda td, #agenda th {
3583   - padding: 15px;
  3584 + padding: 10px;
3584 3585 padding-right: 0px;
3585 3586 }
3586 3587 #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 {
3638 3639 vertical-align: middle;
3639 3640 }
3640 3641 #agenda .agenda-calendar .current-month caption {
3641   - margin-bottom: 10px;
  3642 + margin: 10px 0px;
3642 3643 }
3643 3644 #agenda #events-of-the-day {
3644   - position: absolute;
3645   - left: 50%;
3646 3645 width: 45%;
3647   - top: 0px;
3648 3646 height: 100%;
3649 3647 padding-left: 20px;
  3648 + display: inline-block;
  3649 + vertical-align: top;
3650 3650 }
3651 3651 #agenda #events-of-the-day #agenda-items {
3652 3652 display: block;
3653 3653 overflow: auto;
3654 3654 overflow-x: hidden;
3655   - height: 80%;
  3655 + height: 250px;
3656 3656 background: white;
3657 3657 border: none;
3658 3658 }
3659 3659 #agenda-toolbar {
3660   - float: right;
  3660 + text-align: right;
3661 3661 font-variant: normal;
3662 3662 font-weight: normal;
3663 3663 }
... ... @@ -3680,6 +3680,9 @@ h1#agenda-title {
3680 3680 display: block;
3681 3681 margin-top: 10px;
3682 3682 }
  3683 +#agenda .pagination {
  3684 + margin-top: 15px;
  3685 +}
3683 3686 /* ==> public/stylesheets/controller_favorite_enterprises.css <== */
3684 3687  
3685 3688 /* ==> @import url(manage_contacts_list.css); <== */
... ...
test/functional/events_controller_test.rb
... ... @@ -38,4 +38,12 @@ class EventsControllerTest &lt; ActionController::TestCase
38 38 assert_tag :tag =>'a', :attributes => {:href => "/profile/#{profile.identifier}/events/#{next_month.year}/#{next_month.month}"}, :content => next_month_name
39 39 end
40 40  
  41 + should 'see the events paginated' do
  42 + 30.times do |i|
  43 + profile.events << Event.new(:name => "Lesson #{i}", :start_date => Date.today)
  44 + end
  45 + get :events, :profile => profile.identifier
  46 + assert_equal 20, assigns(:events).count
  47 + end
  48 +
41 49 end
... ...
test/functional/search_controller_test.rb
... ... @@ -370,6 +370,14 @@ class SearchControllerTest &lt; ActionController::TestCase
370 370 assert_equal [ 'upcoming event 1' ], assigns(:searches)[:events][:results].map(&:name)
371 371 end
372 372  
  373 + should 'see the events paginated' do
  374 + 30.times do |i|
  375 + create_event(person, :name => "Event #{i}", :start_date => Date.today)
  376 + end
  377 + get :events
  378 + assert_equal 20, assigns(:events).count
  379 + end
  380 +
373 381 %w[ people enterprises articles events communities products ].each do |asset|
374 382 should "render asset-specific template when searching for #{asset}" do
375 383 get "#{asset}"
... ...