Skip to content
This repository was archived by the owner on Jan 5, 2024. It is now read-only.

Commit 11f0a0e

Browse files
author
lennon
committedNov 9, 2005
Minor permissions cleanups for article controller methods, and support for
"unclaimed" events (those with null member_ids) for event transfer between users and avoiding breakage when member accounts are deleted. git-svn-id: http://svn.pdxruby.org/repos/www/trunk@151 f0fbaf97-c700-0410-a5eb-8ea856f8537e
1 parent a5d0a9e commit 11f0a0e

File tree

8 files changed

+127
-76
lines changed

8 files changed

+127
-76
lines changed
 

‎app/controllers/articles_controller.rb

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
class ArticlesController < ApplicationController
2+
before_filter :member_is_author, :only => [ :edit, :create, :destroy, :update ]
3+
before_filter :authenticate, :only => [ :new ]
4+
25
def index
36
list
47
render :action => 'list'
58
end
69

710
def list
8-
@article_pages, @articles = paginate :article, :per_page => 10
11+
@article_pages, @articles = paginate :article, :per_page => 10, :order_by => 'modified_at'
912
end
1013

1114
def show
@@ -42,6 +45,17 @@ def update
4245

4346
def destroy
4447
Article.find(params[:id]).destroy
48+
flash[:notice] = 'Article deleted.'
4549
redirect_to :action => 'list'
4650
end
51+
52+
private
53+
54+
def member_is_author
55+
if !member_is_this_member? Article.find(params[:id]).member.id
56+
flash[:notice] = "Only the author can edit or remove articles."
57+
redirect_to :action => 'list'
58+
return false
59+
end
60+
end
4761
end

‎app/controllers/events_controller.rb

+45-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
class EventsController < ApplicationController
2-
before_filter :authenticate, :only => [ :edit, :create, :new, :destroy ]
2+
before_filter :authenticate, :only => [ :edit, :create, :new, :claim ]
3+
before_filter :member_is_owner, :only => [ :edit, :destroy, :release ]
34

45
def index
56
list
67
render :action => 'list'
78
end
89

910
def list
10-
@event_pages, @events = paginate :event, :per_page => 10, :order => 'starts_at ASC'
11+
@event_pages, @events = paginate :event, :per_page => 10, :order_by => 'starts_at ASC'
1112
end
1213

1314
def show
@@ -118,10 +119,52 @@ def cancel
118119
redirect_to :action => 'list'
119120
end
120121

122+
def release
123+
@event = Event.find(params[:id])
124+
if session[:member].id != @event.member_id
125+
flash[:notice] = "Only an event owner can release it."
126+
redirect_to :action => 'list'
127+
return
128+
end
129+
@event.member = nil
130+
if @event.save
131+
flash[:notice] = "Event released."
132+
else
133+
flash[:notice] = "Failed to release event."
134+
end
135+
redirect_to :action => 'list'
136+
end
137+
138+
def claim
139+
@event = Event.find(params[:id])
140+
unless @event.unclaimed?
141+
flash[:notice] = "This event already has an owner. They must release it before it can be claimed."
142+
redirect_to :action => 'show', :id => @event.id
143+
return
144+
end
145+
@event.member = session[:member]
146+
if @event.save
147+
flash[:notice] = "Event ownership claimed. Thank you!"
148+
else
149+
flash[:notice] = "Failed to claim event."
150+
end
151+
redirect_to :action => 'show', :id => @event.id
152+
end
153+
121154
ICAL_EVENT_LIMIT = 100
122155
def ical
123156
@headers['content-type'] = 'text/plain'
124157
@events = Event.find_upcoming(ICAL_EVENT_LIMIT)
125158
render_without_layout
126159
end
160+
161+
private
162+
163+
def member_is_owner
164+
if !member_is_this_member? Event.find(params[:id]).member.id
165+
flash[:notice] = "Only the owner can edit or remove events."
166+
redirect_to :action => 'list'
167+
return false
168+
end
169+
end
127170
end

‎app/models/event.rb

+4
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ def feedbacks
6565
self.participants.map {|p| p.feedbacks }.flatten
6666
end
6767

68+
def unclaimed?
69+
nil == self.member
70+
end
71+
6872
def Event.find_upcoming(limit=10)
6973
find(:all, :limit => limit, :order => 'starts_at desc',
7074
:conditions => ['starts_at > ? and status = ?', Time.now, EVENT_STATUS[:active]])

‎app/views/events/list.rhtml

