Merge lp:~dholbach/loco-team-portal/profile into lp:loco-team-portal

Proposed by Daniel Holbach
Status: Merged
Approved by: Michael Hall
Approved revision: 261
Merged at revision: 266
Proposed branch: lp:~dholbach/loco-team-portal/profile
Merge into: lp:loco-team-portal
Diff against target: 1539 lines (+1182/-47)
23 files modified
loco_directory/common/launchpad.py (+18/-2)
loco_directory/events/forms.py (+2/-2)
loco_directory/events/migrations/0002_add_profile_fields.py (+170/-0)
loco_directory/events/migrations/0003_migrate_profile_data.py (+173/-0)
loco_directory/events/migrations/0004_remove_user.py (+181/-0)
loco_directory/events/models.py (+6/-6)
loco_directory/events/views.py (+7/-3)
loco_directory/services/urls.py (+1/-1)
loco_directory/services/views.py (+4/-3)
loco_directory/settings.py (+3/-0)
loco_directory/teams/admin.py (+1/-6)
loco_directory/teams/management/commands/lpupdate.py (+26/-12)
loco_directory/teams/migrations/0002_add_mugshot_field.py (+1/-0)
loco_directory/teams/migrations/0005_add_profile_fields.py (+142/-0)
loco_directory/teams/migrations/0006_migrate_profile_fields.py (+140/-0)
loco_directory/teams/migrations/0007_remove_old_person_fields.py (+136/-0)
loco_directory/teams/models.py (+4/-7)
loco_directory/templates/events/team_event_detail_attendees.inc.html (+1/-1)
loco_directory/templates/events/team_event_detail_comments.inc.html (+1/-1)
loco_directory/templates/teams/team_detail.html (+9/-3)
loco_directory/userprofiles/admin.py (+7/-0)
loco_directory/userprofiles/migrations/0001_initial.py (+89/-0)
loco_directory/userprofiles/models.py (+60/-0)
To merge this branch: bzr merge lp:~dholbach/loco-team-portal/profile
Reviewer Review Type Date Requested Status
Michael Hall (community) Approve
Review via email: mp+33792@code.launchpad.net

This proposal supersedes a proposal from 2010-08-24.

Description of the change

I realise that this proposal is probably not quite there yet, but I need all the testing and all the eyeballs we have.

To post a comment you must log in.
Revision history for this message
Daniel Holbach (dholbach) wrote : Posted in a previous version of this proposal

Open questions:
 - when do we update timezones (for somebody who moved to another country)
 - when do we get a list of all team members, so admin/owner can pick the loco contacts in the team

Answers and merge proposals into this branch are much appreciated. :-)

Revision history for this message
Chris Johnston (cjohnston) wrote : Posted in a previous version of this proposal

I mentioned it on IRC one day, and I'll ask here also. Why do we need to pull a users TZ?

Use case: We pull my TZ. It's -4. I am over in Germany, and while I'm there I decide to go to an event with Daniel. I go to LD, register to attend the event, and it shows me the time in a -4 TZ. What good will that do me? I now have to convert the time from my local TZ to the correct TZ in Germany.

