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
=== added file 'loco_directory/events/feeds.py'
--- loco_directory/events/feeds.py 1970-01-01 00:00:00 +0000
+++ loco_directory/events/feeds.py 2012-11-26 23:13:22 +0000
@@ -0,0 +1,55 @@
1from django.core.exceptions import ObjectDoesNotExist
2from django.core.urlresolvers import reverse
3from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
4from django.utils.translation import ugettext as _
5from events.models import TeamEvent, GlobalEvent
6from teams.models import Team
7
8import datetime
9
10class TeamEventFeed(Feed):
11 def get_object(self, bits):
12 if len(bits) >= 1:
13 if bits[0] == 'all':
14 return 'all'
15 else:
16 try:
17 return Team.objects.get(lp_name=bits[0])
18 except:
19 raise ObjectDoesNotExist
20 return None
21
22 def items(self, obj):
23 if isinstance(obj, Team):
24 return TeamEvent.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15]
25 else:
26 return TeamEvent.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15]
27
28 def title(self, obj):
29 if isinstance(obj, Team):
30 return _('Upcoming Events for %(teamname)s' % {'teamname': obj.name})
31 else:
32 return _('Upcoming Events')
33
34 def link(self, obj):
35 if isinstance(obj, Team):
36 return reverse('team-event-list', kwargs={'team_slug': obj.lp_name})
37 else:
38 return reverse('event-list')
39
40
41class GlobalEventFeed(TeamEventFeed):
42 def items(self, obj):
43 if isinstance(obj, Team):
44 return GlobalEvent.objects.filter(teamevent__teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15]
45 else:
46 return GlobalEvent.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15]
47
48 def title(self, obj):
49 if isinstance(obj, Team):
50 return _('Upcoming Global Events where %(teamname)s is participating' % {'teamname': obj.name})
51 else:
52 return _('Upcoming Global Events')
53
54 def link(self, obj):
55 return reverse('event-list')
056
=== modified file 'loco_directory/events/views.py'
--- loco_directory/events/views.py 2012-11-05 21:16:15 +0000
+++ loco_directory/events/views.py 2012-11-26 23:13:22 +0000
@@ -217,26 +217,7 @@
217217
218218
219def team_events_rss(request, team_slug):219def team_events_rss(request, team_slug):
220 team_object = get_object_or_404(Team, lp_name=team_slug)220 return redirect('/feeds/events/%s/' % team_slug, permanent=True)
221 events = TeamEvent.objects.filter(teams__lp_name=team_slug, date_end__gt=datetime.datetime.now()).order_by('date_begin')[:15]
222
223 if request.META.has_key('wsgi.url_scheme'):
224 scheme = request.META.get('wsgi.url_scheme')
225 else:
226 scheme = 'http'
227
228 if request.META.has_key('HTTP_HOST'):
229 host = request.META.get('HTTP_HOST')
230 else:
231 host = request.META.get('SERVER_NAME')
232
233 if request.META.get('SERVER_PORT', 80) == 80 or request.META.get('SERVER_PORT', 80) == 0:
234 base = '%s://%s' % (scheme, host)
235 else:
236 base = '%s://%s:%s' % (scheme, host, request.META.get('SERVER_PORT', 80))
237
238 context = {'team_object': team_object, 'events': events, 'base': base}
239 return render_to_response('events/team_events_rss.xml', context, RequestContext(request), mimetype='application/xhtml+xml')
240221
241222
242@login_required223@login_required
@@ -383,8 +364,8 @@
383 create a comment for a team event364 create a comment for a team event
384 """365 """
385 team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)366 team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
386 367
387 if request.method == 'POST': 368 if request.method == 'POST':
388 form = TeamEventCommentForm(data=request.POST)369 form = TeamEventCommentForm(data=request.POST)
389 if form.is_valid():370 if form.is_valid():
390 team_event_comment = form.save(commit=False)371 team_event_comment = form.save(commit=False)
@@ -397,7 +378,7 @@
397 return redirect( team_event_object )378 return redirect( team_event_object )
398 else:379 else:
399 form = TeamEventCommentForm()380 form = TeamEventCommentForm()
400 381
401 context = {382 context = {
402 'team_event_object': team_event_object,383 'team_event_object': team_event_object,
403 'form': form,384 'form': form,
@@ -596,7 +577,7 @@
596 """577 """
597 update a comment for a team event578 update a comment for a team event
598 """579 """
599 if request.method == 'POST': 580 if request.method == 'POST':
600 response_dict = {}581 response_dict = {}
601 id = request.POST.get('id', False)582 id = request.POST.get('id', False)
602 comment = request.POST.get('comment', False)583 comment = request.POST.get('comment', False)
@@ -614,7 +595,7 @@
614 else:595 else:
615 response_dict.update({'success': False, 'response': _('Missing arguments.') })596 response_dict.update({'success': False, 'response': _('Missing arguments.') })
616 else:597 else:
617 response_dict.update({'success': False, 'response': _('You can\'t edit this comment using this method.') }) 598 response_dict.update({'success': False, 'response': _('You can\'t edit this comment using this method.') })
618 return HttpResponse(simplejson.dumps(response_dict), mimetype='application/json')599 return HttpResponse(simplejson.dumps(response_dict), mimetype='application/json')
619600
620@login_required601@login_required
621602
=== added file 'loco_directory/meetings/feeds.py'
--- loco_directory/meetings/feeds.py 1970-01-01 00:00:00 +0000
+++ loco_directory/meetings/feeds.py 2012-11-26 23:13:22 +0000
@@ -0,0 +1,40 @@
1from django.core.exceptions import ObjectDoesNotExist
2from django.core.urlresolvers import reverse
3from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
4from django.utils.translation import ugettext as _
5from meetings.models import TeamMeeting
6from teams.models import Team
7
8import datetime
9
10
11class TeamMeetingFeed(Feed):
12 def get_object(self, bits):
13 if len(bits) >= 1:
14 if bits[0] == 'all':
15 return 'all'
16 else:
17 try:
18 return Team.objects.get(lp_name=bits[0])
19 except:
20 raise ObjectDoesNotExist
21 return None
22
23 def items(self, obj):
24 if isinstance(obj, Team):
25 return TeamMeeting.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15]
26 else:
27 return TeamMeeting.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')[:15]
28
29 def title(self, obj):
30 if isinstance(obj, Team):
31 return _('Upcoming Meetings for %(teamname)s' % {'teamname': obj.name})
32 else:
33 return _('Upcoming Meetings')
34
35 def link(self, obj):
36 if isinstance(obj, Team):
37 return reverse('team-meeting-list', kwargs={'team_slug': obj.lp_name})
38 else:
39 return reverse('meeting-list')
40
041
=== modified file 'loco_directory/meetings/views.py'
--- loco_directory/meetings/views.py 2012-07-14 20:07:11 +0000
+++ loco_directory/meetings/views.py 2012-11-26 23:13:22 +0000
@@ -50,9 +50,9 @@
50 for meeting in meetings:50 for meeting in meetings:
51 meeting.as_ical(calendar)51 meeting.as_ical(calendar)
52 response.write(calendar.serialize())52 response.write(calendar.serialize())
53 53
54 return response54 return response
55 55
5656
57def meeting_ical(request, team_slug, team_meeting_id):57def meeting_ical(request, team_slug, team_meeting_id):
58 """58 """
@@ -126,7 +126,7 @@
126 'team_meeting_object': team_meeting_object,126 'team_meeting_object': team_meeting_object,
127 'user_is_team_member': is_member,127 'user_is_team_member': is_member,
128 }128 }
129 return render_to_response('meetings/team_meeting_detail.html', 129 return render_to_response('meetings/team_meeting_detail.html',
130 context, RequestContext(request))130 context, RequestContext(request))
131131
132@login_required132@login_required
@@ -135,7 +135,7 @@
135 delete a meeting135 delete a meeting
136 """136 """
137 team_meeting_object = get_object_or_404(TeamMeeting, pk=team_meeting_id)137 team_meeting_object = get_object_or_404(TeamMeeting, pk=team_meeting_id)
138 138
139 is_on_lc = launchpad.is_user_on_loco_council(request.user)139 is_on_lc = launchpad.is_user_on_loco_council(request.user)
140 #check if user is admin or owner of a team140 #check if user is admin or owner of a team
141 is_contact = False141 is_contact = False
@@ -145,7 +145,7 @@
145 break145 break
146146
147 if is_on_lc or is_contact:147 if is_on_lc or is_contact:
148 if request.method == 'POST': 148 if request.method == 'POST':
149 team_meeting_object.delete()149 team_meeting_object.delete()
150 request.user.message_set.create(message=_('Team Meeting removed.'))150 request.user.message_set.create(message=_('Team Meeting removed.'))
151 return redirect( 'meeting-list' )151 return redirect( 'meeting-list' )
@@ -172,26 +172,7 @@
172 return render_to_response('meetings/team_meeting_new_select.html', context, RequestContext(request))172 return render_to_response('meetings/team_meeting_new_select.html', context, RequestContext(request))
173173
174def team_meetings_rss(request, team_slug):174def team_meetings_rss(request, team_slug):
175 team_object = get_object_or_404(Team, lp_name=team_slug)175 return redirect('/feeds/meetings/%s/' % team_slug, permanent=True)
176 meetings = TeamMeeting.objects.filter(teams__lp_name=team_slug, date_end__gt=datetime.datetime.now()).order_by('date_begin')[:15]
177
178 if request.META.has_key('wsgi.url_scheme'):
179 scheme = request.META.get('wsgi.url_scheme')
180 else:
181 scheme = 'http'
182
183 if request.META.has_key('HTTP_HOST'):
184 host = request.META.get('HTTP_HOST')
185 else:
186 host = request.META.get('SERVER_NAME')
187
188 if request.META.get('SERVER_PORT', 80) == 80 or request.META.get('SERVER_PORT', 80) == 0:
189 base = '%s://%s' % (scheme, host)
190 else:
191 base = '%s://%s:%s' % (scheme, host, request.META.get('SERVER_PORT', 80))
192
193 context = {'team_object': team_object, 'meetings': meetings, 'base':base}
194 return render_to_response('meetings/team_meetings_rss.xml', context, RequestContext(request), mimetype='application/xhtml+xml')
195176
196@login_required177@login_required
197def team_meeting_new(request, team_slug):178def team_meeting_new(request, team_slug):
@@ -199,11 +180,11 @@
199 new team meeting180 new team meeting
200 """181 """
201 team_object = get_object_or_404(Team, lp_name=team_slug)182 team_object = get_object_or_404(Team, lp_name=team_slug)
202 183
203 is_on_lc = launchpad.is_user_on_loco_council(request.user)184 is_on_lc = launchpad.is_user_on_loco_council(request.user)
204 is_member = launchpad.is_team_member(request.user, team_object)185 is_member = launchpad.is_team_member(request.user, team_object)
205 186
206 team_meeting_object = TeamMeeting(chair=team_object.owner_profile, 187 team_meeting_object = TeamMeeting(chair=team_object.owner_profile,
207 channel=team_object.irc_chan)188 channel=team_object.irc_chan)
208 if is_on_lc or is_member:189 if is_on_lc or is_member:
209 if request.method == 'POST':190 if request.method == 'POST':
@@ -211,16 +192,16 @@
211 if form.is_valid():192 if form.is_valid():
212 team_meeting = form.save()193 team_meeting = form.save()
213 team_meeting.teams.add(team_object)194 team_meeting.teams.add(team_object)
214 team_meeting_id = team_meeting.id 195 team_meeting_id = team_meeting.id
215 return HttpResponseRedirect(team_meeting_object.get_absolute_url())196 return HttpResponseRedirect(team_meeting_object.get_absolute_url())
216 else:197 else:
217 form = TeamMeetingForm(teams=[team_object], instance=team_meeting_object)198 form = TeamMeetingForm(teams=[team_object], instance=team_meeting_object)
218 199
219 context = {200 context = {
220 'team_object': team_object,201 'team_object': team_object,
221 'form': form,202 'form': form,
222 }203 }
223 return render_to_response('meetings/team_meeting_new.html', 204 return render_to_response('meetings/team_meeting_new.html',
224 context, RequestContext(request))205 context, RequestContext(request))
225 else:206 else:
226 # XXX: Once we move to a new ACL system, this needs fixing.207 # XXX: Once we move to a new ACL system, this needs fixing.
@@ -232,13 +213,13 @@
232 """213 """
233 copy team meeting214 copy team meeting
234 """215 """
235 216
236 team_meeting = get_object_or_404(TeamMeeting, pk=team_meeting_id)217 team_meeting = get_object_or_404(TeamMeeting, pk=team_meeting_id)
237 team_object = team_meeting.teams.all()[0]218 team_object = team_meeting.teams.all()[0]
238219
239 is_on_lc = launchpad.is_user_on_loco_council(request.user)220 is_on_lc = launchpad.is_user_on_loco_council(request.user)
240 is_member = launchpad.is_team_member(request.user, team_object)221 is_member = launchpad.is_team_member(request.user, team_object)
241 222
242 if is_on_lc or is_member:223 if is_on_lc or is_member:
243 if request.method == 'POST':224 if request.method == 'POST':
244 form = TeamMeetingForm(instance=team_meeting, data=request.POST, teams=team_meeting.teams.all())225 form = TeamMeetingForm(instance=team_meeting, data=request.POST, teams=team_meeting.teams.all())
@@ -246,16 +227,16 @@
246 if form.is_valid():227 if form.is_valid():
247 team_meeting = form.save()228 team_meeting = form.save()
248 team_meeting.teams.add(team_object)229 team_meeting.teams.add(team_object)
249 team_meeting_id = team_meeting.id 230 team_meeting_id = team_meeting.id
250 return HttpResponseRedirect(team_meeting.get_absolute_url())231 return HttpResponseRedirect(team_meeting.get_absolute_url())
251 else:232 else:
252 form = TeamMeetingForm(instance=team_meeting, teams=team_meeting.teams.all())233 form = TeamMeetingForm(instance=team_meeting, teams=team_meeting.teams.all())
253 234
254 context = {235 context = {
255 'team_object': team_object,236 'team_object': team_object,
256 'form': form,237 'form': form,
257 }238 }
258 return render_to_response('meetings/team_meeting_new.html', 239 return render_to_response('meetings/team_meeting_new.html',
259 context, RequestContext(request))240 context, RequestContext(request))
260 else:241 else:
261 # XXX: Once we move to a new ACL system, this needs fixing.242 # XXX: Once we move to a new ACL system, this needs fixing.
@@ -274,11 +255,11 @@
274 if launchpad.is_team_member(request.user, team):255 if launchpad.is_team_member(request.user, team):
275 is_member = True256 is_member = True
276 break257 break
277 258
278 is_on_lc = launchpad.is_user_on_loco_council(request.user)259 is_on_lc = launchpad.is_user_on_loco_council(request.user)
279 260
280 if is_on_lc or is_member:261 if is_on_lc or is_member:
281 if request.method == 'POST': 262 if request.method == 'POST':
282 form = TeamMeetingForm(data=request.POST, instance=team_meeting_object)263 form = TeamMeetingForm(data=request.POST, instance=team_meeting_object)
283 if form.is_valid():264 if form.is_valid():
284 form.save()265 form.save()
@@ -286,11 +267,11 @@
286 return redirect( team_meeting_object )267 return redirect( team_meeting_object )
287 else:268 else:
288 form = TeamMeetingForm(instance=team_meeting_object)269 form = TeamMeetingForm(instance=team_meeting_object)
289 270
290 context = {271 context = {
291 'form': form,272 'form': form,
292 }273 }
293 return render_to_response('meetings/team_meeting_update.html', 274 return render_to_response('meetings/team_meeting_update.html',
294 context, RequestContext(request))275 context, RequestContext(request))
295 else:276 else:
296 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.')))277 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.')))
@@ -304,11 +285,11 @@
304 team_meeting_object = get_object_or_404(TeamMeeting, pk=team_meeting_id)285 team_meeting_object = get_object_or_404(TeamMeeting, pk=team_meeting_id)
305 try:286 try:
306 user = UserProfile.objects.get(user=request.user)287 user = UserProfile.objects.get(user=request.user)
307 agenda_item_object = AgendaItem(meeting=team_meeting_object, 288 agenda_item_object = AgendaItem(meeting=team_meeting_object,
308 owner=user,289 owner=user,
309 created_date=datetime.datetime.now())290 created_date=datetime.datetime.now())
310 except UserProfile.DoesNotExist:291 except UserProfile.DoesNotExist:
311 agenda_item_object = AgendaItem(meeting=team_meeting_object, 292 agenda_item_object = AgendaItem(meeting=team_meeting_object,
312 created_date=datetime.datetime.now())293 created_date=datetime.datetime.now())
313 is_member = False294 is_member = False
314 for team in team_meeting_object.teams.all():295 for team in team_meeting_object.teams.all():
@@ -316,7 +297,7 @@
316 is_member = True297 is_member = True
317 break298 break
318 is_on_lc = launchpad.is_user_on_loco_council(request.user)299 is_on_lc = launchpad.is_user_on_loco_council(request.user)
319 300
320 if is_on_lc or is_member:301 if is_on_lc or is_member:
321 if request.method == 'POST':302 if request.method == 'POST':
322 form = AgendaItemForm(data=request.POST, instance=agenda_item_object)303 form = AgendaItemForm(data=request.POST, instance=agenda_item_object)
@@ -326,12 +307,12 @@
326 return redirect( team_meeting_object )307 return redirect( team_meeting_object )
327 else:308 else:
328 form = AgendaItemForm(instance=agenda_item_object)309 form = AgendaItemForm(instance=agenda_item_object)
329 310
330 context = {311 context = {
331 'team_meeting_object': team_meeting_object,312 'team_meeting_object': team_meeting_object,
332 'form': form,313 'form': form,
333 }314 }
334 return render_to_response('meetings/agenda_item_new.html', 315 return render_to_response('meetings/agenda_item_new.html',
335 context, RequestContext(request))316 context, RequestContext(request))
336 else:317 else:
337 # XXX: Once we move to a new ACL system, this needs fixing.318 # XXX: Once we move to a new ACL system, this needs fixing.
@@ -351,11 +332,11 @@
351 if launchpad.is_team_member(request.user, team):332 if launchpad.is_team_member(request.user, team):
352 is_member = True333 is_member = True
353 break334 break
354 335
355 is_on_lc = launchpad.is_user_on_loco_council(request.user)336 is_on_lc = launchpad.is_user_on_loco_council(request.user)
356 337
357 if is_on_lc or is_member:338 if is_on_lc or is_member:
358 if request.method == 'POST': 339 if request.method == 'POST':
359 form = AgendaItemForm(data=request.POST, instance=agenda_item_object)340 form = AgendaItemForm(data=request.POST, instance=agenda_item_object)
360 if form.is_valid():341 if form.is_valid():
361 form.save()342 form.save()
@@ -363,13 +344,13 @@
363 return redirect( team_meeting_object )344 return redirect( team_meeting_object )
364 else:345 else:
365 form = AgendaItemForm(instance=agenda_item_object)346 form = AgendaItemForm(instance=agenda_item_object)
366 347
367 context = {348 context = {
368 'team_meeting_object': team_meeting_object,349 'team_meeting_object': team_meeting_object,
369 'agenda_item_object': agenda_item_object,350 'agenda_item_object': agenda_item_object,
370 'form': form,351 'form': form,
371 }352 }
372 return render_to_response('meetings/agenda_item_update.html', 353 return render_to_response('meetings/agenda_item_update.html',
373 context, RequestContext(request))354 context, RequestContext(request))
374 else:355 else:
375 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.')))356 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.')))
@@ -388,11 +369,11 @@
388 if launchpad.is_team_member(request.user, team):369 if launchpad.is_team_member(request.user, team):
389 is_member = True370 is_member = True
390 break371 break
391 372
392 is_on_lc = launchpad.is_user_on_loco_council(request.user)373 is_on_lc = launchpad.is_user_on_loco_council(request.user)
393 374
394 if is_on_lc or is_member:375 if is_on_lc or is_member:
395 if request.method == 'POST': 376 if request.method == 'POST':
396 agenda_item_object.delete()377 agenda_item_object.delete()
397 request.user.message_set.create(message=_('Agenda Item removed.'))378 request.user.message_set.create(message=_('Agenda Item removed.'))
398 return redirect( team_meeting_object )379 return redirect( team_meeting_object )
399380
=== added file 'loco_directory/teams/feeds.py'
--- loco_directory/teams/feeds.py 1970-01-01 00:00:00 +0000
+++ loco_directory/teams/feeds.py 2012-11-26 23:13:22 +0000
@@ -0,0 +1,56 @@
1# -*- coding: utf-8 -*-
2from django.core.exceptions import ObjectDoesNotExist
3from django.core.urlresolvers import reverse
4from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
5from django.utils.translation import ugettext as _
6from meetings.models import TeamMeeting
7from events.models import TeamEvent
8from teams.models import Team
9
10import datetime
11
12
13class TeamFeed(Feed):
14 def get_object(self, bits):
15 if len(bits) >= 1:
16 if bits[0] == 'all':
17 return 'all'
18 else:
19 try:
20 return Team.objects.get(lp_name=bits[0])
21 except:
22 raise ObjectDoesNotExist
23 return None
24
25 def items(self, obj):
26 if isinstance(obj, Team):
27 meetings = TeamMeeting.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')
28 events = TeamEvent.objects.filter(teams=obj, date_end__gt=datetime.datetime.now()).order_by('-date_begin')
29 else:
30 meetings = TeamMeeting.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')
31 events = TeamEvent.objects.filter(date_end__gt=datetime.datetime.now()).order_by('-date_begin')
32
33 events_and_meetings = []
34 events = events[:15].iterator()
35 meetings = meetings[:15].iterator()
36 for event in events:
37 events_and_meetings.append(event)
38 for meeting in meetings:
39 events_and_meetings.append(meeting)
40
41 events_and_meetings.sort(key=lambda event: event.date_begin)
42 return events_and_meetings
43
44 def title(self, obj):
45 if isinstance(obj, Team):
46 return _('Upcoming Events and Meetings for %(teamname)s' % {'teamname': obj.name})
47 else:
48 return _('Upcoming Events and Meetings')
49
50 def link(self, obj):
51 if isinstance(obj, Team):
52 return obj.get_absolute_url()
53 else:
54 return '/'
55
56
057
=== modified file 'loco_directory/teams/views.py'
--- loco_directory/teams/views.py 2012-11-18 22:02:56 +0000
+++ loco_directory/teams/views.py 2012-11-26 23:13:22 +0000
@@ -83,15 +83,18 @@
83 return render_to_response('teams/team_list.html', context,83 return render_to_response('teams/team_list.html', context,
84 RequestContext(request))84 RequestContext(request))
8585
86def get_events_and_meetings(team_object):
87 team_events = list(TeamEvent.objects.filter(teams=team_object))
88 team_meetings = list(TeamMeeting.objects.filter(teams=team_object))
89 team_events.extend(team_meetings)
90 return team_events
91
86def team_ical(request, team_slug):92def team_ical(request, team_slug):
87 """93 """
88 Return a ical list with the events and meetings in ical format.94 Return a ical list with the events and meetings in ical format.
89 """95 """
90 team_object = get_object_or_404(Team, lp_name=team_slug)96 team_object = get_object_or_404(Team, lp_name=team_slug)
91 team_events = list(TeamEvent.objects.filter(teams__lp_name=team_slug))97 return as_ical(get_events_and_meetings(team_object), team_object.name)
92 team_meetings = list(TeamMeeting.objects.filter(teams__lp_name=team_slug))
93 team_events.extend(team_meetings)
94 return as_ical(team_events, team_object.name)
9598
96def team_event_list(request, team_slug):99def team_event_list(request, team_slug):
97 """100 """
98101
=== removed file 'loco_directory/templates/events/team_events_rss.xml'
--- loco_directory/templates/events/team_events_rss.xml 2011-03-16 17:20:55 +0000
+++ loco_directory/templates/events/team_events_rss.xml 1970-01-01 00:00:00 +0000
@@ -1,24 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2{% load i18n %}
3<rss version="2.0">
4 <channel>
5 <title>{% blocktrans with team_object.name as team_name %}Upcoming Events for {{team_name}}{% endblocktrans %}</title>
6 <link>{{base}}{% url team-event-list team_object.lp_name %}</link>
7
8 {% for e in events %}
9 <item>
10 <title> {{ e.name }}</title>
11 <link>{{base}}{% url team-event-detail e.first_team.lp_name e.id %}</link>
12 <description>{% trans "When:" %} {% spaceless %}
13 {% ifequal e.date_begin|date e.date_end|date %}
14 {{ e.date_begin|date:"D, d N Y H:i" }} - {{ e.date_end|date:"H:i O" }}
15 {% else %}
16 {{ e.date_begin|date:"D, d N Y H:i" }} - {{ e.date_end|date:"D, d N Y H:i O" }}
17 {% endifequal %}
18 {% endspaceless %}{% if e.venue.name %} | {% trans "Where:" %} {{ e.venue.name }}{% endif %}
19 {% if e.description %} | {% trans "Description:" %} {{ e.description }}{% endif %}</description>
20 <guid>{{base}}{% url team-event-detail e.first_team.lp_name e.id %}</guid>
21 </item>
22 {% endfor %}
23 </channel>
24</rss>
250
=== added directory 'loco_directory/templates/feeds'
=== added file 'loco_directory/templates/feeds/events_description.html'
--- loco_directory/templates/feeds/events_description.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/events_description.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,10 @@
1{% load i18n %}
2{% trans "When:" %} {% spaceless %}
3{% ifequal obj.date_begin|date obj.date_end|date %}
4 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }}
5{% else %}
6 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }}
7{% endifequal %}
8{% endspaceless %}
9{% if obj.venue.name %} | {% trans "Where:" %} {{ obj.venue.name }}{% endif %}
10{% if obj.description %} | {% trans "Description:" %} {{ obj.description }}{% endif %}
011
=== added file 'loco_directory/templates/feeds/events_title.html'
--- loco_directory/templates/feeds/events_title.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/events_title.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,1 @@
1{{ obj.name }}
02
=== added file 'loco_directory/templates/feeds/globalevents_description.html'
--- loco_directory/templates/feeds/globalevents_description.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/globalevents_description.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,9 @@
1{% load i18n %}
2{% trans "When:" %} {% spaceless %}
3{% ifequal obj.date_begin|date obj.date_end|date %}
4 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }}
5{% else %}
6 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }}
7{% endifequal %}
8{% endspaceless %}
9{% if obj.description %} | {% trans "Description:" %} {{ obj.description }}{% endif %}
010
=== added file 'loco_directory/templates/feeds/globalevents_title.html'
--- loco_directory/templates/feeds/globalevents_title.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/globalevents_title.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,1 @@
1{{ obj.name }}
02
=== added file 'loco_directory/templates/feeds/meetings_description.html'
--- loco_directory/templates/feeds/meetings_description.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/meetings_description.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,8 @@
1{% load i18n %}
2{% trans "When:" %} {% spaceless %}
3{% ifequal obj.date_begin|date obj.date_end|date %}
4 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }}
5{% else %}
6 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }}
7{% endifequal %}
8{% endspaceless %}
09
=== added file 'loco_directory/templates/feeds/meetings_title.html'
--- loco_directory/templates/feeds/meetings_title.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/meetings_title.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,1 @@
1{{ obj.name }}
02
=== added file 'loco_directory/templates/feeds/teams_description.html'
--- loco_directory/templates/feeds/teams_description.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/teams_description.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,10 @@
1{% load i18n %}
2{% trans "When:" %} {% spaceless %}
3{% ifequal obj.date_begin|date obj.date_end|date %}
4 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"H:i O" }}
5{% else %}
6 {{ obj.date_begin|date:"D, d N Y H:i" }} - {{ obj.date_end|date:"D, d N Y H:i O" }}
7{% endifequal %}
8{% endspaceless %}
9{% if obj.venue.name %} | {% trans "Where:" %} {{ obj.venue.name }}{% endif %}
10{% if obj.description %} | {% trans "Description:" %} {{ obj.description }}{% endif %}
011
=== added file 'loco_directory/templates/feeds/teams_title.html'
--- loco_directory/templates/feeds/teams_title.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/feeds/teams_title.html 2012-11-26 23:13:22 +0000
@@ -0,0 +1,1 @@
1{{ obj.name }}
02
=== removed file 'loco_directory/templates/meetings/team_meetings_rss.xml'
--- loco_directory/templates/meetings/team_meetings_rss.xml 2011-06-17 17:10:41 +0000
+++ loco_directory/templates/meetings/team_meetings_rss.xml 1970-01-01 00:00:00 +0000
@@ -1,23 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2{% load i18n %}
3<rss version="2.0">
4 <channel>
5 <title>{% blocktrans with team_object.name as team_name %}Upcoming Meetings for {{team_name}}{% endblocktrans %}</title>
6 <link>{{base}}{% url team-meeting-list team_object.lp_name %}</link>
7
8 {% for e in meetings %}
9 <item>
10 <title> {{ e.name }}</title>
11 <link>{{base}}{% url team-meeting-detail e.first_team.lp_name e.id %}</link>
12 <description>{% trans "When:" %} {% spaceless %}
13 {% ifequal e.date_begin|date e.local_date_end|date %}
14 {{ e.local_date_begin|date:"D, d N Y H:i" }} - {{ e.local_date_end|date:"H:i T" }}
15 {% else %}
16 {{ e.local_date_begin|date:"D, d N Y H:i" }} - {{ e.local_date_end|date:"D, d N Y H:i T" }}
17 {% endifequal %}
18 {% endspaceless %}</description>
19 <guid>{{base}}{% url team-meeting-detail e.first_team.lp_name e.id %}</guid>
20 </item>
21 {% endfor %}
22 </channel>
23</rss>
240
=== modified file 'loco_directory/templates/teams/team_detail.html'
--- loco_directory/templates/teams/team_detail.html 2012-11-12 20:25:25 +0000
+++ loco_directory/templates/teams/team_detail.html 2012-11-26 23:13:22 +0000
@@ -3,10 +3,6 @@
33
4{% block page_name %}{% trans team.name %}{% endblock %}4{% block page_name %}{% trans team.name %}{% endblock %}
55
6{% block page_banner %}
7<img src="{{MEDIA_URL}}img/banner.png" title="Test Banner"/>
8{% endblock %}
9
10{% block sub_nav_links %}6{% block sub_nav_links %}
11 <li><a class="sub-nav-item" href="{% url team-list %}" title="{% trans "Back to Teams List" %}">{% trans "Back to Teams List" %}</a></li>7 <li><a class="sub-nav-item" href="{% url team-list %}" title="{% trans "Back to Teams List" %}">{% trans "Back to Teams List" %}</a></li>
12 {% 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 %}8 {% 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 %}
@@ -46,30 +42,21 @@
46 'http://search.twitter.com/',42 'http://search.twitter.com/',
47 ]43 ]
48 });44 });
49
50 {% if team.flickr_id %}45 {% if team.flickr_id %}
51 $('#flickr').flickr({ key: "{{ flickr_api_key }}", id: "{{ team.flickr_id }}", amount: perPage });46 $('#flickr').flickr({ key: "{{ flickr_api_key }}", id: "{{ team.flickr_id }}", amount: perPage });
52 {% endif %}47 {% endif %}
53
54 {% if team.picasa_id %}48 {% if team.picasa_id %}
55 $('#picasa').picasa({ id: "{{ team.picasa_id }}", amount: perPage });49 $('#picasa').picasa({ id: "{{ team.picasa_id }}", amount: perPage });
56 {% endif %}50 {% endif %}
57
58 {% if team.pixie_id %}51 {% if team.pixie_id %}
59 $('#pixie').pixie({ key: "{{ pixie_api_key }}", id: "{{ team.pixie_id }}", amount: perPage });52 $('#pixie').pixie({ key: "{{ pixie_api_key }}", id: "{{ team.pixie_id }}", amount: perPage });
60 {% endif %}53 {% endif %}
61
62 if ($(location).attr('hash') == "#chat") {
63 $('#webchat').show('fast', function() {
64 $(window).scrollTop($('#webchat').position().top);
65 });
66 }
67});54});
68</script>55</script>
69{% if team.flickr_id or team.picasa_id or team.pixie_id %}56{% if team.flickr_id or team.picasa_id or team.pixie_id %}
7057
71{% endif %}58{% endif %}
72<link type="application/rss+xml" rel="alternate" title="{% trans "Team Events (RSS)" %}" href="{% url team-events-rss team.lp_name %}" />59<link type="application/rss+xml" rel="alternate" title="{% trans "Team (RSS)" %}" href="/feeds/teams/{{ team.lp_name }}" />
73{% endblock %}60{% endblock %}
7461
75{% block content %}62{% block content %}
@@ -189,7 +176,7 @@
189 <a href="{% url team-event-history team.lp_name %}" title="{% trans "Past Events" %}">{% trans "Past Events" %}</a>176 <a href="{% url team-event-history team.lp_name %}" title="{% trans "Past Events" %}">{% trans "Past Events" %}</a>
190 </span>177 </span>
191 <span>178 <span>
192 <a class="pictogram rss action" href="{% url team-events-rss team.lp_name %}" title="{% trans "RSS Feed" %}"></a>179 <a class="pictogram rss action" href="/feeds/teams/{{ team.lp_name }}" title="{% trans "RSS Feed" %}"></a>
193 </span>180 </span>
194 <span>181 <span>
195 <a class="pictogram ical action" href="{% url team-calendar team.lp_name %}" title="{% trans "iCal Feed" %}"></a>182 <a class="pictogram ical action" href="{% url team-calendar team.lp_name %}" title="{% trans "iCal Feed" %}"></a>
196183
=== modified file 'loco_directory/templates/teams/team_event_list.html'
--- loco_directory/templates/teams/team_event_list.html 2012-06-02 11:50:27 +0000
+++ loco_directory/templates/teams/team_event_list.html 2012-11-26 23:13:22 +0000
@@ -6,13 +6,13 @@
6{% block sub_nav_links %}6{% block sub_nav_links %}
7<li><a class="sub-nav-item" href="{% url team-detail team_object.lp_name %}">{% trans "Back to Team Details" %}</a></li>7<li><a class="sub-nav-item" href="{% url team-detail team_object.lp_name %}">{% trans "Back to Team Details" %}</a></li>
8<li><a class="sub-nav-item" href="{% url team-event-history team_object.lp_name %}">{% trans "Past Events" %}</a></li>8<li><a class="sub-nav-item" href="{% url team-event-history team_object.lp_name %}">{% trans "Past Events" %}</a></li>
9<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>9<li><a class="sub-nav-item" href="/feeds/events/{{ team_object.lp_name }}" title="{% trans "Team Events (RSS)" %}">{% trans "Team Events (RSS)" %}</a></li>
10{% 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 %}10{% 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 %}
11{% endblock %}11{% endblock %}
1212
1313
14{% block extrahead %}{{ block.super }}14{% block extrahead %}{{ block.super }}
15<link type="application/rss+xml" rel="alternate" title="Team Events (RSS)" href="{% url team-events-rss team_object.lp_name %}" />15<link type="application/rss+xml" rel="alternate" title="Team Events (RSS)" href="/feeds/events/{{ team_object.lp_name }}" />
16{% endblock %}16{% endblock %}
1717
18{% block content %}18{% block content %}
1919
=== modified file 'loco_directory/templates/teams/team_meeting_list.html'
--- loco_directory/templates/teams/team_meeting_list.html 2012-06-02 11:50:27 +0000
+++ loco_directory/templates/teams/team_meeting_list.html 2012-11-26 23:13:22 +0000
@@ -6,13 +6,12 @@
6{% block sub_nav_links %}6{% block sub_nav_links %}
7<li><a class="sub-nav-item" href="{% url team-detail team_object.lp_name %}">{% trans "Back to Team Details" %}</a></li>7<li><a class="sub-nav-item" href="{% url team-detail team_object.lp_name %}">{% trans "Back to Team Details" %}</a></li>
8<li><a class="sub-nav-item" href="{% url team-meeting-history team_object.lp_name %}">{% trans "Past Meetings" %}</a></li>8<li><a class="sub-nav-item" href="{% url team-meeting-history team_object.lp_name %}">{% trans "Past Meetings" %}</a></li>
9<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>9<li><a class="sub-nav-item" href="/feeds/meetings/{{ team_object.lp_name }}" title="{% trans "Team Meetings (RSS)" %}">{% trans "Team Meetings (RSS)" %}</a></li>
10{% endblock %}10{% endblock %}
1111
1212
13{% block extrahead %}{{ block.super }}13{% block extrahead %}{{ block.super }}
14<link type="application/rss+xml" rel="alternate" title="Team Meetings (RSS)" href="{% url team-meetings-rss team_object.lp_name %}" />14<link type="application/rss+xml" rel="alternate" title="Team Meetings (RSS)" href="/feeds/meetings/{{ team_object.lp_name }}" />{% endblock %}
15{% endblock %}
1615
17{% block content %}16{% block content %}
18<div class="row">17<div class="row">
1918
=== modified file 'loco_directory/urls.py'
--- loco_directory/urls.py 2012-11-18 22:02:56 +0000
+++ loco_directory/urls.py 2012-11-26 23:13:22 +0000
@@ -7,6 +7,17 @@
77
8admin.autodiscover()8admin.autodiscover()
99
10from events.feeds import TeamEventFeed, GlobalEventFeed
11from meetings.feeds import TeamMeetingFeed
12from teams.feeds import TeamFeed
13
14feeds = {
15 'teams': TeamFeed,
16 'events': TeamEventFeed,
17 'globalevents': GlobalEventFeed,
18 'meetings': TeamMeetingFeed,
19}
20
10urlpatterns = patterns('',21urlpatterns = patterns('',
11 url(r'^$', 'common.views.index', name='home'),22 url(r'^$', 'common.views.index', name='home'),
12 url(r'^language/', 'common.views.set_language', name='set_language'),23 url(r'^language/', 'common.views.set_language', name='set_language'),
@@ -27,6 +38,7 @@
27 url(r'^jsi18n', 'django.views.i18n.javascript_catalog', name='jsi18n'),38 url(r'^jsi18n', 'django.views.i18n.javascript_catalog', name='jsi18n'),
28 url(r'^services/', include('services.urls')),39 url(r'^services/', include('services.urls')),
29 url(r'^search/', 'common.views.site_search', name='site_search'),40 url(r'^search/', 'common.views.site_search', name='site_search'),
41 url(r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds}, name='feed_view'),
30 url(r'', include('userprofiles.urls')),42 url(r'', include('userprofiles.urls')),
31)43)
3244

Subscribers

People subscribed via source and target branches