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.
- data/app/controllers/admin/event_categories_controller.rb +9 -0
- data/app/controllers/admin/events_controller.rb +26 -0
- data/app/controllers/event_categories_controller.rb +10 -0
- data/app/controllers/events_controller.rb +64 -0
- data/app/helpers/event_categories_helper.rb +3 -0
- data/app/helpers/events_helper.rb +38 -0
- data/app/models/event.rb +72 -0
- data/app/models/event_categorization.rb +4 -0
- data/app/models/event_category.rb +10 -0
- data/app/views/admin/event_categories/_event_categories.html.erb +1 -0
- data/app/views/admin/event_categories/_event_category.html.erb +18 -0
- data/app/views/admin/event_categories/_form.html.erb +26 -0
- data/app/views/admin/event_categories/_sortable_list.html.erb +3 -0
- data/app/views/admin/event_categories/edit.html.erb +1 -0
- data/app/views/admin/event_categories/index.html.erb +40 -0
- data/app/views/admin/event_categories/new.html.erb +1 -0
- data/app/views/admin/events/_event.html.erb +18 -0
- data/app/views/admin/events/_events.html.erb +1 -0
- data/app/views/admin/events/_form.html.erb +126 -0
- data/app/views/admin/events/_sortable_list.html.erb +20 -0
- data/app/views/admin/events/edit.html.erb +1 -0
- data/app/views/admin/events/index.html.erb +41 -0
- data/app/views/admin/events/new.html.erb +1 -0
- data/app/views/event_categories/show.html.erb +15 -0
- data/app/views/events/_event.html.erb +103 -0
- data/app/views/events/_sidebar.html.erb +38 -0
- data/app/views/events/archive.html.erb +17 -0
- data/app/views/events/index.html.erb +17 -0
- data/app/views/events/index.rss.builder +24 -0
- data/app/views/events/show.html.erb +15 -0
- data/changelog.md +22 -0
- data/config/locales/en.yml +39 -0
- data/config/locales/lolcat.yml +24 -0
- data/config/locales/nb.yml +20 -0
- data/config/locales/nl.yml +20 -0
- data/config/routes.rb +11 -0
- data/db/migrate/01_create_events.rb +33 -0
- data/db/migrate/02_create_event_categories.rb +13 -0
- data/db/migrate/03_create_event_categorizations.rb +17 -0
- data/db/seeds/events.rb +17 -0
- data/features/manage_events.feature +64 -0
- data/features/step_definitions/event_steps.rb +14 -0
- data/features/support/factories/event_categories.rb +3 -0
- data/features/support/factories/events.rb +6 -0
- data/features/support/paths.rb +17 -0
- data/lib/generators/refinerycms_events_generator.rb +6 -0
- data/lib/refinerycms-events.rb +23 -0
- data/lib/tasks/events.rake +13 -0
- data/public/stylesheets/refinerycms-events.css +73 -0
- data/readme.md +49 -0
- data/refinerycms-calendar.gemspec +17 -0
- data/spec/controllers/events_controller_spec.rb +14 -0
- data/spec/helpers/events_helper_spec.rb +16 -0
- data/spec/models/event_category_spec.rb +29 -0
- data/spec/models/event_spec.rb +82 -0
- 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> </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> </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') %>
|
data/changelog.md
ADDED
@@ -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
|
data/config/routes.rb
ADDED
@@ -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
|