+13-5
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,19 @@
1717
<%= link_to event.name, :action => 'show', :id => event.id %>
1818
</td>
1919
<td>
20-
<%= link_to event.member.name,
21-
:controller => 'members',
22-
:action => 'show',
23-
:id => event.member.id
24-
%></td>
20+
<% if event.member %>
21+
<%= link_to event.member.name,
22+
:controller => 'members',
23+
:action => 'show',
24+
:id => event.member.id %>
25+
<% else %>
26+
<span class="attention">no one</span>
27+
(<%= link_to 'claim',
28+
{:action => 'claim',
29+
:id => event.id },
30+
:confirm => 'Are you sure?' %>)
31+
<% end %>
32+
</td>
2533
<% if event.location.nil? %>
2634
<td><i>unknown</i></td>
2735
<% else %>

‎app/views/events/show.rhtml

+19
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@
33
<% end %>
44

55
<p>Organized by
6+
<% if @event.member.nil? %>
7+
no one
8+
(<%= link_to 'claim',
9+
{:id => @event.id, :action => 'claim'},
10+
:confirm => 'Are you sure?' %>)
11+
<% else %>
612
<%= link_to @event.member.name,
713
:controller => 'members',
814
:action => 'show',
915
:id => @event.member.id
1016
%>
17+
<% end %>
1118
</p>
1219
<p>Time: <%= @event.starts_at %> - <%= @event.ends_at %></p>
1320
<p>Location:
@@ -96,9 +103,21 @@
96103
<% if not (@event.cancelled? or @event.ended?) %>
97104
| <%= link_to 'Cancel this event', :action => 'cancel', :id => @event, :confirm => 'Are you sure?' %>
98105
<% end %>
106+
<% if @event.member == session[:member] %>
107+
| <%= link_to 'Give up ownership',
108+
:action => 'release',
109+
:id => @event,
110+
:confirm => 'Are you sure?' %>
111+
<% end %>
99112
</p>
100113
<% end %>
101114

115+
<% if @event.unclaimed? and session[:member] %>
116+
<%= link_to 'Claim ownership',
117+
:action => 'claim',
118+
:id => @event,
119+
:confirm => 'Are you sure?' %>
120+
<% end %>
102121

103122
<p>
104123
<%= link_to 'Browse other events', :action => 'list' %>

‎doc/TODO

-13
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,11 @@ Notes:
88
put your name in [square brackets] at the end of the event.
99

1010
_Spamming_
11-
- When event is over, ask participants for feedback. [lennon]
12-
13-
- Participants are notified via email of change to core event information [lennon]
14-
15-
- Participants are notified via email if event is cancelled [lennon]
16-
17-
- Participants are notified of reminder of event (eg, day before) [lennon]
18-
19-
- Owner is notified via email of RSVPs and comments [lennon]
2011

2112
- All members are notified of new events [lennon]
2213

2314
_Other_
2415
- Owner can give event to another participant.
25-
26-
- Export events to an iCalendar (http://en.wikipedia.org/wiki/ICalendar) file
2716

2817
- Make forms prettier (i.e. make input sizes more appropriate)
2918
- on Edit/New Event, when existing location is selected, alternative location
@@ -39,8 +28,6 @@ _Other_
3928
occurs (i.e. when scripts/feeder runs, and when an event is added or deleted or modified). Ideally
4029
the index should be able to handle a slashdotting.
4130

42-
- Some way for a user to reset/change their password
43-
4431
- User should be able to delete their own account...
4532

4633
_Input Validation_

‎public/stylesheets/stylesheet.css

+7-1
Original file line numberDiff line numberDiff line change
@@ -116,5 +116,11 @@ table#eventlist td{
116116
padding: 3px;
117117
}
118118
table#eventlist tr.cancelled_event {
119-
background: #fba;
119+
background: #ecb;
120+
color: #444;
121+
}
122+
123+
.attention {
124+
font-weight: bold;
125+
background: #ff9;
120126
}

‎www.tmproj

