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

Proposed by Adnane Belmadiaf on 2013-03-04
Status: Work in progress
Proposed branch: lp:~daker/loco-team-portal/fix.777098
Merge into: lp:loco-team-portal
Diff against target: 3040 lines (+2105/-185)
33 files modified
loco_directory/common/timezone.py (+58/-0)
loco_directory/common/utils.py (+6/-7)
loco_directory/events/__init__.py (+2/-0)
loco_directory/events/admin.py (+3/-1)
loco_directory/events/fields.py (+31/-1)
loco_directory/events/forms.py (+33/-5)
loco_directory/events/listeners.py (+26/-0)
loco_directory/events/management/commands/update_occurrences_set.py (+33/-0)
loco_directory/events/managers.py (+22/-0)
loco_directory/events/migrations/0012_auto__add_occurrence.py (+206/-0)
loco_directory/events/migrations/0013_auto__add_field_teamevent_interval.py (+197/-0)
loco_directory/events/migrations/0014_auto__add_field_teamevent_frequency.py (+198/-0)
loco_directory/events/migrations/0015_auto__add_field_teamevent_repetitions.py (+199/-0)
loco_directory/events/migrations/0016_auto__add_field_teamevent_until.py (+200/-0)
loco_directory/events/migrations/0017_auto__add_field_teamevent_week_days.py (+201/-0)
loco_directory/events/models.py (+197/-19)
loco_directory/events/urls.py (+23/-10)
loco_directory/events/views.py (+67/-25)
loco_directory/media/css/styles.css (+17/-2)
loco_directory/media/js/events-ui.js (+2/-4)
loco_directory/meetings/models.py (+3/-0)
loco_directory/teams/managers.py (+27/-0)
loco_directory/teams/models.py (+1/-23)
loco_directory/teams/views.py (+24/-6)
loco_directory/templates/events/team_event_delete_confirm.html (+31/-11)
loco_directory/templates/events/team_event_detail.html (+15/-15)
loco_directory/templates/events/team_event_detail.inc.html (+35/-35)
loco_directory/templates/events/team_event_detail_old.html (+47/-0)
loco_directory/templates/events/team_event_detail_old.inc.html (+138/-0)
loco_directory/templates/events/team_event_list.inc.html (+3/-3)
loco_directory/templates/events/team_event_new.html (+45/-2)
loco_directory/templates/form.html (+1/-1)
loco_directory/templates/teams/team_detail.html (+14/-15)
To merge this branch: bzr merge lp:~daker/loco-team-portal/fix.777098
Reviewer Review Type Date Requested Status
LoCo Team Portal Developers 2013-03-04 Pending
Review via email: mp+151644@code.launchpad.net
To post a comment you must log in.
Adnane Belmadiaf (daker) wrote :

This is a WIP please do not merge it!

Chris Johnston (cjohnston) wrote :

I'd rather just get up to 1.4

Adnane Belmadiaf (daker) wrote :

I'll look into it

Pablo Rubianes (pablorubianes-uy) wrote :

Daker: I can't change the status of this merge request.
Pablo

Unmerged revisions

617. By Adnane Belmadiaf on 2013-03-04

