refinerycms-calendar 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. data/app/controllers/admin/event_categories_controller.rb +9 -0
  2. data/app/controllers/admin/events_controller.rb +26 -0
  3. data/app/controllers/event_categories_controller.rb +10 -0
  4. data/app/controllers/events_controller.rb +64 -0
  5. data/app/helpers/event_categories_helper.rb +3 -0
  6. data/app/helpers/events_helper.rb +38 -0
  7. data/app/models/event.rb +72 -0
  8. data/app/models/event_categorization.rb +4 -0
  9. data/app/models/event_category.rb +10 -0
  10. data/app/views/admin/event_categories/_event_categories.html.erb +1 -0
  11. data/app/views/admin/event_categories/_event_category.html.erb +18 -0
  12. data/app/views/admin/event_categories/_form.html.erb +26 -0
  13. data/app/views/admin/event_categories/_sortable_list.html.erb +3 -0
  14. data/app/views/admin/event_categories/edit.html.erb +1 -0
  15. data/app/views/admin/event_categories/index.html.erb +40 -0
  16. data/app/views/admin/event_categories/new.html.erb +1 -0
  17. data/app/views/admin/events/_event.html.erb +18 -0
  18. data/app/views/admin/events/_events.html.erb +1 -0
  19. data/app/views/admin/events/_form.html.erb +126 -0
  20. data/app/views/admin/events/_sortable_list.html.erb +20 -0
  21. data/app/views/admin/events/edit.html.erb +1 -0
  22. data/app/views/admin/events/index.html.erb +41 -0
  23. data/app/views/admin/events/new.html.erb +1 -0
  24. data/app/views/event_categories/show.html.erb +15 -0
  25. data/app/views/events/_event.html.erb +103 -0
  26. data/app/views/events/_sidebar.html.erb +38 -0
  27. data/app/views/events/archive.html.erb +17 -0
  28. data/app/views/events/index.html.erb +17 -0
  29. data/app/views/events/index.rss.builder +24 -0
  30. data/app/views/events/show.html.erb +15 -0
  31. data/changelog.md +22 -0
  32. data/config/locales/en.yml +39 -0
  33. data/config/locales/lolcat.yml +24 -0
  34. data/config/locales/nb.yml +20 -0
  35. data/config/locales/nl.yml +20 -0
  36. data/config/routes.rb +11 -0
  37. data/db/migrate/01_create_events.rb +33 -0
  38. data/db/migrate/02_create_event_categories.rb +13 -0
  39. data/db/migrate/03_create_event_categorizations.rb +17 -0
  40. data/db/seeds/events.rb +17 -0
  41. data/features/manage_events.feature +64 -0
  42. data/features/step_definitions/event_steps.rb +14 -0
  43. data/features/support/factories/event_categories.rb +3 -0
  44. data/features/support/factories/events.rb +6 -0
  45. data/features/support/paths.rb +17 -0
  46. data/lib/generators/refinerycms_events_generator.rb +6 -0
  47. data/lib/refinerycms-events.rb +23 -0
  48. data/lib/tasks/events.rake +13 -0
  49. data/public/stylesheets/refinerycms-events.css +73 -0
  50. data/readme.md +49 -0
  51. data/refinerycms-calendar.gemspec +17 -0
  52. data/spec/controllers/events_controller_spec.rb +14 -0
  53. data/spec/helpers/events_helper_spec.rb +16 -0
  54. data/spec/models/event_category_spec.rb +29 -0
  55. data/spec/models/event_spec.rb +82 -0
  56. metadata +133 -0
