refinerycms-calendar 2.0.0.alpha → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/app/controllers/refinery/calendar/admin/events_controller.rb +7 -31
  2. data/app/controllers/refinery/calendar/admin/venues_controller.rb +14 -0
  3. data/app/controllers/refinery/calendar/events_controller.rb +7 -9
  4. data/app/controllers/refinery/calendar/venues_controller.rb +6 -0
  5. data/app/models/refinery/calendar/event.rb +23 -38
  6. data/app/models/refinery/calendar/venue.rb +9 -0
  7. data/app/views/refinery/calendar/admin/events/_actions.html.erb +1 -0
  8. data/app/views/refinery/calendar/admin/events/_event.html.erb +13 -3
  9. data/app/views/refinery/calendar/admin/events/_form.html.erb +60 -6
  10. data/app/views/refinery/calendar/admin/events/index.html.erb +1 -1
  11. data/app/views/refinery/calendar/admin/shared/_links.html.erb +8 -0
  12. data/app/views/refinery/calendar/admin/venues/_actions.html.erb +26 -0
  13. data/app/views/refinery/calendar/admin/venues/_form.html.erb +35 -0
  14. data/app/views/refinery/calendar/admin/venues/_records.html.erb +18 -0
  15. data/app/views/refinery/calendar/admin/venues/_sortable_list.html.erb +5 -0
  16. data/app/views/refinery/calendar/admin/venues/_venue.html.erb +20 -0
  17. data/app/views/refinery/calendar/admin/venues/_venues.html.erb +2 -0
  18. data/app/views/refinery/calendar/admin/venues/edit.html.erb +1 -0
  19. data/app/views/refinery/calendar/admin/venues/index.html.erb +8 -0
  20. data/app/views/refinery/calendar/admin/venues/new.html.erb +1 -0
  21. data/app/views/refinery/calendar/events/_event.html.erb +8 -0
  22. data/app/views/refinery/calendar/events/index.html.erb +5 -7
  23. data/app/views/refinery/calendar/events/show.html.erb +19 -18
  24. data/app/views/refinery/calendar/venues/index.html.erb +11 -0
  25. data/app/views/refinery/calendar/venues/show.html.erb +45 -0
  26. data/app/views/sitemap/index.xml.builder +25 -0
  27. data/config/database.yml.mysql +20 -0
  28. data/config/database.yml.postgresql +58 -0
  29. data/config/database.yml.sqlite3 +18 -0
  30. data/config/initializers/refinery/authentication.rb +4 -0
  31. data/config/initializers/refinery/core.rb +48 -0
  32. data/config/initializers/refinery/images.rb +44 -0
  33. data/config/initializers/refinery/pages.rb +52 -0
  34. data/config/initializers/refinery/resources.rb +26 -0
  35. data/config/locales/en.yml +36 -2
  36. data/config/locales/es.yml +36 -5
  37. data/config/locales/fr.yml +34 -4
  38. data/config/locales/nb.yml +36 -4
  39. data/config/locales/nl.yml +36 -4
  40. data/config/routes.rb +24 -2
  41. data/db/migrate/1_create_calendar_events.rb +34 -0
  42. data/db/migrate/2_create_calendar_venues.rb +29 -0
  43. data/db/seeds.rb +5 -2
  44. data/lib/generators/refinery/calendar_generator.rb +3 -13
  45. data/lib/refinery/{calendar.rb → events.rb} +2 -9
  46. data/lib/refinery/{calendar → events}/engine.rb +3 -3
  47. data/lib/refinery/venues.rb +21 -0
  48. data/lib/refinery/venues/engine.rb +14 -0
  49. data/lib/refinerycms-calendar.rb +2 -1
  50. data/readme.md +11 -7
  51. metadata +52 -14
  52. data/app/models/refinery/calendar/core_calendar.rb +0 -36
  53. data/lib/refinery/calendar/configuration.rb +0 -7
  54. data/lib/refinery/calendar/version.rb +0 -17
  55. data/lib/refinery/engine/multi_parameter_assignment.rb +0 -6
