event_calendar_engine 0.1.11 → 0.2.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/Gemfile.lock +39 -35
- data/VERSION +1 -1
- data/app/controllers/event_revisions_controller.rb +1 -1
- data/app/controllers/events_controller.rb +21 -36
- data/app/controllers/links_controller.rb +62 -0
- data/app/helpers/event_calendar/application_helper.rb +73 -4
- data/app/models/event.rb +21 -43
- data/app/models/event_instance_methods.rb +40 -9
- data/app/models/link.rb +19 -0
- data/app/views/event_revisions/_list_group.html.erb +1 -1
- data/app/views/events/_details.html.erb +2 -1
- data/app/views/events/_event.html.erb +2 -0
- data/app/views/events/_event_details.html.erb +22 -17
- data/app/views/events/_form.html.erb +47 -3
- data/app/views/events/_list_group.html.erb +1 -1
- data/app/views/events/_one_day_list_event.html.erb +1 -1
- data/app/views/events/edit.html.erb +1 -1
- data/app/views/links/_form.html.erb +18 -0
- data/app/views/links/_link.html.erb +6 -0
- data/app/views/links/_links.html.erb +6 -0
- data/app/views/links/create.js.rjs +14 -0
- data/app/views/links/edit.html.erb +3 -0
- data/app/views/links/new.html.erb +3 -0
- data/app/views/links/show.html.erb +3 -0
- data/app/views/links/update.js.rjs +15 -0
- data/config/routes.rb +1 -56
- data/db/migrate/20110204223256_add_presenters_facilitators_to_events.rb +11 -0
- data/db/migrate/20110206000427_create_event_calendar_links.rb +23 -0
- data/db/schema.rb +18 -1
- data/public/javascripts/event_calendar/event_calendar.js +7 -0
- data/public/javascripts/event_calendar/event_calendar_behaviors.js +92 -23
- data/public/stylesheets/event_calendar/blueprint/screen.css +1 -0
- data/spec/controllers/events_controller_spec.rb +4 -2
- data/spec/controllers/links_controller_spec.rb +140 -0
- data/spec/fixtures/event_calendar_events.yml +12 -2
- data/spec/fixtures/event_calendar_events_links.yml +3 -0
- data/spec/fixtures/event_calendar_links.yml +4 -0
- data/spec/helpers/event_calendar/application_helper_spec.rb +4 -4
- data/spec/models/event_instance_methods_spec.rb +58 -0
- data/spec/models/event_revision_spec.rb +11 -10
- data/spec/models/event_spec.rb +31 -65
- data/spec/models/link_spec.rb +31 -0
- data/spec/spec_helpers/helpers.rb +15 -0
- metadata +29 -6
- data/app/views/events/_times.html.erb +0 -5
data/Gemfile.lock
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
GIT
|
2
2
|
remote: git://github.com/inertialbit/acts_as_revisable.git
|
3
|
-
revision:
|
3
|
+
revision: ac928ff786fbf0deb415ee9d8e7034b4d4b031ac
|
4
4
|
branch: rails3
|
5
5
|
specs:
|
6
6
|
acts_as_revisable (1.1.2)
|
@@ -39,9 +39,9 @@ GEM
|
|
39
39
|
acts_as_fu (0.0.7.2)
|
40
40
|
activerecord
|
41
41
|
sqlite3-ruby
|
42
|
-
arel (2.0.
|
42
|
+
arel (2.0.7)
|
43
43
|
builder (2.1.2)
|
44
|
-
capybara (0.4.
|
44
|
+
capybara (0.4.1.1)
|
45
45
|
celerity (>= 0.7.9)
|
46
46
|
culerity (>= 0.2.4)
|
47
47
|
mime-types (>= 1.16)
|
@@ -49,19 +49,19 @@ GEM
|
|
49
49
|
rack (>= 1.0.0)
|
50
50
|
rack-test (>= 0.5.4)
|
51
51
|
selenium-webdriver (>= 0.0.27)
|
52
|
-
xpath (~> 0.1.
|
53
|
-
celerity (0.8.
|
54
|
-
childprocess (0.1.
|
52
|
+
xpath (~> 0.1.3)
|
53
|
+
celerity (0.8.7)
|
54
|
+
childprocess (0.1.6)
|
55
55
|
ffi (~> 0.6.3)
|
56
|
-
cucumber (0.
|
57
|
-
builder (
|
56
|
+
cucumber (0.10.0)
|
57
|
+
builder (>= 2.1.2)
|
58
58
|
diff-lcs (~> 1.1.2)
|
59
|
-
gherkin (~> 2.2
|
59
|
+
gherkin (~> 2.3.2)
|
60
60
|
json (~> 1.4.6)
|
61
61
|
term-ansicolor (~> 1.0.5)
|
62
62
|
cucumber-rails (0.3.2)
|
63
63
|
cucumber (>= 0.8.0)
|
64
|
-
culerity (0.2.
|
64
|
+
culerity (0.2.15)
|
65
65
|
diff-lcs (1.1.2)
|
66
66
|
engineer (0.2.3)
|
67
67
|
jeweler (>= 1.4.0)
|
@@ -69,24 +69,23 @@ GEM
|
|
69
69
|
abstract (>= 1.0.0)
|
70
70
|
ffi (0.6.3)
|
71
71
|
rake (>= 0.8.7)
|
72
|
-
formtastic (1.2.
|
72
|
+
formtastic (1.2.3)
|
73
73
|
actionpack (>= 2.3.7)
|
74
74
|
activesupport (>= 2.3.7)
|
75
|
-
i18n (
|
76
|
-
gherkin (2.
|
75
|
+
i18n (~> 0.4)
|
76
|
+
gherkin (2.3.3)
|
77
77
|
json (~> 1.4.6)
|
78
|
-
term-ansicolor (~> 1.0.5)
|
79
78
|
git (1.2.5)
|
80
|
-
i18n (0.
|
81
|
-
jeweler (1.5.
|
79
|
+
i18n (0.5.0)
|
80
|
+
jeweler (1.5.2)
|
82
81
|
bundler (~> 1.0.0)
|
83
82
|
git (>= 1.2.5)
|
84
83
|
rake
|
85
84
|
json (1.4.6)
|
86
|
-
json_pure (1.
|
87
|
-
mail (2.2.
|
85
|
+
json_pure (1.5.1)
|
86
|
+
mail (2.2.15)
|
88
87
|
activesupport (>= 2.3.6)
|
89
|
-
i18n (
|
88
|
+
i18n (>= 0.4.0)
|
90
89
|
mime-types (~> 1.16)
|
91
90
|
treetop (~> 1.4.8)
|
92
91
|
mime-types (1.16)
|
@@ -98,7 +97,7 @@ GEM
|
|
98
97
|
rack (1.2.1)
|
99
98
|
rack-mount (0.6.13)
|
100
99
|
rack (>= 1.0.0)
|
101
|
-
rack-test (0.5.
|
100
|
+
rack-test (0.5.7)
|
102
101
|
rack (>= 1.0)
|
103
102
|
rails (3.0.3)
|
104
103
|
actionmailer (= 3.0.3)
|
@@ -115,31 +114,36 @@ GEM
|
|
115
114
|
thor (~> 0.14.4)
|
116
115
|
rake (0.8.7)
|
117
116
|
rcov (0.9.9)
|
118
|
-
rdiscount (1.6.
|
119
|
-
rspec (2.
|
120
|
-
rspec-core (~> 2.
|
121
|
-
rspec-expectations (~> 2.
|
122
|
-
rspec-mocks (~> 2.
|
123
|
-
rspec-core (2.
|
124
|
-
rspec-expectations (2.
|
117
|
+
rdiscount (1.6.8)
|
118
|
+
rspec (2.5.0)
|
119
|
+
rspec-core (~> 2.5.0)
|
120
|
+
rspec-expectations (~> 2.5.0)
|
121
|
+
rspec-mocks (~> 2.5.0)
|
122
|
+
rspec-core (2.5.0)
|
123
|
+
rspec-expectations (2.5.0)
|
125
124
|
diff-lcs (~> 1.1.2)
|
126
|
-
rspec-mocks (2.
|
127
|
-
rspec-rails (2.
|
128
|
-
|
125
|
+
rspec-mocks (2.5.0)
|
126
|
+
rspec-rails (2.5.0)
|
127
|
+
actionpack (~> 3.0)
|
128
|
+
activesupport (~> 3.0)
|
129
|
+
railties (~> 3.0)
|
130
|
+
rspec (~> 2.5.0)
|
129
131
|
rubyzip (0.9.4)
|
130
|
-
selenium-webdriver (0.1.
|
131
|
-
childprocess (
|
132
|
+
selenium-webdriver (0.1.2)
|
133
|
+
childprocess (~> 0.1.5)
|
132
134
|
ffi (~> 0.6.3)
|
133
135
|
json_pure
|
134
136
|
rubyzip
|
135
|
-
sqlite3
|
137
|
+
sqlite3 (1.3.3)
|
138
|
+
sqlite3-ruby (1.3.3)
|
139
|
+
sqlite3 (>= 1.3.3)
|
136
140
|
term-ansicolor (1.0.5)
|
137
141
|
thor (0.14.6)
|
138
142
|
treetop (1.4.9)
|
139
143
|
polyglot (>= 0.3.1)
|
140
|
-
tzinfo (0.3.
|
144
|
+
tzinfo (0.3.24)
|
141
145
|
will_paginate (3.0.pre2)
|
142
|
-
xpath (0.1.
|
146
|
+
xpath (0.1.3)
|
143
147
|
nokogiri (~> 1.3)
|
144
148
|
|
145
149
|
PLATFORMS
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -15,7 +15,7 @@ class EventRevisionsController < EventCalendar::ApplicationController
|
|
15
15
|
|
16
16
|
def restore
|
17
17
|
@event_revision = EventRevision.find(params[:id])
|
18
|
-
if @event_revision.restore
|
18
|
+
if @event_revision.restore
|
19
19
|
flash[:notice] = "Event <em>#{@event_revision.name}</em> restored.".html_safe
|
20
20
|
redirect_to(event_path(@event_revision))
|
21
21
|
else
|
@@ -30,12 +30,21 @@ class EventsController < EventCalendar::ApplicationController
|
|
30
30
|
start_min = params[:event].delete :"start_time(5i)"
|
31
31
|
end_hour = params[:event].delete :"end_time(4i)"
|
32
32
|
end_min = params[:event].delete :"end_time(5i)"
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
if params[:event][:start_date].present?
|
34
|
+
start_date = Date.parse(params[:event][:start_date])
|
35
|
+
params[:event][:start_on] = Time.utc(start_date.year, start_date.month, start_date.day, start_hour, start_min)
|
36
|
+
if params[:event][:end_date].present?
|
37
|
+
end_date = Date.parse(params[:event][:end_date])
|
38
|
+
else
|
39
|
+
end_date = start_date
|
40
|
+
end
|
41
|
+
params[:event][:end_on] = Time.utc(end_date.year, end_date.month, end_date.day, end_hour, end_min)
|
42
|
+
params[:event][:start_time] = params[:event][:start_on]
|
43
|
+
params[:event][:end_time] = params[:event][:end_on]
|
44
|
+
else
|
45
|
+
params[:event][:start_time] = ''
|
46
|
+
params[:event][:end_time] = ''
|
47
|
+
end
|
39
48
|
end
|
40
49
|
protected
|
41
50
|
public
|
@@ -46,8 +55,8 @@ class EventsController < EventCalendar::ApplicationController
|
|
46
55
|
if params[:start] && params[:end]
|
47
56
|
@events = Event.between(Time.at(params[:start].to_i), Time.at(params[:end].to_i))
|
48
57
|
else
|
49
|
-
@past_events = Event.past.order("start_on
|
50
|
-
@current_events = Event.current.order("start_on
|
58
|
+
@past_events = Event.past.order("start_on ASC")
|
59
|
+
@current_events = Event.current.order("start_on ASC")
|
51
60
|
end
|
52
61
|
|
53
62
|
respond_to do |format|
|
@@ -68,6 +77,7 @@ class EventsController < EventCalendar::ApplicationController
|
|
68
77
|
def show
|
69
78
|
# @event = Event.find(params[:id], :include => :file_attachments)
|
70
79
|
@event = Event.find(params[:id])
|
80
|
+
@link = @event.links.build
|
71
81
|
|
72
82
|
respond_to do |format|
|
73
83
|
format.html # show.html.erb
|
@@ -79,7 +89,7 @@ class EventsController < EventCalendar::ApplicationController
|
|
79
89
|
# GET /events/new.xml
|
80
90
|
def new
|
81
91
|
@event = Event.new
|
82
|
-
|
92
|
+
@event.start_time = Time.local(Date.current.year, Date.current.month, Date.current.day, 06, 00)
|
83
93
|
respond_to do |format|
|
84
94
|
format.html # new.html.erb
|
85
95
|
format.xml { render :xml => @event }
|
@@ -103,6 +113,7 @@ class EventsController < EventCalendar::ApplicationController
|
|
103
113
|
format.html { redirect_to(event_path(@event)) }
|
104
114
|
format.xml { render :xml => @event, :status => :created, :location => @event }
|
105
115
|
else
|
116
|
+
flash.now[:notice] = @event.errors.full_messages
|
106
117
|
format.html { render :action => "new" }
|
107
118
|
format.xml { render :xml => @event.errors, :status => :unprocessable_entity }
|
108
119
|
end
|
@@ -115,12 +126,12 @@ class EventsController < EventCalendar::ApplicationController
|
|
115
126
|
@event = Event.find(params[:id])
|
116
127
|
|
117
128
|
respond_to do |format|
|
118
|
-
# if @event.update_attributes(params[:event].merge(:modified_by_user => current_user))
|
119
129
|
if @event.update_attributes(params[:event])
|
120
130
|
flash[:notice] = 'Event was successfully updated.'
|
121
131
|
format.html { redirect_to(@event) }
|
122
132
|
format.xml { head :ok }
|
123
133
|
else
|
134
|
+
flash.now[:notice] = @event.errors.full_messages
|
124
135
|
format.html { render :action => "edit" }
|
125
136
|
format.xml { render :xml => @event.errors, :status => :unprocessable_entity }
|
126
137
|
end
|
@@ -138,30 +149,4 @@ class EventsController < EventCalendar::ApplicationController
|
|
138
149
|
format.xml { head :ok }
|
139
150
|
end
|
140
151
|
end
|
141
|
-
|
142
|
-
# def drop_contact
|
143
|
-
# @event = Event.find(params[:id])
|
144
|
-
# if @event.drop_attendees(params[:contact_ids] || params[:contact_id])
|
145
|
-
# flash[:notice] = "Contact(s) removed from #{@event.name} roster."
|
146
|
-
# else
|
147
|
-
# flash[:warning] = "Failed to remove contact(s) from #{@event.name} roster. (#{@event.errors.full_messages.join('; ')}"
|
148
|
-
# end
|
149
|
-
# redirect_to @event
|
150
|
-
# end
|
151
|
-
|
152
|
-
# def add_attendees
|
153
|
-
# @event = Event.find(params[:id])
|
154
|
-
# @contacts_not_in_group = Contact.find(:all, :order => 'last_name, first_name',
|
155
|
-
# :conditions => 'last_name IS NOT NULL AND last_name != ""') - @event.contacts
|
156
|
-
# end
|
157
|
-
|
158
|
-
# def add_contacts
|
159
|
-
# @event = Event.find(params[:id])
|
160
|
-
# if @event.add_attendees(params[:contact_ids])
|
161
|
-
# flash[:notice] = "Contacts(s) added to #{@event.name}."
|
162
|
-
# else
|
163
|
-
# flash[:warning] = "Failed to add contact(s) to #{@event.name}. (#{@event.errors.full_messages.join('; ')}"
|
164
|
-
# end
|
165
|
-
# redirect_to @event
|
166
|
-
# end
|
167
152
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class LinksController < EventCalendar::ApplicationController
|
2
|
+
private
|
3
|
+
def event
|
4
|
+
@event ||= Event.find(params[:event_id])
|
5
|
+
end
|
6
|
+
def link
|
7
|
+
@link ||= if params[:id].present?
|
8
|
+
Link.find(params[:id])
|
9
|
+
else
|
10
|
+
event.links.build(params[:link])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
def load_resources
|
14
|
+
event
|
15
|
+
link
|
16
|
+
end
|
17
|
+
def redirect_to_event
|
18
|
+
redirect_to event_path params[:event_id]
|
19
|
+
end
|
20
|
+
def respond(&block)
|
21
|
+
respond_to do |format|
|
22
|
+
format.html{ yield }
|
23
|
+
format.js
|
24
|
+
end
|
25
|
+
end
|
26
|
+
protected
|
27
|
+
public
|
28
|
+
def new
|
29
|
+
load_resources
|
30
|
+
end
|
31
|
+
def show
|
32
|
+
load_resources
|
33
|
+
end
|
34
|
+
def edit
|
35
|
+
load_resources
|
36
|
+
end
|
37
|
+
def update
|
38
|
+
if link.update_attributes(params[:link])
|
39
|
+
flash[:notice] = "Link successfully updated." unless request.xhr?
|
40
|
+
event if request.xhr?
|
41
|
+
respond{ redirect_to_event }
|
42
|
+
else
|
43
|
+
event
|
44
|
+
respond{ render :edit and return }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
def create
|
48
|
+
load_resources
|
49
|
+
begin
|
50
|
+
event.save!(:without_revision => true)
|
51
|
+
flash[:notice] = "Link successfully created." unless request.xhr?
|
52
|
+
respond{ redirect_to_event }
|
53
|
+
rescue ActiveRecord::RecordInvalid
|
54
|
+
respond{ render 'events/show' and return }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
def destroy
|
58
|
+
link.destroy
|
59
|
+
flash[:notice] = "Link successfully deleted."
|
60
|
+
redirect_to_event
|
61
|
+
end
|
62
|
+
end
|
@@ -33,21 +33,70 @@ module EventCalendar::ApplicationHelper
|
|
33
33
|
ActiveSupport::TimeZone.us_zones.map(&:name).each do |us_zone|
|
34
34
|
next unless us_zone =~ /Pacific|Mountain|Central|Eastern/
|
35
35
|
key = time.in_time_zone(us_zone).strftime("%Z")
|
36
|
+
key = timezone_in_words(key.strip)
|
36
37
|
# out[key] = time.in_time_zone(us_zone).strftime(format)
|
37
38
|
out << [key, time.in_time_zone(us_zone).strftime(TIME_BASE)]
|
38
39
|
end
|
39
40
|
out.reverse
|
40
41
|
end
|
42
|
+
|
43
|
+
def timezone_in_words(zone)
|
44
|
+
pac_regex = /^P(S|D)T$/
|
45
|
+
mnt_regex = /^M(S|D)T$/
|
46
|
+
ctr_regex = /^C(S|D)T$/
|
47
|
+
est_regex = /^E(S|D)T$/
|
48
|
+
case zone
|
49
|
+
when pac_regex
|
50
|
+
zone.gsub(pac_regex, 'Pacific')
|
51
|
+
when mnt_regex
|
52
|
+
zone.gsub(mnt_regex, 'Mountain')
|
53
|
+
when ctr_regex
|
54
|
+
zone.gsub(ctr_regex, 'Central')
|
55
|
+
when est_regex
|
56
|
+
zone.gsub(est_regex, 'Eastern')
|
57
|
+
else
|
58
|
+
zone
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def event_times(event)
|
63
|
+
t = []
|
64
|
+
event_times = times_with_zones(event)
|
65
|
+
event_times.first.each_with_index do |z_t, i|
|
66
|
+
t << "#{z_t.last} - #{event_times.last[i].last} " + content_tag(:em, z_t.first)
|
67
|
+
end
|
68
|
+
t.join(" / ").html_safe
|
69
|
+
end
|
41
70
|
|
42
71
|
def times_with_zones(event)
|
43
|
-
begin
|
44
72
|
[
|
45
73
|
time_with_zones(event.start_time),
|
46
74
|
time_with_zones(event.end_time)
|
47
75
|
]
|
48
|
-
|
49
|
-
|
50
|
-
|
76
|
+
end
|
77
|
+
|
78
|
+
def hour_options
|
79
|
+
[
|
80
|
+
['6 AM','6'],
|
81
|
+
['7 AM','7'],
|
82
|
+
['8 AM','8'],
|
83
|
+
['9 AM','9'],
|
84
|
+
['10 AM','10'],
|
85
|
+
['11 AM','11'],
|
86
|
+
['12 PM','12'],
|
87
|
+
['1 PM','13'],
|
88
|
+
['2 PM','14'],
|
89
|
+
['3 PM','15'],
|
90
|
+
['4 PM','16'],
|
91
|
+
['5 PM','17'],
|
92
|
+
['6 PM','18'],
|
93
|
+
['7 PM','19'],
|
94
|
+
['8 PM','20']
|
95
|
+
]
|
96
|
+
end
|
97
|
+
|
98
|
+
def minute_options
|
99
|
+
['00', '15', '30', '45']
|
51
100
|
end
|
52
101
|
|
53
102
|
def link_to_events(wrapper_options={}, link_options={})
|
@@ -95,6 +144,26 @@ module EventCalendar::ApplicationHelper
|
|
95
144
|
:link_text => "Edit <em>#{h(event.name)}</em>".html_safe
|
96
145
|
}.merge!(link_options))
|
97
146
|
end
|
147
|
+
|
148
|
+
def link_to_edit_link(event, link, wrapper_options={}, link_options={})
|
149
|
+
return unless has_authorization?(:update, link)
|
150
|
+
link_wrapper(edit_event_link_path(event, link), {
|
151
|
+
:no_wrapper => true
|
152
|
+
}.merge!(wrapper_options), {
|
153
|
+
:link_text => "edit"
|
154
|
+
}.merge!(link_options))
|
155
|
+
end
|
156
|
+
|
157
|
+
def link_to_delete_link(event, link, wrapper_options={}, link_options={})
|
158
|
+
return unless has_authorization?(:delete, link)
|
159
|
+
link_wrapper(event_link_path(event, link), {
|
160
|
+
:no_wrapper => true
|
161
|
+
}.merge!(wrapper_options), {
|
162
|
+
:link_text => 'delete',
|
163
|
+
:confirm => "Are you sure you want to permanently delete the #{link.name} link?",
|
164
|
+
:method => "delete"
|
165
|
+
}.merge!(link_options))
|
166
|
+
end
|
98
167
|
|
99
168
|
def link_to_delete_event(event, wrapper_options={}, link_options={})
|
100
169
|
return unless has_authorization?(:delete, event)
|
data/app/models/event.rb
CHANGED
@@ -6,6 +6,7 @@ class Event < ActiveRecord::Base
|
|
6
6
|
include EventInstanceMethods
|
7
7
|
|
8
8
|
has_many :attendees
|
9
|
+
has_and_belongs_to_many :links, :join_table => 'event_calendar_events_links'
|
9
10
|
|
10
11
|
validates_presence_of :name, :event_type, :start_on
|
11
12
|
|
@@ -23,7 +24,16 @@ class Event < ActiveRecord::Base
|
|
23
24
|
|
24
25
|
validate :sane_dates
|
25
26
|
|
26
|
-
|
27
|
+
before_validation do
|
28
|
+
if one_day? && ((end_on.present? && start_on.present? && end_on <= start_on) ||
|
29
|
+
(end_on.blank? && start_on.present?))
|
30
|
+
unless changed_attributes.include?(:revisable_deleted_at)
|
31
|
+
self.end_on = start_on + 1.hour
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
before_save :adjust_to_utc_from_timezone
|
27
37
|
|
28
38
|
private
|
29
39
|
|
@@ -33,12 +43,19 @@ class Event < ActiveRecord::Base
|
|
33
43
|
end
|
34
44
|
end
|
35
45
|
|
36
|
-
def
|
37
|
-
|
46
|
+
def adjust_to_utc_from_timezone
|
47
|
+
return true if deleted?
|
48
|
+
tz_offset = start_on.in_time_zone(timezone).utc_offset
|
49
|
+
self.start_on = self.start_on - tz_offset
|
50
|
+
self.end_on = self.end_on - tz_offset
|
38
51
|
end
|
39
|
-
|
40
52
|
protected
|
41
53
|
public
|
54
|
+
|
55
|
+
def self.existing_event_types
|
56
|
+
select('DISTINCT event_type').map(&:event_type).reject { |ev| ev.blank? }.sort
|
57
|
+
end
|
58
|
+
|
42
59
|
def participants
|
43
60
|
return [] if attendees.count == 0
|
44
61
|
attendees.all.collect do |attendee|
|
@@ -46,46 +63,7 @@ class Event < ActiveRecord::Base
|
|
46
63
|
end
|
47
64
|
end
|
48
65
|
|
49
|
-
def self.existing_event_types
|
50
|
-
select('DISTINCT event_type').map(&:event_type).reject { |ev| ev.blank? }.sort
|
51
|
-
end
|
52
|
-
|
53
|
-
# def update_roster
|
54
|
-
# self.attendee_roster = attendees.collect{|a| a.contact_id}.join(',')
|
55
|
-
# end
|
56
|
-
|
57
|
-
# def drop_attendees(drop_contact_ids)
|
58
|
-
# drop_contact_ids = [*drop_contact_ids].compact.map(&:to_i)
|
59
|
-
# changeset! do |event|
|
60
|
-
# event.attendees.find(:all, {
|
61
|
-
# :select => 'id',
|
62
|
-
# :conditions => ["contact_id IN (?)", drop_contact_ids]
|
63
|
-
# }).each{|a| a.destroy && !a.destroyed?}
|
64
|
-
# event.update_roster
|
65
|
-
# event.save
|
66
|
-
# end
|
67
|
-
# end
|
68
|
-
|
69
|
-
# def add_attendees(from_contact_ids)
|
70
|
-
# changeset! do |event|
|
71
|
-
# from_contact_ids.each do |c_id|
|
72
|
-
# event.attendees.build(:contact_id => c_id)
|
73
|
-
# end
|
74
|
-
# event.update_roster
|
75
|
-
# event.save
|
76
|
-
# end
|
77
|
-
# end
|
78
|
-
|
79
66
|
def to_s
|
80
67
|
"#{name} (#{start_on} #{end_on ? ' - ' + end_on.to_s : ''})"
|
81
68
|
end
|
82
|
-
|
83
|
-
# list all groups that had least one member in attendance at this event
|
84
|
-
# def contact_groups_represented
|
85
|
-
# @contact_groups_represented ||= contacts.map(&:contact_groups).flatten.uniq
|
86
|
-
# end
|
87
|
-
|
88
|
-
# def name_and_file_count
|
89
|
-
# "#{name} (#{pluralize(file_attachments.count, 'file')})"
|
90
|
-
# end
|
91
69
|
end
|