Merge lp:~daker/loco-team-portal/fix.rss-feeds into lp:loco-team-portal

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
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

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

Subscribers

People subscribed via source and target branches