@@ -2,40 +2,16 @@ module Refinery
2
2
  module Calendar
3
3
  module Admin
4
4
  class EventsController < ::Refinery::AdminController
5
- before_filter :init_calendar
5
+ before_filter :find_venues, :except => [:index, :destroy]
6
6
 
7
- def index
8
- @events = @calendar.entries
9
- end
10
-
11
- def new
12
- @event = @calendar.new_event
13
- end
14
-
15
- def create
16
- @event = @calendar.new_event(params[:event])
17
- if @event.publish
18
- redirect_to refinery.calendar_admin_events_path
19
- else
20
- render :new
21
- end
22
- end
23
-
24
- def self.searchable?
25
- false
26
- end
27
-
28
- def self.pageable?
29
- false
30
- end
31
-
32
- def self.sortable?
33
- false
34
- end
7
+ crudify :'refinery/calendar/event',
8
+ :xhr_paging => true,
9
+ :sortable => false,
10
+ :order => "'from' DESC"
35
11
 
36
12
  private
37
- def init_calendar
38
- @calendar = REFINERY_CALENDAR
13
+ def find_venues
14
+ @venues = Venue.order('name')
39
15
  end
40
16
  end
41
17
  end
@@ -0,0 +1,14 @@
1
+ module Refinery
2
+ module Calendar
3
+ module Admin
4
+ class VenuesController < ::Refinery::AdminController
5
+
6
+ crudify :'refinery/calendar/venue',
7
+ :title_attribute => 'name',
8
+ :xhr_paging => true,
9
+ :sortable => false,
10
+ :order => 'created_at DESC'
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,11 +1,9 @@
1
1
  module Refinery
2
2
  module Calendar
3
3
  class EventsController < ::ApplicationController
4
-
5
- before_filter :find_all_events
6
- before_filter :find_page
7
-
8
4
  def index
5
+ @events = Event.upcoming.order('refinery_calendar_events.from DESC')
6
+
9
7
  # you can use meta fields from your model instead (e.g. browser_title)
10
8
  # by swapping @page for @event in the line below:
11
9
  present(@page)
@@ -19,14 +17,14 @@ module Refinery
19
17
  present(@page)
20
18
  end
21
19
 
22
- protected
23
-
24
- def find_all_events
25
- @events = Event.order('position ASC')
20
+ def archive
21
+ @events = Event.archive.order('refinery_calendar_events.from DESC')
22
+ render :template => 'refinery/calendar/events/index'
26
23
  end
27
24
 
25
+ protected
28
26
  def find_page
29
- @page = ::Refinery::Page.where(:link_url => "/events").first
27
+ @page = ::Refinery::Page.where(:link_url => "/connect/events").first
30
28
  end
31
29
 
32
30
  end
@@ -0,0 +1,6 @@
1
+ module Refinery
2
+ module Calendar
3
+ class VenuesController < ::ApplicationController
4
+ end
5
+ end
6
+ end
@@ -1,50 +1,35 @@
1
1
  module Refinery
2
2
  module Calendar
3
- class Event
4
- extend ActiveModel::Naming
5
- include ActiveModel::Conversion
6
- include ActiveModel::Validations
3
+ class Event < Refinery::Core::BaseModel
4
+ extend FriendlyId
7
5
 
8
- attr_accessor :title, :starts, :ends, :body, :calendar
6
+ friendly_id :title, :use => :slugged
9
7
 
10
- validates :title, :presence => true
8
+ belongs_to :venue
11
9
 
12
- def initialize(attrs={})
13
- setup_parameters(attrs).each do |k,v| send("#{k}=",v) end
14
- end
10
+ validates :title, :presence => true, :uniqueness => true
15
11
 
16
- def publish
17
- return false unless valid?
18
- calendar.add_entry(self)
19
- end
12
+ attr_accessible :title, :from, :to, :registration_link,
13
+ :venue_id, :excerpt, :description,
14
+ :featured, :position
20
15
 