+24-54
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<plist version="1.0">
44
<dict>
55
<key>currentDocument</key>
6-
<string>app/models/mail_bot.rb</string>
6+
<string>app/views/events/list.rhtml</string>
77
<key>documents</key>
88
<array>
99
<dict>
@@ -23,82 +23,68 @@
2323
<integer>200</integer>
2424
<key>metaData</key>
2525
<dict>
26-
<key>app/models/mail_bot.rb</key>
26+
<key>app/controllers/articles_controller.rb</key>
2727
<dict>
2828
<key>caret</key>
2929
<dict>
3030
<key>column</key>
31-
<integer>39</integer>
32-
<key>line</key>
33-
<integer>28</integer>
34-
</dict>
35-
<key>firstVisibleColumn</key>
36-
<integer>0</integer>
37-
<key>firstVisibleLine</key>
38-
<integer>6</integer>
39-
</dict>
40-
<key>app/views/mail_bot/cancel_message.rhtml</key>
41-
<dict>
42-
<key>caret</key>
43-
<dict>
44-
<key>column</key>
45-
<integer>23</integer>
31+
<integer>0</integer>
4632
<key>line</key>
47-
<integer>12</integer>
33+
<integer>61</integer>
4834
</dict>
4935
<key>firstVisibleColumn</key>
5036
<integer>0</integer>
5137
<key>firstVisibleLine</key>
52-
<integer>0</integer>
38+
<integer>23</integer>
5339
</dict>
54-
<key>app/views/mail_bot/change_message.rhtml</key>
40+
<key>app/controllers/events_controller.rb</key>
5541
<dict>
5642
<key>caret</key>
5743
<dict>
5844
<key>column</key>
59-
<integer>28</integer>
45+
<integer>8</integer>
6046
<key>line</key>
61-
<integer>9</integer>
47+
<integer>115</integer>
6248
</dict>
6349
<key>firstVisibleColumn</key>
6450
<integer>0</integer>
6551
<key>firstVisibleLine</key>
66-
<integer>0</integer>
52+
<integer>97</integer>
6753
</dict>
68-
<key>app/views/mail_bot/feedback_message.rhtml</key>
54+
<key>app/models/event.rb</key>
6955
<dict>
7056
<key>caret</key>
7157
<dict>
7258
<key>column</key>
73-
<integer>0</integer>
59+
<integer>19</integer>
7460
<key>line</key>
75-
<integer>4</integer>
61+
<integer>83</integer>
7662
</dict>
7763
<key>firstVisibleColumn</key>
7864
<integer>0</integer>
7965
<key>firstVisibleLine</key>
80-
<integer>0</integer>
66+
<integer>49</integer>
8167
</dict>
82-
<key>app/views/mail_bot/new_event_message.rhtml</key>
68+
<key>app/views/events/list.rhtml</key>
8369
<dict>
8470
<key>caret</key>
8571
<dict>
8672
<key>column</key>
87-
<integer>28</integer>
73+
<integer>44</integer>
8874
<key>line</key>
89-
<integer>5</integer>
75+
<integer>29</integer>
9076
</dict>
9177
<key>firstVisibleColumn</key>
9278
<integer>0</integer>
9379
<key>firstVisibleLine</key>
9480
<integer>0</integer>
9581
</dict>
96-
<key>app/views/mail_bot/rsvp_message.rhtml</key>
82+
<key>app/views/events/show.rhtml</key>
9783
<dict>
9884
<key>caret</key>
9985
<dict>
10086
<key>column</key>
101-
<integer>19</integer>
87+
<integer>9</integer>
10288
<key>line</key>
10389
<integer>8</integer>
10490
</dict>
@@ -107,34 +93,18 @@
10793
<key>firstVisibleLine</key>
10894
<integer>0</integer>
10995
</dict>
110-
<key>app/views/mail_bot/signup_message.rhtml</key>
111-
<dict>
112-
<key>caret</key>
113-
<dict>
114-
<key>column</key>
115-
<integer>16</integer>
116-
<key>line</key>
117-
<integer>13</integer>
118-
</dict>
119-
<key>firstVisibleColumn</key>
120-
<integer>0</integer>
121-
<key>firstVisibleLine</key>
122-
<integer>0</integer>
123-
</dict>
12496
</dict>
12597
<key>openDocuments</key>
12698
<array>
127-
<string>app/views/mail_bot/rsvp_message.rhtml</string>
128-
<string>app/views/mail_bot/feedback_message.rhtml</string>
129-
<string>app/views/mail_bot/change_message.rhtml</string>
130-
<string>app/views/mail_bot/cancel_message.rhtml</string>
131-
<string>app/views/mail_bot/new_event_message.rhtml</string>
132-
<string>app/views/mail_bot/signup_message.rhtml</string>
133-
<string>app/models/mail_bot.rb</string>
99+
<string>app/controllers/events_controller.rb</string>
100+
<string>app/views/events/list.rhtml</string>
101+
<string>app/views/events/show.rhtml</string>
102+
<string>app/controllers/articles_controller.rb</string>
103+
<string>app/models/event.rb</string>
134104
</array>
135105
<key>showFileHierarchyDrawer</key>
136106
<true/>
137107
<key>windowFrame</key>
138-
<string>{{210, 44}, {814, 702}}</string>
108+
<string>{{254, 96}, {744, 638}}</string>
139109
</dict>
140110
</plist>

0 commit comments

Comments
 (0)
This repository has been archived.