@@ -0,0 +1,20 @@
1
+ <% if @current.any? -%>
2
+ <h2>Current Events</h2>
3
+ <ul id='sortable_list'>
4
+ <%= render :partial => 'event', :collection => @current %>
5
+ </ul>
6
+ <% end -%>
7
+
8
+ <% if @upcoming.any? -%>
9
+ <h2>Upcoming Events</h2>
10
+ <ul id='sortable_list'>
11
+ <%= render :partial => 'event', :collection => @upcoming %>
12
+ </ul>
13
+ <% end -%>
14
+
15
+ <% if @archived.any? -%>
16
+ <h2>Archived Events</h2>
17
+ <ul id='sortable_list'>
18
+ <%= render :partial => 'event', :collection => @archived %>
19
+ </ul>
20
+ <% end -%>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,41 @@
1
+ <div id='records'>
2
+ <% if searching? %>
3
+ <h2><%= t('results_for', :scope => 'shared.admin.search', :query => params[:search]) %></h2>
4
+ <% end %>
5
+ <% if @events.any? %>
6
+ <div class='pagination_container'>
7
+ <%= render :partial => 'events' %>
8
+ </div>
9
+ <% else %>
10
+ <p>
11
+ <% unless searching? %>
12
+ <strong>
13
+ <%= t('.no_items_yet') %>
14
+ </strong>
15
+ <% else %>
16
+ <%= t('no_results', :scope => 'shared.admin.search') %>
17
+ <% end %>
18
+ </p>
19
+ <% end %>
20
+ </div>
21
+ <div id='actions'>
22
+ <ul>
23
+ <% if Admin::EventsController.searchable? %>
24
+ <li>
25
+ <%= render :partial => "/shared/admin/search",
26
+ :locals => {
27
+ :url => admin_events_url
28
+ } %>
29
+ </li>
30
+ <% end %>
31
+ <li>
32
+ <%= link_to t('.create_new'), new_admin_event_url,
33
+ :class => "add_icon" %>
34
+ </li>
35
+
36
+ <li>
37
+ <%= link_to "Manage Categories", admin_event_categories_url,
38
+ :class => "edit_icon" %>
39
+ </li>
40
+ </ul>
41
+ </div>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,15 @@
1
+ <% content_for :body_content_title do -%>
2
+ <%= "#{@event_category.name} Category" %>
3
+ <% end -%>
4
+
5
+ <% content_for :body_content_left do %>
6
+ <div id="events">
7
+ <%= render :partial => 'events/event', :collection => @event_category.events, :locals => { :category => true } %>
8
+ </div><!-- #events -->
9
+ <% end %>
10
+
11
+ <%= render 'events/sidebar' %>
12
+
13
+ <%= render :partial => "/shared/content_page" %>
14
+
15
+ <% content_for :stylesheets, stylesheet_link_tag('refinerycms-events') %>
@@ -0,0 +1,103 @@
1
+ <%
2
+ featured ||= false
3
+ individual ||= false
4
+ archive ||= false
5
+ category ||= false
6
+ -%>
7
+
8
+ <%= div_for event, :class => 'individual_event' do -%>
9
+
10
+ <section class="event_image">
11
+ <%= image_fu event.image, "150x150#c" %>
12
+ </section>
13
+
14
+ <% unless individual -%>
15
+ <h1><%= link_to event.title, event %></h1>
16
+ <% end -%>
17
+
18
+ <section class="start_end">
19
+ <p>Starts:<br/>
20
+ <%= event.start_at.strftime('%b %e, %Y %l:%M %p') %></p>
21
+ <p>Ends:<br/>
22
+ <%= event.end_at.strftime('%b %e, %Y %l:%M %p') %></p>
23
+ </section><!-- .start_end -->
24
+
25
+ <section class="venue">
26
+ <p>Location:<br/>
27
+ <%= event.venue_name %></p>
28
+ </section>
29
+
30
+ <section class="address">
31
+ <p>Address:<br/>
32
+ <%= event.venue_address %>
33
+ </p>
34
+ </section>
35
+
36
+ <% unless archive -%>
37
+ <% unless event.ticket_price.blank? -%>
38
+ <section class="price">
39
+ <p>Ticket Price:<br/>
40
+ <%=number_to_currency event.ticket_price %>
41
+ </p>
42
+ </section>
43
+ <% end -%>
44
+ <% unless event.ticket_link.blank? -%>
45
+ <section class="ticket">
46
+ <p>Ticket Link:<br/>
47
+ <%=auto_link event.ticket_link %>
48
+ </p>
49
+ </section>
50
+ <% end -%>
51
+ <% end -%>
52
+
53
+ <section>
54
+ <% if individual -%>
55
+ <%=raw event.description %>
56
+ <% else -%>
57
+ <%= simple_format(truncate strip_tags(event.description), :length => 200) %>
58
+ <% end -%>
59
+ </section>
60
+
61
+
62
+
63
+ <% if individual -%>
64
+ <section id="share_this_event">
65
+ <ul>
66
+ <li class="facebook"><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like href="<%= request.url %>" layout="box_count" show_faces="false" width="55" font=""></fb:like></li>
67
+ <li class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="vertical">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></li>
68
+ </ul>
69
+ </section>
70
+
71
+ <nav id="prevnext_nav">
72
+ <% if event.prev.present? -%>
73
+ <%= link_to event_path(event.prev), :class => "prev button" do -%>
74
+ <h3>Previous</h3>
75
+ <h4><%=truncate event.prev.title, :length => 38 %></h4>
76
+ <% end -%>
77
+ <% else -%>
78
+ <span class="prev disabled">
79
+ <h3>Previous</h3>
80
+ <h4>&nbsp;</h4>
81
+ </span>
82
+ <% end -%>
83
+
84
+ <%= link_to events_path, :class => "home button" do -%>
85
+ <h3>Events</h3>
86
+ <h4>Home</h4>
87
+ <% end -%>
88
+
89
+ <% if event.next.present? -%>
90
+ <%= link_to event_path(event.next), :class => "next button" do -%>
91
+ <h3>Next</h3>
92
+ <h4><%=truncate event.next.title, :length => 38 %></h4>
93
+ <% end -%>
94
+ <% else -%>
95
+ <span class="next disabled">
96
+ <h3>Next</h3>
97
+ <h4>&nbsp;</h4>
98
+ </span>
99
+ <% end -%>
100
+ </nav><!--#event_nav-->
101
+ <% end -%>
102
+
103
+ <% end -%>
@@ -0,0 +1,38 @@
1
+ <% content_for :meta, "
2
+ <link
3
+ rel='alternate'
4
+ type='application/rss+xml'
5
+ title='#{RefinerySetting.find_or_set(:site_name, 'Company Name')} Events'
6
+ href='#{events_url(:format => :rss)}' />".html_safe -%>
7
+ <% content_for :body_content_right do %>
8
+ <aside class="sidebar_module rss">
9
+ <h2>RSS</h2>
10
+ <%= link_to "Subscribe", events_path(:format => :rss) %>
11
+ </aside><!-- .rss -->
12
+
13
+ <aside class="sidebar_module categories">
14
+ <h2>Categories</h2>
15
+ <% @event_categories.each do |category| -%>
16
+ <%= link_to category.name, category_events_path(category) %>
17
+ <% end -%>
18
+ </aside><!-- .categories -->
19
+
20
+ <% unless controller.action_name == "index" or controller.action_name == "archive" -%>
21
+ <aside class="sidebar_module other_events">
22
+ <h2><%= t('.other') %></h2>
23
+ <ul id="events">
24
+ <% @other_events.each do |event| %>
25
+ <li>
26
+ <%= link_to event.title, event_url(event) %>
27
+ </li>
28
+ <% end %>
29
+ </ul>
30
+ </aside><!-- .other_events -->
31
+ <% end -%>
32
+
33
+ <aside class="sidebar_module archives">
34
+ <h2>Archives</h2>
35
+ <%= events_archive_list %>
36
+ </aside><!-- .archives -->
37
+
38
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <% content_for :body_content_title do -%>
2
+ <% date_format = params[:month].present? ? '%B %Y' : '%Y' -%>
3
+ <%= "Events posted in #{@archive_date.strftime(date_format)}" %>
4
+ <% end -%>
5
+
6
+ <% content_for :body_content_left do %>
7
+ <div id="events">
8
+ <%= render :partial => 'event', :collection => @events, :locals => { :archive => true } %>
9
+ </div>
10
+ <%= will_paginate @events %>
11
+ <% end %>
12
+
13
+ <%= render 'events/sidebar' %>
14
+
15
+ <%= render :partial => "/shared/content_page" %>
16
+
17
+ <% content_for :stylesheets, stylesheet_link_tag('refinerycms-events') %>
@@ -0,0 +1,17 @@
1
+ <% content_for :body_content_left do %>
2
+ <div id="featured_events" class="events">
3
+ <h2>Featured Events</h2>
4
+ <%= render :partial => 'event', :collection => @featured_events, :locals => { :featured => true } %>
5
+ </div>
6
+
7
+ <div id="all_events" class="events">
8
+ <h2>All Events</h2>
9
+ <%= render :partial => 'event', :collection => @events %>
10
+ </div>
11
+ <% end %>
12
+
13
+ <%= render 'events/sidebar' %>
14
+
15
+ <%= render :partial => "/shared/content_page" %>
16
+
17
+ <% content_for :stylesheets, stylesheet_link_tag('refinerycms-events') %>
@@ -0,0 +1,24 @@
1
+ xml.instruct! :xml, :version => "1.0"
2
+ xml.rss :version => "2.0" do
3
+ xml.channel do
4
+ xml.title RefinerySetting.find_or_set(:site_name, "Pastoral Artisan Cheese, Bread & Wine")
5
+ xml.description RefinerySetting.find_or_set(:site_name, "Pastoral Artisan Cheese, Bread & Wine") + " Events"
6
+ xml.link events_url
7
+
8
+ (@featured_events | @events).each do |event|
9
+ xml.item do
10
+ xml.title "Featured: #{event.title}"
11
+ xml.description simple_format(strip_tags event.description)
12
+
13
+ xml.start_at event.start_at.to_s(:rfc822)
14
+ xml.end_at event.end_at.to_s(:rfc822)
15
+
16
+ xml.ticket_price number_to_currency(event.ticket_price) unless event.ticket_price.blank?
17
+ xml.ticket_link event.ticket_link unless event.ticket_link.blank?
18
+
19
+ xml.link event_url(event)
20
+ xml.pubDate event.created_at.to_s(:rfc822)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ <% content_for :body_content_title do %>
2
+ <%= @event.title %>
3
+ <% end %>
4
+
5
+ <% content_for :body_content_left do %>
6
+ <div id="event">
7
+ <%= render :partial => 'event', :locals => { :event => @event, :individual => true } %>
8
+ </div>
9
+ <% end %>
10
+
11
+ <%= render 'events/sidebar' %>
12
+
13
+ <%= render :partial => "/shared/content_page" %>
14
+
15
+ <% content_for :stylesheets, stylesheet_link_tag('refinerycms-events') %>
@@ -0,0 +1,22 @@
1
+
2
+ ## 1.0 [13 March 2011]
3
+
4
+ * Venue Details
5
+ * Ticket Pricing & Link
6
+ * Feature-ability
7
+ * Image attachment
8
+ * Ticket price requires a number
9
+ * Datetime select defaults noon to 1pm
10
+ * Scopes: featured, not_featured, upcoming & current
11
+ * Friendly ID based on titles
12
+ * Archiving
13
+ * Admin screen separates events by their status (TODO: pagination somehow)
14
+ * Reasonable validations
15
+ * Practical instance methods to check against scopes
16
+ * Next & previous navigation on individual event pages.
17
+ * has_many :categories, :through => :categorizations, :source => :event_category
18
+ * RSS feed of current, upcoming & featured events
19
+ * RSS in sidebar && autodiscovery
20
+ * Basic layout and styling to get started immediately [blake0102](http://github.com/blake0102)
21
+ * Easily hook onto a few semantic CSS classes built into the markup [blake0102](http://github.com/blake0102)
22
+ * Basic Facebook & Twitter sharing interface
@@ -0,0 +1,39 @@
1
+ en:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: image
6
+ plugins:
7
+ events:
8
+ title: Events
9
+ admin:
10
+ events:
11
+ index:
12
+ title: Events
13
+ create_new: Add New Event
14
+ reorder: Reorder Events
15
+ reorder_done: Done Reordering Events
16
+ sorry_no_results: Sorry! There are no results found.
17
+ no_items_yet: There are no Events yet. Click "Add New Event" to add your first event.
18
+ event:
19
+ view_live_html: View this event live <br/><em>(opens in a new window)</em>
20
+ edit: Edit this event
21
+ delete: Remove this event forever
22
+ event_categories:
23
+ index:
24
+ title: Event Categories
25
+ create_new: Add New Event Category
26
+ reorder: Reorder Event Categories
27
+ reorder_done: Done Reordering Event Categories
28
+ sorry_no_results: Sorry! There are no results found.
29
+ no_items_yet: There are no Event Categories yet. Click "Add New Event Category" to add your first event category.
30
+ event_category:
31
+ view_live_html: View this event category live <br/><em>(opens in a new window)</em>
32
+ edit: Edit this event category
33
+ delete: Remove this event category forever
34
+ events:
35
+ index:
36
+ archives: Archives
37
+ show:
38
+ sidebar:
39
+ other: Other Events
@@ -0,0 +1,24 @@
1
+ lolcat:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: IMAGE
6
+ plugins:
7
+ events:
8
+ title: Events
9
+ admin:
10
+ events:
11
+ index:
12
+ title: Events
13
+ create_new: CREATE NEW Event
14
+ reorder: REORDR Events
15
+ reorder_done: DUN REORDERIN Events
16
+ sorry_no_results: SRY! THAR R NO RESULTS FINDZ.
17
+ no_items_yet: THAR R NO Events YET. CLICK "CREATE NEW Event" 2 ADD UR FURST event.
18
+ event:
19
+ view_live_html: VIEW DIS event LIV <BR/><EM>(OPENS IN NEW WINDOW)</EM>
20
+ edit: EDIT DIS event
21
+ delete: REMOOV DIS event FOREVR
22
+ events:
23
+ show:
24
+ other: OTHR Events
@@ -0,0 +1,20 @@
1
+ nb:
2
+ plugins:
3
+ events:
4
+ title: Events
5
+ admin:
6
+ events:
7
+ index:
8
+ title: Events
9
+ create_new: Lag en ny Event
10
+ reorder: Endre rekkefølgen på Events
11
+ reorder_done: Ferdig å endre rekkefølgen Events
12
+ sorry_no_results: Beklager! Vi fant ikke noen resultater.
13
+ no_items_yet: Det er ingen Events enda. Klikk på "Lag en ny Event" for å legge til din første event.
14
+ event:
15
+ view_live_html: Vis hvordan denne event ser ut offentlig <br/><em>(åpner i et nytt vindu)</em>
16
+ edit: Rediger denne event
17
+ delete: Fjern denne event permanent
18
+ events:
19
+ show:
20
+ other: Andre Events
@@ -0,0 +1,20 @@
1
+ nl:
2
+ plugins:
3
+ events:
4
+ title: Events
5
+ admin:
6
+ events:
7
+ index:
8
+ title: Events
9
+ create_new: Maak een nieuwe Event
10
+ reorder: Wijzig de volgorde van de Events
11
+ reorder_done: Klaar met het wijzingen van de volgorde van de Events
12
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
13
+ no_items_yet: Er zijn nog geen Events. Druk op 'Maak een nieuwe Event' om de eerste aan te maken.
14
+ event:
15
+ view_live_html: Bekijk deze event op de website <br/><em>(opent een nieuw venster)</em>
16
+ edit: Bewerk deze event
17
+ delete: Verwijder deze event voor eeuwig
18
+ events:
19
+ show:
20
+ other: Andere Events
@@ -0,0 +1,11 @@
1
+ Refinery::Application.routes.draw do
2
+ resources :events do
3
+ get 'archive/:year(/:month)' => 'events#archive', :as => 'archive', :on => :collection
4
+ get 'category/:id' => 'event_categories#show', :as => 'category', :on => :collection
5
+ end
6
+
7
+ scope(:path => 'refinery', :as => 'admin', :module => 'admin') do
8
+ resources :events, :except => :show
9
+ resources :event_categories, :except => :show
10
+ end
11
+ end