21
- def persisted?
22
- false
23
- end
16
+ delegate :name, :address,
17
+ :to => :venue,
18
+ :prefix => true,
19
+ :allow_nil => true
20
+
21
+ class << self
22
+ def upcoming
23
+ where('refinery_calendar_events.from >= ?', Time.now)
24
+ end
25
+
26
+ def featured
27
+ where(:featured => true)
28
+ end
24
29
 
25
- def setup_parameters(attrs={})
26
- i = 0
27
- datetime = ''
28
- new_params = {}
29
- attrs.each do |key, value|
30
- if (k = key.to_s.match(/^(starts|ends)\(/) { |m| m[1] })
31
- sep = '-'
32
- sep = 'T' if i == 2
33
- sep = ':' if i > 2
34
- datetime += "#{value}#{sep}"
35
- i += 1
36
- else
37
- new_params[key] = value
38
- end
39
-
40
- if datetime.split(':').length == 2
41
- datetime += Time.new.zone
42
- new_params[k] = DateTime.parse(datetime.gsub(/:$/,''))
43
- datetime = ''
44
- i = 0
45
- end
30
+ def archive
31
+ where('refinery_calendar_events.from < ?', Time.now)
46
32
  end
47
- return new_params
48
33
  end
49
34
  end
50
35
  end
@@ -0,0 +1,9 @@
1
+ module Refinery
2
+ module Calendar
3
+ class Venue < Refinery::Core::BaseModel
4
+ has_many :events
5
+ validates :name, :presence => true, :uniqueness => true
6
+ attr_accessible :name, :address, :url, :phone, :position
7
+ end
8
+ end
9
+ end
@@ -8,6 +8,7 @@
8
8
  <%= link_to t('.create_new'), refinery.new_calendar_admin_event_path,
9
9
  :class => "add_icon" %>
10
10
  </li>
11
+ <%= render 'refinery/calendar/admin/shared/links' %>
11
12
  <% if !searching? && ::Refinery::Calendar::Admin::EventsController.sortable? && ::Refinery::Calendar::Event.any? %>
12
13
  <li>
13
14
  <%= link_to t('.reorder', :what => "Events"),
@@ -1,10 +1,20 @@
1
1
  <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(event) -%>">
2
2
  <span class='title'>
3
3
  <%= event.title %>
4
- </span>
5
- <span class='preview'>
6
- <%= event.starts.strftime('%b %e, %Y %I:%M%p') %> to <%= event.ends.strftime('%b %e, %Y %I:%M%p') %>
4
+
7
5
  </span>
8
6
  <span class='actions'>
7
+
8
+ <%= link_to refinery_icon_tag("application_go.png"), refinery.calendar_event_path(event),
9
+ :title => t('.view_live_html'),
10
+ :target => "_blank" %>
11
+
12
+ <%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_calendar_admin_event_path(event),
13
+ :title => t('.edit') %>
14
+ <%= link_to refinery_icon_tag("delete.png"), refinery.calendar_admin_event_path(event),
15
+ :class => "cancel confirm-delete",
16
+ :title => t('.delete'),
17
+ :confirm => t('message', :scope => 'refinery.admin.delete', :title => event.title),
18
+ :method => :delete %>
9
19
  </span>
10
20
  </li>
@@ -9,19 +9,56 @@
9
9
  <%= f.text_field :title, :class => 'larger widest' -%>
10
10
  </div>
11
11
 
12
+ <div class="field">
13
+ <p>
14
+ <%= f.check_box :featured %>
15
+ <%= f.label :featured, :class => 'stripped' %>
16
+ </p>
17
+ </div>
18
+
19
+ <div class='field'>
20
+ <%= f.label :from -%>
21
+ <%= f.text_field :from, :class => 'datetime_range' -%>
22
+ </div>
23
+
24
+ <div class='field'>
25
+ <%= f.label :to -%>
26
+ <%= f.text_field :to, :class => 'datetime_range' -%>
27
+ </div>
28
+
12
29
  <div class='field'>
13
- <%= f.label :body -%>
14
- <%= f.text_area :body, :class => 'wymeditor widest' -%>
30
+ <%= f.label :registration_link -%>
31
+ <%= f.text_field :registration_link, :class => 'larger' -%>
15
32
  </div>
16
33
 
17
34
  <div class='field'>
18
- <%= f.label :starts %>
19
- <%= f.datetime_select :starts %>
35
+ <%= f.label :venue_id, 'Venue' %>
36
+ <%= f.collection_select :venue_id, @venues, :id, :name, { :include_blank => 'None' }, :class => 'chzn-select', :'data-placeholder' => 'Search Venues', :style => 'width: 300px;' %>
20
37
  </div>
21
38
 
22
39
  <div class='field'>
23
- <%= f.label :ends %>
24
- <%= f.datetime_select :ends %>
40
+ <%= f.label :excerpt -%>
41
+ <%= f.text_area :excerpt, :size => '65x5' -%>
42
+ </div>
43
+
44
+ <div class='field'>
45
+ <div id='page-tabs' class='clearfix ui-tabs ui-widget ui-widget-content ui-corner-all'>
46
+ <ul id='page_parts'>
47
+ <% [:description].each_with_index do |part, part_index| %>
48
+ <li class='ui-state-default<%= ' ui-state-active' if part_index == 0 %>'>
49
+ <%= link_to t("#{part}", :scope => "activerecord.attributes.refinery/calendar/event", :default => part.to_s.titleize), "##{part}" %>
50
+ </li>
51
+ <% end %>
52
+ </ul>
53
+ <div id='page_part_editors'>
54
+ <% [:description].each do |part| %>
55
+ <div class='page_part' id='<%= part %>'>
56
+ <%= f.text_area part, :rows => 20, :class => 'wymeditor widest' -%>
57
+ </div>
58
+ <% end %>
59
+ </div>
60
+ </div>
61
+
25
62
  </div>
26
63
 
27
64
  <%= render '/refinery/admin/form_actions', :f => f,
@@ -29,3 +66,20 @@
29
66
  :delete_title => t('delete', :scope => 'refinery.events.admin.events.event'),
30
67
  :delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @event.title) %>