Work in progress

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'loco_directory/common/timezone.py'
2--- loco_directory/common/timezone.py 1970-01-01 00:00:00 +0000
3+++ loco_directory/common/timezone.py 2013-03-04 23:07:27 +0000
4@@ -0,0 +1,58 @@
5+"""
6+Taken from django 1.4
7+
8+Timezone helper functions.
9+
10+This module uses pytz when it's available and fallbacks when it isn't.
11+"""
12+
13+from datetime import timedelta, tzinfo
14+
15+try:
16+ import pytz
17+except ImportError:
18+ pytz = None
19+
20+
21+__all__ = [
22+ 'utc', 'get_timezone',
23+]
24+
25+
26+# UTC and local time zones
27+
28+ZERO = timedelta(0)
29+
30+
31+class UTC(tzinfo):
32+ """
33+ UTC implementation taken from Python's docs.
34+
35+ Used only when pytz isn't available.
36+ """
37+
38+ def __repr__(self):
39+ return "<UTC>"
40+
41+ def utcoffset(self, dt):
42+ return ZERO
43+
44+ def tzname(self, dt):
45+ return "UTC"
46+
47+ def dst(self, dt):
48+ return ZERO
49+
50+utc = pytz.utc if pytz else UTC()
51+"""UTC time zone as a tzinfo instance."""
52+
53+
54+def get_timezone(value):
55+ "Convert to pytz timezone object"
56+
57+ # Obtain a tzinfo instance
58+ try:
59+ tz = pytz.timezone(value)
60+ except pytz.UnknownTimeZoneError:
61+ tz = utc
62+ return tz
63
64=== modified file 'loco_directory/common/utils.py'
65--- loco_directory/common/utils.py 2012-12-15 03:12:04 +0000
66+++ loco_directory/common/utils.py 2013-03-04 23:07:27 +0000
67@@ -2,7 +2,6 @@
68
69 import subprocess
70 import datetime
71-import email
72 import os
73 from copy import deepcopy
74 from django.conf import settings
75@@ -84,10 +83,10 @@
76 for dirnames in os.listdir(globalpath):
77 if dirnames == lang_code:
78 for dirpath_local, dirnames_local, filenames in os.walk(os.path.join(globalpath, dirnames, 'LC_MESSAGES')):
79- if 'django.mo' in filenames:
80- return True
81- else:
82- return False
83+ if 'django.mo' in filenames:
84+ return True
85+ else:
86+ return False
87
88
89 def get_languages():
90@@ -100,8 +99,8 @@
91 languages = {}
92 Languages = Language.objects.order_by('name')
93 for language in Languages:
94- if check_for_language(language.code):
95+ if check_for_language(language.code):
96 languages[language.code] = language.name
97 languages['en_US'] = 'English'
98- languages = sorted([(value,key) for (key,value) in languages.items()])
99+ languages = sorted([(value, key) for (key, value) in languages.items()])
100 return languages
101
102=== modified file 'loco_directory/events/__init__.py'
103--- loco_directory/events/__init__.py 2009-12-21 20:45:43 +0000
104+++ loco_directory/events/__init__.py 2013-03-04 23:07:27 +0000
105@@ -0,0 +1,2 @@
106+# -*- coding: utf-8 -*-
107+import listeners
108
109=== modified file 'loco_directory/events/admin.py'
110--- loco_directory/events/admin.py 2012-12-25 22:00:46 +0000
111+++ loco_directory/events/admin.py 2013-03-04 23:07:27 +0000
112@@ -1,13 +1,15 @@
113 # -*- coding: utf-8 -*-
114 from django.contrib import admin
115-from .models import (Venue, GlobalEvent, TeamEvent, Attendee)
116+from .models import (Venue, GlobalEvent, TeamEvent, Attendee, Occurrence)
117
118
119 class TeamEventAdmin(admin.ModelAdmin):
120 list_filter = ('global_event',)
121 raw_id_fields = ('venue', 'contact', 'teams', 'global_event')
122+ search_fields = ('name', )
123
124 admin.site.register(Venue)
125 admin.site.register(GlobalEvent)
126 admin.site.register(TeamEvent, TeamEventAdmin)
127 admin.site.register(Attendee)
128+admin.site.register(Occurrence)
129
130=== modified file 'loco_directory/events/fields.py'
131--- loco_directory/events/fields.py 2012-12-26 22:41:16 +0000
132+++ loco_directory/events/fields.py 2013-03-04 23:07:27 +0000
133@@ -1,5 +1,6 @@
134 # -*- coding: utf-8 -*-
135 from django.db.models import PositiveSmallIntegerField
136+from django import forms
137
138
139 class GuestsField(PositiveSmallIntegerField):
140@@ -12,8 +13,37 @@
141
142 def formfield(self, **kwargs):
143 """
144- Set maximum value in *formfield* to 100.
145+ Set maximum value in *formfield* to 100 and minmum to 0.
146 """
147 defaults = {'min_value': 0, 'max_value': 100}
148 defaults.update(kwargs)
149 return super(PositiveSmallIntegerField, self).formfield(**defaults)
150+
151+
152+class MultipleIntegerField(forms.MultipleChoiceField):
153+ """
154+ A form field for handling multiple integers
155+ """
156+ def __init__(self, choices, size=None, label=None, widget=None):
157+ if widget is None:
158+ widget = forms.SelectMultiple(attrs={'size': size or len(choices)})
159+ super(MultipleIntegerField, self).__init__(
160+ required=False,
161+ choices=choices,
162+ label=label,
163+ widget=widget,
164+ )
165+
166+ def clean(self, value):
167+ return [int(i) for i in super(MultipleIntegerField, self).clean(value)]
168+
169+ def render(self, name, value, attrs=None, choices=()):
170+ """
171+ Convert comma separated integer string to a list,
172+ since the checkbox rendering code expects a list (not a string)
173+ """
174+ if value:
175+ value = value.split(',')
176+ return super(MultipleIntegerField, self).render(
177+ name, value, attrs=attrs, choices=choices
178+ )
179
180=== modified file 'loco_directory/events/forms.py'
181--- loco_directory/events/forms.py 2013-02-17 01:44:52 +0000
182+++ loco_directory/events/forms.py 2013-03-04 23:07:27 +0000
183@@ -4,14 +4,27 @@
184 from django.utils.translation import ugettext as _
185 from django.core.urlresolvers import reverse
186
187-from .models import BaseEvent, GlobalEvent, TeamEvent, Attendee, TeamEventComment
188 from venues.models import Venue
189 from common.forms import RenderableMixin
190 from userprofiles.models import UserProfile
191+
192+from .models import BaseEvent, GlobalEvent, TeamEvent, Attendee, TeamEventComment
193 from .widgets import DateTimeWidget
194+from .fields import MultipleIntegerField
195
196+from dateutil import rrule
197 import itertools
198
199+WEEKDAY_SHORT = (
200+ (7, _(u'Sun')),
201+ (1, _(u'Mon')),
202+ (2, _(u'Tue')),
203+ (3, _(u'Wed')),
204+ (4, _(u'Thu')),
205+ (5, _(u'Fri')),
206+ (6, _(u'Sat'))
207+)
208+
209
210 def grouped_user_list(teams):
211 other_members, team_members = [], []
212@@ -68,13 +81,23 @@
213 """
214 a form to create/update a TeamEvent
215 """
216+
217 class Meta(BaseEventForm.Meta):
218 model = TeamEvent
219+ fields = ('name', 'date_begin', 'date_end', 'frequency', 'interval',
220+ 'week_days', 'repetitions', 'until', 'description', 'announce',
221+ 'date_created', 'created_by', 'teams', 'contact',
222+ 'global_event', 'venue', 'channel', 'registration')
223 exclude = ('teams', 'date_created', 'created_by')
224
225 def __init__(self, teams=[], *args, **kargs):
226 super(TeamEventForm, self).__init__(*args, **kargs)
227 self.teams = teams
228+ self.fields['week_days'] = MultipleIntegerField(
229+ WEEKDAY_SHORT,
230+ label=_(u'Repeats on'),
231+ widget=forms.CheckboxSelectMultiple
232+ )
233 self.fields['contact'].choices = grouped_user_list(self.teams)
234 self.fields['venue'].choices = self.grouped_venue_list()
235 from common.widgets import PopupRelatedFieldWidgetWrapper
236@@ -85,19 +108,24 @@
237 self.initial['date_end'] = self.instance.local_date_end
238
239 def clean(self):
240+ begin = self.cleaned_data.get('date_begin', None)
241+ end = self.cleaned_data.get('date_end', None)
242+ frequency = self.cleaned_data.get('frequency', -1)
243+ week_days = self.cleaned_data.get('week_days')
244 venue = self.cleaned_data.get('venue')
245+
246+ if begin and end and begin > end:
247+ raise forms.ValidationError(_("Events can not end before they start."))
248 if venue is not None:
249- begin = self.cleaned_data.get('date_begin', None)
250- end = self.cleaned_data.get('date_end', None)
251 if begin is not None and end is not None:
252 self.cleaned_data['date_begin'] = venue.fromlocaltime(begin)
253 self.cleaned_data['date_end'] = venue.fromlocaltime(end)
254 elif self.teams:
255- begin = self.cleaned_data.get('date_begin', None)
256- end = self.cleaned_data.get('date_end', None)
257 if begin is not None and end is not None:
258 self.cleaned_data['date_begin'] = self.teams[0].fromlocaltime(begin)
259 self.cleaned_data['date_end'] = self.teams[0].fromlocaltime(end)
260+ if frequency == rrule.WEEKLY:
261+ self.cleaned_data['week_days'] = u','.join([str(i) for i in week_days])
262 return self.cleaned_data
263
264 def grouped_venue_list(self):
265
266=== added file 'loco_directory/events/listeners.py'
267--- loco_directory/events/listeners.py 1970-01-01 00:00:00 +0000
268+++ loco_directory/events/listeners.py 2013-03-04 23:07:27 +0000
269@@ -0,0 +1,26 @@
270+# -*- coding: utf-8 -*-
271+from django.db.models.signals import post_save, post_delete
272+from django.conf import settings
273+
274+
275+from .models import TeamEvent
276+
277+MAX_PAST = getattr(settings, 'EVENTS_MAX_PAST_OCCURRENCES', 10)
278+MAX_FUTURE = getattr(settings, 'EVENTS_MAX_FUTURE_OCCURRENCES', 20)
279+
280+
281+def update_event(sender, instance, **kwargs):
282+ if instance.repetitions or instance.until:
283+ occurrences = instance.get_occurrences()
284+ else:
285+ occurrences = instance.get_past_occurrences(MAX_PAST) +\
286+ instance.get_future_occurrences(MAX_FUTURE)
287+ instance.update_occurrences_set(occurrences)
288+
289+
290+def delete_event(sender, instance, **kwargs):
291+ for occurrence in instance.occurrence_set.all():
292+ occurrence.delete()
293+
294+post_save.connect(update_event, sender=TeamEvent)
295+post_delete.connect(delete_event, sender=TeamEvent)
296
297=== added directory 'loco_directory/events/management'
298=== added file 'loco_directory/events/management/__init__.py'
299=== added directory 'loco_directory/events/management/commands'
300=== added file 'loco_directory/events/management/commands/__init__.py'
301=== added file 'loco_directory/events/management/commands/update_occurrences_set.py'
302--- loco_directory/events/management/commands/update_occurrences_set.py 1970-01-01 00:00:00 +0000
303+++ loco_directory/events/management/commands/update_occurrences_set.py 2013-03-04 23:07:27 +0000
304@@ -0,0 +1,33 @@
305+# -*- coding: utf-8 -*-
306+from django.core.management.base import BaseCommand
307+from django.db.models import Q
308+
309+from events.models import TeamEvent, Occurrence
310+
311+
312+class Command(BaseCommand):
313+ def handle(self, *args, **kwargs):
314+ """q = Q(date_end__isnull=True)
315+ q |= Q(repetitions__isnull=True)
316+ for event in TeamEvent.objects.filter(q):
317+ print('Updating occurrences set for %s' % event)
318+ event.save()"""
319+
320+ for event in TeamEvent.objects.all():
321+ print event
322+ try:
323+ Occurrence(
324+ pk=event.pk,
325+ event=event,
326+ title=event.name.strip(),
327+ date_begin=event.date_begin,
328+ date_end=event.date_end,
329+ original_date_begin=event.date_begin,
330+ original_date_end=event.date_end
331+ ).save()
332+ except:
333+ pass
334+
335+ """for event in Occurrence.objects.all():
336+ print event
337+ event.delete()"""
338
339=== modified file 'loco_directory/events/managers.py'
340--- loco_directory/events/managers.py 2012-11-28 00:46:29 +0000
341+++ loco_directory/events/managers.py 2013-03-04 23:07:27 +0000
342@@ -34,3 +34,25 @@
343
344 def has_location(self):
345 return self.filter(venue__longitude__isnull=False, venue__latitude__isnull=False)
346+
347+
348+class OccurrenceManager(models.Manager):
349+ """ manager for a team event """
350+ def next_3_events(self):
351+ """ a list with the next 3 events """
352+ return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:3]
353+
354+ def next_5_events(self):
355+ """ a list with the next 5 events """
356+ return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:5]
357+
358+ def next_events(self):
359+ """ a list with all upcoming team events """
360+ return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')
361+
362+ def history_events(self):
363+ """ all team events in history """
364+ return self.filter(date_end__lt=datetime.datetime.now()).order_by('-date_end')
365+
366+ def has_location(self):
367+ return self.filter(venue__longitude__isnull=False, venue__latitude__isnull=False)
368
369=== added file 'loco_directory/events/migrations/0012_auto__add_occurrence.py'
370--- loco_directory/events/migrations/0012_auto__add_occurrence.py 1970-01-01 00:00:00 +0000
371+++ loco_directory/events/migrations/0012_auto__add_occurrence.py 2013-03-04 23:07:27 +0000
372@@ -0,0 +1,206 @@
373+# encoding: utf-8
374+import datetime
375+from south.db import db
376+from south.v2 import SchemaMigration
377+from django.db import models
378+
379+class Migration(SchemaMigration):
380+
381+ def forwards(self, orm):
382+
383+ # Adding model 'Occurrence'
384+ db.create_table('events_occurrence', (
385+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
386+ ('event', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['events.TeamEvent'])),
387+ ('title', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
388+ ('date_begin', self.gf('django.db.models.fields.DateTimeField')()),
389+ ('date_end', self.gf('django.db.models.fields.DateTimeField')()),
390+ ('cancelled', self.gf('django.db.models.fields.BooleanField')(default=False)),
391+ ('original_date_begin', self.gf('django.db.models.fields.DateTimeField')()),
392+ ('original_date_end', self.gf('django.db.models.fields.DateTimeField')()),
393+ ))
394+ db.send_create_signal('events', ['Occurrence'])
395+
396+
397+ def backwards(self, orm):
398+
399+ # Deleting model 'Occurrence'
400+ db.delete_table('events_occurrence')
401+
402+
403+ models = {
404+ 'auth.group': {
405+ 'Meta': {'object_name': 'Group'},
406+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
407+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
408+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
409+ },
410+ 'auth.permission': {
411+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
412+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
413+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
414+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
415+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
416+ },
417+ 'auth.user': {
418+ 'Meta': {'object_name': 'User'},
419+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
420+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
421+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
422+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
423+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
424+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
425+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
426+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
427+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
428+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
429+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
430+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
431+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
432+ },
433+ 'contenttypes.contenttype': {
434+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
435+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
436+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
437+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
438+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
439+ },
440+ 'events.attendee': {
441+ 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)", 'object_name': 'Attendee'},
442+ 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
443+ 'guests': ('events.fields.GuestsField', [], {}),
444+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
445+ 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
446+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
447+ },
448+ 'events.baseevent': {
449+ 'Meta': {'object_name': 'BaseEvent'},
450+ 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
451+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
452+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 33, 45, 669344)', 'db_index': 'True'}),
453+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
454+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
455+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
456+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
457+ },
458+ 'events.globalevent': {
459+ 'Meta': {'object_name': 'GlobalEvent', '_ormbases': ['events.BaseEvent']},
460+ 'activities': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
461+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
462+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
463+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
464+ 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
465+ },
466+ 'events.occurrence': {
467+ 'Meta': {'object_name': 'Occurrence'},
468+ 'cancelled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
469+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {}),
470+ 'date_end': ('django.db.models.fields.DateTimeField', [], {}),
471+ 'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}),
472+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
473+ 'original_date_begin': ('django.db.models.fields.DateTimeField', [], {}),
474+ 'original_date_end': ('django.db.models.fields.DateTimeField', [], {}),
475+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
476+ },
477+ 'events.teamevent': {
478+ 'Meta': {'object_name': 'TeamEvent', '_ormbases': ['events.BaseEvent']},
479+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
480+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
481+ 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
482+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
483+ 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
484+ 'registration': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
485+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'}),
486+ 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
487+ },
488+ 'events.teameventcomment': {
489+ 'Meta': {'object_name': 'TeamEventComment'},
490+ 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
491+ 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
492+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 33, 45, 673049)', 'db_index': 'True'}),
493+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
494+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
495+ },
496+ 'teams.continent': {
497+ 'Meta': {'ordering': "('name',)", 'object_name': 'Continent'},
498+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
499+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
500+ },
501+ 'teams.country': {
502+ 'Meta': {'ordering': "('name',)", 'object_name': 'Country'},
503+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
504+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
505+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
506+ },
507+ 'teams.language': {
508+ 'Meta': {'ordering': "('name',)", 'object_name': 'Language'},
509+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
510+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
511+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
512+ },
513+ 'teams.team': {
514+ 'Meta': {'ordering': "('approved', 'name')", 'object_name': 'Team', 'db_table': "'teams'"},
515+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
516+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'admins'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
517+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
518+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
519+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
520+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'contacts'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
521+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
522+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
523+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
524+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
525+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
526+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
527+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
528+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
529+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
530+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
531+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
532+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
533+ 'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '80'}),
534+ 'override_name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
535+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
536+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
537+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
538+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
539+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
540+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
541+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
542+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
543+ },
544+ 'userprofiles.userprofile': {
545+ 'Meta': {'ordering': "('user__username',)", 'object_name': 'UserProfile'},
546+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
547+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
548+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
549+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
550+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
551+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
552+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
553+ 'mugshot': ('django.db.models.fields.URLField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
554+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
555+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
556+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
557+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
558+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
559+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
560+ },
561+ 'venues.venue': {
562+ 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))", 'object_name': 'Venue'},
563+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
564+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
565+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
566+ 'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Continent']", 'null': 'True'}),
567+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
568+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
569+ 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
570+ 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
571+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
572+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
573+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
574+ 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
575+ }
576+ }
577+
578+ complete_apps = ['events']
579
580=== added file 'loco_directory/events/migrations/0013_auto__add_field_teamevent_interval.py'
581--- loco_directory/events/migrations/0013_auto__add_field_teamevent_interval.py 1970-01-01 00:00:00 +0000
582+++ loco_directory/events/migrations/0013_auto__add_field_teamevent_interval.py 2013-03-04 23:07:27 +0000
583@@ -0,0 +1,197 @@
584+# encoding: utf-8
585+import datetime
586+from south.db import db
587+from south.v2 import SchemaMigration
588+from django.db import models
589+
590+class Migration(SchemaMigration):
591+
592+ def forwards(self, orm):
593+
594+ # Adding field 'TeamEvent.interval'
595+ db.add_column('events_teamevent', 'interval', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=1), keep_default=False)
596+
597+
598+ def backwards(self, orm):
599+
600+ # Deleting field 'TeamEvent.interval'
601+ db.delete_column('events_teamevent', 'interval')
602+
603+
604+ models = {
605+ 'auth.group': {
606+ 'Meta': {'object_name': 'Group'},
607+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
608+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
609+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
610+ },
611+ 'auth.permission': {
612+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
613+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
614+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
615+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
616+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
617+ },
618+ 'auth.user': {
619+ 'Meta': {'object_name': 'User'},
620+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
621+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
622+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
623+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
624+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
625+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
626+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
627+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
628+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
629+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
630+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
631+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
632+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
633+ },
634+ 'contenttypes.contenttype': {
635+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
636+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
637+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
638+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
639+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
640+ },
641+ 'events.attendee': {
642+ 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)", 'object_name': 'Attendee'},
643+ 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
644+ 'guests': ('events.fields.GuestsField', [], {}),
645+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
646+ 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
647+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
648+ },
649+ 'events.baseevent': {
650+ 'Meta': {'object_name': 'BaseEvent'},
651+ 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
652+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
653+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 6, 224560)', 'db_index': 'True'}),
654+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
655+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
656+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
657+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
658+ },
659+ 'events.globalevent': {
660+ 'Meta': {'object_name': 'GlobalEvent', '_ormbases': ['events.BaseEvent']},
661+ 'activities': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
662+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
663+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
664+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
665+ 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
666+ },
667+ 'events.occurrence': {
668+ 'Meta': {'object_name': 'Occurrence'},
669+ 'cancelled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
670+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {}),
671+ 'date_end': ('django.db.models.fields.DateTimeField', [], {}),
672+ 'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}),
673+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
674+ 'original_date_begin': ('django.db.models.fields.DateTimeField', [], {}),
675+ 'original_date_end': ('django.db.models.fields.DateTimeField', [], {}),
676+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
677+ },
678+ 'events.teamevent': {
679+ 'Meta': {'object_name': 'TeamEvent', '_ormbases': ['events.BaseEvent']},
680+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
681+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
682+ 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
683+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
684+ 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
685+ 'interval': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}),
686+ 'registration': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
687+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'}),
688+ 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
689+ },
690+ 'events.teameventcomment': {
691+ 'Meta': {'object_name': 'TeamEventComment'},
692+ 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
693+ 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
694+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 6, 227266)', 'db_index': 'True'}),
695+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
696+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
697+ },
698+ 'teams.continent': {
699+ 'Meta': {'ordering': "('name',)", 'object_name': 'Continent'},
700+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
701+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
702+ },
703+ 'teams.country': {
704+ 'Meta': {'ordering': "('name',)", 'object_name': 'Country'},
705+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
706+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
707+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
708+ },
709+ 'teams.language': {
710+ 'Meta': {'ordering': "('name',)", 'object_name': 'Language'},
711+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
712+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
713+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
714+ },
715+ 'teams.team': {
716+ 'Meta': {'ordering': "('approved', 'name')", 'object_name': 'Team', 'db_table': "'teams'"},
717+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
718+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'admins'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
719+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
720+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
721+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
722+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'contacts'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
723+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
724+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
725+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
726+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
727+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
728+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
729+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
730+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
731+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
732+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
733+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
734+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
735+ 'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '80'}),
736+ 'override_name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
737+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
738+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
739+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
740+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
741+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
742+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
743+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
744+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
745+ },
746+ 'userprofiles.userprofile': {
747+ 'Meta': {'ordering': "('user__username',)", 'object_name': 'UserProfile'},
748+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
749+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
750+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
751+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
752+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
753+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
754+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
755+ 'mugshot': ('django.db.models.fields.URLField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
756+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
757+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
758+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
759+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
760+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
761+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
762+ },
763+ 'venues.venue': {
764+ 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))", 'object_name': 'Venue'},
765+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
766+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
767+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
768+ 'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Continent']", 'null': 'True'}),
769+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
770+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
771+ 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
772+ 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
773+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
774+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
775+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
776+ 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
777+ }
778+ }
779+
780+ complete_apps = ['events']
781
782=== added file 'loco_directory/events/migrations/0014_auto__add_field_teamevent_frequency.py'
783--- loco_directory/events/migrations/0014_auto__add_field_teamevent_frequency.py 1970-01-01 00:00:00 +0000
784+++ loco_directory/events/migrations/0014_auto__add_field_teamevent_frequency.py 2013-03-04 23:07:27 +0000
785@@ -0,0 +1,198 @@
786+# encoding: utf-8
787+import datetime
788+from south.db import db
789+from south.v2 import SchemaMigration
790+from django.db import models
791+
792+class Migration(SchemaMigration):
793+
794+ def forwards(self, orm):
795+
796+ # Adding field 'TeamEvent.frequency'
797+ db.add_column('events_teamevent', 'frequency', self.gf('django.db.models.fields.SmallIntegerField')(default=-1), keep_default=False)
798+
799+
800+ def backwards(self, orm):
801+
802+ # Deleting field 'TeamEvent.frequency'
803+ db.delete_column('events_teamevent', 'frequency')
804+
805+
806+ models = {
807+ 'auth.group': {
808+ 'Meta': {'object_name': 'Group'},
809+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
810+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
811+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
812+ },
813+ 'auth.permission': {
814+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
815+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
816+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
817+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
818+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
819+ },
820+ 'auth.user': {
821+ 'Meta': {'object_name': 'User'},
822+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
823+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
824+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
825+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
826+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
827+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
828+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
829+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
830+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
831+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
832+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
833+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
834+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
835+ },
836+ 'contenttypes.contenttype': {
837+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
838+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
839+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
840+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
841+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
842+ },
843+ 'events.attendee': {
844+ 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)", 'object_name': 'Attendee'},
845+ 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
846+ 'guests': ('events.fields.GuestsField', [], {}),
847+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
848+ 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
849+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
850+ },
851+ 'events.baseevent': {
852+ 'Meta': {'object_name': 'BaseEvent'},
853+ 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
854+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
855+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 19, 680514)', 'db_index': 'True'}),
856+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
857+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
858+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
859+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
860+ },
861+ 'events.globalevent': {
862+ 'Meta': {'object_name': 'GlobalEvent', '_ormbases': ['events.BaseEvent']},
863+ 'activities': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
864+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
865+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
866+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
867+ 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
868+ },
869+ 'events.occurrence': {
870+ 'Meta': {'object_name': 'Occurrence'},
871+ 'cancelled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
872+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {}),
873+ 'date_end': ('django.db.models.fields.DateTimeField', [], {}),
874+ 'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}),
875+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
876+ 'original_date_begin': ('django.db.models.fields.DateTimeField', [], {}),
877+ 'original_date_end': ('django.db.models.fields.DateTimeField', [], {}),
878+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
879+ },
880+ 'events.teamevent': {
881+ 'Meta': {'object_name': 'TeamEvent', '_ormbases': ['events.BaseEvent']},
882+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
883+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
884+ 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
885+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
886+ 'frequency': ('django.db.models.fields.SmallIntegerField', [], {'default': '-1'}),
887+ 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
888+ 'interval': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}),
889+ 'registration': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
890+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'}),
891+ 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
892+ },
893+ 'events.teameventcomment': {
894+ 'Meta': {'object_name': 'TeamEventComment'},
895+ 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
896+ 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
897+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 19, 683130)', 'db_index': 'True'}),
898+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
899+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
900+ },
901+ 'teams.continent': {
902+ 'Meta': {'ordering': "('name',)", 'object_name': 'Continent'},
903+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
904+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
905+ },
906+ 'teams.country': {
907+ 'Meta': {'ordering': "('name',)", 'object_name': 'Country'},
908+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
909+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
910+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
911+ },
912+ 'teams.language': {
913+ 'Meta': {'ordering': "('name',)", 'object_name': 'Language'},
914+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
915+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
916+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
917+ },
918+ 'teams.team': {
919+ 'Meta': {'ordering': "('approved', 'name')", 'object_name': 'Team', 'db_table': "'teams'"},
920+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
921+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'admins'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
922+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
923+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
924+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
925+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'contacts'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
926+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
927+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
928+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
929+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
930+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
931+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
932+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
933+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
934+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
935+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
936+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
937+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
938+ 'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '80'}),
939+ 'override_name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
940+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
941+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
942+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
943+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
944+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
945+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
946+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
947+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
948+ },
949+ 'userprofiles.userprofile': {
950+ 'Meta': {'ordering': "('user__username',)", 'object_name': 'UserProfile'},
951+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
952+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
953+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
954+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
955+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
956+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
957+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
958+ 'mugshot': ('django.db.models.fields.URLField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
959+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
960+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
961+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
962+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
963+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
964+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
965+ },
966+ 'venues.venue': {
967+ 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))", 'object_name': 'Venue'},
968+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
969+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
970+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
971+ 'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Continent']", 'null': 'True'}),
972+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
973+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
974+ 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
975+ 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
976+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
977+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
978+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
979+ 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
980+ }
981+ }
982+
983+ complete_apps = ['events']
984
985=== added file 'loco_directory/events/migrations/0015_auto__add_field_teamevent_repetitions.py'
986--- loco_directory/events/migrations/0015_auto__add_field_teamevent_repetitions.py 1970-01-01 00:00:00 +0000
987+++ loco_directory/events/migrations/0015_auto__add_field_teamevent_repetitions.py 2013-03-04 23:07:27 +0000
988@@ -0,0 +1,199 @@
989+# encoding: utf-8
990+import datetime
991+from south.db import db
992+from south.v2 import SchemaMigration
993+from django.db import models
994+
995+class Migration(SchemaMigration):
996+
997+ def forwards(self, orm):
998+
999+ # Adding field 'TeamEvent.repetitions'
1000+ db.add_column('events_teamevent', 'repetitions', self.gf('django.db.models.fields.PositiveSmallIntegerField')(null=True, blank=True), keep_default=False)
1001+
1002+
1003+ def backwards(self, orm):
1004+
1005+ # Deleting field 'TeamEvent.repetitions'
1006+ db.delete_column('events_teamevent', 'repetitions')
1007+
1008+
1009+ models = {
1010+ 'auth.group': {
1011+ 'Meta': {'object_name': 'Group'},
1012+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1013+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
1014+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
1015+ },
1016+ 'auth.permission': {
1017+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
1018+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1019+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
1020+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1021+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
1022+ },
1023+ 'auth.user': {
1024+ 'Meta': {'object_name': 'User'},
1025+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
1026+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
1027+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
1028+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
1029+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1030+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1031+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1032+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1033+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
1034+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
1035+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
1036+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
1037+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
1038+ },
1039+ 'contenttypes.contenttype': {
1040+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
1041+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1042+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1043+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1044+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
1045+ },
1046+ 'events.attendee': {
1047+ 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)", 'object_name': 'Attendee'},
1048+ 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1049+ 'guests': ('events.fields.GuestsField', [], {}),
1050+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1051+ 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
1052+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
1053+ },
1054+ 'events.baseevent': {
1055+ 'Meta': {'object_name': 'BaseEvent'},
1056+ 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1057+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
1058+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 29, 569337)', 'db_index': 'True'}),
1059+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
1060+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1061+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1062+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
1063+ },
1064+ 'events.globalevent': {
1065+ 'Meta': {'object_name': 'GlobalEvent', '_ormbases': ['events.BaseEvent']},
1066+ 'activities': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1067+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
1068+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1069+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1070+ 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
1071+ },
1072+ 'events.occurrence': {
1073+ 'Meta': {'object_name': 'Occurrence'},
1074+ 'cancelled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1075+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {}),
1076+ 'date_end': ('django.db.models.fields.DateTimeField', [], {}),
1077+ 'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}),
1078+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1079+ 'original_date_begin': ('django.db.models.fields.DateTimeField', [], {}),
1080+ 'original_date_end': ('django.db.models.fields.DateTimeField', [], {}),
1081+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
1082+ },
1083+ 'events.teamevent': {
1084+ 'Meta': {'object_name': 'TeamEvent', '_ormbases': ['events.BaseEvent']},
1085+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
1086+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1087+ 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1088+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
1089+ 'frequency': ('django.db.models.fields.SmallIntegerField', [], {'default': '-1'}),
1090+ 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
1091+ 'interval': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}),
1092+ 'registration': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1093+ 'repetitions': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
1094+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'}),
1095+ 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
1096+ },
1097+ 'events.teameventcomment': {
1098+ 'Meta': {'object_name': 'TeamEventComment'},
1099+ 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
1100+ 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1101+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 29, 573475)', 'db_index': 'True'}),
1102+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1103+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
1104+ },
1105+ 'teams.continent': {
1106+ 'Meta': {'ordering': "('name',)", 'object_name': 'Continent'},
1107+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1108+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
1109+ },
1110+ 'teams.country': {
1111+ 'Meta': {'ordering': "('name',)", 'object_name': 'Country'},
1112+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
1113+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1114+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
1115+ },
1116+ 'teams.language': {
1117+ 'Meta': {'ordering': "('name',)", 'object_name': 'Language'},
1118+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
1119+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1120+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
1121+ },
1122+ 'teams.team': {
1123+ 'Meta': {'ordering': "('approved', 'name')", 'object_name': 'Team', 'db_table': "'teams'"},
1124+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1125+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'admins'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
1126+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1127+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1128+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1129+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'contacts'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
1130+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
1131+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
1132+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1133+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
1134+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1135+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1136+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1137+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
1138+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
1139+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1140+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1141+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1142+ 'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '80'}),
1143+ 'override_name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
1144+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
1145+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
1146+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
1147+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1148+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1149+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1150+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1151+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
1152+ },
1153+ 'userprofiles.userprofile': {
1154+ 'Meta': {'ordering': "('user__username',)", 'object_name': 'UserProfile'},
1155+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1156+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1157+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1158+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1159+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1160+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1161+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1162+ 'mugshot': ('django.db.models.fields.URLField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1163+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1164+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
1165+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1166+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1167+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
1168+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
1169+ },
1170+ 'venues.venue': {
1171+ 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))", 'object_name': 'Venue'},
1172+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1173+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1174+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1175+ 'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Continent']", 'null': 'True'}),
1176+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
1177+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1178+ 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
1179+ 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
1180+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
1181+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1182+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1183+ 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
1184+ }
1185+ }
1186+
1187+ complete_apps = ['events']
1188
1189=== added file 'loco_directory/events/migrations/0016_auto__add_field_teamevent_until.py'
1190--- loco_directory/events/migrations/0016_auto__add_field_teamevent_until.py 1970-01-01 00:00:00 +0000
1191+++ loco_directory/events/migrations/0016_auto__add_field_teamevent_until.py 2013-03-04 23:07:27 +0000
1192@@ -0,0 +1,200 @@
1193+# encoding: utf-8
1194+import datetime
1195+from south.db import db
1196+from south.v2 import SchemaMigration
1197+from django.db import models
1198+
1199+class Migration(SchemaMigration):
1200+
1201+ def forwards(self, orm):
1202+
1203+ # Adding field 'TeamEvent.until'
1204+ db.add_column('events_teamevent', 'until', self.gf('django.db.models.fields.DateField')(null=True, blank=True), keep_default=False)
1205+
1206+
1207+ def backwards(self, orm):
1208+
1209+ # Deleting field 'TeamEvent.until'
1210+ db.delete_column('events_teamevent', 'until')
1211+
1212+
1213+ models = {
1214+ 'auth.group': {
1215+ 'Meta': {'object_name': 'Group'},
1216+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1217+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
1218+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
1219+ },
1220+ 'auth.permission': {
1221+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
1222+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1223+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
1224+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1225+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
1226+ },
1227+ 'auth.user': {
1228+ 'Meta': {'object_name': 'User'},
1229+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
1230+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
1231+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
1232+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
1233+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1234+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1235+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1236+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1237+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
1238+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
1239+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
1240+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
1241+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
1242+ },
1243+ 'contenttypes.contenttype': {
1244+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
1245+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1246+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1247+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1248+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
1249+ },
1250+ 'events.attendee': {
1251+ 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)", 'object_name': 'Attendee'},
1252+ 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1253+ 'guests': ('events.fields.GuestsField', [], {}),
1254+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1255+ 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
1256+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
1257+ },
1258+ 'events.baseevent': {
1259+ 'Meta': {'object_name': 'BaseEvent'},
1260+ 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1261+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
1262+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 45, 629497)', 'db_index': 'True'}),
1263+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
1264+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1265+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1266+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
1267+ },
1268+ 'events.globalevent': {
1269+ 'Meta': {'object_name': 'GlobalEvent', '_ormbases': ['events.BaseEvent']},
1270+ 'activities': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1271+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
1272+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1273+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1274+ 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
1275+ },
1276+ 'events.occurrence': {
1277+ 'Meta': {'object_name': 'Occurrence'},
1278+ 'cancelled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1279+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {}),
1280+ 'date_end': ('django.db.models.fields.DateTimeField', [], {}),
1281+ 'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}),
1282+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1283+ 'original_date_begin': ('django.db.models.fields.DateTimeField', [], {}),
1284+ 'original_date_end': ('django.db.models.fields.DateTimeField', [], {}),
1285+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
1286+ },
1287+ 'events.teamevent': {
1288+ 'Meta': {'object_name': 'TeamEvent', '_ormbases': ['events.BaseEvent']},
1289+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
1290+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1291+ 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1292+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
1293+ 'frequency': ('django.db.models.fields.SmallIntegerField', [], {'default': '-1'}),
1294+ 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
1295+ 'interval': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}),
1296+ 'registration': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1297+ 'repetitions': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
1298+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'}),
1299+ 'until': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1300+ 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
1301+ },
1302+ 'events.teameventcomment': {
1303+ 'Meta': {'object_name': 'TeamEventComment'},
1304+ 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
1305+ 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1306+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 2, 23, 17, 34, 45, 633781)', 'db_index': 'True'}),
1307+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1308+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
1309+ },
1310+ 'teams.continent': {
1311+ 'Meta': {'ordering': "('name',)", 'object_name': 'Continent'},
1312+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1313+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
1314+ },
1315+ 'teams.country': {
1316+ 'Meta': {'ordering': "('name',)", 'object_name': 'Country'},
1317+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
1318+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1319+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
1320+ },
1321+ 'teams.language': {
1322+ 'Meta': {'ordering': "('name',)", 'object_name': 'Language'},
1323+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
1324+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1325+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
1326+ },
1327+ 'teams.team': {
1328+ 'Meta': {'ordering': "('approved', 'name')", 'object_name': 'Team', 'db_table': "'teams'"},
1329+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1330+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'admins'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
1331+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1332+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1333+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1334+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'contacts'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
1335+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
1336+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
1337+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1338+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
1339+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1340+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1341+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1342+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
1343+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
1344+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1345+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1346+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1347+ 'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '80'}),
1348+ 'override_name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
1349+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
1350+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
1351+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
1352+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1353+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1354+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1355+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1356+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
1357+ },
1358+ 'userprofiles.userprofile': {
1359+ 'Meta': {'ordering': "('user__username',)", 'object_name': 'UserProfile'},
1360+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1361+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1362+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1363+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1364+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1365+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1366+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1367+ 'mugshot': ('django.db.models.fields.URLField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1368+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1369+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
1370+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1371+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1372+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
1373+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
1374+ },
1375+ 'venues.venue': {
1376+ 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))", 'object_name': 'Venue'},
1377+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1378+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1379+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1380+ 'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Continent']", 'null': 'True'}),
1381+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
1382+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1383+ 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
1384+ 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
1385+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
1386+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1387+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1388+ 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
1389+ }
1390+ }
1391+
1392+ complete_apps = ['events']
1393
1394=== added file 'loco_directory/events/migrations/0017_auto__add_field_teamevent_week_days.py'
1395--- loco_directory/events/migrations/0017_auto__add_field_teamevent_week_days.py 1970-01-01 00:00:00 +0000
1396+++ loco_directory/events/migrations/0017_auto__add_field_teamevent_week_days.py 2013-03-04 23:07:27 +0000
1397@@ -0,0 +1,201 @@
1398+# encoding: utf-8
1399+import datetime
1400+from south.db import db
1401+from south.v2 import SchemaMigration
1402+from django.db import models
1403+
1404+class Migration(SchemaMigration):
1405+
1406+ def forwards(self, orm):
1407+
1408+ # Adding field 'TeamEvent.week_days'
1409+ db.add_column('events_teamevent', 'week_days', self.gf('django.db.models.fields.CommaSeparatedIntegerField')(max_length=14, null=True, blank=True), keep_default=False)
1410+
1411+
1412+ def backwards(self, orm):
1413+
1414+ # Deleting field 'TeamEvent.week_days'
1415+ db.delete_column('events_teamevent', 'week_days')
1416+
1417+
1418+ models = {
1419+ 'auth.group': {
1420+ 'Meta': {'object_name': 'Group'},
1421+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1422+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
1423+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
1424+ },
1425+ 'auth.permission': {
1426+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
1427+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1428+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
1429+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1430+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
1431+ },
1432+ 'auth.user': {
1433+ 'Meta': {'object_name': 'User'},
1434+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
1435+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
1436+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
1437+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
1438+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1439+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1440+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1441+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1442+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
1443+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
1444+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
1445+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
1446+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
1447+ },
1448+ 'contenttypes.contenttype': {
1449+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
1450+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1451+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1452+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
1453+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
1454+ },
1455+ 'events.attendee': {
1456+ 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)", 'object_name': 'Attendee'},
1457+ 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1458+ 'guests': ('events.fields.GuestsField', [], {}),
1459+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1460+ 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
1461+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
1462+ },
1463+ 'events.baseevent': {
1464+ 'Meta': {'object_name': 'BaseEvent'},
1465+ 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1466+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
1467+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 3, 3, 13, 43, 30, 733598)', 'db_index': 'True'}),
1468+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
1469+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1470+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1471+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
1472+ },
1473+ 'events.globalevent': {
1474+ 'Meta': {'object_name': 'GlobalEvent', '_ormbases': ['events.BaseEvent']},
1475+ 'activities': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1476+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
1477+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1478+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1479+ 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
1480+ },
1481+ 'events.occurrence': {
1482+ 'Meta': {'object_name': 'Occurrence'},
1483+ 'cancelled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1484+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {}),
1485+ 'date_end': ('django.db.models.fields.DateTimeField', [], {}),
1486+ 'event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}),
1487+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1488+ 'original_date_begin': ('django.db.models.fields.DateTimeField', [], {}),
1489+ 'original_date_end': ('django.db.models.fields.DateTimeField', [], {}),
1490+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
1491+ },
1492+ 'events.teamevent': {
1493+ 'Meta': {'object_name': 'TeamEvent', '_ormbases': ['events.BaseEvent']},
1494+ 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
1495+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1496+ 'contact': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1497+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
1498+ 'frequency': ('django.db.models.fields.SmallIntegerField', [], {'default': '-1'}),
1499+ 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
1500+ 'interval': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1'}),
1501+ 'registration': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1502+ 'repetitions': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
1503+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'}),
1504+ 'until': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1505+ 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'}),
1506+ 'week_days': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'max_length': '14', 'null': 'True', 'blank': 'True'})
1507+ },
1508+ 'events.teameventcomment': {
1509+ 'Meta': {'object_name': 'TeamEventComment'},
1510+ 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
1511+ 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
1512+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 3, 3, 13, 43, 30, 736555)', 'db_index': 'True'}),
1513+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1514+ 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
1515+ },
1516+ 'teams.continent': {
1517+ 'Meta': {'ordering': "('name',)", 'object_name': 'Continent'},
1518+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1519+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
1520+ },
1521+ 'teams.country': {
1522+ 'Meta': {'ordering': "('name',)", 'object_name': 'Country'},
1523+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
1524+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1525+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
1526+ },
1527+ 'teams.language': {
1528+ 'Meta': {'ordering': "('name',)", 'object_name': 'Language'},
1529+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
1530+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1531+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
1532+ },
1533+ 'teams.team': {
1534+ 'Meta': {'ordering': "('approved', 'name')", 'object_name': 'Team', 'db_table': "'teams'"},
1535+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1536+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'admins'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
1537+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
1538+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1539+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1540+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'contacts'", 'symmetrical': 'False', 'to': "orm['userprofiles.UserProfile']"}),
1541+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
1542+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
1543+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
1544+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
1545+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1546+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1547+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
1548+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
1549+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
1550+ 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1551+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1552+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1553+ 'name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '80'}),
1554+ 'override_name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True', 'blank': 'True'}),
1555+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
1556+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
1557+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
1558+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
1559+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1560+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1561+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1562+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
1563+ },
1564+ 'userprofiles.userprofile': {
1565+ 'Meta': {'ordering': "('user__username',)", 'object_name': 'UserProfile'},
1566+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1567+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
1568+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1569+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1570+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1571+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1572+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1573+ 'mugshot': ('django.db.models.fields.URLField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1574+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1575+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
1576+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
1577+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1578+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
1579+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
1580+ },
1581+ 'venues.venue': {
1582+ 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))", 'object_name': 'Venue'},
1583+ 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1584+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
1585+ 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
1586+ 'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Continent']", 'null': 'True'}),
1587+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
1588+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
1589+ 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
1590+ 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
1591+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
1592+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
1593+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
1594+ 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
1595+ }
1596+ }
1597+
1598+ complete_apps = ['events']
1599
1600=== modified file 'loco_directory/events/models.py'
1601--- loco_directory/events/models.py 2013-02-17 01:44:52 +0000
1602+++ loco_directory/events/models.py 2013-03-04 23:07:27 +0000
1603@@ -3,36 +3,63 @@
1604 from django.contrib.auth.models import User
1605 from django.template.defaultfilters import slugify
1606 from django.utils.translation import ugettext_lazy as _
1607+from django.conf import settings
1608
1609 from userprofiles.models import UserProfile
1610 from teams.models import *
1611 from venues.models import Venue
1612 from common.shortcuts import queryset_sum, queryset_count
1613 from common.mixins import LocalTimeMixin
1614+from common.timezone import get_timezone
1615
1616-from .managers import GlobalEventManager, TeamEventManager
1617+from .managers import GlobalEventManager, TeamEventManager, OccurrenceManager
1618 from .fields import GuestsField
1619
1620+import pytz
1621+from itertools import islice, takewhile
1622+from dateutil import rrule
1623+from datetime import datetime
1624+
1625 ATTENDEE_PROMISE_CHOICES = (
1626 ('sure', _('attending')),
1627 ('maybe', _('might be attending')),
1628 ('not', _('not attending')),
1629 )
1630
1631-import pytz
1632-import datetime
1633+FREQUENCIES_CHOICES = (
1634+ (-1, _('Single time')),
1635+ (rrule.DAILY, _('Daily')),
1636+ (rrule.WEEKLY, _('Weekly')),
1637+ (rrule.MONTHLY, _('Monthly')),
1638+ (rrule.YEARLY, _('Yearly')),
1639+)
1640+
1641+ISO_WEEKDAYS_MAP = (
1642+ None,
1643+ rrule.MO,
1644+ rrule.TU,
1645+ rrule.WE,
1646+ rrule.TH,
1647+ rrule.FR,
1648+ rrule.SA,
1649+ rrule.SU
1650+)
1651+
1652+INTERVAL_CHOICES = [(i + 1, "%2d" % (i + 1)) for i in range(0, 30)]
1653+MAX_PAST = getattr(settings, 'EVENTS_MAX_PAST_OCCURRENCES', 10)
1654+MAX_FUTURE = getattr(settings, 'EVENTS_MAX_FUTURE_OCCURRENCES', 20)
1655
1656
1657 class BaseEvent(models.Model):
1658 """
1659 a simple basic event
1660 """
1661- name = models.CharField(max_length=150, verbose_name=_('Event Name'))
1662+ name = models.CharField(max_length=150, verbose_name=_('Event title'))
1663 date_begin = models.DateTimeField(help_text=_('Local date and time that the event starts'), verbose_name=_('Local Start Time'), db_index=True)
1664 date_end = models.DateTimeField(help_text=_('Local date and time that the event ends'), verbose_name=_('Local End Time'), db_index=True)
1665- description = models.TextField(help_text=_('Description of the Event'), blank=True, null=True)
1666+ description = models.TextField(help_text=_('Description of the event'), blank=True, null=True)
1667 announce = models.URLField(verbose_name=_('Announcement'), help_text=_('URL for the announcement'), max_length=200, verify_exists=False, blank=True, null=True)
1668- date_created = models.DateTimeField(help_text=_('the date and time when the event was created'), default=datetime.datetime.now(), db_index=True)
1669+ date_created = models.DateTimeField(help_text=_('The date and time when the event was created'), default=datetime.now(), db_index=True)
1670
1671 def __unicode__(self):
1672 return self.name
1673@@ -50,17 +77,17 @@
1674 event.add('description').value = self.description or ''
1675
1676 def is_past(self):
1677- return self.date_end > datetime.datetime.today()
1678+ return self.date_end > datetime.today()
1679
1680
1681 class GlobalEvent(BaseEvent):
1682 """
1683 a global event. other events can attend to a global event
1684 """
1685- microbloghashtag = models.CharField(max_length=50, help_text=_('Hash Tag used for microbloggers to mention this event'), verbose_name=_('Microblogging Hash Tag'), null=True, blank=True)
1686+ microbloghashtag = models.CharField(max_length=50, help_text=_('Hash Tag used for microbloggers to mention this event'), verbose_name=_('Microblogging Hashtag'), null=True, blank=True)
1687 pictag = models.CharField(max_length=50, help_text=_('tag used in web albums like; picasa, flickr, and more'), verbose_name=_('Picture Tag'), null=True, blank=True)
1688- channel = models.CharField(help_text=_('Channel for the Event hosted on the freenode IRC network. Ex. #ubuntu-locoteams'), max_length=25, verbose_name=_('Event Channel'), blank=True, null=True)
1689- activities = models.TextField(help_text=_('Activities to do during the Event'), blank=True, null=True)
1690+ channel = models.CharField(help_text=_('Channel for the event hosted on the freenode IRC network. Ex. #ubuntu-locoteams'), max_length=25, verbose_name=_('Event channel'), blank=True, null=True)
1691+ activities = models.TextField(help_text=_('Activities to do during the event'), blank=True, null=True)
1692
1693 objects = GlobalEventManager()
1694
1695@@ -82,6 +109,63 @@
1696 'countries': countries})
1697
1698
1699+class Occurrence(models.Model, LocalTimeMixin):
1700+ event = models.ForeignKey('TeamEvent')
1701+ title = models.CharField(_("title"), max_length=255, blank=True, null=True)
1702+ date_begin = models.DateTimeField(_('start time'))
1703+ date_end = models.DateTimeField(_('end time'))
1704+ cancelled = models.BooleanField(_("cancelled"), default=False)
1705+ original_date_begin = models.DateTimeField(_("original start"))
1706+ original_date_end = models.DateTimeField(_("original end"))
1707+
1708+ objects = OccurrenceManager()
1709+
1710+ def __unicode__(self):
1711+ return u'%s - %s' % (self.title, self.date_begin)
1712+
1713+ @models.permalink
1714+ def get_absolute_url(self):
1715+ """
1716+ Builds and returns the entry's URL based on
1717+ the slug and the creation date.
1718+ """
1719+ return ('team-event-detail', (), {
1720+ 'team_slug': getattr(self.event.first_team(), 'lp_name', 'no-team'),
1721+ 'team_event_id': str(self.event.id),
1722+ 'event_slug': slugify(self.event.name),
1723+ 'year': self.date_begin.strftime('%Y'),
1724+ 'month': self.date_begin.strftime('%m'),
1725+ 'day': self.date_begin.strftime('%d')})
1726+
1727+ def get_title(self):
1728+ if self.title:
1729+ return self.title
1730+ else:
1731+ return self.event.name
1732+
1733+ def get_local_begin(self):
1734+ return self.tolocaltime(self.date_begin)
1735+
1736+ def set_local_begin(self, local_begin):
1737+ self.date_begin = self.fromlocaltime(local_begin)
1738+ local_date_begin = property(get_local_begin, set_local_begin)
1739+
1740+ def get_local_end(self):
1741+ return self.tolocaltime(self.date_end)
1742+
1743+ def set_local_end(self, local_end):
1744+ self.date_end = self.fromlocaltime(local_end)
1745+ local_date_end = property(get_local_end, set_local_end)
1746+
1747+ def cancel(self):
1748+ self.cancelled = True
1749+ self.save()
1750+
1751+ def uncancel(self):
1752+ self.cancelled = False
1753+ self.save()
1754+
1755+
1756 class TeamEvent(BaseEvent, LocalTimeMixin):
1757 """
1758 a event of one or more teams
1759@@ -89,19 +173,27 @@
1760 created_by = models.ForeignKey(User, null=True, blank=True)
1761 teams = models.ManyToManyField(Team, help_text=_('teams planning this event.'), verbose_name=_('Teams Participating'), db_index=True)
1762 contact = models.ForeignKey(UserProfile, verbose_name=_('Event Contact'), null=True, help_text=_('Contact person for this event.'))
1763- global_event = models.ForeignKey(GlobalEvent, help_text=_('this team event is part of the selected global event'), verbose_name=_('Related Global Event'), blank=True, null=True)
1764- venue = models.ForeignKey(Venue, help_text=_('Venue for the Event'), verbose_name=_('Event Venue'), blank=True, null=True)
1765- channel = models.CharField(help_text=_('Channel for the Event hosted on the freenode IRC network. Ex. #ubuntu-us-fl'), max_length=25, verbose_name=_('Event Channel'), blank=True, null=True)
1766+ interval = models.PositiveSmallIntegerField(_('Repeat every'), choices=INTERVAL_CHOICES, default=1, help_text=_('Interval between frequencies'))
1767+ frequency = models.SmallIntegerField(_('Repeats'), choices=FREQUENCIES_CHOICES, default=-1)
1768+ week_days = models.CommaSeparatedIntegerField(_('Repeats on'), blank=True, null=True, max_length=14, help_text=_('Days of the week'))
1769+ repetitions = models.PositiveSmallIntegerField(_('Maximum repetitions'), blank=True, null=True, help_text=_('Endless if not defined'))
1770+ until = models.DateField(_("Ends on "), null=True, blank=True, help_text=_("This date is ignored for one time only events."))
1771+ global_event = models.ForeignKey(GlobalEvent, help_text=_('This event will be part of the selected global event'), verbose_name=_('Related Global Event'), blank=True, null=True)
1772+ venue = models.ForeignKey(Venue, help_text=_('Venue for the event'), verbose_name=_('Event venue'), blank=True, null=True)
1773+ channel = models.CharField(help_text=_('IRC channel for the event hosted on the freenode IRC network. Ex. #ubuntu-us-fl'), max_length=25, verbose_name=_('Event IRC channel'), blank=True, null=True)
1774 registration = models.URLField(verbose_name=_('Registration URL'), help_text=_('URL to register attendance (leave blank to use the built-in registration system)'), max_length=200, verify_exists=False, blank=True, null=True)
1775
1776 objects = TeamEventManager()
1777
1778 def __unicode__(self):
1779- return "%s %s %s" % (self.name, self.venue, self.date_begin or "")
1780+ return u"%s %s-%s" % (self.name, self.date_begin, self.date_end)
1781
1782 @models.permalink
1783 def get_absolute_url(self):
1784- return ('team-event-detail', [getattr(self.first_team(), 'lp_name', 'no-team'), str(self.id), slugify(self.name)])
1785+ return ('team-event-detail-old', [
1786+ getattr(self.first_team(), 'lp_name', 'no-team'),
1787+ str(self.id), slugify(self.name)]
1788+ )
1789
1790 def as_ical(self, cal):
1791 """
1792@@ -112,16 +204,29 @@
1793 event.add('uid').value = str(self.id)
1794 event.add('dtstart').value = pytz.utc.localize(self.date_begin)
1795 event.add('dtend').value = pytz.utc.localize(self.date_end)
1796+ #event.add('rrule').value = self.get_occurrences()
1797 event.add('categories').value = ['Ubuntu Loco Team Event']
1798 event.add('summary').value = self.name or ''
1799 event.add('description').value = self.description or ''
1800- event.add('location').value = "%s" % self.venue or ''
1801+ event.add('location').value = u"%s" % self.venue or ''
1802 event.add('url').value = "http://loco.ubuntu.com%s" % self.get_absolute_url()
1803 if self.venue:
1804 event.add('geo').value = "%s;%s" % (self.venue.latitude, self.venue.longitude)
1805
1806+ def get_tzinfo(self):
1807+ if self.venue:
1808+ timezone = self.venue.tz
1809+ else:
1810+ try:
1811+ timezone = self.teams.exclude(tz='UTC')[0].tz
1812+ except IndexError:
1813+ # There is not team with timezone set other than the default 'UTC'
1814+ pass
1815+ return get_timezone(timezone)
1816+ tzinfo = property(get_tzinfo)
1817+
1818 def get_tz(self):
1819- timezone = 'UTC'
1820+ timezone = "UTC"
1821 if self.venue:
1822 timezone = self.venue.tz
1823 else:
1824@@ -175,18 +280,91 @@
1825 return total_attending_guests + total_attending_registered
1826
1827 def total_maybe_attending(self):
1828-
1829 total_maybe_attending_guests = queryset_sum('guests', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="maybe"))
1830 total_maybe_attending_registered = queryset_count('attendee_profile', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="maybe"))
1831 return total_maybe_attending_guests + total_maybe_attending_registered
1832
1833+ def get_occurrences(self):
1834+ if self.frequency is -1:
1835+ return [self.date_begin.replace(tzinfo=self.tzinfo)]
1836+ until = datetime.combine(self.until, self.date_end.time())
1837+ until = until.replace(tzinfo=self.date_end.tzinfo)
1838+ if self.frequency == rrule.WEEKLY:
1839+ days = []
1840+ for i in self.week_days.split(','):
1841+ days.append(ISO_WEEKDAYS_MAP[int(i)])
1842+ return rrule.rrule(
1843+ self.frequency,
1844+ dtstart=self.date_begin,
1845+ interval=self.interval,
1846+ byweekday=days,
1847+ count=self.repetitions,
1848+ until=until
1849+ )
1850+ if self.frequency == rrule.MONTHLY:
1851+ return rrule.rrule(
1852+ self.frequency,
1853+ dtstart=self.date_begin,
1854+ interval=self.interval,
1855+ bymonthday=self.date_begin.date().day,
1856+ count=self.repetitions,
1857+ until=until
1858+ )
1859+ if self.frequency == rrule.YEARLY:
1860+ return rrule.rrule(
1861+ self.frequency,
1862+ dtstart=self.date_begin,
1863+ interval=self.interval,
1864+ bymonth=self.date_begin.date().month,
1865+ bymonthday=self.date_begin.date().day,
1866+ count=self.repetitions,
1867+ until=until
1868+ )
1869+ return rrule.rrule(
1870+ self.frequency,
1871+ dtstart=self.date_begin,
1872+ interval=self.interval,
1873+ count=self.repetitions,
1874+ until=until
1875+ )
1876+
1877+ def get_past_occurrences(self, num=None):
1878+ past = list(takewhile(
1879+ lambda occurrence: occurrence < datetime.utcnow().replace(tzinfo=self.tzinfo),
1880+ self.get_occurrences(),
1881+ ))
1882+ if num:
1883+ return past[:-num:-1]
1884+ return past[::-1]
1885+
1886+ def get_future_occurrences(self, num):
1887+ future = (occurrence for occurrence in self.get_occurrences()\
1888+ if occurrence > datetime.utcnow().replace(tzinfo=self.tzinfo))
1889+ return list(islice(future, None, num))
1890+
1891+ def update_occurrences_set(self, occurrences):
1892+ #delete old ones
1893+ for occurrence in self.occurrence_set.exclude(date_begin__in=occurrences):
1894+ occurrence.delete()
1895+ #add new ones
1896+ for occurrence in occurrences:
1897+ if not self.occurrence_set.filter(date_begin=occurrence):
1898+ Occurrence(
1899+ event=self,
1900+ title=self.name.strip(),
1901+ date_begin=occurrence,
1902+ date_end=datetime.combine(occurrence.date(), self.date_end.time()),
1903+ original_date_begin=occurrence,
1904+ original_date_end=datetime.combine(occurrence.date(), self.date_end.time())
1905+ ).save()
1906+
1907
1908 class TeamEventComment(models.Model):
1909 """
1910 a model for comments about a team event
1911 """
1912 team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event'))
1913- date_created = models.DateTimeField(help_text=_('Comment date and time'), default=datetime.datetime.now(), db_index=True)
1914+ date_created = models.DateTimeField(help_text=_('Comment date and time'), default=datetime.now(), db_index=True)
1915 commenter_profile = models.ForeignKey(UserProfile, null=True)
1916 comment = models.TextField(help_text=_('Enter your comment for this event.'), db_index=True)
1917
1918
1919=== modified file 'loco_directory/events/urls.py'
1920--- loco_directory/events/urls.py 2012-12-22 23:22:32 +0000
1921+++ loco_directory/events/urls.py 2013-03-04 23:07:27 +0000
1922@@ -22,16 +22,29 @@
1923 #team events
1924 url(r'^locations/$', 'events.views.team_event_locations', name='team-event-locations'),
1925 url(r'^ical/$', 'events.views.teams_event_list_ical', name='teams-event-list-ical'),
1926- 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'),
1927- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/detail/ical/$', 'events.views.event_ical', name='event-ical'),
1928- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/register/$', 'events.views.team_event_register', name='team-event-register'),
1929- 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'),
1930- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/delete/$', 'events.views.team_event_delete', name='team-event-delete'),
1931- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/update/$', 'events.views.team_event_update', name='team-event-update'),
1932- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/(?P<team_event_id>\d+)/copy/$', 'events.views.team_event_copy', name='team-event-copy'),
1933- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/add/$', 'events.views.team_event_new', name='team-event-new'),
1934- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/rss/$', 'events.views.team_events_rss', name='team-events-rss'),
1935- url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/ical/$', 'events.views.team_event_list_ical', name='team-event-list-ical'),
1936+
1937+
1938+
1939+
1940+ url(r'^(?P<team_slug>[-\w]+)/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<team_event_id>\d+)-(?P<event_slug>[-\w]+)/', 'events.views.team_event_detail', name='team-event-detail'),
1941+ # Old url notations
1942+ url(r'^(?P<team_slug>[-\w]+)/(?P<team_event_id>\d+)-(?P<event_slug>[-\w]+)/$', 'events.views.team_event_detail_old', name='team-event-detail-old'),
1943+ url(r'^(?P<team_slug>[-\w]+)/(?P<team_event_id>\d+)/detail/$', 'events.views.team_event_detail_old', name='team-event-detail-old-old'),
1944+ # End Old url notations
1945+
1946+
1947+
1948+ url(r'^(?P<team_slug>[-\w]+)/(?P<team_event_id>\d+)/detail/ical/$', 'events.views.event_ical', name='event-ical'),
1949+ url(r'^(?P<team_slug>[-\w]+)/(?P<team_event_id>\d+)/register/$', 'events.views.team_event_register', name='team-event-register'),
1950+ url(r'^(?P<team_slug>[-\w]+)/(?P<team_event_id>\d+)/delete/$', 'events.views.team_event_delete', name='team-event-delete'),
1951+ url(r'^(?P<team_slug>[-\w]+)/(?P<team_event_id>\d+)/update/$', 'events.views.team_event_update', name='team-event-update'),
1952+ url(r'^(?P<team_slug>[-\w]+)/(?P<team_event_id>\d+)/copy/$', 'events.views.team_event_copy', name='team-event-copy'),
1953+ url(r'^(?P<team_slug>[-\w]+)/add/$', 'events.views.team_event_new', name='team-event-new'),
1954+ url(r'^(?P<team_slug>[-\w]+)/rss/$', 'events.views.team_events_rss', name='team-events-rss'),
1955+ url(r'^(?P<team_slug>[-\w]+)/ical/$', 'events.views.team_event_list_ical', name='team-event-list-ical'),
1956+
1957+
1958+
1959 url(r'^add/$', 'events.views.team_event_select', name='team-event-select'),
1960 url(r'^comment-update/$', 'events.views.team_event_comment_edit', name='team-event-comment-edit'),
1961 url(r'^comment-delete/(?P<pk>\d+)/$', 'events.views.team_event_comment_delete', name='team-event-comment-delete'),
1962
1963=== modified file 'loco_directory/events/views.py'
1964--- loco_directory/events/views.py 2013-02-18 22:16:11 +0000
1965+++ loco_directory/events/views.py 2013-03-04 23:07:27 +0000
1966@@ -7,13 +7,12 @@
1967 from django.utils.translation import ugettext as _
1968 from django.db.models import Count
1969
1970-from .models import (TeamEvent, GlobalEvent, Attendee, TeamEventComment)
1971-from teams.models import Team, Country, Continent
1972+from .models import (TeamEvent, GlobalEvent, Attendee, TeamEventComment, Occurrence)
1973+from teams.models import Team
1974
1975 from .forms import (TeamEventForm, TeamEventCommentForm,
1976 GlobalEventForm, AttendeeRegistrationForm)
1977
1978-from common.utils import simple_iterator
1979 from common.forms import FilterHistoryList
1980 from common import launchpad
1981
1982@@ -25,7 +24,7 @@
1983 """
1984 a list with all events (teamevents and globalevents)
1985 """
1986- team_event_list = TeamEvent.objects.next_events()
1987+ team_event_list = Occurrence.objects.next_events()
1988 global_event_list = GlobalEvent.objects.next_events().annotate(num_teamevents=Count('teamevent'))
1989 is_on_lc = launchpad.is_user_on_loco_council(request.user)
1990 context = {
1991@@ -59,8 +58,8 @@
1992 """
1993 Return a ical list with a single events in ical format.
1994 """
1995- team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
1996- return event_list_ical([team_event_object], team_event_object.name)
1997+ team_event = get_object_or_404(TeamEvent, pk=team_event_id)
1998+ return event_list_ical([team_event], team_event.name)
1999
2000
2001 def team_event_list_ical(request, team_slug):
2002@@ -90,30 +89,29 @@
2003 """
2004 a list with all historical events (teamevents and globalevents)
2005 """
2006- team_event_list = TeamEvent.objects.history_events().select_related('global_event', 'venue')
2007+ team_event_list = Occurrence.objects.history_events().select_related('global_event', 'venue')
2008
2009 if request.method == 'POST':
2010 form = FilterHistoryList(request.POST)
2011 if form.is_valid():
2012
2013 filtering = form.cleaned_data['filtering']
2014-
2015 scope = form.cleaned_data['scope']
2016
2017 if u'my' in scope:
2018 filtering_date = datetime.datetime.strptime(filtering, "%Y-%m")
2019
2020- team_event_list = TeamEvent.objects.history_events().filter(date_begin__year=filtering_date.year, date_begin__month=filtering_date.month)
2021+ team_event_list = Occurrence.objects.history_events().filter(date_begin__year=filtering_date.year, date_begin__month=filtering_date.month)
2022 elif u'y' in scope:
2023 filtering_date = datetime.datetime.strptime(filtering, "%Y-%m")
2024
2025- team_event_list = TeamEvent.objects.history_events().filter(date_begin__year=filtering_date.year)
2026+ team_event_list = Occurrence.objects.history_events().filter(date_begin__year=filtering_date.year)
2027 else:
2028- team_event_list = TeamEvent.objects.history_events().select_related('global_event', 'venue')
2029+ team_event_list = Occurrence.objects.history_events().select_related('global_event', 'venue')
2030
2031 else:
2032 form = FilterHistoryList()
2033- team_event_list = TeamEvent.objects.history_events().select_related('global_event', 'venue')
2034+ team_event_list = Occurrence.objects.history_events().select_related('global_event', 'venue')
2035
2036 global_event_list = GlobalEvent.objects.history_events().annotate(num_teamevents=Count('teamevent'))
2037
2038@@ -129,33 +127,43 @@
2039 #################################################################
2040 # Team Events
2041 #################################################################
2042-def team_event_detail(request, team_slug, team_event_id, event_slug=None):
2043+def team_event_detail(request, team_slug, team_event_id, year=None, month=None, day=None, event_slug=None):
2044 """
2045 detailed view for a team event
2046 """
2047- team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
2048+ if year and month and day:
2049+ occurrence = get_object_or_404(
2050+ Occurrence,
2051+ event__pk=team_event_id,
2052+ date_begin__year=year,
2053+ date_begin__month=month,
2054+ date_begin__day=day)
2055+ else:
2056+ occurrence = get_object_or_404(Occurrence, pk=team_event_id)
2057+ team_event = occurrence.event
2058 is_member = False
2059- for team_object in team_event_object.teams.all():
2060- is_member = is_member or launchpad.is_team_member(request.user, team_object)
2061+ for team in team_event.teams.all():
2062+ is_member = is_member or launchpad.is_team_member(request.user, team)
2063
2064 if request.user.is_authenticated():
2065 if request.method == 'POST':
2066 form = TeamEventCommentForm(data=request.POST)
2067 if form.is_valid():
2068 team_event_comment = form.save(commit=False)
2069- team_event_comment.team_event = team_event_object
2070+ team_event_comment.team_event = team_event
2071 team_event_comment.commenter_profile = request.user.get_profile()
2072 team_event_comment.save()
2073 request.user.message_set.create(message=_('Your comment has been saved.'))
2074- return redirect(team_event_object)
2075+ return redirect(team_event)
2076 else:
2077 form = TeamEventCommentForm()
2078 else:
2079 form = None
2080
2081 context = {
2082- 'team_event_object': team_event_object,
2083- 'user_is_attending': team_event_object.is_attending(request.user),
2084+ 'occurrence': occurrence,
2085+ 'team_event': team_event,
2086+ 'user_is_attending': team_event.is_attending(request.user),
2087 'user_is_team_member': is_member,
2088 'form': form,
2089 }
2090@@ -163,32 +171,66 @@
2091 context, RequestContext(request))
2092
2093
2094+def team_event_detail_old(request, team_slug, team_event_id, event_slug=None):
2095+ """
2096+ detailed view for a team event for old urls
2097+ """
2098+ team_event = get_object_or_404(TeamEvent, pk=team_event_id)
2099+ is_member = False
2100+ for team in team_event.teams.all():
2101+ is_member = is_member or launchpad.is_team_member(request.user, team)
2102+
2103+ if request.user.is_authenticated():
2104+ if request.method == 'POST':
2105+ form = TeamEventCommentForm(data=request.POST)
2106+ if form.is_valid():
2107+ team_event_comment = form.save(commit=False)
2108+ team_event_comment.team_event = team_event
2109+ team_event_comment.commenter_profile = request.user.get_profile()
2110+ team_event_comment.save()
2111+ request.user.message_set.create(message=_('Your comment has been saved.'))
2112+ return redirect(team_event)
2113+ else:
2114+ form = TeamEventCommentForm()
2115+ else:
2116+ form = None
2117+
2118+ context = {
2119+ 'team_event': team_event,
2120+ 'user_is_attending': team_event.is_attending(request.user),
2121+ 'user_is_team_member': is_member,
2122+ 'form': form,
2123+ }
2124+ return render_to_response('events/team_event_detail_old.html',
2125+ context, RequestContext(request))
2126+
2127+
2128 @login_required
2129 def team_event_delete(request, team_slug, team_event_id):
2130 """
2131 delete a event
2132 """
2133- team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
2134+ team_event = get_object_or_404(TeamEvent, pk=team_event_id)
2135
2136 is_on_lc = launchpad.is_user_on_loco_council(request.user)
2137 #check if user is admin or owner of a team
2138 is_contact = False
2139- for team in team_event_object.teams.all():
2140+ for team in team_event.teams.all():
2141 if launchpad.is_admin_or_owner(request.user.username, team):
2142 is_contact = True
2143 break
2144
2145 if is_on_lc or is_contact:
2146 if request.method == 'POST':
2147- team_event_object.delete()
2148+ team_event.delete()
2149 request.user.message_set.create(message=_('Team Event removed.'))
2150 return redirect('event-list')
2151 else:
2152- context = {'team_event_object': team_event_object}
2153+ context = {'team_event': team_event}
2154 return render_to_response('events/team_event_delete_confirm.html', context, RequestContext(request))
2155 else:
2156 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.')))
2157- return redirect(team_event_object)
2158+ return redirect(team_event)
2159
2160
2161 @login_required
2162
2163=== modified file 'loco_directory/media/css/styles.css'
2164--- loco_directory/media/css/styles.css 2013-02-21 20:31:16 +0000
2165+++ loco_directory/media/css/styles.css 2013-03-04 23:07:27 +0000
2166@@ -794,7 +794,7 @@
2167 }
2168
2169 .team-actions a{
2170- height: 26px;
2171+ height: 27px;
2172 padding-left: 5px;
2173 padding-right: 5px;
2174 margin-left: 5px;
2175@@ -809,7 +809,7 @@
2176 text-transform: uppercase;
2177 }
2178
2179-.team-actions a:hover{
2180+.team-actions a:hover, .team-actions a.active{
2181 border-bottom-color: #DD4814;
2182 }
2183
2184@@ -1746,3 +1746,18 @@
2185 #lc ul li:last-child {
2186 margin-bottom: 0;
2187 }
2188+
2189+#d_week_days ul {
2190+ overflow: auto;
2191+ margin-bottom: 0;
2192+}
2193+
2194+#d_week_days ul li {
2195+ float: left;
2196+ width: 50px;
2197+ margin-bottom: 0;
2198+}
2199+
2200+#id_interval {
2201+ width: 60px;
2202+}
2203\ No newline at end of file
2204
2205=== modified file 'loco_directory/media/js/events-ui.js'
2206--- loco_directory/media/js/events-ui.js 2013-02-17 01:44:52 +0000
2207+++ loco_directory/media/js/events-ui.js 2013-03-04 23:07:27 +0000
2208@@ -1,6 +1,5 @@
2209 $(document).ready(function(){
2210-
2211- $.datepicker.setDefaults({
2212+ /*$.datepicker.setDefaults({
2213 showOn: 'focus',
2214 dateFormat: 'yy-mm-dd',
2215 });
2216@@ -20,6 +19,5 @@
2217 var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
2218 $(this).datepicker('setDate', new Date(year, month, 1));
2219 }
2220- });
2221-
2222+ });*/
2223 });
2224
2225=== modified file 'loco_directory/meetings/models.py'
2226--- loco_directory/meetings/models.py 2012-12-12 23:47:58 +0000
2227+++ loco_directory/meetings/models.py 2013-03-04 23:07:27 +0000
2228@@ -27,6 +27,9 @@
2229 def __unicode__(self):
2230 return self.name
2231
2232+ def get_title(self):
2233+ return self.name
2234+
2235 def get_local_begin(self):
2236 return self.tolocaltime(self.date_begin)
2237
2238
2239=== added file 'loco_directory/teams/managers.py'
2240--- loco_directory/teams/managers.py 1970-01-01 00:00:00 +0000
2241+++ loco_directory/teams/managers.py 2013-03-04 23:07:27 +0000
2242@@ -0,0 +1,27 @@
2243+# -*- coding: utf-8 -*-
2244+from django.db import models
2245+
2246+from events.models import Occurrence
2247+from datetime import datetime
2248+
2249+
2250+class TeamManager(models.Manager):
2251+
2252+ def next_5_events_and_meetings(self):
2253+ """ a list with all upcoming team meetings """
2254+ events_and_meetings = []
2255+ events = Occurrence.objects.filter(
2256+ date_begin__gte=datetime.utcnow().replace(tzinfo=self.tz),
2257+ event__team=self
2258+ )[:5].iterator()
2259+ meetings = self.teammeeting_set.next_meetings()[:5].iterator()
2260+ for event in events:
2261+ events_and_meetings.append(event)
2262+ for meeting in meetings:
2263+ events_and_meetings.append(meeting)
2264+
2265+ events_and_meetings.sort(key=lambda event: event.date_begin)
2266+
2267+ if len(events_and_meetings) > 5:
2268+ events_and_meetings = events_and_meetings[:5]
2269+ return events_and_meetings
2270
2271=== modified file 'loco_directory/teams/models.py'
2272--- loco_directory/teams/models.py 2013-02-19 22:23:46 +0000
2273+++ loco_directory/teams/models.py 2013-03-04 23:07:27 +0000
2274@@ -1,5 +1,5 @@
2275+# -*- coding: utf-8 -*-
2276 import pytz
2277-
2278 from django.db import models
2279 from django.utils.translation import ugettext_lazy as _
2280
2281@@ -17,10 +17,6 @@
2282 return u'%s' % (self.name)
2283
2284
2285-class TeamManager(models.Manager):
2286- pass
2287-
2288-
2289 class Continent(models.Model):
2290 name = models.TextField(_("Name"), max_length=50)
2291
2292@@ -124,8 +120,6 @@
2293 active = models.BooleanField(_("Active Team"), default=True)
2294 tz = models.CharField(max_length=32, verbose_name=_('Default Timezone'), default='UTC', choices=[(tz, tz) for tz in pytz.all_timezones], blank=False, null=False, help_text=_('The most commonly used timezone for this Team.'))
2295
2296- objects = TeamManager()
2297-
2298 class Meta:
2299 db_table = 'teams'
2300 ordering = ('approved', 'name',)
2301@@ -141,22 +135,6 @@
2302 def get_absolute_url(self):
2303 return ('team-detail', [str(self.lp_name)])
2304
2305- def next_5_events_and_meetings(self):
2306- """ a list with all upcoming team meetings """
2307- events_and_meetings = []
2308- events = self.teamevent_set.next_5_events().iterator()
2309- meetings = self.teammeeting_set.next_meetings()[:5].iterator()
2310- for event in events:
2311- events_and_meetings.append(event)
2312- for meeting in meetings:
2313- events_and_meetings.append(meeting)
2314-
2315- events_and_meetings.sort(key=lambda event: event.date_begin)
2316-
2317- if len(events_and_meetings) > 5:
2318- events_and_meetings = events_and_meetings[:5]
2319- return events_and_meetings
2320-
2321
2322 def teams_without_country():
2323 return Team.objects.filter(countries__isnull=True).exclude(lp_name="ubuntu-lococouncil")
2324
2325=== modified file 'loco_directory/teams/views.py'
2326--- loco_directory/teams/views.py 2013-02-19 22:23:46 +0000
2327+++ loco_directory/teams/views.py 2013-03-04 23:07:27 +0000
2328@@ -12,7 +12,7 @@
2329 from common import launchpad
2330 from teams.models import Continent, Team, countries_without_continent, countries_without_continent_have_teams, teams_without_country
2331 from teams.utils import merge_teams
2332-from events.models import TeamEvent
2333+from events.models import TeamEvent, Occurrence
2334 from meetings.models import TeamMeeting
2335 from articles.models import Article
2336
2337@@ -210,15 +210,33 @@
2338 def team_detail(request, team_slug):
2339 if team_slug == 'ubuntu-lococouncil':
2340 return redirect('/loco-council/')
2341- team_object = get_object_or_404(Team, lp_name=team_slug)
2342- articles = Article.objects.filter(source__team=team_object)[:5]
2343+ team = get_object_or_404(Team, lp_name=team_slug)
2344+
2345+ events_and_meetings = []
2346+ events = Occurrence.objects.filter(
2347+ date_begin__gte=datetime.datetime.now(),
2348+ event__teams=team
2349+ )[:5].iterator()
2350+ meetings = team.teammeeting_set.next_meetings()[:5].iterator()
2351+ for event in events:
2352+ events_and_meetings.append(event)
2353+ for meeting in meetings:
2354+ events_and_meetings.append(meeting)
2355+
2356+ events_and_meetings.sort(key=lambda event: event.date_begin)
2357+
2358+ if len(events_and_meetings) > 5:
2359+ events_and_meetings = events_and_meetings[:5]
2360+
2361+ articles = Article.objects.filter(source__team=team)[:5]
2362 is_member = False
2363 is_admin = False
2364 if request.user.is_authenticated():
2365- is_member = launchpad.is_team_member(request.user, team_object)
2366- is_admin = launchpad.is_admin_or_owner(request.user.username, team_object) or launchpad.is_user_on_loco_council(request.user)
2367+ is_member = launchpad.is_team_member(request.user, team)
2368+ is_admin = launchpad.is_admin_or_owner(request.user.username, team) or launchpad.is_user_on_loco_council(request.user)
2369 context = {
2370- 'team': team_object,
2371+ 'team': team,
2372+ 'events_and_meetings': events_and_meetings,
2373 'articles': articles,
2374 'is_member': is_member,
2375 'is_admin': is_admin,
2376
2377=== modified file 'loco_directory/templates/events/team_event_delete_confirm.html'
2378--- loco_directory/templates/events/team_event_delete_confirm.html 2012-12-26 17:23:50 +0000
2379+++ loco_directory/templates/events/team_event_delete_confirm.html 2013-03-04 23:07:27 +0000
2380@@ -4,20 +4,40 @@
2381 {% block page_name %}{% trans "Delete Team Event" %}{% endblock %}
2382
2383 {% block extrahead %}{{ block.super }}
2384-{{form.media}}
2385+{{ form.media }}
2386+{% endblock %}
2387+
2388+{% block sub_nav_links %}
2389+
2390+{% for team in team_event.teams.all %}
2391+ <li><a class="sub-nav-item" href="{{ team.get_absolute_url }}">{{ team.name }}</a></li>
2392+{% endfor %}
2393+
2394+{% if user.is_authenticated %}
2395+ {% if user_is_team_member %}
2396+ <li><a class="sub-nav-item" href="{% url team-event-update team_event.first_team.lp_name team_event.id %}">{% trans "Edit Details" %}</a></li>
2397+ <li><a class="sub-nav-item" href="{% url team-event-delete team_event.first_team.lp_name team_event.id %}">{% trans "Delete Event" %}</a></li>
2398+ <li><a class="sub-nav-item" href="{% url team-event-copy team_event.first_team.lp_name team_event.id %}">{% trans "Copy Event" %}</a></li>
2399+ {% endif %}
2400+{% endif %}
2401 {% endblock %}
2402
2403 {% block content %}
2404 <div class="row">
2405-<section class="span-9">
2406- <form action="." method="post">{% csrf_token %}
2407- <fieldset>
2408- <h3>{% trans "Delete Team Event" %}</h3>
2409- <label>{% blocktrans with team_event_object.name as eventname %}Do you really want to delete the Team Event: {{eventname}}?{% endblocktrans %}</label>
2410- </fieldset>
2411- <input type="submit" value="{% trans 'Delete' %}" />
2412- <a href="{{team_event_object.get_absolute_url}}">{% trans "Cancel" %}</a>
2413- </form>
2414-</section>
2415+ <section class="span-9">
2416+ <div class="box_content">
2417+ <div class="pagelet">
2418+ <form action="." method="post" class="form">{% csrf_token %}
2419+ <h2>{% trans "Delete event" %}</h2>
2420+ <p>{% blocktrans with team_event.name as eventname %}By deleting the master event "{{ eventname }}", all events in the series will be deleted.{% endblocktrans %}</p>
2421+ <p>{% blocktrans %}Do you really want to delete this event ?{% endblocktrans %}</p>
2422+
2423+ {% if is_popup %}<input type="hidden" name="_popup" value="1">{% endif %}
2424+ <input type="submit" value="{% trans 'Yes' %}" class="btn"/> {% trans "Or" %} <a href="{{ team_event.get_absolute_url }}">{% trans "Cancel" %}</a>
2425+
2426+ </form>
2427+ </div>
2428+ </div>
2429+ </section>
2430 </div>
2431 {% endblock %}
2432
2433=== modified file 'loco_directory/templates/events/team_event_detail.html'
2434--- loco_directory/templates/events/team_event_detail.html 2012-11-28 00:46:29 +0000
2435+++ loco_directory/templates/events/team_event_detail.html 2013-03-04 23:07:27 +0000
2436@@ -1,23 +1,23 @@
2437 {% extends "base.html" %}
2438 {% load i18n %}
2439
2440-{% block page_name %}{% trans team_event_object.name %}{% endblock %}
2441+{% block page_name %}{{ occurrence.get_title }}{% endblock %}
2442
2443 {% block extrahead %}{{ block.super }}
2444 <meta property="fb:app_id" content="127188230723188"/>
2445-<meta property="og:title" content="{{ team_event_object.name }}" />
2446-{% if team_event_object.description %}
2447-<meta property="og:description" content="{{ team_event_object.description|linebreaks|striptags }}" />
2448+<meta property="og:title" content="{{ occurrence.get_title }}" />
2449+{% if team_event.description %}
2450+<meta property="og:description" content="{{ team_event.description|linebreaks|striptags }}" />
2451 {% endif %}
2452-<meta property="og:url" content="http://loco.ubuntu.com{{ team_event_object.get_absolute_url }}"/>
2453+<meta property="og:url" content="http://loco.ubuntu.com{{ team_event.get_absolute_url }}"/>
2454 <meta property="og:image" content="http://loco.ubuntu.com/media/images/cof_orange_hex1.png"/>
2455 <meta property="og:site_name" content="Loco Team Portal"/>
2456 <meta property="og:type" content="loco-team-portal:event"/>
2457-{% if team_event_object.venue %}
2458-<meta property="og:latitude" content="{{ team_event_object.venue.latitude }}"/>
2459-<meta property="og:longitude" content="{{ team_event_object.venue.longitude }}"/>
2460-<meta property="og:street-address" content="{{ team_event_object.venue.name }} "/>
2461-<meta property="og:locality" content="{% if team_event_object.venue.city %}{{ team_event_object.venue.city }}{% endif %}"/>
2462+{% if team_event.venue %}
2463+<meta property="og:latitude" content="{{ team_event.venue.latitude }}"/>
2464+<meta property="og:longitude" content="{{ team_event.venue.longitude }}"/>
2465+<meta property="og:street-address" content="{{ team_event.venue.name }} "/>
2466+<meta property="og:locality" content="{% if team_event.venue.city %}{{ team_event.venue.city }}{% endif %}"/>
2467 {% endif %}
2468 <script type="text/javascript" src="{{ MEDIA_URL }}js/comments.js"></script>
2469 {{form.media}}
2470@@ -31,18 +31,18 @@
2471
2472 {% block sub_nav_links %}
2473
2474-{% for team in team_event_object.teams.all %}
2475+{% for team in team_event.teams.all %}
2476 <li><a class="sub-nav-item" href="{{ team.get_absolute_url }}">{{ team.name }}</a></li>
2477 {% endfor %}
2478
2479 {% if user.is_authenticated %}
2480 {% if user_is_team_member %}
2481- <li><a class="sub-nav-item" href="{% url team-event-update team_event_object.first_team.lp_name team_event_object.id %}">{% trans "Edit Details" %}</a></li>
2482- <li><a class="sub-nav-item" href="{% url team-event-delete team_event_object.first_team.lp_name team_event_object.id %}">{% trans "Delete Event" %}</a></li>
2483- <li><a class="sub-nav-item" href="{% url team-event-copy team_event_object.first_team.lp_name team_event_object.id %}">{% trans "Copy Event" %}</a></li>
2484+ <li><a class="sub-nav-item" href="{% url team-event-update team_event.first_team.lp_name team_event.id %}">{% trans "Edit Details" %}</a></li>
2485+ <li><a class="sub-nav-item" href="{% url team-event-delete team_event.first_team.lp_name team_event.id %}">{% trans "Delete Event" %}</a></li>
2486+ <li><a class="sub-nav-item" href="{% url team-event-copy team_event.first_team.lp_name team_event.id %}">{% trans "Copy Event" %}</a></li>
2487 {% endif %}
2488 {% endif %}
2489-<li><a class="sub-nav-item" href="{% url event-ical team_event_object.first_team.lp_name team_event_object.id %}">{% trans "iCal Feed" %}</a></li>
2490+<li><a class="sub-nav-item" href="{% url event-ical team_event.first_team.lp_name team_event.id %}">{% trans "iCal Feed" %}</a></li>
2491 {% endblock %}
2492
2493 {% block content %}
2494
2495=== modified file 'loco_directory/templates/events/team_event_detail.inc.html'
2496--- loco_directory/templates/events/team_event_detail.inc.html 2013-02-16 00:29:22 +0000
2497+++ loco_directory/templates/events/team_event_detail.inc.html 2013-03-04 23:07:27 +0000
2498@@ -3,11 +3,11 @@
2499 <section class="span-9">
2500 <div class="box_content">
2501 <div class="pagelet">
2502- <h2>{{ team_event_object.name }}</h2>
2503- {% if team_event_object.global_event %}
2504+ <h2>{{ occurrence.get_title }}</h2>
2505+ {% if team_event.global_event %}
2506 <div class="event-partofglobal-event">
2507 {% trans "This event is part of" %}
2508- <a href="{{ team_event_object.global_event.get_absolute_url }}">{{team_event_object.global_event.name }}</a>
2509+ <a href="{{ team_event.global_event.get_absolute_url }}">{{team_event.global_event.name }}</a>
2510 </div>
2511 {% endif %}
2512 <div class="share">
2513@@ -23,57 +23,57 @@
2514 <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
2515 <g:plusone size="medium"></g:plusone>
2516 <a href="http://twitter.com/share" class="twitter-share-button" data-lang="en">Tweet</a>
2517- <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>
2518+ <div class="fb-like" data-href="http://loco.ubuntu.com{{ team_event.get_absolute_url }}" data-send="false" data-layout="button_count" data-width="40" data-show-faces="false" data-font="arial"></div>
2519 </div>
2520
2521 <div>
2522 <span class="pictogram calendar"></span>
2523 <span class="pictogram-l">
2524- {% ifequal team_event_object.local_date_begin|date team_event_object.local_date_end|date %}
2525- {{ team_event_object.local_date_begin|date:"D, d N Y H:i" }} - {{ team_event_object.local_date_end|date:"H:i T" }}
2526+ {% ifequal occurrence.local_date_begin|date occurrence.local_date_end|date %}
2527+ {{ occurrence.local_date_begin|date:"D, d N Y H:i" }} - {{ occurrence.local_date_end|date:"H:i T" }}
2528 {% else %}
2529- {{ team_event_object.local_date_begin|date:"D, d N Y H:i" }} - {{ team_event_object.local_date_end|date:"D, d N Y H:i T" }}
2530+ {{ occurrence.local_date_begin|date:"D, d N Y H:i" }} - {{ occurrence.local_date_end|date:"D, d N Y H:i T" }}
2531 {% endifequal %}
2532 </span>
2533 </div>
2534
2535- {% if team_event_object.description %}
2536- <p>{{ team_event_object.description|markdown:'safe'|linebreaks }}</p>
2537+ {% if team_event.description %}
2538+ <p>{{ team_event.description|markdown:'safe'|linebreaks }}</p>
2539 {% endif %}
2540
2541- {% if team_event_object.announce %}
2542+ {% if team_event.announce %}
2543 <div>
2544 <span class="pictogram announcement"></span>
2545- <a class="pictogram-l" href="{{ team_event_object.announce }}">{{team_event_object.announce }}</a>
2546+ <a class="pictogram-l" href="{{ team_event.announce }}">{{team_event.announce }}</a>
2547 </div>
2548 {% endif %}
2549 </div>
2550
2551 <div class="map">
2552- <img class="map_img" src="http://maps.googleapis.com/maps/api/staticmap?center={% if team_event_object.venue.address %}{{ team_event_object.venue.address }}{% else %}{{ team_event_object.venue.latitude }},{{ team_event_object.venue.longitude }}{% endif %}&zoom=13&size=640x100&scale=1&maptype=roadmap&markers=color:orange%7Clabel:S%7C{{ team_event_object.venue.latitude }},{{ team_event_object.venue.longitude }}&sensor=false">
2553+ <img class="map_img" src="http://maps.googleapis.com/maps/api/staticmap?center={% if team_event.venue.address %}{{ team_event.venue.address }}{% else %}{{ team_event.venue.latitude }},{{ team_event.venue.longitude }}{% endif %}&zoom=13&size=640x100&scale=1&maptype=roadmap&markers=color:orange%7Clabel:S%7C{{ team_event.venue.latitude }},{{ team_event.venue.longitude }}&sensor=false">
2554 </div>
2555
2556- {% if team_event_object.venue %}
2557+ {% if team_event.venue %}
2558 <div class="event-venue">
2559- <a title="{% trans "show venue details" %}" href="{{ team_event_object.venue.get_absolute_url }}">
2560+ <a title="{% trans "show venue details" %}" href="{{ team_event.venue.get_absolute_url }}">
2561 <div class="event-venue-name">
2562- {{ team_event_object.venue.name }}
2563+ {{ team_event.venue.name }}
2564 </div>
2565 </a>
2566
2567 <div class="event-venue-city">
2568- {% if team_event_object.venue.city %}{{ team_event_object.venue.city }}{% endif %}
2569+ {% if team_event.venue.city %}{{ team_event.venue.city }}{% endif %}
2570 </div>
2571
2572 <div class="event-venue-adress">
2573- {% if team_event_object.venue.address %}{{ team_event_object.venue.address }}{% endif %}
2574- {% if team_event_object.venue.address and team_event_object.venue.spr%} ,{% endif %}
2575- {% if team_event_object.venue.spr %}{{ team_event_object.venue.spr }}{% endif %}
2576+ {% if team_event.venue.address %}{{ team_event.venue.address }}{% endif %}
2577+ {% if team_event.venue.address and team_event.venue.spr%} ,{% endif %}
2578+ {% if team_event.venue.spr %}{{ team_event.venue.spr }}{% endif %}
2579 </div>
2580 </div>
2581 {% endif %}
2582 <div>
2583- {% if team_event_object.teameventcomment_set.all %}
2584+ {% if team_event.teameventcomment_set.all %}
2585 {% include "events/team_event_detail_comments.inc.html" %}
2586 {% endif %}
2587 {% include "events/team_event_comment_new.inc.html" %}
2588@@ -83,51 +83,51 @@
2589 <section class="span-3 box_content last">
2590 <div class="sidebar-inner">
2591 <div class="event-info">
2592- {% if team_event_object %}
2593- {% if team_event_object.channel %}
2594+ {% if team_event %}
2595+ {% if team_event.channel %}
2596 <div>
2597 <span class="pictogram comments"></span>
2598- {{ team_event_object.channel }}
2599+ {{ team_event.channel }}
2600 </div>
2601 {% endif %}
2602
2603- {% if team_event_object.contact %}
2604+ {% if team_event.contact %}
2605 <div>
2606 <span class="pictogram personne"></span>
2607- <a class="pictogram-l" title="{{ team_event_object.contact.realname }}" href="{% url profile-detail team_event_object.contact.user %}">{{ team_event_object.contact.realname }}</a>
2608+ <a class="pictogram-l" title="{{ team_event.contact.realname }}" href="{% url profile-detail team_event.contact.user %}">{{ team_event.contact.realname }}</a>
2609 </div>
2610 {% endif %}
2611
2612- {% if team_event_object.teams.all %}
2613+ {% if team_event.teams.all %}
2614 <div>
2615 <span class="pictogram team"></span>
2616- {% 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 %}
2617+ {% for team in team_event.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 %}
2618 </div>
2619 {% endif %}
2620 {% endif %}
2621 </div>
2622
2623- {% if team_event_object.registration %}
2624- <a class="submit-button rsvp-link" href="{{team_event_object.registration}}" target="external_registration">{% trans 'Register' %}</a>
2625+ {% if team_event.registration %}
2626+ <a class="submit-button rsvp-link" href="{{team_event.registration}}" target="external_registration">{% trans 'Register' %}</a>
2627 {% else %}
2628 {% if user.is_authenticated and user_is_attending %}
2629- <a class="submit-button rsvp-link" href="{% url team-event-register team_event_object.first_team.lp_name team_event_object.id %}">{% trans 'Update Registration' %}</a>
2630+ <a class="submit-button rsvp-link" href="{% url team-event-register team_event.first_team.lp_name team_event.id %}">{% trans 'Update Registration' %}</a>
2631 {% else %}
2632- <a class="submit-button rsvp-link" href="{% url team-event-register team_event_object.first_team.lp_name team_event_object.id %}">{% trans 'Register' %}</a>
2633+ <a class="submit-button rsvp-link" href="{% url team-event-register team_event.first_team.lp_name team_event.id %}">{% trans 'Register' %}</a>
2634 {% endif %}
2635 {% endif %}
2636
2637- {% if team_event_object.created_by %}
2638+ {% if team_event.created_by %}
2639 <h3 class="attendees-title">{% trans 'Created by' %}</h3>
2640 <ul class="attendees">
2641 <li class="attendee-cell">
2642 <div class="attendee-mugshot">
2643- <a href="{% url profile-detail team_event_object.created_by.username %}">
2644- <img src="{% if team_event_object.created_by.get_profile.mugshot %}{{ team_event_object.created_by.get_profile.mugshot }}{% else %}{{MEDIA_URL}}img/default-mugshot.png{% endif %}" width="32px" height="32px" alt="{{ team_event_object.created_by.get_profile.realname }}">
2645+ <a href="{% url profile-detail team_event.created_by.username %}">
2646+ <img src="{% if team_event.created_by.get_profile.mugshot %}{{ team_event.created_by.get_profile.mugshot }}{% else %}{{MEDIA_URL}}img/default-mugshot.png{% endif %}" width="32px" height="32px" alt="{{ team_event.created_by.get_profile.realname }}">
2647 </a>
2648 </div>
2649 <div class="attendee-infos">
2650- <a href="{% url profile-detail team_event_object.created_by.username %}">{{ team_event_object.created_by.get_profile.realname }}</a>
2651+ <a href="{% url profile-detail team_event.created_by.username %}">{{ team_event.created_by.get_profile.realname }}</a>
2652 </div>
2653 </li>
2654 </ul>
2655
2656=== added file 'loco_directory/templates/events/team_event_detail_old.html'
2657--- loco_directory/templates/events/team_event_detail_old.html 1970-01-01 00:00:00 +0000
2658+++ loco_directory/templates/events/team_event_detail_old.html 2013-03-04 23:07:27 +0000
2659@@ -0,0 +1,47 @@
2660+{% extends "base.html" %}
2661+{% load i18n %}
2662+
2663+{% block page_name %}{{ team_event.name }}{% endblock %}
2664+
2665+{% block extrahead %}{{ block.super }}
2666+<meta property="fb:app_id" content="127188230723188"/>
2667+<meta property="og:title" content="{{ team_event.name }}" />
2668+{% if team_event.description %}
2669+<meta property="og:description" content="{{ team_event.description|linebreaks|striptags }}" />
2670+{% endif %}
2671+<meta property="og:url" content="http://loco.ubuntu.com{{ team_event.get_absolute_url }}"/>
2672+<meta property="og:image" content="http://loco.ubuntu.com/media/images/cof_orange_hex1.png"/>
2673+<meta property="og:site_name" content="Loco Team Portal"/>
2674+<meta property="og:type" content="loco-team-portal:event"/>
2675+{% if team_event.venue %}
2676+<meta property="og:latitude" content="{{ team_event.venue.latitude }}"/>
2677+<meta property="og:longitude" content="{{ team_event.venue.longitude }}"/>
2678+<meta property="og:street-address" content="{{ team_event.venue.name }} "/>
2679+<meta property="og:locality" content="{% if team_event.venue.city %}{{ team_event.venue.city }}{% endif %}"/>
2680+{% endif %}
2681+<script type="text/javascript" src="{{ MEDIA_URL }}js/comments.js"></script>
2682+{{ form.media }}
2683+{% endblock %}
2684+
2685+
2686+{% block sub_nav_links %}
2687+
2688+{% for team in team_event.teams.all %}
2689+ <li><a class="sub-nav-item" href="{{ team.get_absolute_url }}">{{ team.name }}</a></li>
2690+{% endfor %}
2691+
2692+{% if user.is_authenticated %}
2693+ {% if user_is_team_member %}
2694+ <li><a class="sub-nav-item" href="{% url team-event-update team_event.first_team.lp_name team_event.id %}">{% trans "Edit Details" %}</a></li>
2695+ <li><a class="sub-nav-item" href="{% url team-event-delete team_event.first_team.lp_name team_event.id %}">{% trans "Delete Event" %}</a></li>
2696+ <li><a class="sub-nav-item" href="{% url team-event-copy team_event.first_team.lp_name team_event.id %}">{% trans "Copy Event" %}</a></li>
2697+ {% endif %}
2698+{% endif %}
2699+<li><a class="sub-nav-item" href="{% url event-ical team_event.first_team.lp_name team_event.id %}">{% trans "iCal Feed" %}</a></li>
2700+{% endblock %}
2701+
2702+{% block content %}
2703+
2704+{% include "events/team_event_detail_old.inc.html" %}
2705+
2706+{% endblock %}
2707
2708=== added file 'loco_directory/templates/events/team_event_detail_old.inc.html'
2709--- loco_directory/templates/events/team_event_detail_old.inc.html 1970-01-01 00:00:00 +0000
2710+++ loco_directory/templates/events/team_event_detail_old.inc.html 2013-03-04 23:07:27 +0000
2711@@ -0,0 +1,138 @@
2712+{% load i18n markup %}
2713+<div class="row">
2714+ <section class="span-9">
2715+ <div class="box_content">
2716+ <div class="pagelet">
2717+ <h2>{{ team_event.name }}</h2>
2718+ {% if team_event.global_event %}
2719+ <div class="event-partofglobal-event">
2720+ {% trans "This event is part of" %}
2721+ <a href="{{ team_event.global_event.get_absolute_url }}">{{team_event.global_event.name }}</a>
2722+ </div>
2723+ {% endif %}
2724+ <div class="share">
2725+ <div id="fb-root"></div>
2726+ <script>(function(d, s, id) {
2727+ var js, fjs = d.getElementsByTagName(s)[0];
2728+ if (d.getElementById(id)) {return;}
2729+ js = d.createElement(s); js.id = id;
2730+ js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=127188230723188";
2731+ fjs.parentNode.insertBefore(js, fjs);
2732+ }(document, 'script', 'facebook-jssdk'));</script>
2733+ <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
2734+ <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
2735+ <g:plusone size="medium"></g:plusone>
2736+ <a href="http://twitter.com/share" class="twitter-share-button" data-lang="en">Tweet</a>
2737+ <div class="fb-like" data-href="http://loco.ubuntu.com{{ team_event.get_absolute_url }}" data-send="false" data-layout="button_count" data-width="40" data-show-faces="false" data-font="arial"></div>
2738+ </div>
2739+
2740+ <div>
2741+ <span class="pictogram calendar"></span>
2742+ <span class="pictogram-l">
2743+ {% ifequal team_event.local_date_begin|date team_event.local_date_end|date %}
2744+ {{ team_event.local_date_begin|date:"D, d N Y H:i" }} - {{ team_event.local_date_end|date:"H:i T" }}
2745+ {% else %}
2746+ {{ team_event.local_date_begin|date:"D, d N Y H:i" }} - {{ team_event.local_date_end|date:"D, d N Y H:i T" }}
2747+ {% endifequal %}
2748+ </span>
2749+ </div>
2750+
2751+ {% if team_event.description %}
2752+ <p>{{ team_event.description|markdown:'safe'|linebreaks }}</p>
2753+ {% endif %}
2754+
2755+ {% if team_event.announce %}
2756+ <div>
2757+ <span class="pictogram announcement"></span>
2758+ <a class="pictogram-l" href="{{ team_event.announce }}">{{team_event.announce }}</a>
2759+ </div>
2760+ {% endif %}
2761+ </div>
2762+
2763+ <div class="map">
2764+ <img class="map_img" src="http://maps.googleapis.com/maps/api/staticmap?center={% if team_event.venue.address %}{{ team_event.venue.address }}{% else %}{{ team_event.venue.latitude }},{{ team_event.venue.longitude }}{% endif %}&zoom=13&size=640x100&scale=1&maptype=roadmap&markers=color:orange%7Clabel:S%7C{{ team_event.venue.latitude }},{{ team_event.venue.longitude }}&sensor=false">
2765+ </div>
2766+
2767+ {% if team_event.venue %}
2768+ <div class="event-venue">
2769+ <a title="{% trans "show venue details" %}" href="{{ team_event.venue.get_absolute_url }}">
2770+ <div class="event-venue-name">
2771+ {{ team_event.venue.name }}
2772+ </div>
2773+ </a>
2774+
2775+ <div class="event-venue-city">
2776+ {% if team_event.venue.city %}{{ team_event.venue.city }}{% endif %}
2777+ </div>
2778+
2779+ <div class="event-venue-adress">
2780+ {% if team_event.venue.address %}{{ team_event.venue.address }}{% endif %}
2781+ {% if team_event.venue.address and team_event.venue.spr%} ,{% endif %}
2782+ {% if team_event.venue.spr %}{{ team_event.venue.spr }}{% endif %}
2783+ </div>
2784+ </div>
2785+ {% endif %}
2786+ <div>
2787+ {% if team_event.teameventcomment_set.all %}
2788+ {% include "events/team_event_detail_comments.inc.html" %}
2789+ {% endif %}
2790+ {% include "events/team_event_comment_new.inc.html" %}
2791+ </div>
2792+ </div>
2793+ </section>
2794+ <section class="span-3 box_content last">
2795+ <div class="sidebar-inner">
2796+ <div class="event-info">
2797+ {% if team_event %}
2798+ {% if team_event.channel %}
2799+ <div>
2800+ <span class="pictogram comments"></span>
2801+ {{ team_event.channel }}
2802+ </div>
2803+ {% endif %}
2804+
2805+ {% if team_event.contact %}
2806+ <div>
2807+ <span class="pictogram personne"></span>
2808+ <a class="pictogram-l" title="{{ team_event.contact.realname }}" href="{% url profile-detail team_event.contact.user %}">{{ team_event.contact.realname }}</a>
2809+ </div>
2810+ {% endif %}
2811+
2812+ {% if team_event.teams.all %}
2813+ <div>
2814+ <span class="pictogram team"></span>
2815+ {% for team in team_event.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 %}
2816+ </div>
2817+ {% endif %}
2818+ {% endif %}
2819+ </div>
2820+
2821+ {% if team_event.registration %}
2822+ <a class="submit-button rsvp-link" href="{{team_event.registration}}" target="external_registration">{% trans 'Register' %}</a>
2823+ {% else %}
2824+ {% if user.is_authenticated and user_is_attending %}
2825+ <a class="submit-button rsvp-link" href="{% url team-event-register team_event.first_team.lp_name team_event.id %}">{% trans 'Update Registration' %}</a>
2826+ {% else %}
2827+ <a class="submit-button rsvp-link" href="{% url team-event-register team_event.first_team.lp_name team_event.id %}">{% trans 'Register' %}</a>
2828+ {% endif %}
2829+ {% endif %}
2830+
2831+ {% if team_event.created_by %}
2832+ <h3 class="attendees-title">{% trans 'Created by' %}</h3>
2833+ <ul class="attendees">
2834+ <li class="attendee-cell">
2835+ <div class="attendee-mugshot">
2836+ <a href="{% url profile-detail team_event.created_by.username %}">
2837+ <img src="{% if team_event.created_by.get_profile.mugshot %}{{ team_event.created_by.get_profile.mugshot }}{% else %}{{MEDIA_URL}}img/default-mugshot.png{% endif %}" width="32px" height="32px" alt="{{ team_event.created_by.get_profile.realname }}">
2838+ </a>
2839+ </div>
2840+ <div class="attendee-infos">
2841+ <a href="{% url profile-detail team_event.created_by.username %}">{{ team_event.created_by.get_profile.realname }}</a>
2842+ </div>
2843+ </li>
2844+ </ul>
2845+ {% endif %}
2846+ {% include "events/team_event_detail_attendees.inc.html" %}
2847+ </div>
2848+ </section>
2849+</div>
2850
2851=== modified file 'loco_directory/templates/events/team_event_list.inc.html'
2852--- loco_directory/templates/events/team_event_list.inc.html 2012-06-07 04:19:26 +0000
2853+++ loco_directory/templates/events/team_event_list.inc.html 2013-03-04 23:07:27 +0000
2854@@ -15,7 +15,7 @@
2855 {% for team_event in team_event_list %}
2856 <tr>
2857 <td class="event_name">
2858- <a title="{% trans "more information about this event" %}" href="{{ team_event.get_absolute_url }}">{{ team_event.name }}</a>
2859+ <a title="{% trans "more information about this event" %}" href="{{ team_event.get_absolute_url }}">{{ team_event.get_title }}</a>
2860 </td>
2861 <td class="event_teams no-wrap">
2862 {% for team in team_event.teams.all %}
2863@@ -25,8 +25,8 @@
2864 {% endif %}
2865 {% endfor %}
2866 </td>
2867- <td class="event_begin no-wrap">{{team_event.local_date_begin|date:"N j, Y H:i T"}}</td>
2868- <td class="event_end no-wrap">{{ team_event.local_date_end|date:"N j, Y H:i T"}}</td>
2869+ <td class="event_begin no-wrap">{{ team_event.local_date_begin|date:"N j, Y H:i T" }}</td>
2870+ <td class="event_end no-wrap">{{ team_event.local_date_end|date:"N j, Y H:i T" }}</td>
2871 <td class="event_global no-wrap">
2872 {% if team_event.global_event %}
2873 <a href="{{ team_event.global_event.get_absolute_url }}">{{ team_event.global_event.name}}</a>
2874
2875=== modified file 'loco_directory/templates/events/team_event_new.html'
2876--- loco_directory/templates/events/team_event_new.html 2013-02-17 01:44:52 +0000
2877+++ loco_directory/templates/events/team_event_new.html 2013-03-04 23:07:27 +0000
2878@@ -5,20 +5,63 @@
2879
2880 {% block extrahead %}{{ block.super }}
2881 {{ form.media }}
2882-{% if global_event %}
2883 <script type="text/javascript">
2884+ $(document).ready(function () {
2885+ $("#d_interval").hide();
2886+ $("#d_repetitions").hide();
2887+ //$("#d_until").hide();
2888+ $("#d_week_days").hide();
2889+ $('<span id="lbl_interval"></span>').insertAfter("#id_interval");
2890+
2891+ $("#id_frequency").on('change', function() {
2892+ if ($(this).val() == '-1') {
2893+ $("#d_interval").hide();
2894+ $("#d_repetitions").hide();
2895+ $("#d_until").hide();
2896+ $("#d_week_days").hide();
2897+ }
2898+ if ($(this).val() == '3'){
2899+ $("#d_interval").hide();
2900+ $("#d_repetitions").hide();
2901+ //$("#d_until").hide();
2902+ $("#d_interval").show();
2903+ $("#d_week_days").hide();
2904+ $("#lbl_interval").html('<b>{% trans "Days" %}</b>')
2905+ console.log('daily');
2906+ }
2907+ if ($(this).val() == '2'){
2908+ $("#d_repetitions").hide();
2909+ //$("#d_until").hide();
2910+ $("#d_interval").show();
2911+ $("#d_week_days").show();
2912+ $("#lbl_interval").html('<b>{% trans "Weeks" %}</b>')
2913+ console.log('weekly');
2914+ }
2915+ if ($(this).val() == '1'){
2916+ console.log('monthly');
2917+ $("#lbl_interval").html('<b>{% trans "Months" %}</b>')
2918+ }
2919+ if ($(this).val() == '0'){
2920+ $("#lbl_interval").html('<b>{% trans "Years" %}</b>')
2921+ console.log('yearly');
2922+ }
2923+ });
2924+ });
2925+
2926+ {% if global_event %}
2927 $.datepicker.setDefaults({
2928 minDate: new Date({{ global_event.date_begin.year }}, {{ global_event.date_begin.month }}-1, {{ global_event.date_begin.day }} ),
2929 maxDate: new Date({{ global_event.date_end.year }}, {{ global_event.date_end.month }}-1, {{ global_event.date_end.day }} )
2930 });
2931+ {% endif %}
2932 </script>
2933-{% endif %}
2934 {% endblock %}
2935
2936 {% block content %}
2937 <div class="row">
2938 <section class="span-9">
2939 <div class="box_content">
2940+ {{ form.non_field_errors }}
2941 <div class="pagelet">
2942 <form action="." method="post" class="form">{% csrf_token %}
2943 <h2>{% trans "Add new Team Event for " %}{{ team_object.name}}</h2>
2944
2945=== modified file 'loco_directory/templates/form.html'
2946--- loco_directory/templates/form.html 2013-02-17 01:44:52 +0000
2947+++ loco_directory/templates/form.html 2013-03-04 23:07:27 +0000
2948@@ -1,6 +1,6 @@
2949 {% load i18n %}
2950 {% for field in form.visible_fields %}
2951- <div>
2952+ <div id="d_{{ field.name }}">
2953 {% if field.field.label %}<label for="id_{{ field.name }}"{% if field.field.required %} class="required"{% endif %}>{{ field.label }}</label>{% endif %}
2954 {% if field.errors %}
2955 <ul class="errorlist">
2956
2957=== modified file 'loco_directory/templates/teams/team_detail.html'
2958--- loco_directory/templates/teams/team_detail.html 2013-02-21 20:31:16 +0000
2959+++ loco_directory/templates/teams/team_detail.html 2013-03-04 23:07:27 +0000
2960@@ -15,25 +15,25 @@
2961
2962 {% block extrahead %}{{ block.super }}
2963 {% if team.flickr_id or team.picasa_id or team.pixie_id %}
2964-<script type="text/javascript" src="{{MEDIA_URL}}js/jquery.lightbox-0.5.min.js"></script>
2965-<link rel="stylesheet" href="{{MEDIA_URL}}css/jquery.lightbox-0.5.css" type="text/css" media="screen" />
2966+<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery.lightbox-0.5.min.js"></script>
2967+<link rel="stylesheet" href="{{ MEDIA_URL }}css/jquery.lightbox-0.5.css" type="text/css" media="screen" />
2968 {% endif %}
2969
2970 {% if team.flickr_id %}
2971-<script type="text/javascript" src="{{MEDIA_URL}}js/jquery-flickr.js"></script>
2972+<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-flickr.js"></script>
2973 {% endif %}
2974
2975 {% if team.picasa_id %}
2976-<script type="text/javascript" src="{{MEDIA_URL}}js/jquery-picasa.js"></script>
2977+<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-picasa.js"></script>
2978 {% endif %}
2979
2980 {% if team.pixie_id %}
2981-<script type="text/javascript" src="{{MEDIA_URL}}js/jquery-pixie.js"></script>
2982+<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-pixie.js"></script>
2983 {% endif %}
2984
2985 {% if team.microbloghashtag %}
2986-<link rel="stylesheet" type="text/css" href="{{MEDIA_URL}}css/twidenash.css" />
2987-<script type="text/javascript" src="{{MEDIA_URL}}js/twidenash/jquery-twidenash.js"></script>
2988+<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/twidenash.css" />
2989+<script type="text/javascript" src="{{ MEDIA_URL }}js/twidenash/jquery-twidenash.js"></script>
2990 {% endif %}
2991 <script type="text/javascript">
2992 $(function() {
2993@@ -80,8 +80,7 @@
2994 {% for country in team.countries.all %}
2995 {% if not forloop.first %}, {% endif %}{{ country.name }}
2996 {% endfor %}
2997- {% if team.spr %}, {{ team.spr }}{% endif %}{% if team.city %}, {{ team.city }}
2998- {% endif %}
2999+ {% if team.spr %}, {{ team.spr }}{% endif %}{% if team.city %}, {{ team.city }}{% endif %}
3000 {% else %}
3001 {% trans "None Specified" %}
3002 {% endif %}
3003@@ -189,10 +188,10 @@
3004 </span>
3005 </div>
3006 </div>
3007- {% if team.next_5_events_and_meetings %}
3008- {% for team_event in team.next_5_events_and_meetings %}
3009+ {% if events_and_meetings %}
3010+ {% for team_event in events_and_meetings %}
3011 <a href="{{ team_event.get_absolute_url }}" title="{% if team_event.venue %}{% else %}{{team_event.date_begin|date:"M d"}}{% endif %}" class="event-meetings">
3012- <span class="title">{{ team_event.name }}</span>
3013+ <span class="title">{{ team_event.get_title }}</span>
3014 <small>{{ team_event.local_date_begin|date:"l, d N Y" }} {% trans "at " %}{{ team_event.local_date_begin|date:"H:i T" }}</small>
3015 <p>{{ team_event.description }}</p>
3016 </a>
3017@@ -263,12 +262,12 @@
3018 {% for admin in team.admin_profiles.all %}
3019 {% ifequal team.owner admin.user.username %}
3020 <a href="{% url profile-detail admin.user.username %}">
3021- <img alt="" class="photo fn" src="{% if admin.mugshot %}{{ admin.mugshot }}{% else %}{{MEDIA_URL}}img/default-mugshot.png{% endif %}" class="mugshot">
3022+ <img alt="" class="photo fn" src="{% if admin.mugshot %}{{ admin.mugshot }}{% else %}{{ MEDIA_URL }}img/default-mugshot.png{% endif %}" class="mugshot">
3023 <p>{{ admin.realname }}</p>
3024 </a>
3025 {% else %}
3026 <a href="{% url profile-detail admin.user.username %}">
3027- <img alt="{{ admin.realname }}" src="{% if admin.mugshot %}{{ admin.mugshot }}{% else %}{{MEDIA_URL}}img/default-mugshot.png{% endif %}" class="mugshot" height="50" width="50">
3028+ <img alt="{{ admin.realname }}" src="{% if admin.mugshot %}{{ admin.mugshot }}{% else %}{{ MEDIA_URL }}img/default-mugshot.png{% endif %}" class="mugshot" height="50" width="50">
3029 <p>{{ admin.realname }}</p>
3030 </a>
3031 {% endifequal %}
3032@@ -279,7 +278,7 @@
3033 {% if team.contact_profiles.all %}
3034 {% for contact in team.contact_profiles.all %}
3035 <a href="{% url profile-detail contact.user.username %}">
3036- <img alt="{{ contact.realname }}" src="{% if contact.mugshot %}{{ contact.mugshot }}{% else %}{{MEDIA_URL}}img/default-mugshot.png{% endif %}" class="mugshot" height="50" width="50">
3037+ <img alt="{{ contact.realname }}" src="{% if contact.mugshot %}{{ contact.mugshot }}{% else %}{{ MEDIA_URL }}img/default-mugshot.png{% endif %}" class="mugshot" height="50" width="50">
3038 <p>{{ contact.realname }}</p>
3039 </a>
3040 {% endfor %}

Subscribers

People subscribed via source and target branches