Merge lp:~daker/loco-team-portal/fix.876659 into lp:loco-team-portal
- fix.876659
- Merge into 0.2
Proposed by
Adnane Belmadiaf
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Adnane Belmadiaf | ||||
Approved revision: | 568 | ||||
Merged at revision: | 568 | ||||
Proposed branch: | lp:~daker/loco-team-portal/fix.876659 | ||||
Merge into: | lp:loco-team-portal | ||||
Diff against target: |
474 lines (+74/-107) 12 files modified
loco_directory/common/utils.py (+0/-12) loco_directory/events/managers.py (+36/-0) loco_directory/events/models.py (+10/-52) loco_directory/events/urls.py (+4/-3) loco_directory/events/views.py (+10/-16) loco_directory/meetings/views.py (+2/-7) loco_directory/teams/tests.py (+2/-2) loco_directory/teams/views.py (+2/-6) loco_directory/templates/events/team_event_detail.html (+1/-1) loco_directory/templates/events/team_event_detail.inc.html (+5/-5) loco_directory/templates/teams/team_detail.html (+1/-1) loco_directory/userprofiles/models.py (+1/-2) |
||||
To merge this branch: | bzr merge lp:~daker/loco-team-portal/fix.876659 | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
LoCo Team Portal Developers | Pending | ||
Review via email:
|
Commit message
* More SEO friendly urls
* Fixed the tests
* Moved the manages to a sperate file
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 | === modified file 'loco_directory/common/utils.py' | |||
2 | --- loco_directory/common/utils.py 2012-11-09 23:35:39 +0000 | |||
3 | +++ loco_directory/common/utils.py 2012-11-28 00:51:20 +0000 | |||
4 | @@ -49,18 +49,6 @@ | |||
5 | 49 | return reduce(lambda a, b: a.extend(b) or a, some_list) | 49 | return reduce(lambda a, b: a.extend(b) or a, some_list) |
6 | 50 | 50 | ||
7 | 51 | 51 | ||
8 | 52 | # pylint: disable-msg=C0103 | ||
9 | 53 | def redirect(to, *args, **kwargs): | ||
10 | 54 | from distutils.version import LooseVersion as V | ||
11 | 55 | import django | ||
12 | 56 | if V(django.get_version()) > V('1.1'): | ||
13 | 57 | from django.shortcuts import redirect as red | ||
14 | 58 | else: | ||
15 | 59 | from shortcuts import redirect as red | ||
16 | 60 | |||
17 | 61 | return red(to, *args, **kwargs) | ||
18 | 62 | |||
19 | 63 | |||
20 | 64 | def get_locodirectory_version(version_file, debug): | 52 | def get_locodirectory_version(version_file, debug): |
21 | 65 | """ | 53 | """ |
22 | 66 | return the bzr revision number and version of the LoCo Team Portal | 54 | return the bzr revision number and version of the LoCo Team Portal |
23 | 67 | 55 | ||
24 | === added file 'loco_directory/events/managers.py' | |||
25 | --- loco_directory/events/managers.py 1970-01-01 00:00:00 +0000 | |||
26 | +++ loco_directory/events/managers.py 2012-11-28 00:51:20 +0000 | |||
27 | @@ -0,0 +1,36 @@ | |||
28 | 1 | # -*- coding: utf-8 -*- | ||
29 | 2 | from django.db import models | ||
30 | 3 | import datetime | ||
31 | 4 | |||
32 | 5 | |||
33 | 6 | class GlobalEventManager(models.Manager): | ||
34 | 7 | """ manager for a global event """ | ||
35 | 8 | def next_events(self): | ||
36 | 9 | """ a list with all upcoming global events """ | ||
37 | 10 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end') | ||
38 | 11 | |||
39 | 12 | def history_events(self): | ||
40 | 13 | """ all global events in history """ | ||
41 | 14 | return self.filter(date_end__lt=datetime.datetime.now()).order_by('date_end') | ||
42 | 15 | |||
43 | 16 | |||
44 | 17 | class TeamEventManager(models.Manager): | ||
45 | 18 | """ manager for a team event """ | ||
46 | 19 | def next_3_events(self): | ||
47 | 20 | """ a list with the next 3 events """ | ||
48 | 21 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:3] | ||
49 | 22 | |||
50 | 23 | def next_5_events(self): | ||
51 | 24 | """ a list with the next 5 events """ | ||
52 | 25 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:5] | ||
53 | 26 | |||
54 | 27 | def next_events(self): | ||
55 | 28 | """ a list with all upcoming team events """ | ||
56 | 29 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end') | ||
57 | 30 | |||
58 | 31 | def history_events(self): | ||
59 | 32 | """ all team events in history """ | ||
60 | 33 | return self.filter(date_end__lt=datetime.datetime.now()).order_by('-date_end') | ||
61 | 34 | |||
62 | 35 | def has_location(self): | ||
63 | 36 | return self.filter(venue__longitude__isnull=False, venue__latitude__isnull=False) | ||
64 | 0 | 37 | ||
65 | === modified file 'loco_directory/events/models.py' | |||
66 | --- loco_directory/events/models.py 2012-06-30 23:44:14 +0000 | |||
67 | +++ loco_directory/events/models.py 2012-11-28 00:51:20 +0000 | |||
68 | @@ -1,11 +1,16 @@ | |||
69 | 1 | # -*- coding: utf-8 -*- | ||
70 | 1 | from django.db import models | 2 | from django.db import models |
71 | 3 | from django.template.defaultfilters import slugify | ||
72 | 4 | from django.utils.translation import ugettext_lazy as _ | ||
73 | 5 | |||
74 | 2 | from userprofiles.models import UserProfile | 6 | from userprofiles.models import UserProfile |
75 | 3 | from teams.models import * | 7 | from teams.models import * |
76 | 4 | from venues.models import Venue | 8 | from venues.models import Venue |
77 | 5 | from django.utils.translation import ugettext_lazy as _ | ||
78 | 6 | from common.shortcuts import queryset_sum, queryset_count | 9 | from common.shortcuts import queryset_sum, queryset_count |
79 | 7 | from common.mixins import LocalTimeMixin | 10 | from common.mixins import LocalTimeMixin |
80 | 8 | 11 | ||
81 | 12 | from managers import GlobalEventManager, TeamEventManager | ||
82 | 13 | |||
83 | 9 | ATTENDEE_PROMISE_CHOICES = ( | 14 | ATTENDEE_PROMISE_CHOICES = ( |
84 | 10 | ('sure', _('attending')), | 15 | ('sure', _('attending')), |
85 | 11 | ('maybe', _('might be attending')), | 16 | ('maybe', _('might be attending')), |
86 | @@ -46,25 +51,6 @@ | |||
87 | 46 | return self.date_end > datetime.datetime.today() | 51 | return self.date_end > datetime.datetime.today() |
88 | 47 | 52 | ||
89 | 48 | 53 | ||
90 | 49 | class GlobalEventManager(models.Manager): | ||
91 | 50 | """ manager for a global event """ | ||
92 | 51 | def next_events(self): | ||
93 | 52 | """ a list with all upcoming global events """ | ||
94 | 53 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end') | ||
95 | 54 | |||
96 | 55 | def history_events(self): | ||
97 | 56 | """ all global events in history """ | ||
98 | 57 | return self.filter(date_end__lt=datetime.datetime.now()).order_by('date_end') | ||
99 | 58 | |||
100 | 59 | def random_5(self): | ||
101 | 60 | """ return 5 random Team Events for this global event """ | ||
102 | 61 | return TeamEvent.objects.filter(global_event__id__exact=self.id).order_by('?')[:5] | ||
103 | 62 | |||
104 | 63 | def last_5(self): | ||
105 | 64 | """ return the last 5 active Team events for this global event""" | ||
106 | 65 | return TeamEvent.objects.filter(global_event__id__exact=self.id).order_by('?')[5:] | ||
107 | 66 | |||
108 | 67 | |||
109 | 68 | class GlobalEvent(BaseEvent): | 54 | class GlobalEvent(BaseEvent): |
110 | 69 | """ | 55 | """ |
111 | 70 | a global event. other events can attend to a global event | 56 | a global event. other events can attend to a global event |
112 | @@ -94,34 +80,6 @@ | |||
113 | 94 | 'countries': countries}) | 80 | 'countries': countries}) |
114 | 95 | 81 | ||
115 | 96 | 82 | ||
116 | 97 | class TeamEventManager(models.Manager): | ||
117 | 98 | """ manager for a team event """ | ||
118 | 99 | def next_3_events(self): | ||
119 | 100 | """ a list with the next 3 events """ | ||
120 | 101 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:3] | ||
121 | 102 | |||
122 | 103 | def next_5_events(self): | ||
123 | 104 | """ a list with the next 5 events """ | ||
124 | 105 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:5] | ||
125 | 106 | |||
126 | 107 | def next_events(self): | ||
127 | 108 | """ a list with all upcoming team events """ | ||
128 | 109 | return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end') | ||
129 | 110 | |||
130 | 111 | def history_events(self): | ||
131 | 112 | """ all team events in history """ | ||
132 | 113 | return self.filter(date_end__lt=datetime.datetime.now()).order_by('-date_end') | ||
133 | 114 | |||
134 | 115 | def attending(self): | ||
135 | 116 | return Attendee.objects.filter(event__id__exact=self.id) | ||
136 | 117 | |||
137 | 118 | def random_5_attendees(self): | ||
138 | 119 | return Attendee.objects.filter(event__id__exact=self.id).order_by('?')[5:] | ||
139 | 120 | |||
140 | 121 | def has_location(self): | ||
141 | 122 | return self.filter(venue__longitude__isnull=False, venue__latitude__isnull=False) | ||
142 | 123 | |||
143 | 124 | |||
144 | 125 | class TeamEvent(BaseEvent, LocalTimeMixin): | 83 | class TeamEvent(BaseEvent, LocalTimeMixin): |
145 | 126 | """ | 84 | """ |
146 | 127 | a event of one or more teams | 85 | a event of one or more teams |
147 | @@ -141,7 +99,7 @@ | |||
148 | 141 | 99 | ||
149 | 142 | @models.permalink | 100 | @models.permalink |
150 | 143 | def get_absolute_url(self): | 101 | def get_absolute_url(self): |
152 | 144 | return ('team-event-detail', [getattr(self.first_team(), 'lp_name', 'no-team'), str(self.id)]) | 102 | return ('team-event-detail', [getattr(self.first_team(), 'lp_name', 'no-team'), str(self.id), slugify(self.name)]) |
153 | 145 | 103 | ||
154 | 146 | def get_tz(self): | 104 | def get_tz(self): |
155 | 147 | timezone = 'UTC' | 105 | timezone = 'UTC' |
156 | @@ -183,7 +141,7 @@ | |||
157 | 183 | try: | 141 | try: |
158 | 184 | return self.teams.all()[0] | 142 | return self.teams.all()[0] |
159 | 185 | except: | 143 | except: |
161 | 186 | print 'Event %s has no team' % self.id | 144 | #print 'Event %s has no team' % self.id |
162 | 187 | return {'lp_name': 'no-team'} | 145 | return {'lp_name': 'no-team'} |
163 | 188 | 146 | ||
164 | 189 | def is_attending(self, user): | 147 | def is_attending(self, user): |
165 | @@ -195,13 +153,13 @@ | |||
166 | 195 | def total_attending(self): | 153 | def total_attending(self): |
167 | 196 | total_attending_guests = queryset_sum('guests', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure")) | 154 | total_attending_guests = queryset_sum('guests', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure")) |
168 | 197 | total_attending_registered = queryset_count('attendee_profile', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure")) | 155 | total_attending_registered = queryset_count('attendee_profile', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure")) |
170 | 198 | return total_attending_guests + total_attending_registered | 156 | return total_attending_guests + total_attending_registered |
171 | 199 | 157 | ||
172 | 200 | def total_maybe_attending(self): | 158 | def total_maybe_attending(self): |
173 | 201 | 159 | ||
174 | 202 | total_maybe_attending_guests = queryset_sum('guests', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="maybe")) | 160 | total_maybe_attending_guests = queryset_sum('guests', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="maybe")) |
175 | 203 | total_maybe_attending_registered = queryset_count('attendee_profile', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="maybe")) | 161 | total_maybe_attending_registered = queryset_count('attendee_profile', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="maybe")) |
177 | 204 | return total_maybe_attending_guests + total_maybe_attending_registered | 162 | return total_maybe_attending_guests + total_maybe_attending_registered |
178 | 205 | 163 | ||
179 | 206 | 164 | ||
180 | 207 | class TeamEventComment(models.Model): | 165 | class TeamEventComment(models.Model): |
181 | 208 | 166 | ||
182 | === modified file 'loco_directory/events/urls.py' | |||
183 | --- loco_directory/events/urls.py 2012-09-08 21:45:10 +0000 | |||
184 | +++ loco_directory/events/urls.py 2012-11-28 00:51:20 +0000 | |||
185 | @@ -20,19 +20,20 @@ | |||
186 | 20 | #team events | 20 | #team events |
187 | 21 | url(r'^locations/$', 'events.views.team_event_locations', name='team-event-locations'), | 21 | url(r'^locations/$', 'events.views.team_event_locations', name='team-event-locations'), |
188 | 22 | url(r'^ical/$', 'events.views.teams_event_list_ical', name='teams-event-list-ical'), | 22 | url(r'^ical/$', 'events.views.teams_event_list_ical', name='teams-event-list-ical'), |
189 | 23 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)-(?P<event_slug>[a-zA-Z0-9\-\.\+?]+)/$', 'events.views.team_event_detail', name='team-event-detail'), | ||
190 | 23 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/detail/ical/$', 'events.views.event_ical', name='event-ical'), | 24 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/detail/ical/$', 'events.views.event_ical', name='event-ical'), |
191 | 24 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/register/$', 'events.views.team_event_register', name='team-event-register'), | 25 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/register/$', 'events.views.team_event_register', name='team-event-register'), |
193 | 25 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/detail/$', 'events.views.team_event_detail', name='team-event-detail'), | 26 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/detail/$', 'events.views.team_event_detail', name='team-event-detail-old'), |
194 | 26 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/delete/$', 'events.views.team_event_delete', name='team-event-delete'), | 27 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/delete/$', 'events.views.team_event_delete', name='team-event-delete'), |
195 | 27 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/update/$', 'events.views.team_event_update', name='team-event-update'), | 28 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/update/$', 'events.views.team_event_update', name='team-event-update'), |
196 | 28 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/copy/$', 'events.views.team_event_copy', name='team-event-copy'), | 29 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/copy/$', 'events.views.team_event_copy', name='team-event-copy'), |
197 | 29 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/add/$', 'events.views.team_event_new', name='team-event-new'), | 30 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/add/$', 'events.views.team_event_new', name='team-event-new'), |
198 | 30 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/rss/$', 'events.views.team_events_rss', name='team-events-rss'), | 31 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/rss/$', 'events.views.team_events_rss', name='team-events-rss'), |
199 | 31 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/ical/$', 'events.views.team_event_list_ical', name='team-event-list-ical'), | 32 | url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/ical/$', 'events.views.team_event_list_ical', name='team-event-list-ical'), |
201 | 32 | url(r'^add/$', 'events.views.team_event_select', name='team-event-select'), | 33 | url(r'^add/$', 'events.views.team_event_select', name='team-event-select'), |
202 | 33 | url(r'^comment-update/$', 'events.views.team_event_comment_edit', name='team-event-comment-edit'), | 34 | url(r'^comment-update/$', 'events.views.team_event_comment_edit', name='team-event-comment-edit'), |
203 | 34 | url(r'^comment-delete/(?P<pk>\d+)/$', 'events.views.team_event_comment_delete', name='team-event-comment-delete'), | 35 | url(r'^comment-delete/(?P<pk>\d+)/$', 'events.views.team_event_comment_delete', name='team-event-comment-delete'), |
205 | 35 | 36 | ||
206 | 36 | # Old url notations | 37 | # Old url notations |
207 | 37 | url(r'^team/locations/$', 'events.views.team_event_locations'), | 38 | url(r'^team/locations/$', 'events.views.team_event_locations'), |
208 | 38 | url(r'^team/ical/$', 'events.views.teams_event_list_ical'), | 39 | url(r'^team/ical/$', 'events.views.teams_event_list_ical'), |
209 | 39 | 40 | ||
210 | === modified file 'loco_directory/events/views.py' | |||
211 | --- loco_directory/events/views.py 2012-11-26 23:07:59 +0000 | |||
212 | +++ loco_directory/events/views.py 2012-11-28 00:51:20 +0000 | |||
213 | @@ -16,7 +16,7 @@ | |||
214 | 16 | from forms import GlobalEventForm | 16 | from forms import GlobalEventForm |
215 | 17 | from forms import AttendeeRegistrationForm | 17 | from forms import AttendeeRegistrationForm |
216 | 18 | 18 | ||
218 | 19 | from common.utils import redirect, simple_iterator | 19 | from common.utils import simple_iterator |
219 | 20 | from common.forms import FilterHistoryList | 20 | from common.forms import FilterHistoryList |
220 | 21 | from common import launchpad | 21 | from common import launchpad |
221 | 22 | 22 | ||
222 | @@ -133,7 +133,7 @@ | |||
223 | 133 | ################################################################# | 133 | ################################################################# |
224 | 134 | # Team Events | 134 | # Team Events |
225 | 135 | ################################################################# | 135 | ################################################################# |
227 | 136 | def team_event_detail(request, team_slug, team_event_id): | 136 | def team_event_detail(request, team_slug, team_event_id, event_slug=None): |
228 | 137 | """ | 137 | """ |
229 | 138 | detailed view for a team event | 138 | detailed view for a team event |
230 | 139 | """ | 139 | """ |
231 | @@ -148,9 +148,7 @@ | |||
232 | 148 | if form.is_valid(): | 148 | if form.is_valid(): |
233 | 149 | team_event_comment = form.save(commit=False) | 149 | team_event_comment = form.save(commit=False) |
234 | 150 | team_event_comment.team_event = team_event_object | 150 | team_event_comment.team_event = team_event_object |
238 | 151 | from userprofiles.models import create_profile | 151 | team_event_comment.commenter_profile = request.user.get_profile() |
236 | 152 | profile = create_profile(request.user.username) | ||
237 | 153 | team_event_comment.commenter_profile = profile | ||
239 | 154 | team_event_comment.save() | 152 | team_event_comment.save() |
240 | 155 | request.user.message_set.create(message=_('Your comment has been saved.')) | 153 | request.user.message_set.create(message=_('Your comment has been saved.')) |
241 | 156 | return redirect(team_event_object) | 154 | return redirect(team_event_object) |
242 | @@ -192,7 +190,6 @@ | |||
243 | 192 | else: | 190 | else: |
244 | 193 | context = {'team_event_object': team_event_object} | 191 | context = {'team_event_object': team_event_object} |
245 | 194 | return render_to_response('events/team_event_delete_confirm.html', context, RequestContext(request)) | 192 | return render_to_response('events/team_event_delete_confirm.html', context, RequestContext(request)) |
246 | 195 | |||
247 | 196 | else: | 193 | else: |
248 | 197 | request.user.message_set.create(message='%s %s' % (_('You can not remove this team event.'), _('You are not an admin/owner of the Launchpad team or on the LoCo Council.'))) | 194 | request.user.message_set.create(message='%s %s' % (_('You can not remove this team event.'), _('You are not an admin/owner of the Launchpad team or on the LoCo Council.'))) |
249 | 198 | return redirect(team_event_object) | 195 | return redirect(team_event_object) |
250 | @@ -207,7 +204,7 @@ | |||
251 | 207 | elif len(teams) == 1: | 204 | elif len(teams) == 1: |
252 | 208 | from django.core import urlresolvers | 205 | from django.core import urlresolvers |
253 | 209 | url = urlresolvers.reverse('team-event-new', args=[teams[0].lp_name]) | 206 | url = urlresolvers.reverse('team-event-new', args=[teams[0].lp_name]) |
255 | 210 | if request.GET.has_key('global_event_id'): | 207 | if 'global_event_id' in request.GET: |
256 | 211 | return HttpResponseRedirect('%s?global_event_id=%s' % (url, request.GET.get('global_event_id', None))) | 208 | return HttpResponseRedirect('%s?global_event_id=%s' % (url, request.GET.get('global_event_id', None))) |
257 | 212 | else: | 209 | else: |
258 | 213 | return HttpResponseRedirect(url) | 210 | return HttpResponseRedirect(url) |
259 | @@ -240,7 +237,7 @@ | |||
260 | 240 | return HttpResponseRedirect(team_event.get_absolute_url()) | 237 | return HttpResponseRedirect(team_event.get_absolute_url()) |
261 | 241 | else: | 238 | else: |
262 | 242 | form = TeamEventForm(initial={'global_event': request.GET.get('global_event_id', None)}, teams=[team_object]) | 239 | form = TeamEventForm(initial={'global_event': request.GET.get('global_event_id', None)}, teams=[team_object]) |
264 | 243 | if request.GET.has_key('global_event_id'): | 240 | if 'global_event_id' in request.GET: |
265 | 244 | global_event = get_object_or_404(GlobalEvent, pk=request.GET.get('global_event_id')) | 241 | global_event = get_object_or_404(GlobalEvent, pk=request.GET.get('global_event_id')) |
266 | 245 | context = { | 242 | context = { |
267 | 246 | 'team_object': team_object, | 243 | 'team_object': team_object, |
268 | @@ -331,11 +328,9 @@ | |||
269 | 331 | """ | 328 | """ |
270 | 332 | team_event_object = get_object_or_404(TeamEvent, pk=team_event_id) | 329 | team_event_object = get_object_or_404(TeamEvent, pk=team_event_id) |
271 | 333 | if team_event_object.is_attending(request.user): | 330 | if team_event_object.is_attending(request.user): |
273 | 334 | attendee_object = team_event_object.attendee_set.get(attendee_profile__user=request.user) | 331 | attendee_object = team_event_object.attendee_set.get(attendee_profile=request.user.get_profile()) |
274 | 335 | else: | 332 | else: |
278 | 336 | from userprofiles.models import create_profile | 333 | attendee_object = Attendee(team_event=team_event_object, attendee_profile=request.user.get_profile()) |
276 | 337 | profile = create_profile(request.user.username) | ||
277 | 338 | attendee_object = Attendee(team_event=team_event_object, attendee_profile=profile) | ||
279 | 339 | 334 | ||
280 | 340 | if request.method == 'POST': | 335 | if request.method == 'POST': |
281 | 341 | form = AttendeeRegistrationForm(instance=attendee_object, data=request.POST) | 336 | form = AttendeeRegistrationForm(instance=attendee_object, data=request.POST) |
282 | @@ -358,6 +353,7 @@ | |||
283 | 358 | return render_to_response('events/team_event_register.html', | 353 | return render_to_response('events/team_event_register.html', |
284 | 359 | context, RequestContext(request)) | 354 | context, RequestContext(request)) |
285 | 360 | 355 | ||
286 | 356 | |||
287 | 361 | @login_required | 357 | @login_required |
288 | 362 | def team_event_comment_new(request, team_slug, team_event_id): | 358 | def team_event_comment_new(request, team_slug, team_event_id): |
289 | 363 | """ | 359 | """ |
290 | @@ -370,12 +366,10 @@ | |||
291 | 370 | if form.is_valid(): | 366 | if form.is_valid(): |
292 | 371 | team_event_comment = form.save(commit=False) | 367 | team_event_comment = form.save(commit=False) |
293 | 372 | team_event_comment.team_event = team_event_object | 368 | team_event_comment.team_event = team_event_object |
297 | 373 | from userprofiles.models import create_profile | 369 | team_event_comment.commenter_profile = request.user.get_profile() |
295 | 374 | profile = create_profile(request.user.username) | ||
296 | 375 | team_event_comment.commenter_profile = profile | ||
298 | 376 | team_event_comment.save() | 370 | team_event_comment.save() |
299 | 377 | request.user.message_set.create(message=_('Comment saved.')) | 371 | request.user.message_set.create(message=_('Comment saved.')) |
301 | 378 | return redirect( team_event_object ) | 372 | return redirect(team_event_object) |
302 | 379 | else: | 373 | else: |
303 | 380 | form = TeamEventCommentForm() | 374 | form = TeamEventCommentForm() |
304 | 381 | 375 | ||
305 | 382 | 376 | ||
306 | === modified file 'loco_directory/meetings/views.py' | |||
307 | --- loco_directory/meetings/views.py 2012-11-26 23:07:59 +0000 | |||
308 | +++ loco_directory/meetings/views.py 2012-11-28 00:51:20 +0000 | |||
309 | @@ -1,7 +1,6 @@ | |||
310 | 1 | from django.template import RequestContext | 1 | from django.template import RequestContext |
311 | 2 | from django.http import HttpResponse, HttpResponseRedirect | 2 | from django.http import HttpResponse, HttpResponseRedirect |
314 | 3 | from django.shortcuts import render_to_response | 3 | from django.shortcuts import render_to_response, redirect, get_object_or_404 |
313 | 4 | from django.shortcuts import get_object_or_404 | ||
315 | 5 | from django.contrib.auth.decorators import login_required | 4 | from django.contrib.auth.decorators import login_required |
316 | 6 | from django.utils.translation import ugettext as _ | 5 | from django.utils.translation import ugettext as _ |
317 | 7 | from django.core.urlresolvers import reverse | 6 | from django.core.urlresolvers import reverse |
318 | @@ -11,9 +10,6 @@ | |||
319 | 11 | 10 | ||
320 | 12 | from forms import TeamMeetingForm, AgendaItemForm | 11 | from forms import TeamMeetingForm, AgendaItemForm |
321 | 13 | 12 | ||
322 | 14 | from django.db.models import Q | ||
323 | 15 | |||
324 | 16 | from common.utils import redirect, simple_iterator | ||
325 | 17 | from common import launchpad | 13 | from common import launchpad |
326 | 18 | from common.forms import FilterHistoryList | 14 | from common.forms import FilterHistoryList |
327 | 19 | 15 | ||
328 | @@ -164,8 +160,7 @@ | |||
329 | 164 | request.user.message_set.create(message='%s %s' % (_('You can not remove this team meeting.'), _('You are not a member of any LoCo Teams.'))) | 160 | request.user.message_set.create(message='%s %s' % (_('You can not remove this team meeting.'), _('You are not a member of any LoCo Teams.'))) |
330 | 165 | return redirect( 'meeting-list' ) | 161 | return redirect( 'meeting-list' ) |
331 | 166 | elif len(teams) == 1: | 162 | elif len(teams) == 1: |
334 | 167 | from django.core import urlresolvers | 163 | url = reverse('team-meeting-new', args=[teams[0].lp_name]) |
333 | 168 | url = urlresolvers.reverse('team-meeting-new', args=[teams[0].lp_name]) | ||
335 | 169 | return HttpResponseRedirect(url) | 164 | return HttpResponseRedirect(url) |
336 | 170 | else: | 165 | else: |
337 | 171 | context = {'teams': teams} | 166 | context = {'teams': teams} |
338 | 172 | 167 | ||
339 | === modified file 'loco_directory/teams/tests.py' | |||
340 | --- loco_directory/teams/tests.py 2012-11-23 21:40:17 +0000 | |||
341 | +++ loco_directory/teams/tests.py 2012-11-28 00:51:20 +0000 | |||
342 | @@ -26,7 +26,7 @@ | |||
343 | 26 | claimed_id='http://example.com/identity_foo', | 26 | claimed_id='http://example.com/identity_foo', |
344 | 27 | display_id='http://example.com/identity_foo') | 27 | display_id='http://example.com/identity_foo') |
345 | 28 | self.useropenid_foo.save() | 28 | self.useropenid_foo.save() |
347 | 29 | self.userprofile_foo = UserProfile.objects.create(user=self.user_foo) | 29 | self.userprofile_foo = self.user_foo.get_profile() |
348 | 30 | 30 | ||
349 | 31 | # user bar | 31 | # user bar |
350 | 32 | self.user_bar = User.objects.create( | 32 | self.user_bar = User.objects.create( |
351 | @@ -38,7 +38,7 @@ | |||
352 | 38 | claimed_id='http://example.com/identity_bar', | 38 | claimed_id='http://example.com/identity_bar', |
353 | 39 | display_id='http://example.com/identity_bar') | 39 | display_id='http://example.com/identity_bar') |
354 | 40 | self.useropenid_bar.save() | 40 | self.useropenid_bar.save() |
356 | 41 | self.userprofile_bar = UserProfile.objects.create(user=self.user_bar) | 41 | self.userprofile_bar = self.user_bar.get_profile() |
357 | 42 | 42 | ||
358 | 43 | # setup test country | 43 | # setup test country |
359 | 44 | self.country = Country.objects.create(name='Test Country') | 44 | self.country = Country.objects.create(name='Test Country') |
360 | 45 | 45 | ||
361 | === modified file 'loco_directory/teams/views.py' | |||
362 | --- loco_directory/teams/views.py 2012-11-26 23:07:59 +0000 | |||
363 | +++ loco_directory/teams/views.py 2012-11-28 00:51:20 +0000 | |||
364 | @@ -1,18 +1,14 @@ | |||
365 | 1 | # -*- coding: utf-8 -*- | 1 | # -*- coding: utf-8 -*- |
366 | 2 | |||
367 | 3 | from django.template import RequestContext | 2 | from django.template import RequestContext |
368 | 4 | from django.utils.translation import ugettext | 3 | from django.utils.translation import ugettext |
369 | 5 | from django.core import serializers | 4 | from django.core import serializers |
370 | 6 | 5 | ||
371 | 6 | from django.shortcuts import render_to_response, redirect, get_object_or_404 | ||
372 | 7 | from django.contrib.auth.decorators import login_required | 7 | from django.contrib.auth.decorators import login_required |
373 | 8 | from django.db.models import Q | ||
374 | 9 | |||
375 | 10 | from django.shortcuts import get_object_or_404 | ||
376 | 11 | from django.shortcuts import render_to_response | ||
377 | 12 | 8 | ||
378 | 13 | from django import http | 9 | from django import http |
379 | 14 | 10 | ||
381 | 15 | from common.utils import redirect, simple_iterator | 11 | from common.utils import simple_iterator |
382 | 16 | from common import launchpad | 12 | from common import launchpad |
383 | 17 | 13 | ||
384 | 18 | from teams.models import Continent, Team, countries_without_continent, countries_without_continent_have_teams, teams_without_country | 14 | from teams.models import Continent, Team, countries_without_continent, countries_without_continent_have_teams, teams_without_country |
385 | 19 | 15 | ||
386 | === modified file 'loco_directory/templates/events/team_event_detail.html' | |||
387 | --- loco_directory/templates/events/team_event_detail.html 2012-09-08 21:45:10 +0000 | |||
388 | +++ loco_directory/templates/events/team_event_detail.html 2012-11-28 00:51:20 +0000 | |||
389 | @@ -9,7 +9,7 @@ | |||
390 | 9 | {% if team_event_object.description %} | 9 | {% if team_event_object.description %} |
391 | 10 | <meta property="og:description" content="{{ team_event_object.description|linebreaks|striptags }}" /> | 10 | <meta property="og:description" content="{{ team_event_object.description|linebreaks|striptags }}" /> |
392 | 11 | {% endif %} | 11 | {% endif %} |
394 | 12 | <meta property="og:url" content="http://loco.ubuntu.com{% url team-event-detail team_event_object.first_team.lp_name team_event_object.id %}"/> | 12 | <meta property="og:url" content="http://loco.ubuntu.com{{ team_event_object.get_absolute_url }}"/> |
395 | 13 | <meta property="og:image" content="http://loco.ubuntu.com/media/images/cof_orange_hex1.png"/> | 13 | <meta property="og:image" content="http://loco.ubuntu.com/media/images/cof_orange_hex1.png"/> |
396 | 14 | <meta property="og:site_name" content="Loco Team Portal"/> | 14 | <meta property="og:site_name" content="Loco Team Portal"/> |
397 | 15 | <meta property="og:type" content="loco-team-portal:event"/> | 15 | <meta property="og:type" content="loco-team-portal:event"/> |
398 | 16 | 16 | ||
399 | === modified file 'loco_directory/templates/events/team_event_detail.inc.html' | |||
400 | --- loco_directory/templates/events/team_event_detail.inc.html 2012-09-08 21:45:10 +0000 | |||
401 | +++ loco_directory/templates/events/team_event_detail.inc.html 2012-11-28 00:51:20 +0000 | |||
402 | @@ -6,7 +6,7 @@ | |||
403 | 6 | <h3>{{ team_event_object.name }}</h3> | 6 | <h3>{{ team_event_object.name }}</h3> |
404 | 7 | {% if team_event_object.global_event %} | 7 | {% if team_event_object.global_event %} |
405 | 8 | <div class="event-partofglobal-event"> | 8 | <div class="event-partofglobal-event"> |
407 | 9 | {% trans "This event is part of" %} | 9 | {% trans "This event is part of" %} |
408 | 10 | <a href="{{ team_event_object.global_event.get_absolute_url }}">{{team_event_object.global_event.name }}</a> | 10 | <a href="{{ team_event_object.global_event.get_absolute_url }}">{{team_event_object.global_event.name }}</a> |
409 | 11 | </div> | 11 | </div> |
410 | 12 | {% endif %} | 12 | {% endif %} |
411 | @@ -23,7 +23,7 @@ | |||
412 | 23 | <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> | 23 | <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> |
413 | 24 | <g:plusone size="medium"></g:plusone> | 24 | <g:plusone size="medium"></g:plusone> |
414 | 25 | <a href="http://twitter.com/share" class="twitter-share-button" data-lang="en">Tweet</a> | 25 | <a href="http://twitter.com/share" class="twitter-share-button" data-lang="en">Tweet</a> |
416 | 26 | <div class="fb-like" data-href="http://loco.ubuntu.com{% url team-event-detail team_event_object.first_team.lp_name team_event_object.id %}" data-send="false" data-layout="button_count" data-width="40" data-show-faces="false" data-font="arial"></div> | 26 | <div class="fb-like" data-href="http://loco.ubuntu.com{{ team_event_object.get_absolute_url }}" data-send="false" data-layout="button_count" data-width="40" data-show-faces="false" data-font="arial"></div> |
417 | 27 | </div> | 27 | </div> |
418 | 28 | 28 | ||
419 | 29 | {% if team_event_object.global_event %} | 29 | {% if team_event_object.global_event %} |
420 | @@ -50,7 +50,7 @@ | |||
421 | 50 | </div> | 50 | </div> |
422 | 51 | {% endif %} | 51 | {% endif %} |
423 | 52 | </div> | 52 | </div> |
425 | 53 | 53 | ||
426 | 54 | <div class="map"> | 54 | <div class="map"> |
427 | 55 | <img class="map_img" src="http://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=640x100&scale=1&maptype=roadmap&markers=color:orange%7Clabel:S%7C40.702147,-74.015794&sensor=false"> | 55 | <img class="map_img" src="http://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=640x100&scale=1&maptype=roadmap&markers=color:orange%7Clabel:S%7C40.702147,-74.015794&sensor=false"> |
428 | 56 | </div> | 56 | </div> |
429 | @@ -67,7 +67,7 @@ | |||
430 | 67 | </div> | 67 | </div> |
431 | 68 | 68 | ||
432 | 69 | <div class="event-venue-adress"> | 69 | <div class="event-venue-adress"> |
434 | 70 | {% if team_event_object.venue.address %}{{ team_event_object.venue.address }}{% endif %}{% if team_event_object.venue.spr %}, {{ team_event_object.venue.spr }}{% endif %} | 70 | {% if team_event_object.venue.address %}{{ team_event_object.venue.address }}{% endif %}{% if team_event_object.venue.spr %}, {{ team_event_object.venue.spr }}{% endif %} |
435 | 71 | </div> | 71 | </div> |
436 | 72 | </div> | 72 | </div> |
437 | 73 | {% endif %} | 73 | {% endif %} |
438 | @@ -104,7 +104,7 @@ | |||
439 | 104 | {% for team in team_event_object.teams.all %}<a class="pictogram-l" title="{% trans "Get more information about this team" %}" href="{{ team.get_absolute_url }}">{{ team.name }}</a>{% if not forloop.last %},{% endif %}{% endfor %} | 104 | {% for team in team_event_object.teams.all %}<a class="pictogram-l" title="{% trans "Get more information about this team" %}" href="{{ team.get_absolute_url }}">{{ team.name }}</a>{% if not forloop.last %},{% endif %}{% endfor %} |
440 | 105 | </div> | 105 | </div> |
441 | 106 | {% endif %} | 106 | {% endif %} |
443 | 107 | {% endif %} | 107 | {% endif %} |
444 | 108 | </div> | 108 | </div> |
445 | 109 | 109 | ||
446 | 110 | {% if team_event_object.registration %} | 110 | {% if team_event_object.registration %} |
447 | 111 | 111 | ||
448 | === modified file 'loco_directory/templates/teams/team_detail.html' | |||
449 | --- loco_directory/templates/teams/team_detail.html 2012-11-26 23:07:59 +0000 | |||
450 | +++ loco_directory/templates/teams/team_detail.html 2012-11-28 00:51:20 +0000 | |||
451 | @@ -185,7 +185,7 @@ | |||
452 | 185 | </div> | 185 | </div> |
453 | 186 | {% if team.next_5_events_and_meetings %} | 186 | {% if team.next_5_events_and_meetings %} |
454 | 187 | {% for team_event in team.next_5_events_and_meetings %} | 187 | {% for team_event in team.next_5_events_and_meetings %} |
456 | 188 | <a href="{% url team-event-detail team_event.first_team.lp_name team_event.id %}" title="{% if team_event.venue %}{% else %}{{team_event.date_begin|date:"M d"}}{% endif %}" class="event-meetings"> | 188 | <a href="{{ team_event.get_absolute_url }}" title="{% if team_event.venue %}{% else %}{{team_event.date_begin|date:"M d"}}{% endif %}" class="event-meetings"> |
457 | 189 | <span class="title">{{ team_event.name }}</span> | 189 | <span class="title">{{ team_event.name }}</span> |
458 | 190 | <small>{{ team_event.local_date_begin|date:"l, d N Y" }} {% trans "at " %}{{ team_event.local_date_begin|date:"H:i T" }}</small> | 190 | <small>{{ team_event.local_date_begin|date:"l, d N Y" }} {% trans "at " %}{{ team_event.local_date_begin|date:"H:i T" }}</small> |
459 | 191 | <p>{{ team_event.description }}</p> | 191 | <p>{{ team_event.description }}</p> |
460 | 192 | 192 | ||
461 | === modified file 'loco_directory/userprofiles/models.py' | |||
462 | --- loco_directory/userprofiles/models.py 2012-11-18 22:02:56 +0000 | |||
463 | +++ loco_directory/userprofiles/models.py 2012-11-28 00:51:20 +0000 | |||
464 | @@ -102,9 +102,8 @@ | |||
465 | 102 | 102 | ||
466 | 103 | post_save.connect(create_userprofile, sender=auth_models.User, dispatch_uid=__name__) | 103 | post_save.connect(create_userprofile, sender=auth_models.User, dispatch_uid=__name__) |
467 | 104 | 104 | ||
468 | 105 | |||
469 | 105 | def create_profile(username): | 106 | def create_profile(username): |
470 | 106 | user, created = auth_models.User.objects.get_or_create(username=username) | 107 | user, created = auth_models.User.objects.get_or_create(username=username) |
471 | 107 | if created: | ||
472 | 108 | user.save() | ||
473 | 109 | set_user_openid(user, force=True) | 108 | set_user_openid(user, force=True) |
474 | 110 | return user.get_profile() | 109 | return user.get_profile() |