31
68
  <% end -%>
69
+ <% content_for :stylesheets do %>
70
+ <%= stylesheet_link_tag 'chosen' %>
71
+ <% end %>
72
+
73
+ <% content_for :javascripts do %>
74
+ <%= javascript_include_tag 'chosen.jquery.min' %>
75
+ <script>
76
+ $(document).ready(function(){
77
+ page_options.init(false, '', '');
78
+
79
+ $('#event_venue_id').chosen({
80
+ no_results_text: "No results matched",
81
+ allow_single_deselect: true
82
+ });
83
+ });
84
+ </script>
85
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  <section id='records'>
2
- <h2><%= @calendar.title %></h2>
2
+ <h2>Calendar: Events</h2>
3
3
  <%= render 'records' %>
4
4
  </section>
5
5
  <aside id='actions'>
@@ -0,0 +1,8 @@
1
+ <li>
2
+ <%= link_to t('.manage_events'), refinery.calendar_admin_events_path,
3
+ :class => "manage_icon" %>
4
+ </li>
5
+ <li>
6
+ <%= link_to t('.manage_venues'), refinery.calendar_admin_venues_path,
7
+ :class => "manage_icon" %>
8
+ </li>
@@ -0,0 +1,26 @@
1
+ <ul>
2
+ <% if ::Refinery::Calendar::Admin::VenuesController.searchable? %>
3
+ <li>
4
+ <%= render '/refinery/admin/search', :url => refinery.calendar_admin_venues_path %>
5
+ </li>
6
+ <% end %>
7
+ <li>
8
+ <%= link_to t('.create_new'), refinery.new_calendar_admin_venue_path,
9
+ :class => "add_icon" %>
10
+ </li>
11
+ <%= render 'refinery/calendar/admin/shared/links' %>
12
+ <% if !searching? && ::Refinery::Calendar::Admin::VenuesController.sortable? && ::Refinery::Calendar::Venue.any? %>
13
+ <li>
14
+ <%= link_to t('.reorder', :what => "Venues"),
15
+ refinery.calendar_admin_venues_path,
16
+ :id => "reorder_action",
17
+ :class => "reorder_icon" %>
18
+
19
+ <%= link_to t('.reorder_done', :what => "Venues"),
20
+ refinery.calendar_admin_venues_path,
21
+ :id => "reorder_action_done",
22
+ :style => "display: none;",
23
+ :class => "reorder_icon" %>
24
+ </li>
25
+ <% end %>
26
+ </ul>
@@ -0,0 +1,35 @@
1
+ <%= form_for [refinery, :calendar_admin, @venue] do |f| -%>
2
+ <%= render '/refinery/admin/error_messages',
3
+ :object => @venue,
4
+ :include_object_name => true %>
5
+
6
+
7
+ <div class='field'>
8
+ <%= f.label :name -%>
9
+ <%= f.text_field :name, :class => 'larger widest' -%>
10
+
11
+ </div>
12
+
13
+ <div class='field'>
14
+ <%= f.label :address -%>
15
+ <%= f.text_field :address, :class => 'larger' -%>
16
+
17
+ </div>
18
+
19
+ <div class='field'>
20
+ <%= f.label :url -%>
21
+ <%= f.text_field :url, :class => 'larger' -%>
22
+
23
+ </div>
24
+
25
+ <div class='field'>
26
+ <%= f.label :phone -%>
27
+ <%= f.text_field :phone -%>
28
+
29
+ </div>
30
+
31
+ <%= render '/refinery/admin/form_actions', :f => f,
32
+ :continue_editing => false,
33
+ :delete_title => t('delete', :scope => 'refinery.venues.admin.venues.venue'),
34
+ :delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @venue.name) %>
35
+ <% end -%>
@@ -0,0 +1,18 @@
1
+ <% if searching? %>
2
+ <h2><%= t('results_for', :scope => 'refinery.admin.search', :query => params[:search]) %></h2>
3
+ <% end %>
4
+ <div class='pagination_container'>
5
+ <% if @venues.any? %>
6
+ <%= render 'venues' %>
7
+ <% else %>
8
+ <p>
9
+ <% unless searching? %>
10
+ <strong>
11
+ <%= t('.no_items_yet') %>
12
+ </strong>
13
+ <% else %>
14
+ <%= t('no_results', :scope => 'refinery.admin.search') %>
15
+ <% end %>
16
+ </p>
17
+ <% end %>
18
+ </div>
@@ -0,0 +1,5 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'venue', :collection => @venues %>
3
+ </ul>
4
+ <%= render '/refinery/admin/sortable_list',
5
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true %>
@@ -0,0 +1,20 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(venue) -%>">
2
+ <span class='title'>
3
+ <%= venue.name %>
4
+
5
+ </span>
6
+ <span class='actions'>
7
+
8
+ <%= link_to refinery_icon_tag("application_go.png"), refinery.calendar_venue_path(venue),
9
+ :title => t('.view_live_html'),
10
+ :target => "_blank" %>
11
+
12
+ <%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_calendar_admin_venue_path(venue),
13
+ :title => t('.edit') %>
14
+ <%= link_to refinery_icon_tag("delete.png"), refinery.calendar_admin_venue_path(venue),
15
+ :class => "cancel confirm-delete",
16
+ :title => t('.delete'),
17
+ :confirm => t('message', :scope => 'refinery.admin.delete', :title => venue.name),
18
+ :method => :delete %>
19
+ </span>
20
+ </li>
@@ -0,0 +1,2 @@
1
+ <%= will_paginate @venues if Refinery::Calendar::Admin::VenuesController.pageable? %>
2
+ <%= render 'sortable_list' %>
@@ -0,0 +1 @@
1
+ <%= render 'form' %>
@@ -0,0 +1,8 @@
1
+ <section id='records'>
2
+ <h2>Calendar: Venues</h2>
3
+ <%= render 'records' %>
4
+ </section>
5
+ <aside id='actions'>
6
+ <%= render 'actions' %>
7
+ </aside>
8
+ <%= render '/refinery/admin/make_sortable', :tree => false if !searching? and ::Refinery::Calendar::Admin::VenuesController.sortable? and ::Refinery::Calendar::Venue.count > 1 %>