Merge lp:~daker/loco-team-portal/fix.rss-feeds into lp:loco-team-portal
- fix.rss-feeds
- Merge into 0.2
Proposed by
Adnane Belmadiaf
Status: | Merged |
---|---|
Approved by: | Adnane Belmadiaf |
Approved revision: | 565 |
Merged at revision: | 566 |
Proposed branch: | lp:~daker/loco-team-portal/fix.rss-feeds |
Merge into: | lp:loco-team-portal |
Diff against target: |
781 lines (+258/-150) 20 files modified
loco_directory/events/feeds.py (+55/-0) loco_directory/events/views.py (+6/-25) loco_directory/meetings/feeds.py (+40/-0) loco_directory/meetings/views.py (+35/-54) loco_directory/teams/feeds.py (+56/-0) loco_directory/teams/views.py (+7/-4) loco_directory/templates/events/team_events_rss.xml (+0/-24) loco_directory/templates/feeds/events_description.html (+10/-0) loco_directory/templates/feeds/events_title.html (+1/-0) loco_directory/templates/feeds/globalevents_description.html (+9/-0) loco_directory/templates/feeds/globalevents_title.html (+1/-0) loco_directory/templates/feeds/meetings_description.html (+8/-0) loco_directory/templates/feeds/meetings_title.html (+1/-0) loco_directory/templates/feeds/teams_description.html (+10/-0) loco_directory/templates/feeds/teams_title.html (+1/-0) loco_directory/templates/meetings/team_meetings_rss.xml (+0/-23) loco_directory/templates/teams/team_detail.html (+2/-15) loco_directory/templates/teams/team_event_list.html (+2/-2) loco_directory/templates/teams/team_meeting_list.html (+2/-3) loco_directory/urls.py (+12/-0) |
To merge this branch: | bzr merge lp:~daker/loco-team-portal/fix.rss-feeds |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
LoCo Team Portal Developers | Pending | ||
Review via email: mp+136294@code.launchpad.net |
Commit message
* RSS feeds are now using syndication framework
* Old URLs feed now redirect to the new ones
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added file 'loco_directory/events/feeds.py' |
2 | --- loco_directory/events/feeds.py 1970-01-01 00:00:00 +0000 |
3 | +++ loco_directory/events/feeds.py 2012-11-26 23:13:22 +0000 |
4 | @@ -0,0 +1,55 @@ |
5 | +from django.core.exceptions import ObjectDoesNotExist |
6 | +from django.core.urlresolvers import reverse |
7 | +from django.contrib.syndication.feeds import Feed, FeedDoesNotExist |
8 | +from django.utils.translation import ugettext as _ |
9 | +from events.models import TeamEvent, GlobalEvent |
10 | +from teams.models import Team |
11 | + |
12 | +import datetime |
13 | + |
14 | +class TeamEventFeed(Feed): |
15 | + def get_object(self, bits): |
16 | + if len(bits) >= 1: |
17 | + if bits[0] == 'all': |
18 | + return 'all' |
19 | + else: |
20 | + try: |
21 | + return Team.objects.get(lp_name=bits[0]) |
22 | + except: |
23 | + raise ObjectDoesNotExist |
24 | + return None |
25 | + |
26 | + def items(self, obj): |
27 | + if isinstance(obj, Team): |
28 | + return TeamEvent.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15] |
29 | + else: |
30 | + return TeamEvent.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15] |
31 | + |
32 | + def title(self, obj): |
33 | + if isinstance(obj, Team): |
34 | + return _('Upcoming Events for %(teamname)s' % {'teamname': obj.name}) |
35 | + else: |
36 | + return _('Upcoming Events') |
37 | + |
38 | + def link(self, obj): |
39 | + if isinstance(obj, Team): |
40 | + return reverse('team-event-list', kwargs={'team_slug': obj.lp_name}) |
41 | + else: |
42 | + return reverse('event-list') |
43 | + |
44 | + |
45 | +class GlobalEventFeed(TeamEventFeed): |
46 | + def items(self, obj): |
47 | + if isinstance(obj, Team): |
48 | + return GlobalEvent.objects.filter(teamevent__teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15] |
49 | + else: |
50 | + return GlobalEvent.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15] |
51 | + |
52 | + def title(self, obj): |
53 | + if isinstance(obj, Team): |
54 | + return _('Upcoming Global Events where %(teamname)s is participating' % {'teamname': obj.name}) |
55 | + else: |
56 | + return _('Upcoming Global Events') |
57 | + |
58 | + def link(self, obj): |
59 | + return reverse('event-list') |
60 | |
61 | === modified file 'loco_directory/events/views.py' |
62 | --- loco_directory/events/views.py 2012-11-05 21:16:15 +0000 |
63 | +++ loco_directory/events/views.py 2012-11-26 23:13:22 +0000 |
64 | @@ -217,26 +217,7 @@ |
65 | |
66 | |
67 | def team_events_rss(request, team_slug): |
68 | - team_object = get_object_or_404(Team, lp_name=team_slug) |
69 | - events = TeamEvent.objects.filter(teams__lp_name=team_slug, date_end__gt=datetime.datetime.now()).order_by('date_begin')[:15] |
70 | - |
71 | - if request.META.has_key('wsgi.url_scheme'): |
72 | - scheme = request.META.get('wsgi.url_scheme') |
73 | - else: |
74 | - scheme = 'http' |
75 | - |
76 | - if request.META.has_key('HTTP_HOST'): |
77 | - host = request.META.get('HTTP_HOST') |
78 | - else: |
79 | - host = request.META.get('SERVER_NAME') |
80 | - |
81 | - if request.META.get('SERVER_PORT', 80) == 80 or request.META.get('SERVER_PORT', 80) == 0: |
82 | - base = '%s://%s' % (scheme, host) |
83 | - else: |
84 | - base = '%s://%s:%s' % (scheme, host, request.META.get('SERVER_PORT', 80)) |
85 | - |
86 | - context = {'team_object': team_object, 'events': events, 'base': base} |
87 | - return render_to_response('events/team_events_rss.xml', context, RequestContext(request), mimetype='application/xhtml+xml') |
88 | + return redirect('/feeds/events/%s/' % team_slug, permanent=True) |
89 | |
90 | |
91 | @login_required |
92 | @@ -383,8 +364,8 @@ |
93 | create a comment for a team event |
94 | """ |
95 | team_event_object = get_object_or_404(TeamEvent, pk=team_event_id) |
96 | - |
97 | - if request.method == 'POST': |
98 | + |
99 | + if request.method == 'POST': |
100 | form = TeamEventCommentForm(data=request.POST) |
101 | if form.is_valid(): |
102 | team_event_comment = form.save(commit=False) |
103 | @@ -397,7 +378,7 @@ |
104 | return redirect( team_event_object ) |
105 | else: |
106 | form = TeamEventCommentForm() |
107 | - |
108 | + |
109 | context = { |
110 | 'team_event_object': team_event_object, |
111 | 'form': form, |
112 | @@ -596,7 +577,7 @@ |
113 | """ |
114 | update a comment for a team event |
115 | """ |
116 | - if request.method == 'POST': |
117 | + if request.method == 'POST': |
118 | response_dict = {} |
119 | id = request.POST.get('id', False) |
120 | comment = request.POST.get('comment', False) |
121 | @@ -614,7 +595,7 @@ |
122 | else: |
123 | response_dict.update({'success': False, 'response': _('Missing arguments.') }) |
124 | else: |
125 | - response_dict.update({'success': False, 'response': _('You can\'t edit this comment using this method.') }) |
126 | + response_dict.update({'success': False, 'response': _('You can\'t edit this comment using this method.') }) |
127 | return HttpResponse(simplejson.dumps(response_dict), mimetype='application/json') |
128 | |
129 | @login_required |
130 | |
131 | === added file 'loco_directory/meetings/feeds.py' |
132 | --- loco_directory/meetings/feeds.py 1970-01-01 00:00:00 +0000 |
133 | +++ loco_directory/meetings/feeds.py 2012-11-26 23:13:22 +0000 |
134 | @@ -0,0 +1,40 @@ |
135 | +from django.core.exceptions import ObjectDoesNotExist |
136 | +from django.core.urlresolvers import reverse |
137 | +from django.contrib.syndication.feeds import Feed, FeedDoesNotExist |
138 | +from django.utils.translation import ugettext as _ |
139 | +from meetings.models import TeamMeeting |
140 | +from teams.models import Team |
141 | + |
142 | +import datetime |
143 | + |
144 | + |
145 | +class TeamMeetingFeed(Feed): |
146 | + def get_object(self, bits): |
147 | + if len(bits) >= 1: |
148 | + if bits[0] == 'all': |
149 | + return 'all' |
150 | + else: |
151 | + try: |
152 | + return Team.objects.get(lp_name=bits[0]) |
153 | + except: |
154 | + raise ObjectDoesNotExist |
155 | + return None |
156 | + |
157 | + def items(self, obj): |
158 | + if isinstance(obj, Team): |
159 | + return TeamMeeting.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15] |
160 | + else: |
161 | + return TeamMeeting.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15] |
162 | + |
163 | + def title(self, obj): |
164 | + if isinstance(obj, Team): |
165 | + return _('Upcoming Meetings for %(teamname)s' % {'teamname': obj.name}) |
166 | + else: |
167 | + return _('Upcoming Meetings') |
168 | + |
169 | + def link(self, obj): |
170 | + if isinstance(obj, Team): |
171 | + return reverse('team-meeting-list', kwargs={'team_slug': obj.lp_name}) |
172 | + else: |
173 | + return reverse('meeting-list') |
174 | + |
175 | |
176 | === modified file 'loco_directory/meetings/views.py' |
177 | --- loco_directory/meetings/views.py 2012-07-14 20:07:11 +0000 |
178 | +++ loco_directory/meetings/views.py 2012-11-26 23:13:22 +0000 |
179 | @@ -50,9 +50,9 @@ |
180 | for meeting in meetings: |
181 | meeting.as_ical(calendar) |
182 | response.write(calendar.serialize()) |
183 | - |
184 | + |
185 | return response |
186 | - |
187 | + |
188 | |
189 | def meeting_ical(request, team_slug, team_meeting_id): |
190 | """ |
191 | @@ -126,7 +126,7 @@ |
192 | 'team_meeting_object': team_meeting_object, |
193 | 'user_is_team_member': is_member, |
194 | } |
195 | - return render_to_response('meetings/team_meeting_detail.html', |
196 | + return render_to_response('meetings/team_meeting_detail.html', |
197 | context, RequestContext(request)) |
198 | |
199 | @login_required |
200 | @@ -135,7 +135,7 @@ |
201 | delete a meeting |
202 | """ |
203 | team_meeting_object = get_object_or_404(TeamMeeting, pk=team_meeting_id) |
204 | - |
205 | + |
206 | is_on_lc = launchpad.is_user_on_loco_council(request.user) |
207 | #check if user is admin or owner of a team |
208 | is_contact = False |
209 | @@ -145,7 +145,7 @@ |
210 | break |
211 | |
212 | if is_on_lc or is_contact: |
213 | - if request.method == 'POST': |
214 | + if request.method == 'POST': |
215 | team_meeting_object.delete() |
216 | request.user.message_set.create(message=_('Team Meeting removed.')) |
217 | return redirect( 'meeting-list' ) |
218 | @@ -172,26 +172,7 @@ |
219 | return render_to_response('meetings/team_meeting_new_select.html', context, RequestContext(request)) |
220 | |
221 | def team_meetings_rss(request, team_slug): |
222 | - team_object = get_object_or_404(Team, lp_name=team_slug) |
223 | - meetings = TeamMeeting.objects.filter(teams__lp_name=team_slug, date_end__gt=datetime.datetime.now()).order_by('date_begin')[:15] |
224 | - |
225 | - if request.META.has_key('wsgi.url_scheme'): |
226 | - scheme = request.META.get('wsgi.url_scheme') |
227 | - else: |
228 | - scheme = 'http' |
229 | - |
230 | - if request.META.has_key('HTTP_HOST'): |
231 | - host = request.META.get('HTTP_HOST') |
232 | - else: |
233 | - host = request.META.get('SERVER_NAME') |
234 | - |
235 | - if request.META.get('SERVER_PORT', 80) == 80 or request.META.get('SERVER_PORT', 80) == 0: |
236 | - base = '%s://%s' % (scheme, host) |
237 | - else: |
238 | - base = '%s://%s:%s' % (scheme, host, request.META.get('SERVER_PORT', 80)) |
239 | - |
240 | - context = {'team_object': team_object, 'meetings': meetings, 'base':base} |
241 | - return render_to_response('meetings/team_meetings_rss.xml', context, RequestContext(request), mimetype='application/xhtml+xml') |
242 | + return redirect('/feeds/meetings/%s/' % team_slug, permanent=True) |
243 | |
244 | @login_required |
245 | def team_meeting_new(request, team_slug): |
246 | @@ -199,11 +180,11 @@ |
247 | new team meeting |
248 | """ |
249 | team_object = get_object_or_404(Team, lp_name=team_slug) |
250 | - |
251 | + |
252 | is_on_lc = launchpad.is_user_on_loco_council(request.user) |
253 | is_member = launchpad.is_team_member(request.user, team_object) |
254 | - |
255 | - team_meeting_object = TeamMeeting(chair=team_object.owner_profile, |
256 | + |
257 | + team_meeting_object = TeamMeeting(chair=team_object.owner_profile, |
258 | channel=team_object.irc_chan) |
259 | if is_on_lc or is_member: |
260 | if request.method == 'POST': |
261 | @@ -211,16 +192,16 @@ |
262 | if form.is_valid(): |
263 | team_meeting = form.save() |
264 | team_meeting.teams.add(team_object) |
265 | - team_meeting_id = team_meeting.id |
266 | + team_meeting_id = team_meeting.id |
267 | return HttpResponseRedirect(team_meeting_object.get_absolute_url()) |
268 | else: |
269 | form = TeamMeetingForm(teams=[team_object], instance=team_meeting_object) |
270 | - |
271 | + |
272 | context = { |
273 | 'team_object': team_object, |
274 | 'form': form, |
275 | } |
276 | - return render_to_response('meetings/team_meeting_new.html', |
277 | + return render_to_response('meetings/team_meeting_new.html', |
278 | context, RequestContext(request)) |
279 | else: |
280 | # XXX: Once we move to a new ACL system, this needs fixing. |
281 | @@ -232,13 +213,13 @@ |
282 | """ |
283 | copy team meeting |
284 | """ |
285 | - |
286 | + |
287 | team_meeting = get_object_or_404(TeamMeeting, pk=team_meeting_id) |
288 | team_object = team_meeting.teams.all()[0] |
289 | |
290 | is_on_lc = launchpad.is_user_on_loco_council(request.user) |
291 | is_member = launchpad.is_team_member(request.user, team_object) |
292 | - |
293 | + |
294 | if is_on_lc or is_member: |
295 | if request.method == 'POST': |
296 | form = TeamMeetingForm(instance=team_meeting, data=request.POST, teams=team_meeting.teams.all()) |
297 | @@ -246,16 +227,16 @@ |
298 | if form.is_valid(): |
299 | team_meeting = form.save() |
300 | team_meeting.teams.add(team_object) |
301 | - team_meeting_id = team_meeting.id |
302 | + team_meeting_id = team_meeting.id |
303 | return HttpResponseRedirect(team_meeting.get_absolute_url()) |
304 | else: |
305 | form = TeamMeetingForm(instance=team_meeting, teams=team_meeting.teams.all()) |
306 | - |
307 | + |
308 | context = { |
309 | 'team_object': team_object, |
310 | 'form': form, |
311 | } |
312 | - return render_to_response('meetings/team_meeting_new.html', |
313 | + return render_to_response('meetings/team_meeting_new.html', |
314 | context, RequestContext(request)) |
315 | else: |
316 | # XXX: Once we move to a new ACL system, this needs fixing. |
317 | @@ -274,11 +255,11 @@ |
318 | if launchpad.is_team_member(request.user, team): |
319 | is_member = True |
320 | break |
321 | - |
322 | + |
323 | is_on_lc = launchpad.is_user_on_loco_council(request.user) |
324 | - |
325 | + |
326 | if is_on_lc or is_member: |
327 | - if request.method == 'POST': |
328 | + if request.method == 'POST': |
329 | form = TeamMeetingForm(data=request.POST, instance=team_meeting_object) |
330 | if form.is_valid(): |
331 | form.save() |
332 | @@ -286,11 +267,11 @@ |
333 | return redirect( team_meeting_object ) |
334 | else: |
335 | form = TeamMeetingForm(instance=team_meeting_object) |
336 | - |
337 | + |
338 | context = { |
339 | 'form': form, |
340 | } |
341 | - return render_to_response('meetings/team_meeting_update.html', |
342 | + return render_to_response('meetings/team_meeting_update.html', |
343 | context, RequestContext(request)) |
344 | else: |
345 | request.user.message_set.create(message='%s %s' % (_('You can not update this team meeting.'), _('You are not a member of the team or on the LoCo Council.'))) |
346 | @@ -304,11 +285,11 @@ |
347 | team_meeting_object = get_object_or_404(TeamMeeting, pk=team_meeting_id) |
348 | try: |
349 | user = UserProfile.objects.get(user=request.user) |
350 | - agenda_item_object = AgendaItem(meeting=team_meeting_object, |
351 | + agenda_item_object = AgendaItem(meeting=team_meeting_object, |
352 | owner=user, |
353 | created_date=datetime.datetime.now()) |
354 | except UserProfile.DoesNotExist: |
355 | - agenda_item_object = AgendaItem(meeting=team_meeting_object, |
356 | + agenda_item_object = AgendaItem(meeting=team_meeting_object, |
357 | created_date=datetime.datetime.now()) |
358 | is_member = False |
359 | for team in team_meeting_object.teams.all(): |
360 | @@ -316,7 +297,7 @@ |
361 | is_member = True |
362 | break |
363 | is_on_lc = launchpad.is_user_on_loco_council(request.user) |
364 | - |
365 | + |
366 | if is_on_lc or is_member: |
367 | if request.method == 'POST': |
368 | form = AgendaItemForm(data=request.POST, instance=agenda_item_object) |
369 | @@ -326,12 +307,12 @@ |
370 | return redirect( team_meeting_object ) |
371 | else: |
372 | form = AgendaItemForm(instance=agenda_item_object) |
373 | - |
374 | + |
375 | context = { |
376 | 'team_meeting_object': team_meeting_object, |
377 | 'form': form, |
378 | } |
379 | - return render_to_response('meetings/agenda_item_new.html', |
380 | + return render_to_response('meetings/agenda_item_new.html', |
381 | context, RequestContext(request)) |
382 | else: |
383 | # XXX: Once we move to a new ACL system, this needs fixing. |
384 | @@ -351,11 +332,11 @@ |
385 | if launchpad.is_team_member(request.user, team): |
386 | is_member = True |
387 | break |
388 | - |
389 | + |
390 | is_on_lc = launchpad.is_user_on_loco_council(request.user) |
391 | - |
392 | + |
393 | if is_on_lc or is_member: |
394 | - if request.method == 'POST': |
395 | + if request.method == 'POST': |
396 | form = AgendaItemForm(data=request.POST, instance=agenda_item_object) |
397 | if form.is_valid(): |
398 | form.save() |
399 | @@ -363,13 +344,13 @@ |
400 | return redirect( team_meeting_object ) |
401 | else: |
402 | form = AgendaItemForm(instance=agenda_item_object) |
403 | - |
404 | + |
405 | context = { |
406 | 'team_meeting_object': team_meeting_object, |
407 | 'agenda_item_object': agenda_item_object, |
408 | 'form': form, |
409 | } |
410 | - return render_to_response('meetings/agenda_item_update.html', |
411 | + return render_to_response('meetings/agenda_item_update.html', |
412 | context, RequestContext(request)) |
413 | else: |
414 | request.user.message_set.create(message='%s %s' % (_('You can not update this team meeting agenda.'), _('You are not a member of the team or on the LoCo Council.'))) |
415 | @@ -388,11 +369,11 @@ |
416 | if launchpad.is_team_member(request.user, team): |
417 | is_member = True |
418 | break |
419 | - |
420 | + |
421 | is_on_lc = launchpad.is_user_on_loco_council(request.user) |
422 | - |
423 | + |
424 | if is_on_lc or is_member: |
425 | - if request.method == 'POST': |
426 | + if request.method == 'POST': |
427 | agenda_item_object.delete() |
428 | request.user.message_set.create(message=_('Agenda Item removed.')) |
429 | return redirect( team_meeting_object ) |
430 | |
431 | === added file 'loco_directory/teams/feeds.py' |
432 | --- loco_directory/teams/feeds.py 1970-01-01 00:00:00 +0000 |
433 | +++ loco_directory/teams/feeds.py 2012-11-26 23:13:22 +0000 |
434 | @@ -0,0 +1,56 @@ |
435 | +# -*- coding: utf-8 -*- |
436 | +from django.core.exceptions import ObjectDoesNotExist |
437 | +from django.core.urlresolvers import reverse |
438 | +from django.contrib.syndication.feeds import Feed, FeedDoesNotExist |
439 | +from django.utils.translation import ugettext as _ |
440 | +from meetings.models import TeamMeeting |
441 | +from events.models import TeamEvent |
442 | +from teams.models import Team |
443 | + |
444 | +import datetime |
445 | + |
446 | + |
447 | +class TeamFeed(Feed): |
448 | + def get_object(self, bits): |
449 | + if len(bits) >= 1: |
450 | + if bits[0] == 'all': |
451 | + return 'all' |
452 | + else: |
453 | + try: |
454 | + return Team.objects.get(lp_name=bits[0]) |
455 | + except: |
456 | + raise ObjectDoesNotExist |
457 | + return None |
458 | + |
459 | + def items(self, obj): |
460 | + if isinstance(obj, Team): |
461 | + meetings = TeamMeeting.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin') |
462 | + events = TeamEvent.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin') |
463 | + else: |
464 | + meetings = TeamMeeting.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin') |
465 | + events = TeamEvent.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin') |
466 | + |
467 | + events_and_meetings = [] |
468 | + events = events[:15].iterator() |
469 | + meetings = meetings[:15].iterator() |
470 | + for event in events: |
471 | + events_and_meetings.append(event) |
472 | + for meeting in meetings: |
473 | + events_and_meetings.append(meeting) |
474 | + |
475 | + events_and_meetings.sort(key=lambda event: event.date_begin) |
476 | + return events_and_meetings |
477 | + |
478 | + def title(self, obj): |
479 | + if isinstance(obj, Team): |
480 | + return _('Upcoming Events and Meetings for %(teamname)s' % {'teamname': obj.name}) |
481 | + else: |
482 | + return _('Upcoming Events and Meetings') |
483 | + |
484 | + def link(self, obj): |
485 | + if isinstance(obj, Team): |
486 | + return obj.get_absolute_url() |
487 | + else: |
488 | + return '/' |
489 | + |
490 | + |
491 | |
492 | === modified file 'loco_directory/teams/views.py' |
493 | --- loco_directory/teams/views.py 2012-11-18 22:02:56 +0000 |
494 | +++ loco_directory/teams/views.py 2012-11-26 23:13:22 +0000 |
495 | @@ -83,15 +83,18 @@ |
496 | return render_to_response('teams/team_list.html', context, |
497 | RequestContext(request)) |
498 | |
499 | +def get_events_and_meetings(team_object): |
500 | + team_events = list(TeamEvent.objects.filter(teams=team_object)) |
501 | + team_meetings = list(TeamMeeting.objects.filter(teams=team_object)) |
502 | + team_events.extend(team_meetings) |
503 | + return team_events |
504 | + |
505 | def team_ical(request, team_slug): |
506 | """ |
507 | Return a ical list with the events and meetings in ical format. |
508 | """ |
509 | team_object = get_object_or_404(Team, lp_name=team_slug) |
510 | - team_events = list(TeamEvent.objects.filter(teams__lp_name=team_slug)) |
511 | - team_meetings = list(TeamMeeting.objects.filter(teams__lp_name=team_slug)) |
512 | - team_events.extend(team_meetings) |
513 | - return as_ical(team_events, team_object.name) |
514 | + return as_ical(get_events_and_meetings(team_object), team_object.name) |
515 | |
516 | def team_event_list(request, team_slug): |
517 | """ |
518 | |
519 | === removed file 'loco_directory/templates/events/team_events_rss.xml' |
520 | --- loco_directory/templates/events/team_events_rss.xml 2011-03-16 17:20:55 +0000 |
521 | +++ loco_directory/templates/events/team_events_rss.xml 1970-01-01 00:00:00 +0000 |
522 | @@ -1,24 +0,0 @@ |
523 | -<?xml version="1.0" encoding="UTF-8"?> |
524 | -{% load i18n %} |
525 | -<rss version="2.0"> |
526 | - <channel> |
527 | - <title>{% blocktrans with team_object.name as team_name %}Upcoming Events for {{team_name}}{% endblocktrans %}</title> |
528 | - <link>{{base}}{% url team-event-list team_object.lp_name %}</link> |
529 | - |
530 | - {% for e in events %} |
531 | - <item> |
532 | - <title> {{ e.name }}</title> |
533 | - <link>{{base}}{% url team-event-detail e.first_team.lp_name e.id %}</link> |
534 | - <description>{% trans "When:" %} {% spaceless %} |
535 | - {% ifequal e.date_begin|date e.date_end|date %} |
536 | - {{ e.date_begin|date:"D, d N Y H:i" }} - {{ e.date_end|date:"H:i O" }} |
537 | - {% else %} |
538 | - {{ e.date_begin|date:"D, d N Y H:i" }} - {{ e.date_end|date:"D, d N Y H:i O" }} |
539 | - {% endifequal %} |
540 | - {% endspaceless %}{% if e.venue.name %} | {% trans "Where:" %} {{ e.venue.name }}{% endif %} |
541 | - {% if e.description %} | {% trans "Description:" %} {{ e.description }}{% endif %}</description> |
542 | - <guid>{{base}}{% url team-event-detail e.first_team.lp_name e.id %}</guid> |
543 | - </item> |
544 | - {% endfor %} |
545 | - </channel> |
546 | -</rss> |
547 | |
548 | === added directory 'loco_directory/templates/feeds' |
549 | === added file 'loco_directory/templates/feeds/events_description.html' |
550 | --- loco_directory/templates/feeds/events_description.html 1970-01-01 00:00:00 +0000 |
551 | +++ loco_directory/templates/feeds/events_description.html 2012-11-26 23:13:22 +0000 |
552 | @@ -0,0 +1,10 @@ |
553 | +{% load i18n %} |
554 | +{% trans "When:" %} {% spaceless %} |
555 | +{% ifequal obj.date_begin|date obj.date_end|date %} |
556 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }} |
557 | +{% else %} |
558 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }} |
559 | +{% endifequal %} |
560 | +{% endspaceless %} |
561 | +{% if obj.venue.name %} | {% trans "Where:" %} {{ obj.venue.name }}{% endif %} |
562 | +{% if obj.description %} | {% trans "Description:" %} {{ obj.description }}{% endif %} |
563 | |
564 | === added file 'loco_directory/templates/feeds/events_title.html' |
565 | --- loco_directory/templates/feeds/events_title.html 1970-01-01 00:00:00 +0000 |
566 | +++ loco_directory/templates/feeds/events_title.html 2012-11-26 23:13:22 +0000 |
567 | @@ -0,0 +1,1 @@ |
568 | +{{ obj.name }} |
569 | |
570 | === added file 'loco_directory/templates/feeds/globalevents_description.html' |
571 | --- loco_directory/templates/feeds/globalevents_description.html 1970-01-01 00:00:00 +0000 |
572 | +++ loco_directory/templates/feeds/globalevents_description.html 2012-11-26 23:13:22 +0000 |
573 | @@ -0,0 +1,9 @@ |
574 | +{% load i18n %} |
575 | +{% trans "When:" %} {% spaceless %} |
576 | +{% ifequal obj.date_begin|date obj.date_end|date %} |
577 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }} |
578 | +{% else %} |
579 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }} |
580 | +{% endifequal %} |
581 | +{% endspaceless %} |
582 | +{% if obj.description %} | {% trans "Description:" %} {{ obj.description }}{% endif %} |
583 | |
584 | === added file 'loco_directory/templates/feeds/globalevents_title.html' |
585 | --- loco_directory/templates/feeds/globalevents_title.html 1970-01-01 00:00:00 +0000 |
586 | +++ loco_directory/templates/feeds/globalevents_title.html 2012-11-26 23:13:22 +0000 |
587 | @@ -0,0 +1,1 @@ |
588 | +{{ obj.name }} |
589 | |
590 | === added file 'loco_directory/templates/feeds/meetings_description.html' |
591 | --- loco_directory/templates/feeds/meetings_description.html 1970-01-01 00:00:00 +0000 |
592 | +++ loco_directory/templates/feeds/meetings_description.html 2012-11-26 23:13:22 +0000 |
593 | @@ -0,0 +1,8 @@ |
594 | +{% load i18n %} |
595 | +{% trans "When:" %} {% spaceless %} |
596 | +{% ifequal obj.date_begin|date obj.date_end|date %} |
597 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }} |
598 | +{% else %} |
599 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }} |
600 | +{% endifequal %} |
601 | +{% endspaceless %} |
602 | |
603 | === added file 'loco_directory/templates/feeds/meetings_title.html' |
604 | --- loco_directory/templates/feeds/meetings_title.html 1970-01-01 00:00:00 +0000 |
605 | +++ loco_directory/templates/feeds/meetings_title.html 2012-11-26 23:13:22 +0000 |
606 | @@ -0,0 +1,1 @@ |
607 | +{{ obj.name }} |
608 | |
609 | === added file 'loco_directory/templates/feeds/teams_description.html' |
610 | --- loco_directory/templates/feeds/teams_description.html 1970-01-01 00:00:00 +0000 |
611 | +++ loco_directory/templates/feeds/teams_description.html 2012-11-26 23:13:22 +0000 |
612 | @@ -0,0 +1,10 @@ |
613 | +{% load i18n %} |
614 | +{% trans "When:" %} {% spaceless %} |
615 | +{% ifequal obj.date_begin|date obj.date_end|date %} |
616 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }} |
617 | +{% else %} |
618 | + {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }} |
619 | +{% endifequal %} |
620 | +{% endspaceless %} |
621 | +{% if obj.venue.name %} | {% trans "Where:" %} {{ obj.venue.name }}{% endif %} |
622 | +{% if obj.description %} | {% trans "Description:" %} {{ obj.description }}{% endif %} |
623 | |
624 | === added file 'loco_directory/templates/feeds/teams_title.html' |
625 | --- loco_directory/templates/feeds/teams_title.html 1970-01-01 00:00:00 +0000 |
626 | +++ loco_directory/templates/feeds/teams_title.html 2012-11-26 23:13:22 +0000 |
627 | @@ -0,0 +1,1 @@ |
628 | +{{ obj.name }} |
629 | |
630 | === removed file 'loco_directory/templates/meetings/team_meetings_rss.xml' |
631 | --- loco_directory/templates/meetings/team_meetings_rss.xml 2011-06-17 17:10:41 +0000 |
632 | +++ loco_directory/templates/meetings/team_meetings_rss.xml 1970-01-01 00:00:00 +0000 |
633 | @@ -1,23 +0,0 @@ |
634 | -<?xml version="1.0" encoding="UTF-8"?> |
635 | -{% load i18n %} |
636 | -<rss version="2.0"> |
637 | - <channel> |
638 | - <title>{% blocktrans with team_object.name as team_name %}Upcoming Meetings for {{team_name}}{% endblocktrans %}</title> |
639 | - <link>{{base}}{% url team-meeting-list team_object.lp_name %}</link> |
640 | - |
641 | - {% for e in meetings %} |
642 | - <item> |
643 | - <title> {{ e.name }}</title> |
644 | - <link>{{base}}{% url team-meeting-detail e.first_team.lp_name e.id %}</link> |
645 | - <description>{% trans "When:" %} {% spaceless %} |
646 | - {% ifequal e.date_begin|date e.local_date_end|date %} |
647 | - {{ e.local_date_begin|date:"D, d N Y H:i" }} - {{ e.local_date_end|date:"H:i T" }} |
648 | - {% else %} |
649 | - {{ e.local_date_begin|date:"D, d N Y H:i" }} - {{ e.local_date_end|date:"D, d N Y H:i T" }} |
650 | - {% endifequal %} |
651 | - {% endspaceless %}</description> |
652 | - <guid>{{base}}{% url team-meeting-detail e.first_team.lp_name e.id %}</guid> |
653 | - </item> |
654 | - {% endfor %} |
655 | - </channel> |
656 | -</rss> |
657 | |
658 | === modified file 'loco_directory/templates/teams/team_detail.html' |
659 | --- loco_directory/templates/teams/team_detail.html 2012-11-12 20:25:25 +0000 |
660 | +++ loco_directory/templates/teams/team_detail.html 2012-11-26 23:13:22 +0000 |
661 | @@ -3,10 +3,6 @@ |
662 | |
663 | {% block page_name %}{% trans team.name %}{% endblock %} |
664 | |
665 | -{% block page_banner %} |
666 | -<img src="{{MEDIA_URL}}img/banner.png" title="Test Banner"/> |
667 | -{% endblock %} |
668 | - |
669 | {% block sub_nav_links %} |
670 | <li><a class="sub-nav-item" href="{% url team-list %}" title="{% trans "Back to Teams List" %}">{% trans "Back to Teams List" %}</a></li> |
671 | {% if is_member %}{% else %}<li><a class="sub-nav-item" href="https://launchpad.net/~{{ team.lp_name }}/+join">{% trans "Join This Team!" %}</a></li>{% endif %} |
672 | @@ -46,30 +42,21 @@ |
673 | 'http://search.twitter.com/', |
674 | ] |
675 | }); |
676 | - |
677 | {% if team.flickr_id %} |
678 | $('#flickr').flickr({ key: "{{ flickr_api_key }}", id: "{{ team.flickr_id }}", amount: perPage }); |
679 | {% endif %} |
680 | - |
681 | {% if team.picasa_id %} |
682 | $('#picasa').picasa({ id: "{{ team.picasa_id }}", amount: perPage }); |
683 | {% endif %} |
684 | - |
685 | {% if team.pixie_id %} |
686 | $('#pixie').pixie({ key: "{{ pixie_api_key }}", id: "{{ team.pixie_id }}", amount: perPage }); |
687 | {% endif %} |
688 | - |
689 | - if ($(location).attr('hash') == "#chat") { |
690 | - $('#webchat').show('fast', function() { |
691 | - $(window).scrollTop($('#webchat').position().top); |
692 | - }); |
693 | - } |
694 | }); |
695 | </script> |
696 | {% if team.flickr_id or team.picasa_id or team.pixie_id %} |
697 | |
698 | {% endif %} |
699 | -<link type="application/rss+xml" rel="alternate" title="{% trans "Team Events (RSS)" %}" href="{% url team-events-rss team.lp_name %}" /> |
700 | +<link type="application/rss+xml" rel="alternate" title="{% trans "Team (RSS)" %}" href="/feeds/teams/{{ team.lp_name }}" /> |
701 | {% endblock %} |
702 | |
703 | {% block content %} |
704 | @@ -189,7 +176,7 @@ |
705 | <a href="{% url team-event-history team.lp_name %}" title="{% trans "Past Events" %}">{% trans "Past Events" %}</a> |
706 | </span> |
707 | <span> |
708 | - <a class="pictogram rss action" href="{% url team-events-rss team.lp_name %}" title="{% trans "RSS Feed" %}"></a> |
709 | + <a class="pictogram rss action" href="/feeds/teams/{{ team.lp_name }}" title="{% trans "RSS Feed" %}"></a> |
710 | </span> |
711 | <span> |
712 | <a class="pictogram ical action" href="{% url team-calendar team.lp_name %}" title="{% trans "iCal Feed" %}"></a> |
713 | |
714 | === modified file 'loco_directory/templates/teams/team_event_list.html' |
715 | --- loco_directory/templates/teams/team_event_list.html 2012-06-02 11:50:27 +0000 |
716 | +++ loco_directory/templates/teams/team_event_list.html 2012-11-26 23:13:22 +0000 |
717 | @@ -6,13 +6,13 @@ |
718 | {% block sub_nav_links %} |
719 | <li><a class="sub-nav-item" href="{% url team-detail team_object.lp_name %}">{% trans "Back to Team Details" %}</a></li> |
720 | <li><a class="sub-nav-item" href="{% url team-event-history team_object.lp_name %}">{% trans "Past Events" %}</a></li> |
721 | -<li><a class="sub-nav-item" href="{% url team-events-rss team_object.lp_name %}" title="{% trans "Team Events (RSS)" %}"">{% trans "Team Events (RSS)" %}</a></li> |
722 | +<li><a class="sub-nav-item" href="/feeds/events/{{ team_object.lp_name }}" title="{% trans "Team Events (RSS)" %}">{% trans "Team Events (RSS)" %}</a></li> |
723 | {% if is_member %}<li><a class="sub-nav-item" href="{% url team-event-new team_object.lp_name %}" title="{% trans "Add New Event" %}">{% trans "Add New Event" %}</a></li>{% endif %} |
724 | {% endblock %} |
725 | |
726 | |
727 | {% block extrahead %}{{ block.super }} |
728 | -<link type="application/rss+xml" rel="alternate" title="Team Events (RSS)" href="{% url team-events-rss team_object.lp_name %}" /> |
729 | +<link type="application/rss+xml" rel="alternate" title="Team Events (RSS)" href="/feeds/events/{{ team_object.lp_name }}" /> |
730 | {% endblock %} |
731 | |
732 | {% block content %} |
733 | |
734 | === modified file 'loco_directory/templates/teams/team_meeting_list.html' |
735 | --- loco_directory/templates/teams/team_meeting_list.html 2012-06-02 11:50:27 +0000 |
736 | +++ loco_directory/templates/teams/team_meeting_list.html 2012-11-26 23:13:22 +0000 |
737 | @@ -6,13 +6,12 @@ |
738 | {% block sub_nav_links %} |
739 | <li><a class="sub-nav-item" href="{% url team-detail team_object.lp_name %}">{% trans "Back to Team Details" %}</a></li> |
740 | <li><a class="sub-nav-item" href="{% url team-meeting-history team_object.lp_name %}">{% trans "Past Meetings" %}</a></li> |
741 | -<li><a class="sub-nav-item" href="{% url team-meetings-rss team_object.lp_name %}" title="{% trans "Team Meetings (RSS)" %}"">{% trans "Team Meetings (RSS)" %}</a></li> |
742 | +<li><a class="sub-nav-item" href="/feeds/meetings/{{ team_object.lp_name }}" title="{% trans "Team Meetings (RSS)" %}">{% trans "Team Meetings (RSS)" %}</a></li> |
743 | {% endblock %} |
744 | |
745 | |
746 | {% block extrahead %}{{ block.super }} |
747 | -<link type="application/rss+xml" rel="alternate" title="Team Meetings (RSS)" href="{% url team-meetings-rss team_object.lp_name %}" /> |
748 | -{% endblock %} |
749 | +<link type="application/rss+xml" rel="alternate" title="Team Meetings (RSS)" href="/feeds/meetings/{{ team_object.lp_name }}" />{% endblock %} |
750 | |
751 | {% block content %} |
752 | <div class="row"> |
753 | |
754 | === modified file 'loco_directory/urls.py' |
755 | --- loco_directory/urls.py 2012-11-18 22:02:56 +0000 |
756 | +++ loco_directory/urls.py 2012-11-26 23:13:22 +0000 |
757 | @@ -7,6 +7,17 @@ |
758 | |
759 | admin.autodiscover() |
760 | |
761 | +from events.feeds import TeamEventFeed, GlobalEventFeed |
762 | +from meetings.feeds import TeamMeetingFeed |
763 | +from teams.feeds import TeamFeed |
764 | + |
765 | +feeds = { |
766 | + 'teams': TeamFeed, |
767 | + 'events': TeamEventFeed, |
768 | + 'globalevents': GlobalEventFeed, |
769 | + 'meetings': TeamMeetingFeed, |
770 | +} |
771 | + |
772 | urlpatterns = patterns('', |
773 | url(r'^$', 'common.views.index', name='home'), |
774 | url(r'^language/', 'common.views.set_language', name='set_language'), |
775 | @@ -27,6 +38,7 @@ |
776 | url(r'^jsi18n', 'django.views.i18n.javascript_catalog', name='jsi18n'), |
777 | url(r'^services/', include('services.urls')), |
778 | url(r'^search/', 'common.views.site_search', name='site_search'), |
779 | + url(r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds}, name='feed_view'), |
780 | url(r'', include('userprofiles.urls')), |
781 | ) |
782 |