The event time should be based upon the TZ the the event is located in (the venue's location) and not upon the TZ of the user. There could possibly be two entries, the TZ in which the event is located and the users home TZ, but that just seems to be adding extra things that don't need to be there. I may be way off with my thinking and would enjoy seeing more feedback, but this is how I understand the way the new system is going to work, and I dont think it's the best way for it to work.

Revision history for this message
Daniel Holbach (dholbach) wrote : Posted in a previous version of this proposal

> I mentioned it on IRC one day, and I'll ask here also. Why do we need to pull
> a users TZ?

That's a question that Michael can answer best. How about the rest of the merge proposal?

Revision history for this message
Chris Johnston (cjohnston) wrote : Posted in a previous version of this proposal

Questions:
 - After selecting team contacts, they don't display on the team details page.
 - Can we remove LP team owner and LP team admins as they may not reflect what is accurate.

Revision history for this message
Dave Walker (davewalker) wrote : Posted in a previous version of this proposal

> Open questions:
> - when do we update timezones (for somebody who moved to another country)

It's my understanding that the profile is generated at login time. We could have "on login", do checks..

Or cronjob based.. At the moment, that wouldn't be intensive as there aren't that many authenticated users, but as LD gets more popular this could be a real bottleneck.

> - when do we get a list of all team members, so admin/owner can pick the loco
> contacts in the team
>

Do we *want* a list of all members, or stick to generating profile on login?

Revision history for this message
Daniel Holbach (dholbach) wrote : Posted in a previous version of this proposal

> - After selecting team contacts, they don't display on the team details page.

That's a bug.

> - Can we remove LP team owner and LP team admins as they may not reflect what
> is accurate.

Why not accurate? We never say that LP team owner and LP team admins are LoCo contacts.

Revision history for this message
Daniel Holbach (dholbach) wrote : Posted in a previous version of this proposal

> Or cronjob based.. At the moment, that wouldn't be intensive as there aren't
> that many authenticated users, but as LD gets more popular this could be a
> real bottleneck.

Not only on login, but also when a userprofile is created (admin/owners through lpupdate management command).

> Do we *want* a list of all members, or stick to generating profile on login?

The problem we have right now is that loco contacts can only be chosen from the list of existing profiles (logged in people + lp admins + lp owner).

Revision history for this message
Daniel Holbach (dholbach) wrote : Posted in a previous version of this proposal

> > - After selecting team contacts, they don't display on the team details
> page.
>
> That's a bug.

Fixed.

Revision history for this message
Michael Hall (mhall119) wrote :

I'm going to approve and merge this so we can start building new features off of it.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'loco_directory/common/launchpad.py'
--- loco_directory/common/launchpad.py 2010-08-20 13:05:47 +0000
+++ loco_directory/common/launchpad.py 2010-08-26 14:45:53 +0000
@@ -50,9 +50,9 @@
5050
51def is_admin_or_owner(username, team):51def is_admin_or_owner(username, team):
52 # check just using the LD data52 # check just using the LD data
53 if username == team.owner:53 if username == team.owner_profile.user.username:
54 return True54 return True
55 if team.admins.filter(lpid=username):55 if team.admin_profiles.filter(user__username=username):
56 return True56 return True
57 if is_debug_user(username):57 if is_debug_user(username):
58 return True58 return True
@@ -80,3 +80,19 @@
80 except HTTPError:80 except HTTPError:
81 # 404 or some other issue that means we should default to False81 # 404 or some other issue that means we should default to False
82 return "https://edge.launchpad.net/api/beta/ubuntu/mugshot"82 return "https://edge.launchpad.net/api/beta/ubuntu/mugshot"
83
84def get_user_timezone(username, lp=None):
85 timezone = 'UTC'
86 if username is None:
87 return timezone
88
89 if not lp:
90 lp = lp_login()
91 if not lp:
92 return timezone
93 try:
94 lp_user = lp.people[username]
95 timezone = lp_user.timezone
96 except:
97 pass
98 return timezone
8399
=== modified file 'loco_directory/events/forms.py'
--- loco_directory/events/forms.py 2010-08-02 14:43:27 +0000
+++ loco_directory/events/forms.py 2010-08-26 14:45:53 +0000
@@ -112,7 +112,7 @@
112112
113 class Meta:113 class Meta:
114 model = Attendee114 model = Attendee
115 exclude = ('attendee', 'team_event')115 exclude = ('attendee_profile', 'team_event')
116116
117class TeamEventCommentForm(forms.ModelForm):117class TeamEventCommentForm(forms.ModelForm):
118 """118 """
@@ -120,7 +120,7 @@
120 """120 """
121 class Meta:121 class Meta:
122 model = TeamEventComment122 model = TeamEventComment
123 exclude = ('team_event', 'date_created', 'comment_by')123 exclude = ('team_event', 'date_created', 'commenter_profile')
124124
125class EventSearchForm(forms.Form):125class EventSearchForm(forms.Form):
126 """126 """
127127
=== added file 'loco_directory/events/migrations/0002_add_profile_fields.py'
--- loco_directory/events/migrations/0002_add_profile_fields.py 1970-01-01 00:00:00 +0000
+++ loco_directory/events/migrations/0002_add_profile_fields.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,170 @@
1
2from south.db import db
3from django.db import models
4from events.models import *
5
6class Migration:
7 depends_on = (
8 ("userprofiles", "0001_initial"),
9 )
10
11 def forwards(self, orm):
12
13 # Adding field 'TeamEventComment.commenter_profile'
14 db.add_column('events_teameventcomment', 'commenter_profile', orm['events.TeamEventComment:commenter_profile'])
15
16 # Adding field 'Attendee.attendee_profile'
17 db.add_column('events_attendee', 'attendee_profile', orm['events.Attendee:attendee_profile'])
18
19
20
21 def backwards(self, orm):
22
23 # Deleting field 'TeamEventComment.commenter_profile'
24 db.delete_column('events_teameventcomment', 'commenter_profile_id')
25
26 # Deleting field 'Attendee.attendee_profile'
27 db.delete_column('events_attendee', 'attendee_profile_id')
28
29
30
31 models = {
32 'auth.group': {
33 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
34 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
35 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
36 },
37 'auth.permission': {
38 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
39 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
40 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
41 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
42 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
43 },
44 'auth.user': {
45 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
46 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
47 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
48 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
49 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
50 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
51 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
52 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
53 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
54 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
55 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
56 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
57 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
58 },
59 'contenttypes.contenttype': {
60 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
61 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
62 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
64 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
65 },
66 'events.attendee': {
67 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)"},
68 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
69 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
70 'guests': ('django.db.models.fields.PositiveSmallIntegerField', [], {}),
71 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
72 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
73 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
74 },
75 'events.baseevent': {
76 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
77 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
78 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 9, 53, 607179)', 'db_index': 'True'}),
79 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
80 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
81 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
82 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
83 },
84 'events.globalevent': {
85 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
86 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
87 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
88 },
89 'events.teamevent': {
90 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
91 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
92 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True'}),
93 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
94 },
95 'events.teameventcomment': {
96 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
97 'comment_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
98 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
99 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 9, 53, 613146)', 'db_index': 'True'}),
100 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
101 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
102 },
103 'teams.continent': {
104 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
105 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
106 },
107 'teams.country': {
108 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}),
109 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
110 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
111 },
112 'teams.language': {
113 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
114 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
115 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
116 },
117 'teams.team': {
118 'Meta': {'db_table': "'teams'"},
119 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
120 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
121 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
122 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
123 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
124 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}),
125 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
126 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
127 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
128 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
130 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}),
131 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}),
132 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
133 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
134 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
135 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
136 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
137 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
138 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
139 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
140 },
141 'userprofiles.userprofile': {
142 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
143 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
144 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
145 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
146 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
147 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
148 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
149 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
150 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
151 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
152 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
153 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
154 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
155 },
156 'venues.venue': {
157 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))"},
158 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
159 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
160 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
161 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
162 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
163 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
164 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
165 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
166 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
167 }
168 }
169
170 complete_apps = ['events']
0171
=== added file 'loco_directory/events/migrations/0003_migrate_profile_data.py'
--- loco_directory/events/migrations/0003_migrate_profile_data.py 1970-01-01 00:00:00 +0000
+++ loco_directory/events/migrations/0003_migrate_profile_data.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,173 @@
1
2from south.db import db
3from django.db import models
4from events.models import *
5
6class Migration:
7
8 def forwards(self, orm):
9 for comment in orm['events.TeamEventComment'].objects.all():
10 if not comment.commenter_profile:
11 commenter_profile, created = orm['userprofiles.UserProfile'].objects.get_or_create(user=comment.comment_by)
12 if created:
13 commenter_profile.save()
14 comment.commenter_profile = commenter_profile
15 comment.save()
16 for attendee in orm['events.Attendee'].objects.all():
17 if not attendee.attendee_profile:
18 attendee_profile, created = orm['userprofiles.UserProfile'].objects.get_or_create(user=attendee.attendee)
19 if created:
20 attendee_profile.save()
21 attendee.attendee_profile = attendee_profile
22 attendee.save()
23
24 def backwards(self, orm):
25 for comment in orm['events.TeamEventComment'].objects.all():
26 if not comment.comment_by:
27 comment.comment_by = comment.commenter_profile.user
28 comment.save()
29 for attendee in orm['events.Attendee'].objects.all():
30 if not attendee.attendee:
31 attendee.attendee = attendee.attendee_profile.user
32 attendee.save()
33
34 models = {
35 'auth.group': {
36 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
37 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
38 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
39 },
40 'auth.permission': {
41 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
42 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
43 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
44 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
45 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
46 },
47 'auth.user': {
48 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
49 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
50 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
51 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
52 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
53 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
54 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
55 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
56 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
57 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
58 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
59 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
60 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
61 },
62 'contenttypes.contenttype': {
63 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
64 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
65 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
66 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
67 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
68 },
69 'events.attendee': {
70 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)"},
71 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
72 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
73 'guests': ('django.db.models.fields.PositiveSmallIntegerField', [], {}),
74 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
75 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
76 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
77 },
78 'events.baseevent': {
79 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
80 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
81 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 10, 3, 333840)', 'db_index': 'True'}),
82 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
83 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
84 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
85 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
86 },
87 'events.globalevent': {
88 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
89 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
90 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
91 },
92 'events.teamevent': {
93 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
94 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
95 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True'}),
96 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
97 },
98 'events.teameventcomment': {
99 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
100 'comment_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
101 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
102 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 10, 3, 336191)', 'db_index': 'True'}),
103 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
104 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
105 },
106 'teams.continent': {
107 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
108 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
109 },
110 'teams.country': {
111 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}),
112 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
113 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
114 },
115 'teams.language': {
116 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
117 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
118 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
119 },
120 'teams.team': {
121 'Meta': {'db_table': "'teams'"},
122 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
123 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
124 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
125 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
126 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
127 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}),
128 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
129 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
130 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
131 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
132 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
133 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}),
134 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}),
135 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
136 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
137 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
138 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
139 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
140 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
141 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
142 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
143 },
144 'userprofiles.userprofile': {
145 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
146 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
147 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
148 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
149 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
150 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
151 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
152 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
153 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
154 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
155 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
156 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
157 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
158 },
159 'venues.venue': {
160 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))"},
161 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
162 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
163 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
164 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
165 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
166 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
167 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
168 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
169 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
170 }
171 }
172
173 complete_apps = ['events']
0174
=== added file 'loco_directory/events/migrations/0004_remove_user.py'
--- loco_directory/events/migrations/0004_remove_user.py 1970-01-01 00:00:00 +0000
+++ loco_directory/events/migrations/0004_remove_user.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,181 @@
1
2from south.db import db
3from django.db import models
4from events.models import *
5
6class Migration:
7
8 def forwards(self, orm):
9
10 # Deleting field 'TeamEventComment.comment_by'
11 db.delete_column('events_teameventcomment', 'comment_by_id')
12
13 # Deleting field 'Attendee.attendee'
14 db.delete_column('events_attendee', 'attendee_id')
15
16 # Changing field 'BaseEvent.date_created'
17 # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 11, 17, 963571), db_index=True))
18 db.alter_column('events_baseevent', 'date_created', orm['events.baseevent:date_created'])
19
20 # Changing field 'TeamEventComment.date_created'
21 # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 11, 17, 966242), db_index=True))
22 db.alter_column('events_teameventcomment', 'date_created', orm['events.teameventcomment:date_created'])
23
24
25
26 def backwards(self, orm):
27
28 # Adding field 'TeamEventComment.comment_by'
29 db.add_column('events_teameventcomment', 'comment_by', orm['events.teameventcomment:comment_by'])
30
31 # Adding field 'Attendee.attendee'
32 db.add_column('events_attendee', 'attendee', orm['events.attendee:attendee'])
33
34 # Changing field 'BaseEvent.date_created'
35 # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 10, 3, 333840), db_index=True))
36 db.alter_column('events_baseevent', 'date_created', orm['events.baseevent:date_created'])
37
38 # Changing field 'TeamEventComment.date_created'
39 # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 10, 3, 336191), db_index=True))
40 db.alter_column('events_teameventcomment', 'date_created', orm['events.teameventcomment:date_created'])
41
42
43
44 models = {
45 'auth.group': {
46 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
47 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
48 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
49 },
50 'auth.permission': {
51 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
52 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
53 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
54 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
55 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
56 },
57 'auth.user': {
58 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
59 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
60 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
61 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
62 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
64 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
65 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
66 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
67 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
68 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
69 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
70 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
71 },
72 'contenttypes.contenttype': {
73 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
74 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
75 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
76 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
77 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
78 },
79 'events.attendee': {
80 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)"},
81 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
82 'guests': ('django.db.models.fields.PositiveSmallIntegerField', [], {}),
83 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
84 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
85 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
86 },
87 'events.baseevent': {
88 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
89 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
90 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 11, 17, 963571)', 'db_index': 'True'}),
91 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
92 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
93 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
94 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
95 },
96 'events.globalevent': {
97 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
98 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
99 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'})
100 },
101 'events.teamevent': {
102 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}),
103 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}),
104 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True'}),
105 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'})
106 },
107 'events.teameventcomment': {
108 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}),
109 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}),
110 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 11, 17, 966242)', 'db_index': 'True'}),
111 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
112 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"})
113 },
114 'teams.continent': {
115 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
116 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
117 },
118 'teams.country': {
119 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}),
120 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
121 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
122 },
123 'teams.language': {
124 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
125 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
126 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
127 },
128 'teams.team': {
129 'Meta': {'db_table': "'teams'"},
130 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
131 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
132 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
133 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
134 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
135 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}),
136 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
137 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
138 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
139 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
140 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
141 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}),
142 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}),
143 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
144 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
145 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
146 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
147 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
148 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
149 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
150 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
151 },
152 'userprofiles.userprofile': {
153 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
154 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
155 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
156 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
157 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
159 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
160 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
161 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
162 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
163 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
164 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
165 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
166 },
167 'venues.venue': {
168 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))"},
169 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
170 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
171 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
172 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}),
173 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
174 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
175 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
176 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
177 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
178 }
179 }
180
181 complete_apps = ['events']
0182
=== modified file 'loco_directory/events/models.py'
--- loco_directory/events/models.py 2010-08-18 16:18:41 +0000
+++ loco_directory/events/models.py 2010-08-26 14:45:53 +0000
@@ -1,5 +1,5 @@
1from django.db import models1from django.db import models
2from django.contrib.auth.models import User2from userprofiles.models import UserProfile
3from teams.models import *3from teams.models import *
4from venues.models import Venue4from venues.models import Venue
5from django.utils.translation import ugettext_lazy as _5from django.utils.translation import ugettext_lazy as _
@@ -120,7 +120,7 @@
120120
121 def is_attending(self, user):121 def is_attending(self, user):
122 if user.is_authenticated():122 if user.is_authenticated():
123 return self.attendee_set.filter(attendee=user).count() > 0123 return self.attendee_set.filter(attendee_profile__user=user).count() > 0
124 else:124 else:
125 return False125 return False
126126
@@ -145,7 +145,7 @@
145 """145 """
146 team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event'))146 team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event'))
147 date_created = models.DateTimeField(help_text=_('the date and time when the event comment was created'), default=datetime.datetime.now(), db_index=True)147 date_created = models.DateTimeField(help_text=_('the date and time when the event comment was created'), default=datetime.datetime.now(), db_index=True)
148 comment_by = models.ForeignKey(User) 148 commenter_profile = models.ForeignKey(UserProfile, null=True)
149 comment = models.TextField(help_text=_('Comment this Event'), db_index=True)149 comment = models.TextField(help_text=_('Comment this Event'), db_index=True)
150 150
151 def __unicode__(self):151 def __unicode__(self):
@@ -158,14 +158,14 @@
158 a event attendee158 a event attendee
159 """159 """
160 class Meta:160 class Meta:
161 unique_together = ('team_event', 'attendee')161 unique_together = ('team_event', 'attendee_profile')
162 162
163 team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event'))163 team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event'))
164 attendee = models.ForeignKey(User, help_text=_('the name of the attendee'))164 attendee_profile = models.ForeignKey(UserProfile, help_text=_('the name of the attendee'), null=True)
165 promise = models.CharField(verbose_name=_('Attending Status'), max_length=50, choices=ATTENDEE_PROMISE_CHOICES)165 promise = models.CharField(verbose_name=_('Attending Status'), max_length=50, choices=ATTENDEE_PROMISE_CHOICES)
166 guests = models.PositiveSmallIntegerField(verbose_name=_('Additional Guests'))166 guests = models.PositiveSmallIntegerField(verbose_name=_('Additional Guests'))
167 167
168 def __unicode__(self):168 def __unicode__(self):
169 return self.attendee169 return self.attendee_profile.user.username
170170
171171
172172
=== modified file 'loco_directory/events/views.py'
--- loco_directory/events/views.py 2010-08-17 14:40:36 +0000
+++ loco_directory/events/views.py 2010-08-26 14:45:53 +0000
@@ -304,9 +304,11 @@
304 """304 """
305 team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)305 team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
306 if team_event_object.is_attending(request.user):306 if team_event_object.is_attending(request.user):
307 attendee_object = team_event_object.attendee_set.get(attendee=request.user)307 attendee_object = team_event_object.attendee_set.get(attendee_profile__user=request.user)
308 else:308 else:
309 attendee_object = Attendee(team_event=team_event_object, attendee=request.user)309 from userprofiles.models import create_profile
310 profile = create_profile(request.user.username)
311 attendee_object = Attendee(team_event=team_event_object, attendee_profile=profile)
310 312
311 if request.method == 'POST': 313 if request.method == 'POST':
312 form = AttendeeRegistrationForm(instance=attendee_object, data=request.POST)314 form = AttendeeRegistrationForm(instance=attendee_object, data=request.POST)
@@ -341,7 +343,9 @@
341 if form.is_valid():343 if form.is_valid():
342 team_event_comment = form.save(commit=False)344 team_event_comment = form.save(commit=False)
343 team_event_comment.team_event = team_event_object345 team_event_comment.team_event = team_event_object
344 team_event_comment.comment_by = request.user346 from userprofiles.models import create_profile
347 profile = create_profile(request.user.username)
348 team_event_comment.commenter_profile = profile
345 team_event_comment.save()349 team_event_comment.save()
346 request.user.message_set.create(message=_('Comment saved.'))350 request.user.message_set.create(message=_('Comment saved.'))
347 return redirect( team_event_object )351 return redirect( team_event_object )
348352
=== modified file 'loco_directory/services/urls.py'
--- loco_directory/services/urls.py 2010-07-15 16:47:45 +0000
+++ loco_directory/services/urls.py 2010-08-26 14:45:53 +0000
@@ -17,7 +17,7 @@
17 url(r'^venues/(.*)$', 'services.views.venue_service', name='venue_service'),17 url(r'^venues/(.*)$', 'services.views.venue_service', name='venue_service'),
18 url(r'^users/(.*)$', 'services.views.user_service', name='user_service'),18 url(r'^users/(.*)$', 'services.views.user_service', name='user_service'),
19 url(r'^groups/(.*)$', 'services.views.group_service', name='group_service'),19 url(r'^groups/(.*)$', 'services.views.group_service', name='group_service'),
20 url(r'^admins/(.*)$', 'services.views.admin_service', name='admin_service'),20 url(r'^profiles/(.*)$', 'services.views.profile_service', name='profile_service'),
21 url(r'^languages/(.*)$', 'services.views.language_service', name='language_service'),21 url(r'^languages/(.*)$', 'services.views.language_service', name='language_service'),
22)22)
2323
2424
=== modified file 'loco_directory/services/views.py'
--- loco_directory/services/views.py 2010-07-15 16:32:07 +0000
+++ loco_directory/services/views.py 2010-08-26 14:45:53 +0000
@@ -1,6 +1,7 @@
1from teams.models import Team, Continent, Country, Language1from teams.models import Team, Continent, Country, Language
2from events.models import GlobalEvent, TeamEvent, TeamEventComment, Attendee, TeamAdministrator2from events.models import GlobalEvent, TeamEvent, TeamEventComment, Attendee
3from venues.models import Venue3from venues.models import Venue
4from userprofiles.models import UserProfile
4from django.contrib.auth.models import User, Group5from django.contrib.auth.models import User, Group
56
6from services import model_service7from services import model_service
@@ -35,8 +36,8 @@
35def group_service(request, url):36def group_service(request, url):
36 return model_service(Group, request, url, exclude=['permissions'])37 return model_service(Group, request, url, exclude=['permissions'])
3738
38def admin_service(request, url):39def profile_service(request, url):
39 return model_service(TeamAdministrator, request, url)40 return model_service(UserProfile, request, url, exclude=['user'])
4041
41def language_service(request, url):42def language_service(request, url):
42 return model_service(Language, request, url)43 return model_service(Language, request, url)
4344
=== modified file 'loco_directory/settings.py'
--- loco_directory/settings.py 2010-08-20 13:05:47 +0000
+++ loco_directory/settings.py 2010-08-26 14:45:53 +0000
@@ -115,6 +115,7 @@
115 'teams',115 'teams',
116 'venues',116 'venues',
117 'events',117 'events',
118 'userprofiles',
118 'django_openid_auth',119 'django_openid_auth',
119 'south',120 'south',
120)121)
@@ -124,6 +125,8 @@
124 'django.contrib.auth.backends.ModelBackend',125 'django.contrib.auth.backends.ModelBackend',
125)126)
126127
128AUTH_PROFILE_MODULE = 'userprofiles.UserProfile'
129
127# Should users be created when new OpenIDs are used to log in?130# Should users be created when new OpenIDs are used to log in?
128OPENID_CREATE_USERS = True131OPENID_CREATE_USERS = True
129132
130133
=== modified file 'loco_directory/teams/admin.py'
--- loco_directory/teams/admin.py 2010-07-09 10:56:49 +0000
+++ loco_directory/teams/admin.py 2010-08-26 14:45:53 +0000
@@ -1,7 +1,7 @@
1# -*- coding: utf-8 -*-1# -*- coding: utf-8 -*-
22
3from django.contrib import admin3from django.contrib import admin
4from teams.models import Team, TeamAdministrator, Continent, Country, Language4from teams.models import Team, Continent, Country, Language
55
6class TeamAdmin(admin.ModelAdmin):6class TeamAdmin(admin.ModelAdmin):
7 search_fields = ('name',)7 search_fields = ('name',)
@@ -12,10 +12,6 @@
12 field.widget.attrs['rows'] = '4'12 field.widget.attrs['rows'] = '4'
13 return field13 return field
14 14
15class TeamAdministratorAdmin(admin.ModelAdmin):
16 search_fields = ('lpid',)
17 list_display = ('lpid',)
18
19class ContinentAdmin(admin.ModelAdmin):15class ContinentAdmin(admin.ModelAdmin):
20 search_fields = ('name',)16 search_fields = ('name',)
2117
@@ -26,7 +22,6 @@
26 search_fields = ('name',)22 search_fields = ('name',)
2723
28admin.site.register(Team, TeamAdmin)24admin.site.register(Team, TeamAdmin)
29admin.site.register(TeamAdministrator, TeamAdministratorAdmin)
30admin.site.register(Continent, ContinentAdmin)25admin.site.register(Continent, ContinentAdmin)
31admin.site.register(Country, CountryAdmin)26admin.site.register(Country, CountryAdmin)
32admin.site.register(Language, LanguageAdmin)27admin.site.register(Language, LanguageAdmin)
3328
=== modified file 'loco_directory/teams/management/commands/lpupdate.py'
--- loco_directory/teams/management/commands/lpupdate.py 2010-08-12 09:59:25 +0000
+++ loco_directory/teams/management/commands/lpupdate.py 2010-08-26 14:45:53 +0000
@@ -5,20 +5,33 @@
5from common import launchpad5from common import launchpad
6from teams import models6from teams import models
7from django.contrib.auth.models import Group7from django.contrib.auth.models import Group
8from userprofiles.models import create_profile
89
9from datetime import datetime10from datetime import datetime
10import sys11import sys
1112
12def update_admins(ld_team, lp_team):13def create_admin_dict(admins):
13 ld_admin_names = set([a.lpid for a in ld_team.admins.all()])14 admin_dict = {}
14 lp_admin_names = set([a.name for a in lp_team.getMembersByStatus(status='Administrator')])15 for (lpid, realname) in admins:
15 for admin_name in ld_admin_names.difference(lp_admin_names):16 admin_dict[lpid] = realname
16 admin = ld_team.admins.get(lpid=admin_name)17 return admin_dict
17 admin.delete()18
18 for admin_name in lp_admin_names.difference(ld_admin_names):19def update_admins(ld_team, lp_team, lp):
19 admin = models.TeamAdministrator(lpid=admin_name)20 ld_admin_names = create_admin_dict([(a.user.username, a.realname) \
21 for a in ld_team.admin_profiles.all()])
22 lp_admin_names = create_admin_dict([(a.name, a.display_name) \
23 for a in lp_team.getMembersByStatus(status='Administrator')])
24 ld_admin_set = set(ld_admin_names.keys())
25 lp_admin_set = set(lp_admin_names.keys())
26 for admin_name in ld_admin_set.difference(lp_admin_set):
27 admin = ld_team.admin_profiles.get(user__username=admin_name)
28 admin.delete()
29 for admin_name in lp_admin_set.difference(ld_admin_set):
30 admin = create_profile(admin_name)
31 admin.realname = lp_admin_names[admin_name]
32 admin.tz = launchpad.get_user_timezone(admin_name, lp)
20 admin.save()33 admin.save()
21 ld_team.admins.add(admin)34 ld_team.admin_profiles.add(admin)
2235
2336
24class Command(NoArgsCommand):37class Command(NoArgsCommand):
@@ -36,13 +49,14 @@
36 lp.people["locoteams"].members)49 lp.people["locoteams"].members)
37 for l in locos:50 for l in locos:
38 if not existing_locos or l.name not in [b.lp_name for b in existing_locos]:51 if not existing_locos or l.name not in [b.lp_name for b in existing_locos]:
39 team = models.Team(lp_name=l.name, name=l.display_name, owner=l.team_owner.name)52 team = models.Team(lp_name=l.name, name=l.display_name,
53 owner_profile=create_profile(l.team_owner.name))
40 team.save()54 team.save()
41 else:55 else:
42 team = filter(lambda a: a.lp_name == l.name, existing_locos)[0]56 team = filter(lambda a: a.lp_name == l.name, existing_locos)[0]
43 team.name = l.display_name57 team.name = l.display_name
44 team.owner = l.team_owner.name58 team.owner_profile = create_profile(l.team_owner.name)
45 update_admins(team, l)59 update_admins(team, l, lp)
46 60
47 if not existing_groups or l.name not in [g.name for g in existing_groups]:61 if not existing_groups or l.name not in [g.name for g in existing_groups]:
48 group = Group(name=l.name)62 group = Group(name=l.name)
4963
=== modified file 'loco_directory/teams/migrations/0002_add_mugshot_field.py'
--- loco_directory/teams/migrations/0002_add_mugshot_field.py 2010-02-04 00:39:29 +0000
+++ loco_directory/teams/migrations/0002_add_mugshot_field.py 2010-08-26 14:45:53 +0000
@@ -13,6 +13,7 @@
13 13
14 14
15 def backwards(self, orm):15 def backwards(self, orm):
16 db.current_orm.models['teams'] = db.current_orm.models['teams.team']
16 17
17 # Deleting field 'Team.mugshot_url'18 # Deleting field 'Team.mugshot_url'
18 db.delete_column('teams', 'mugshot_url')19 db.delete_column('teams', 'mugshot_url')
1920
=== added file 'loco_directory/teams/migrations/0005_add_profile_fields.py'
--- loco_directory/teams/migrations/0005_add_profile_fields.py 1970-01-01 00:00:00 +0000
+++ loco_directory/teams/migrations/0005_add_profile_fields.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,142 @@
1
2from south.db import db
3from django.db import models
4from teams.models import *
5
6class Migration:
7 depends_on = (
8 ("userprofiles", "0001_initial"),
9 )
10
11 def forwards(self, orm):
12
13 # Adding field 'Team.owner_profile'
14 db.add_column('teams', 'owner_profile', orm['teams.team:owner_profile'])
15
16 # Adding ManyToManyField 'Team.admin_profiles'
17 db.create_table('teams_admin_profiles', (
18 ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
19 ('team', models.ForeignKey(orm.Team, null=False)),
20 ('userprofile', models.ForeignKey(orm['userprofiles.UserProfile'], null=False))
21 ))
22
23 # Adding ManyToManyField 'Team.contact_profiles'
24 db.create_table('teams_contact_profiles', (
25 ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
26 ('team', models.ForeignKey(orm.Team, null=False)),
27 ('userprofile', models.ForeignKey(orm['userprofiles.UserProfile'], null=False))
28 ))
29
30
31
32 def backwards(self, orm):
33 db.current_orm.models['teams'] = db.current_orm.models['teams.team']
34
35 # Deleting field 'Team.owner_profile'
36 db.delete_column('teams', 'owner_profile_id')
37
38 # Dropping ManyToManyField 'Team.admin_profiles'
39 db.delete_table('teams_admin_profiles')
40
41 # Dropping ManyToManyField 'Team.contact_profiles'
42 db.delete_table('teams_contact_profiles')
43
44
45
46 models = {
47 'auth.group': {
48 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
49 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
50 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
51 },
52 'auth.permission': {
53 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
54 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
55 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
56 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
57 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
58 },
59 'auth.user': {
60 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
61 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
62 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
63 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
64 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
65 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
66 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
67 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
68 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
69 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
70 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
71 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
72 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
73 },
74 'contenttypes.contenttype': {
75 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
76 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
77 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
78 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
79 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
80 },
81 'teams.continent': {
82 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
83 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
84 },
85 'teams.country': {
86 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}),
87 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
88 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
89 },
90 'teams.language': {
91 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
92 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
93 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
94 },
95 'teams.team': {
96 'Meta': {'db_table': "'teams'"},
97 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
98 'admins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.TeamAdministrator']"}),
99 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
100 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
101 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
102 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
103 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}),
104 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
105 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
106 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
107 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
108 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
109 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}),
110 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}),
111 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
112 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
113 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
114 'owner': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'null': 'True', 'db_index': 'True'}),
115 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
116 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
117 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
118 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
119 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
120 },
121 'teams.teamadministrator': {
122 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
123 'lpid': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'db_index': 'True'})
124 },
125 'userprofiles.userprofile': {
126 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
127 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
128 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
129 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
130 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
131 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
132 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
133 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
134 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
135 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
136 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
137 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
138 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
139 }
140 }
141
142 complete_apps = ['teams']
0143
=== added file 'loco_directory/teams/migrations/0006_migrate_profile_fields.py'
--- loco_directory/teams/migrations/0006_migrate_profile_fields.py 1970-01-01 00:00:00 +0000
+++ loco_directory/teams/migrations/0006_migrate_profile_fields.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,140 @@
1
2from south.db import db
3from django.db import models
4from teams.models import *
5
6def _create_profile(orm, lpid):
7 user, created = orm['auth.User'].objects.get_or_create(username=lpid)
8 if created:
9 user.save()
10 profile, created = orm['userprofiles.UserProfile'].objects.get_or_create(user=user)
11 if created:
12 # set real name as lpid for now, we get the name later on via cronjob
13 profile.realname = lpid
14 profile.save()
15 return profile
16
17class Migration:
18
19 def forwards(self, orm):
20 db.current_orm.models['teams'] = db.current_orm.models['teams.team']
21 for team in orm['teams.Team'].objects.all():
22 if not team.owner_profile:
23 team.owner_profile = _create_profile(orm, team.owner)
24 for admin in team.admins.all():
25 admin_profile = _create_profile(orm, admin.lpid)
26 team.admin_profiles.add(admin_profile)
27 team.save()
28
29
30 def backwards(self, orm):
31 db.current_orm.models['teams'] = db.current_orm.models['teams.team']
32 for team in orm['teams.Team'].objects.all():
33 if not team.owner:
34 team.owner = team.owner_profile.user.username
35 # for some reason TeamAdministrator was never unique
36 for admin_profile in team.admin_profiles.all():
37 if orm['teams.TeamAdministrator'].objects.filter(lpid=admin_profile.user.username):
38 admin = orm['teams.TeamAdministrator'].objects.filter(lpid=admin_profile.user.username)[0]
39 else:
40 admin = orm['teams.TeamAdministrator'].objects.create(lpid=admin_profile.user.username)
41 admin.save()
42 team.save()
43
44 models = {
45 'auth.group': {
46 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
47 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
48 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
49 },
50 'auth.permission': {
51 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
52 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
53 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
54 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
55 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
56 },
57 'auth.user': {
58 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
59 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
60 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
61 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
62 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
64 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
65 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
66 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
67 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
68 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
69 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
70 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
71 },
72 'contenttypes.contenttype': {
73 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
74 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
75 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
76 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
77 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
78 },
79 'teams.continent': {
80 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
81 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
82 },
83 'teams.country': {
84 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}),
85 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
86 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
87 },
88 'teams.language': {
89 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
90 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
91 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
92 },
93 'teams.team': {
94 'Meta': {'db_table': "'teams'"},
95 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
96 'admins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.TeamAdministrator']"}),
97 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
98 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
99 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
100 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
101 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}),
102 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
103 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
104 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
105 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
106 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
107 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}),
108 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}),
109 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
110 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
111 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
112 'owner': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'null': 'True', 'db_index': 'True'}),
113 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
114 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
115 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
116 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
117 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
118 },
119 'teams.teamadministrator': {
120 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
121 'lpid': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'db_index': 'True'})
122 },
123 'userprofiles.userprofile': {
124 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
125 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
126 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
127 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
128 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
130 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
131 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
132 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
133 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
134 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
135 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
136 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
137 }
138 }
139
140 complete_apps = ['teams']
0141
=== added file 'loco_directory/teams/migrations/0007_remove_old_person_fields.py'
--- loco_directory/teams/migrations/0007_remove_old_person_fields.py 1970-01-01 00:00:00 +0000
+++ loco_directory/teams/migrations/0007_remove_old_person_fields.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,136 @@
1
2from south.db import db
3from django.db import models
4from teams.models import *
5
6class Migration:
7
8 def forwards(self, orm):
9 db.current_orm.models['teams'] = db.current_orm.models['teams.team']
10 # Dropping ManyToManyField 'Team.admins'
11 db.delete_table('teams_admins')
12
13 # Deleting field 'Team.owner'
14 db.delete_column('teams', 'owner')
15
16 # Deleting model 'teamadministrator'
17 db.delete_table('teams_teamadministrator')
18
19
20
21 def backwards(self, orm):
22 db.current_orm.models['teams'] = db.current_orm.models['teams.team']
23 # Adding ManyToManyField 'Team.admins'
24 db.create_table('teams_admins', (
25 ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
26 ('team', models.ForeignKey(orm.Team, null=False)),
27 ('teamadministrator', models.ForeignKey(orm.teamadministrator, null=False))
28 ))
29
30 # Adding field 'Team.owner'
31 db.add_column('teams', 'owner', orm['teams.team:owner'])
32
33 # Adding model 'teamadministrator'
34 db.create_table('teams_teamadministrator', (
35 ('id', orm['teams.TeamAdministrator:id']),
36 ('lpid', orm['teams.TeamAdministrator:lpid']),
37 ))
38 db.send_create_signal('teams', ['teamadministrator'])
39
40
41
42 models = {
43 'auth.group': {
44 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
45 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
46 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
47 },
48 'auth.permission': {
49 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
50 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
51 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
52 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
53 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
54 },
55 'auth.user': {
56 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
57 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
58 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
59 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
60 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
61 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
62 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
63 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
64 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
65 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
66 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
67 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
68 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
69 },
70 'contenttypes.contenttype': {
71 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
72 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
73 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
74 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
75 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
76 },
77 'teams.continent': {
78 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
80 },
81 'teams.country': {
82 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}),
83 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
84 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
85 },
86 'teams.language': {
87 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
88 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
89 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
90 },
91 'teams.team': {
92 'Meta': {'db_table': "'teams'"},
93 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
94 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
95 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
96 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
97 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}),
98 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}),
99 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
100 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
101 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
102 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
103 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
104 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}),
105 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}),
106 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
107 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
108 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
109 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
110 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
111 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
112 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
113 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
114 },
115 'teams.teamadministrator': {
116 'id': ('django.db.models.fields.AutoField', [], {'primary_key' : 'True'}),
117 'lpid': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'db_index': 'True'}),
118 },
119 'userprofiles.userprofile': {
120 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
121 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
122 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
123 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
124 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
125 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
126 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
127 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
128 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
129 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
130 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
131 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
132 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
133 }
134 }
135
136 complete_apps = ['teams']
0137
=== modified file 'loco_directory/teams/models.py'
--- loco_directory/teams/models.py 2010-07-30 20:55:49 +0000
+++ loco_directory/teams/models.py 2010-08-26 14:45:53 +0000
@@ -2,6 +2,7 @@
2from django.utils.translation import ugettext_lazy as _2from django.utils.translation import ugettext_lazy as _
33
4from common.utils import flat_list4from common.utils import flat_list
5from userprofiles.models import UserProfile
56
6class Language(models.Model):7class Language(models.Model):
7 class Meta:8 class Meta:
@@ -15,11 +16,6 @@
15class TeamManager(models.Manager):16class TeamManager(models.Manager):
16 pass17 pass
1718
18class TeamAdministrator(models.Model):
19 lpid = models.SlugField(_("Launchpad ID"), max_length=40, null=False, blank=False)
20 def __unicode__(self):
21 return u'%s' % (self.lpid)
22
23class Continent(models.Model):19class Continent(models.Model):
24 name = models.TextField(_("Name"), max_length=50)20 name = models.TextField(_("Name"), max_length=50)
25 21
@@ -84,8 +80,9 @@
84 approved = models.BooleanField(_("Approved Team"), default=False)80 approved = models.BooleanField(_("Approved Team"), default=False)
85 approved_date = models.DateField(_("Date Approved"), null=True, blank=True)81 approved_date = models.DateField(_("Date Approved"), null=True, blank=True)
86 expires_date = models.DateField(_("Date Expires"), null=True, blank=True)82 expires_date = models.DateField(_("Date Expires"), null=True, blank=True)
87 owner = models.SlugField(_("Launchpad Team Owner"), null=True, blank=False)83 owner_profile = models.ForeignKey(UserProfile, related_name='owner', null=True)
88 admins = models.ManyToManyField(TeamAdministrator)84 admin_profiles = models.ManyToManyField(UserProfile, related_name='admins')
85 contact_profiles = models.ManyToManyField(UserProfile, related_name='contacts')
89 mugshot_url = models.URLField(_("URL of mugshot"), verify_exists=False, null=True, blank=True)86 mugshot_url = models.URLField(_("URL of mugshot"), verify_exists=False, null=True, blank=True)
90 languages = models.ManyToManyField(Language)87 languages = models.ManyToManyField(Language)
91 88
9289
=== modified file 'loco_directory/templates/events/team_event_detail_attendees.inc.html'
--- loco_directory/templates/events/team_event_detail_attendees.inc.html 2010-08-16 18:14:57 +0000
+++ loco_directory/templates/events/team_event_detail_attendees.inc.html 2010-08-26 14:45:53 +0000
@@ -27,7 +27,7 @@
27 </tr>27 </tr>
28 {% for registration in team_event_object.attendee_set.all %}28 {% for registration in team_event_object.attendee_set.all %}
29 <tr class="team_event_list_row {% cycle "odd" "even" %}">29 <tr class="team_event_list_row {% cycle "odd" "even" %}">
30 <td align="center">{{registration.attendee.username}}</td>30 <td align="center"><a href="https://launchpad.net/~{{registration.attendee_profile.user.username}}">{{registration.attendee_profile.realname}}</a></td>
31 <td align="center">{{registration.get_promise_display}}</td>31 <td align="center">{{registration.get_promise_display}}</td>
32 <td align="center">{{registration.guests}}</td>32 <td align="center">{{registration.guests}}</td>
33 </tr>33 </tr>
3434
=== modified file 'loco_directory/templates/events/team_event_detail_comments.inc.html'
--- loco_directory/templates/events/team_event_detail_comments.inc.html 2010-08-16 18:14:57 +0000
+++ loco_directory/templates/events/team_event_detail_comments.inc.html 2010-08-26 14:45:53 +0000
@@ -16,7 +16,7 @@
16 </tr>16 </tr>
17 {% for comment in comment_date.list %}17 {% for comment in comment_date.list %}
18 <tr>18 <tr>
19 <th class="form-item-label" scope="row"><label>{{comment.comment_by}}:</label></th>19 <th class="form-item-label" scope="row"><label><a href="https://launchpad.net/~{{comment.commenter_profile.user.username}}">{{comment.commenter_profile.realname}}</a>:</label></th>
20 <td class="form-item-value">{{comment.comment}}</td>20 <td class="form-item-value">{{comment.comment}}</td>
21 </tr>21 </tr>
22 {% endfor %}22 {% endfor %}
2323
=== modified file 'loco_directory/templates/teams/team_detail.html'
--- loco_directory/templates/teams/team_detail.html 2010-08-23 08:18:37 +0000
+++ loco_directory/templates/teams/team_detail.html 2010-08-26 14:45:53 +0000
@@ -50,7 +50,7 @@
5050
51 <tr>51 <tr>
52 <th class="form-item-label" scope="row"><label>{% trans "Launchpad Team Owner:" %}</label></th>52 <th class="form-item-label" scope="row"><label>{% trans "Launchpad Team Owner:" %}</label></th>
53 <td class="form-item-value"><a href="https://launchpad.net/~{{ team.owner }}">{{ team.owner }}</a></td>53 <td class="form-item-value"><a href="https://launchpad.net/~{{ team.owner_profile.user.username }}">{{ team.owner_profile.realname }}</a></td>
54 </tr>54 </tr>
55 55
56 {% if team.approved_date %}56 {% if team.approved_date %}
@@ -71,8 +71,14 @@
71 </tr>71 </tr>
72 <tr>72 <tr>
73 <th class="form-item-label" scope="row"><label>{% trans "Launchpad Team Admin(s):" %}</label></th>73 <th class="form-item-label" scope="row"><label>{% trans "Launchpad Team Admin(s):" %}</label></th>
74 <td class="form-item-value">{% for admin in team.admins.all %}74 <td class="form-item-value">{% for admin in team.admin_profiles.all %}
75 <a href="https://launchpad.net/~{{ admin.lpid }}">{{ admin.lpid }}</a>{% if not forloop.last %},{% endif %}75 <a href="https://launchpad.net/~{{ admin.user.username }}">{{ admin.realname }}</a>{% if not forloop.last %},{% endif %}
76 {% endfor %}</td>
77 </tr>
78 <tr>
79 <th class="form-item-label" scope="row"><label>{% trans "Loco Contacts(s):" %}</label></th>
80 <td class="form-item-value">{% for contact in team.contact_profiles.all %}
81 <a href="https://launchpad.net/~{{ contact.user.username }}">{{ contact.realname }}</a>{% if not forloop.last %},{% endif %}
76 {% endfor %}</td>82 {% endfor %}</td>
77 </tr>83 </tr>
7884
7985
=== added directory 'loco_directory/userprofiles'
=== added file 'loco_directory/userprofiles/__init__.py'
=== added file 'loco_directory/userprofiles/admin.py'
--- loco_directory/userprofiles/admin.py 1970-01-01 00:00:00 +0000
+++ loco_directory/userprofiles/admin.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,7 @@
1from django.contrib import admin
2from userprofiles.models import UserProfile
3
4class UserProfileAdmin(admin.ModelAdmin):
5 search_fields = ('realname',)
6
7admin.site.register(UserProfile, UserProfileAdmin)
08
=== added directory 'loco_directory/userprofiles/migrations'
=== added file 'loco_directory/userprofiles/migrations/0001_initial.py'
--- loco_directory/userprofiles/migrations/0001_initial.py 1970-01-01 00:00:00 +0000
+++ loco_directory/userprofiles/migrations/0001_initial.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,89 @@
1
2from south.db import db
3from django.db import models
4from userprofiles.models import *
5
6class Migration:
7
8 def forwards(self, orm):
9
10 # Adding model 'UserProfile'
11 db.create_table('userprofiles_userprofile', (
12 ('id', orm['userprofiles.UserProfile:id']),
13 ('user', orm['userprofiles.UserProfile:user']),
14 ('realname', orm['userprofiles.UserProfile:realname']),
15 ('tz', orm['userprofiles.UserProfile:tz']),
16 ('blog', orm['userprofiles.UserProfile:blog']),
17 ('twitter', orm['userprofiles.UserProfile:twitter']),
18 ('identica', orm['userprofiles.UserProfile:identica']),
19 ('picasa', orm['userprofiles.UserProfile:picasa']),
20 ('flickr', orm['userprofiles.UserProfile:flickr']),
21 ('facebook', orm['userprofiles.UserProfile:facebook']),
22 ('irc', orm['userprofiles.UserProfile:irc']),
23 ('aim', orm['userprofiles.UserProfile:aim']),
24 ('xmpp', orm['userprofiles.UserProfile:xmpp']),
25 ))
26 db.send_create_signal('userprofiles', ['UserProfile'])
27
28
29
30 def backwards(self, orm):
31
32 # Deleting model 'UserProfile'
33 db.delete_table('userprofiles_userprofile')
34
35
36
37 models = {
38 'auth.group': {
39 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
40 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
41 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
42 },
43 'auth.permission': {
44 'Meta': {'unique_together': "(('content_type', 'codename'),)"},
45 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
46 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
47 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
48 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
49 },
50 'auth.user': {
51 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
52 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
53 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
54 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
55 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
56 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
57 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
58 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
59 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
60 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
61 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
62 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
63 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
64 },
65 'contenttypes.contenttype': {
66 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
67 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
68 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
69 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
70 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
71 },
72 'userprofiles.userprofile': {
73 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
74 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
75 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
76 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
77 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
78 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
79 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
80 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
81 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
82 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
83 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
84 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
85 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
86 }
87 }
88
89 complete_apps = ['userprofiles']
090
=== added file 'loco_directory/userprofiles/migrations/__init__.py'
=== added file 'loco_directory/userprofiles/models.py'
--- loco_directory/userprofiles/models.py 1970-01-01 00:00:00 +0000
+++ loco_directory/userprofiles/models.py 2010-08-26 14:45:53 +0000
@@ -0,0 +1,60 @@
1from django.db import models
2from django.utils.translation import ugettext_lazy as _
3from django.contrib.auth import models as auth_models
4# Create your models here.
5
6class UserProfile(models.Model):
7 " Store profile information about a user "
8
9 user = models.OneToOneField(auth_models.User)
10 realname = models.CharField(_("Real Name"), max_length=150, blank=True)
11 tz = models.CharField(verbose_name=_('Timezone'), max_length=32, default='UTC')
12
13 blog = models.URLField(verbose_name=_('Blog URL'), blank=True, null=True, verify_exists=False)
14 twitter = models.CharField(verbose_name=_('Twitter ID'), max_length=32, blank=True, null=True)
15 identica = models.CharField(verbose_name=_('Identi.ca ID'), max_length=32, blank=True, null=True)
16 picasa = models.CharField(verbose_name=_('Picasa ID'), max_length=32, blank=True, null=True)
17 flickr = models.CharField(verbose_name=_('Flickr ID'), max_length=32, blank=True, null=True)
18 facebook = models.CharField(verbose_name=_('Facebook ID'), max_length=32, blank=True, null=True)
19 irc = models.CharField(verbose_name=_('IRC Nick'), max_length=32, blank=True, null=True)
20 aim = models.CharField(verbose_name=_('AOL IM Nick'), max_length=32, blank=True, null=True)
21 xmpp = models.CharField(verbose_name=_('XMPP IM Nick'), max_length=32, blank=True, null=True)
22
23 def __unicode__(self):
24 try:
25 if self.realname:
26 return "%s (%s)" % (self.user.username, self.realname)
27 return "%s" % self.user.username
28 except:
29 return "Unknown Profile"
30
31def _getUserProfile(self):
32 if not self.is_authenticated():
33 return UserProfile()
34
35 profile, created = UserProfile.objects.get_or_create(user=self)
36
37 if created:
38 from common.launchpad import get_user_timezone
39 profile.tz = get_user_timezone(self.username)
40 profile.save()
41
42 return profile
43
44def _getAnonProfile(self):
45 return UserProfile()
46
47auth_models.User.profile = property(_getUserProfile)
48auth_models.AnonymousUser.profile = property(_getAnonProfile)
49
50def create_profile(username):
51 user, created = auth_models.User.objects.get_or_create(username=username)
52 if created:
53 user.save()
54 profile, created = UserProfile.objects.get_or_create(user=user)
55 if created:
56 # set real name as username for now,
57 # we get the name later on via cronjob
58 profile.realname = username
59 profile.save()
60 return profile

Subscribers

People subscribed via source and target branches