Merge lp:~dholbach/loco-team-portal/profile into lp:loco-team-portal
- profile
- Merge into 0.2
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 | ||||||||||||||||
Related bugs: |
|
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.
Commit message
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.
Daniel Holbach (dholbach) wrote : Posted in a previous version of this proposal | # |
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.
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?
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.
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?
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.
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).
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.
Michael Hall (mhall119) wrote : | # |
I'm going to approve and merge this so we can start building new features off of it.
Preview Diff
1 | === modified file 'loco_directory/common/launchpad.py' | |||
2 | --- loco_directory/common/launchpad.py 2010-08-20 13:05:47 +0000 | |||
3 | +++ loco_directory/common/launchpad.py 2010-08-26 14:45:53 +0000 | |||
4 | @@ -50,9 +50,9 @@ | |||
5 | 50 | 50 | ||
6 | 51 | def is_admin_or_owner(username, team): | 51 | def is_admin_or_owner(username, team): |
7 | 52 | # check just using the LD data | 52 | # check just using the LD data |
9 | 53 | if username == team.owner: | 53 | if username == team.owner_profile.user.username: |
10 | 54 | return True | 54 | return True |
12 | 55 | if team.admins.filter(lpid=username): | 55 | if team.admin_profiles.filter(user__username=username): |
13 | 56 | return True | 56 | return True |
14 | 57 | if is_debug_user(username): | 57 | if is_debug_user(username): |
15 | 58 | return True | 58 | return True |
16 | @@ -80,3 +80,19 @@ | |||
17 | 80 | except HTTPError: | 80 | except HTTPError: |
18 | 81 | # 404 or some other issue that means we should default to False | 81 | # 404 or some other issue that means we should default to False |
19 | 82 | return "https://edge.launchpad.net/api/beta/ubuntu/mugshot" | 82 | return "https://edge.launchpad.net/api/beta/ubuntu/mugshot" |
20 | 83 | |||
21 | 84 | def get_user_timezone(username, lp=None): | ||
22 | 85 | timezone = 'UTC' | ||
23 | 86 | if username is None: | ||
24 | 87 | return timezone | ||
25 | 88 | |||
26 | 89 | if not lp: | ||
27 | 90 | lp = lp_login() | ||
28 | 91 | if not lp: | ||
29 | 92 | return timezone | ||
30 | 93 | try: | ||
31 | 94 | lp_user = lp.people[username] | ||
32 | 95 | timezone = lp_user.timezone | ||
33 | 96 | except: | ||
34 | 97 | pass | ||
35 | 98 | return timezone | ||
36 | 83 | 99 | ||
37 | === modified file 'loco_directory/events/forms.py' | |||
38 | --- loco_directory/events/forms.py 2010-08-02 14:43:27 +0000 | |||
39 | +++ loco_directory/events/forms.py 2010-08-26 14:45:53 +0000 | |||
40 | @@ -112,7 +112,7 @@ | |||
41 | 112 | 112 | ||
42 | 113 | class Meta: | 113 | class Meta: |
43 | 114 | model = Attendee | 114 | model = Attendee |
45 | 115 | exclude = ('attendee', 'team_event') | 115 | exclude = ('attendee_profile', 'team_event') |
46 | 116 | 116 | ||
47 | 117 | class TeamEventCommentForm(forms.ModelForm): | 117 | class TeamEventCommentForm(forms.ModelForm): |
48 | 118 | """ | 118 | """ |
49 | @@ -120,7 +120,7 @@ | |||
50 | 120 | """ | 120 | """ |
51 | 121 | class Meta: | 121 | class Meta: |
52 | 122 | model = TeamEventComment | 122 | model = TeamEventComment |
54 | 123 | exclude = ('team_event', 'date_created', 'comment_by') | 123 | exclude = ('team_event', 'date_created', 'commenter_profile') |
55 | 124 | 124 | ||
56 | 125 | class EventSearchForm(forms.Form): | 125 | class EventSearchForm(forms.Form): |
57 | 126 | """ | 126 | """ |
58 | 127 | 127 | ||
59 | === added file 'loco_directory/events/migrations/0002_add_profile_fields.py' | |||
60 | --- loco_directory/events/migrations/0002_add_profile_fields.py 1970-01-01 00:00:00 +0000 | |||
61 | +++ loco_directory/events/migrations/0002_add_profile_fields.py 2010-08-26 14:45:53 +0000 | |||
62 | @@ -0,0 +1,170 @@ | |||
63 | 1 | |||
64 | 2 | from south.db import db | ||
65 | 3 | from django.db import models | ||
66 | 4 | from events.models import * | ||
67 | 5 | |||
68 | 6 | class Migration: | ||
69 | 7 | depends_on = ( | ||
70 | 8 | ("userprofiles", "0001_initial"), | ||
71 | 9 | ) | ||
72 | 10 | |||
73 | 11 | def forwards(self, orm): | ||
74 | 12 | |||
75 | 13 | # Adding field 'TeamEventComment.commenter_profile' | ||
76 | 14 | db.add_column('events_teameventcomment', 'commenter_profile', orm['events.TeamEventComment:commenter_profile']) | ||
77 | 15 | |||
78 | 16 | # Adding field 'Attendee.attendee_profile' | ||
79 | 17 | db.add_column('events_attendee', 'attendee_profile', orm['events.Attendee:attendee_profile']) | ||
80 | 18 | |||
81 | 19 | |||
82 | 20 | |||
83 | 21 | def backwards(self, orm): | ||
84 | 22 | |||
85 | 23 | # Deleting field 'TeamEventComment.commenter_profile' | ||
86 | 24 | db.delete_column('events_teameventcomment', 'commenter_profile_id') | ||
87 | 25 | |||
88 | 26 | # Deleting field 'Attendee.attendee_profile' | ||
89 | 27 | db.delete_column('events_attendee', 'attendee_profile_id') | ||
90 | 28 | |||
91 | 29 | |||
92 | 30 | |||
93 | 31 | models = { | ||
94 | 32 | 'auth.group': { | ||
95 | 33 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
96 | 34 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
97 | 35 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) | ||
98 | 36 | }, | ||
99 | 37 | 'auth.permission': { | ||
100 | 38 | 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, | ||
101 | 39 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
102 | 40 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
103 | 41 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
104 | 42 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
105 | 43 | }, | ||
106 | 44 | 'auth.user': { | ||
107 | 45 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
108 | 46 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
109 | 47 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
110 | 48 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), | ||
111 | 49 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
112 | 50 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
113 | 51 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
114 | 52 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
115 | 53 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
116 | 54 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
117 | 55 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
118 | 56 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), | ||
119 | 57 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
120 | 58 | }, | ||
121 | 59 | 'contenttypes.contenttype': { | ||
122 | 60 | 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, | ||
123 | 61 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
124 | 62 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
125 | 63 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
126 | 64 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
127 | 65 | }, | ||
128 | 66 | 'events.attendee': { | ||
129 | 67 | 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)"}, | ||
130 | 68 | 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), | ||
131 | 69 | 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}), | ||
132 | 70 | 'guests': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), | ||
133 | 71 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
134 | 72 | 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}), | ||
135 | 73 | 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}) | ||
136 | 74 | }, | ||
137 | 75 | 'events.baseevent': { | ||
138 | 76 | 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
139 | 77 | 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), | ||
140 | 78 | 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 9, 53, 607179)', 'db_index': 'True'}), | ||
141 | 79 | 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), | ||
142 | 80 | 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
143 | 81 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
144 | 82 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) | ||
145 | 83 | }, | ||
146 | 84 | 'events.globalevent': { | ||
147 | 85 | 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}), | ||
148 | 86 | 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
149 | 87 | 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}) | ||
150 | 88 | }, | ||
151 | 89 | 'events.teamevent': { | ||
152 | 90 | 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}), | ||
153 | 91 | 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}), | ||
154 | 92 | 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True'}), | ||
155 | 93 | 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'}) | ||
156 | 94 | }, | ||
157 | 95 | 'events.teameventcomment': { | ||
158 | 96 | 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}), | ||
159 | 97 | 'comment_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), | ||
160 | 98 | 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}), | ||
161 | 99 | 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 9, 53, 613146)', 'db_index': 'True'}), | ||
162 | 100 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
163 | 101 | 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}) | ||
164 | 102 | }, | ||
165 | 103 | 'teams.continent': { | ||
166 | 104 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
167 | 105 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'}) | ||
168 | 106 | }, | ||
169 | 107 | 'teams.country': { | ||
170 | 108 | 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}), | ||
171 | 109 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
172 | 110 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'}) | ||
173 | 111 | }, | ||
174 | 112 | 'teams.language': { | ||
175 | 113 | 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}), | ||
176 | 114 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
177 | 115 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}) | ||
178 | 116 | }, | ||
179 | 117 | 'teams.team': { | ||
180 | 118 | 'Meta': {'db_table': "'teams'"}, | ||
181 | 119 | 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
182 | 120 | 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
183 | 121 | 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
184 | 122 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
185 | 123 | 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
186 | 124 | 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}), | ||
187 | 125 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), | ||
188 | 126 | 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
189 | 127 | 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
190 | 128 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
191 | 129 | 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), | ||
192 | 130 | 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}), | ||
193 | 131 | 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}), | ||
194 | 132 | 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
195 | 133 | 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
196 | 134 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}), | ||
197 | 135 | 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}), | ||
198 | 136 | 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
199 | 137 | 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
200 | 138 | 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
201 | 139 | 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
202 | 140 | }, | ||
203 | 141 | 'userprofiles.userprofile': { | ||
204 | 142 | 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
205 | 143 | 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
206 | 144 | 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
207 | 145 | 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
208 | 146 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
209 | 147 | 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
210 | 148 | 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
211 | 149 | 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
212 | 150 | 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}), | ||
213 | 151 | 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
214 | 152 | 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}), | ||
215 | 153 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}), | ||
216 | 154 | 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) | ||
217 | 155 | }, | ||
218 | 156 | 'venues.venue': { | ||
219 | 157 | 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))"}, | ||
220 | 158 | 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), | ||
221 | 159 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), | ||
222 | 160 | 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
223 | 161 | 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}), | ||
224 | 162 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
225 | 163 | 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), | ||
226 | 164 | 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), | ||
227 | 165 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), | ||
228 | 166 | 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
229 | 167 | } | ||
230 | 168 | } | ||
231 | 169 | |||
232 | 170 | complete_apps = ['events'] | ||
233 | 0 | 171 | ||
234 | === added file 'loco_directory/events/migrations/0003_migrate_profile_data.py' | |||
235 | --- loco_directory/events/migrations/0003_migrate_profile_data.py 1970-01-01 00:00:00 +0000 | |||
236 | +++ loco_directory/events/migrations/0003_migrate_profile_data.py 2010-08-26 14:45:53 +0000 | |||
237 | @@ -0,0 +1,173 @@ | |||
238 | 1 | |||
239 | 2 | from south.db import db | ||
240 | 3 | from django.db import models | ||
241 | 4 | from events.models import * | ||
242 | 5 | |||
243 | 6 | class Migration: | ||
244 | 7 | |||
245 | 8 | def forwards(self, orm): | ||
246 | 9 | for comment in orm['events.TeamEventComment'].objects.all(): | ||
247 | 10 | if not comment.commenter_profile: | ||
248 | 11 | commenter_profile, created = orm['userprofiles.UserProfile'].objects.get_or_create(user=comment.comment_by) | ||
249 | 12 | if created: | ||
250 | 13 | commenter_profile.save() | ||
251 | 14 | comment.commenter_profile = commenter_profile | ||
252 | 15 | comment.save() | ||
253 | 16 | for attendee in orm['events.Attendee'].objects.all(): | ||
254 | 17 | if not attendee.attendee_profile: | ||
255 | 18 | attendee_profile, created = orm['userprofiles.UserProfile'].objects.get_or_create(user=attendee.attendee) | ||
256 | 19 | if created: | ||
257 | 20 | attendee_profile.save() | ||
258 | 21 | attendee.attendee_profile = attendee_profile | ||
259 | 22 | attendee.save() | ||
260 | 23 | |||
261 | 24 | def backwards(self, orm): | ||
262 | 25 | for comment in orm['events.TeamEventComment'].objects.all(): | ||
263 | 26 | if not comment.comment_by: | ||
264 | 27 | comment.comment_by = comment.commenter_profile.user | ||
265 | 28 | comment.save() | ||
266 | 29 | for attendee in orm['events.Attendee'].objects.all(): | ||
267 | 30 | if not attendee.attendee: | ||
268 | 31 | attendee.attendee = attendee.attendee_profile.user | ||
269 | 32 | attendee.save() | ||
270 | 33 | |||
271 | 34 | models = { | ||
272 | 35 | 'auth.group': { | ||
273 | 36 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
274 | 37 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
275 | 38 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) | ||
276 | 39 | }, | ||
277 | 40 | 'auth.permission': { | ||
278 | 41 | 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, | ||
279 | 42 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
280 | 43 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
281 | 44 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
282 | 45 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
283 | 46 | }, | ||
284 | 47 | 'auth.user': { | ||
285 | 48 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
286 | 49 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
287 | 50 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
288 | 51 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), | ||
289 | 52 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
290 | 53 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
291 | 54 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
292 | 55 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
293 | 56 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
294 | 57 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
295 | 58 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
296 | 59 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), | ||
297 | 60 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
298 | 61 | }, | ||
299 | 62 | 'contenttypes.contenttype': { | ||
300 | 63 | 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, | ||
301 | 64 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
302 | 65 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
303 | 66 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
304 | 67 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
305 | 68 | }, | ||
306 | 69 | 'events.attendee': { | ||
307 | 70 | 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)"}, | ||
308 | 71 | 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), | ||
309 | 72 | 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}), | ||
310 | 73 | 'guests': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), | ||
311 | 74 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
312 | 75 | 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}), | ||
313 | 76 | 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}) | ||
314 | 77 | }, | ||
315 | 78 | 'events.baseevent': { | ||
316 | 79 | 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
317 | 80 | 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), | ||
318 | 81 | 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 10, 3, 333840)', 'db_index': 'True'}), | ||
319 | 82 | 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), | ||
320 | 83 | 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
321 | 84 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
322 | 85 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) | ||
323 | 86 | }, | ||
324 | 87 | 'events.globalevent': { | ||
325 | 88 | 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}), | ||
326 | 89 | 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
327 | 90 | 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}) | ||
328 | 91 | }, | ||
329 | 92 | 'events.teamevent': { | ||
330 | 93 | 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}), | ||
331 | 94 | 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}), | ||
332 | 95 | 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True'}), | ||
333 | 96 | 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'}) | ||
334 | 97 | }, | ||
335 | 98 | 'events.teameventcomment': { | ||
336 | 99 | 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}), | ||
337 | 100 | 'comment_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), | ||
338 | 101 | 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}), | ||
339 | 102 | 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 10, 3, 336191)', 'db_index': 'True'}), | ||
340 | 103 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
341 | 104 | 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}) | ||
342 | 105 | }, | ||
343 | 106 | 'teams.continent': { | ||
344 | 107 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
345 | 108 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'}) | ||
346 | 109 | }, | ||
347 | 110 | 'teams.country': { | ||
348 | 111 | 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}), | ||
349 | 112 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
350 | 113 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'}) | ||
351 | 114 | }, | ||
352 | 115 | 'teams.language': { | ||
353 | 116 | 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}), | ||
354 | 117 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
355 | 118 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}) | ||
356 | 119 | }, | ||
357 | 120 | 'teams.team': { | ||
358 | 121 | 'Meta': {'db_table': "'teams'"}, | ||
359 | 122 | 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
360 | 123 | 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
361 | 124 | 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
362 | 125 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
363 | 126 | 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
364 | 127 | 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}), | ||
365 | 128 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), | ||
366 | 129 | 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
367 | 130 | 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
368 | 131 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
369 | 132 | 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), | ||
370 | 133 | 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}), | ||
371 | 134 | 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}), | ||
372 | 135 | 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
373 | 136 | 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
374 | 137 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}), | ||
375 | 138 | 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}), | ||
376 | 139 | 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
377 | 140 | 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
378 | 141 | 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
379 | 142 | 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
380 | 143 | }, | ||
381 | 144 | 'userprofiles.userprofile': { | ||
382 | 145 | 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
383 | 146 | 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
384 | 147 | 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
385 | 148 | 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
386 | 149 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
387 | 150 | 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
388 | 151 | 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
389 | 152 | 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
390 | 153 | 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}), | ||
391 | 154 | 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
392 | 155 | 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}), | ||
393 | 156 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}), | ||
394 | 157 | 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) | ||
395 | 158 | }, | ||
396 | 159 | 'venues.venue': { | ||
397 | 160 | 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))"}, | ||
398 | 161 | 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), | ||
399 | 162 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), | ||
400 | 163 | 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
401 | 164 | 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}), | ||
402 | 165 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
403 | 166 | 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), | ||
404 | 167 | 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), | ||
405 | 168 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), | ||
406 | 169 | 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
407 | 170 | } | ||
408 | 171 | } | ||
409 | 172 | |||
410 | 173 | complete_apps = ['events'] | ||
411 | 0 | 174 | ||
412 | === added file 'loco_directory/events/migrations/0004_remove_user.py' | |||
413 | --- loco_directory/events/migrations/0004_remove_user.py 1970-01-01 00:00:00 +0000 | |||
414 | +++ loco_directory/events/migrations/0004_remove_user.py 2010-08-26 14:45:53 +0000 | |||
415 | @@ -0,0 +1,181 @@ | |||
416 | 1 | |||
417 | 2 | from south.db import db | ||
418 | 3 | from django.db import models | ||
419 | 4 | from events.models import * | ||
420 | 5 | |||
421 | 6 | class Migration: | ||
422 | 7 | |||
423 | 8 | def forwards(self, orm): | ||
424 | 9 | |||
425 | 10 | # Deleting field 'TeamEventComment.comment_by' | ||
426 | 11 | db.delete_column('events_teameventcomment', 'comment_by_id') | ||
427 | 12 | |||
428 | 13 | # Deleting field 'Attendee.attendee' | ||
429 | 14 | db.delete_column('events_attendee', 'attendee_id') | ||
430 | 15 | |||
431 | 16 | # Changing field 'BaseEvent.date_created' | ||
432 | 17 | # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 11, 17, 963571), db_index=True)) | ||
433 | 18 | db.alter_column('events_baseevent', 'date_created', orm['events.baseevent:date_created']) | ||
434 | 19 | |||
435 | 20 | # Changing field 'TeamEventComment.date_created' | ||
436 | 21 | # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 11, 17, 966242), db_index=True)) | ||
437 | 22 | db.alter_column('events_teameventcomment', 'date_created', orm['events.teameventcomment:date_created']) | ||
438 | 23 | |||
439 | 24 | |||
440 | 25 | |||
441 | 26 | def backwards(self, orm): | ||
442 | 27 | |||
443 | 28 | # Adding field 'TeamEventComment.comment_by' | ||
444 | 29 | db.add_column('events_teameventcomment', 'comment_by', orm['events.teameventcomment:comment_by']) | ||
445 | 30 | |||
446 | 31 | # Adding field 'Attendee.attendee' | ||
447 | 32 | db.add_column('events_attendee', 'attendee', orm['events.attendee:attendee']) | ||
448 | 33 | |||
449 | 34 | # Changing field 'BaseEvent.date_created' | ||
450 | 35 | # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 10, 3, 333840), db_index=True)) | ||
451 | 36 | db.alter_column('events_baseevent', 'date_created', orm['events.baseevent:date_created']) | ||
452 | 37 | |||
453 | 38 | # Changing field 'TeamEventComment.date_created' | ||
454 | 39 | # (to signature: django.db.models.fields.DateTimeField(default=datetime.datetime(2010, 8, 18, 10, 10, 3, 336191), db_index=True)) | ||
455 | 40 | db.alter_column('events_teameventcomment', 'date_created', orm['events.teameventcomment:date_created']) | ||
456 | 41 | |||
457 | 42 | |||
458 | 43 | |||
459 | 44 | models = { | ||
460 | 45 | 'auth.group': { | ||
461 | 46 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
462 | 47 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
463 | 48 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) | ||
464 | 49 | }, | ||
465 | 50 | 'auth.permission': { | ||
466 | 51 | 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, | ||
467 | 52 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
468 | 53 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
469 | 54 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
470 | 55 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
471 | 56 | }, | ||
472 | 57 | 'auth.user': { | ||
473 | 58 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
474 | 59 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
475 | 60 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
476 | 61 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), | ||
477 | 62 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
478 | 63 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
479 | 64 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
480 | 65 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
481 | 66 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
482 | 67 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
483 | 68 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
484 | 69 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), | ||
485 | 70 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
486 | 71 | }, | ||
487 | 72 | 'contenttypes.contenttype': { | ||
488 | 73 | 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, | ||
489 | 74 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
490 | 75 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
491 | 76 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
492 | 77 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
493 | 78 | }, | ||
494 | 79 | 'events.attendee': { | ||
495 | 80 | 'Meta': {'unique_together': "(('team_event', 'attendee_profile'),)"}, | ||
496 | 81 | 'attendee_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}), | ||
497 | 82 | 'guests': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), | ||
498 | 83 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
499 | 84 | 'promise': ('django.db.models.fields.CharField', [], {'max_length': '50'}), | ||
500 | 85 | 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}) | ||
501 | 86 | }, | ||
502 | 87 | 'events.baseevent': { | ||
503 | 88 | 'announce': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
504 | 89 | 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), | ||
505 | 90 | 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 11, 17, 963571)', 'db_index': 'True'}), | ||
506 | 91 | 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), | ||
507 | 92 | 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
508 | 93 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
509 | 94 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) | ||
510 | 95 | }, | ||
511 | 96 | 'events.globalevent': { | ||
512 | 97 | 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}), | ||
513 | 98 | 'microbloghashtag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
514 | 99 | 'pictag': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}) | ||
515 | 100 | }, | ||
516 | 101 | 'events.teamevent': { | ||
517 | 102 | 'baseevent_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['events.BaseEvent']", 'unique': 'True', 'primary_key': 'True'}), | ||
518 | 103 | 'global_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.GlobalEvent']", 'null': 'True', 'blank': 'True'}), | ||
519 | 104 | 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True'}), | ||
520 | 105 | 'venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['venues.Venue']", 'null': 'True', 'blank': 'True'}) | ||
521 | 106 | }, | ||
522 | 107 | 'events.teameventcomment': { | ||
523 | 108 | 'comment': ('django.db.models.fields.TextField', [], {'db_index': 'True'}), | ||
524 | 109 | 'commenter_profile': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True'}), | ||
525 | 110 | 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 8, 18, 10, 11, 17, 966242)', 'db_index': 'True'}), | ||
526 | 111 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
527 | 112 | 'team_event': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['events.TeamEvent']"}) | ||
528 | 113 | }, | ||
529 | 114 | 'teams.continent': { | ||
530 | 115 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
531 | 116 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'}) | ||
532 | 117 | }, | ||
533 | 118 | 'teams.country': { | ||
534 | 119 | 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}), | ||
535 | 120 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
536 | 121 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'}) | ||
537 | 122 | }, | ||
538 | 123 | 'teams.language': { | ||
539 | 124 | 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}), | ||
540 | 125 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
541 | 126 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}) | ||
542 | 127 | }, | ||
543 | 128 | 'teams.team': { | ||
544 | 129 | 'Meta': {'db_table': "'teams'"}, | ||
545 | 130 | 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
546 | 131 | 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
547 | 132 | 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
548 | 133 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
549 | 134 | 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
550 | 135 | 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}), | ||
551 | 136 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), | ||
552 | 137 | 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
553 | 138 | 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
554 | 139 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
555 | 140 | 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), | ||
556 | 141 | 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}), | ||
557 | 142 | 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}), | ||
558 | 143 | 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
559 | 144 | 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
560 | 145 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}), | ||
561 | 146 | 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}), | ||
562 | 147 | 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
563 | 148 | 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
564 | 149 | 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
565 | 150 | 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
566 | 151 | }, | ||
567 | 152 | 'userprofiles.userprofile': { | ||
568 | 153 | 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
569 | 154 | 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
570 | 155 | 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
571 | 156 | 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
572 | 157 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
573 | 158 | 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
574 | 159 | 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
575 | 160 | 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
576 | 161 | 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}), | ||
577 | 162 | 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
578 | 163 | 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}), | ||
579 | 164 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}), | ||
580 | 165 | 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) | ||
581 | 166 | }, | ||
582 | 167 | 'venues.venue': { | ||
583 | 168 | 'Meta': {'unique_together': "(('name', 'country', 'city'), ('longitude', 'latitude'))"}, | ||
584 | 169 | 'address': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), | ||
585 | 170 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), | ||
586 | 171 | 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
587 | 172 | 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['teams.Country']", 'null': 'True'}), | ||
588 | 173 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
589 | 174 | 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), | ||
590 | 175 | 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), | ||
591 | 176 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), | ||
592 | 177 | 'venue_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
593 | 178 | } | ||
594 | 179 | } | ||
595 | 180 | |||
596 | 181 | complete_apps = ['events'] | ||
597 | 0 | 182 | ||
598 | === modified file 'loco_directory/events/models.py' | |||
599 | --- loco_directory/events/models.py 2010-08-18 16:18:41 +0000 | |||
600 | +++ loco_directory/events/models.py 2010-08-26 14:45:53 +0000 | |||
601 | @@ -1,5 +1,5 @@ | |||
602 | 1 | from django.db import models | 1 | from django.db import models |
604 | 2 | from django.contrib.auth.models import User | 2 | from userprofiles.models import UserProfile |
605 | 3 | from teams.models import * | 3 | from teams.models import * |
606 | 4 | from venues.models import Venue | 4 | from venues.models import Venue |
607 | 5 | from django.utils.translation import ugettext_lazy as _ | 5 | from django.utils.translation import ugettext_lazy as _ |
608 | @@ -120,7 +120,7 @@ | |||
609 | 120 | 120 | ||
610 | 121 | def is_attending(self, user): | 121 | def is_attending(self, user): |
611 | 122 | if user.is_authenticated(): | 122 | if user.is_authenticated(): |
613 | 123 | return self.attendee_set.filter(attendee=user).count() > 0 | 123 | return self.attendee_set.filter(attendee_profile__user=user).count() > 0 |
614 | 124 | else: | 124 | else: |
615 | 125 | return False | 125 | return False |
616 | 126 | 126 | ||
617 | @@ -145,7 +145,7 @@ | |||
618 | 145 | """ | 145 | """ |
619 | 146 | team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event')) | 146 | team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event')) |
620 | 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) |
622 | 148 | comment_by = models.ForeignKey(User) | 148 | commenter_profile = models.ForeignKey(UserProfile, null=True) |
623 | 149 | comment = models.TextField(help_text=_('Comment this Event'), db_index=True) | 149 | comment = models.TextField(help_text=_('Comment this Event'), db_index=True) |
624 | 150 | 150 | ||
625 | 151 | def __unicode__(self): | 151 | def __unicode__(self): |
626 | @@ -158,14 +158,14 @@ | |||
627 | 158 | a event attendee | 158 | a event attendee |
628 | 159 | """ | 159 | """ |
629 | 160 | class Meta: | 160 | class Meta: |
631 | 161 | unique_together = ('team_event', 'attendee') | 161 | unique_together = ('team_event', 'attendee_profile') |
632 | 162 | 162 | ||
633 | 163 | team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event')) | 163 | team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event')) |
635 | 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) |
636 | 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) |
637 | 166 | guests = models.PositiveSmallIntegerField(verbose_name=_('Additional Guests')) | 166 | guests = models.PositiveSmallIntegerField(verbose_name=_('Additional Guests')) |
638 | 167 | 167 | ||
639 | 168 | def __unicode__(self): | 168 | def __unicode__(self): |
641 | 169 | return self.attendee | 169 | return self.attendee_profile.user.username |
642 | 170 | 170 | ||
643 | 171 | 171 | ||
644 | 172 | 172 | ||
645 | === modified file 'loco_directory/events/views.py' | |||
646 | --- loco_directory/events/views.py 2010-08-17 14:40:36 +0000 | |||
647 | +++ loco_directory/events/views.py 2010-08-26 14:45:53 +0000 | |||
648 | @@ -304,9 +304,11 @@ | |||
649 | 304 | """ | 304 | """ |
650 | 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) |
651 | 306 | if team_event_object.is_attending(request.user): | 306 | if team_event_object.is_attending(request.user): |
653 | 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) |
654 | 308 | else: | 308 | else: |
656 | 309 | attendee_object = Attendee(team_event=team_event_object, attendee=request.user) | 309 | from userprofiles.models import create_profile |
657 | 310 | profile = create_profile(request.user.username) | ||
658 | 311 | attendee_object = Attendee(team_event=team_event_object, attendee_profile=profile) | ||
659 | 310 | 312 | ||
660 | 311 | if request.method == 'POST': | 313 | if request.method == 'POST': |
661 | 312 | form = AttendeeRegistrationForm(instance=attendee_object, data=request.POST) | 314 | form = AttendeeRegistrationForm(instance=attendee_object, data=request.POST) |
662 | @@ -341,7 +343,9 @@ | |||
663 | 341 | if form.is_valid(): | 343 | if form.is_valid(): |
664 | 342 | team_event_comment = form.save(commit=False) | 344 | team_event_comment = form.save(commit=False) |
665 | 343 | team_event_comment.team_event = team_event_object | 345 | team_event_comment.team_event = team_event_object |
667 | 344 | team_event_comment.comment_by = request.user | 346 | from userprofiles.models import create_profile |
668 | 347 | profile = create_profile(request.user.username) | ||
669 | 348 | team_event_comment.commenter_profile = profile | ||
670 | 345 | team_event_comment.save() | 349 | team_event_comment.save() |
671 | 346 | request.user.message_set.create(message=_('Comment saved.')) | 350 | request.user.message_set.create(message=_('Comment saved.')) |
672 | 347 | return redirect( team_event_object ) | 351 | return redirect( team_event_object ) |
673 | 348 | 352 | ||
674 | === modified file 'loco_directory/services/urls.py' | |||
675 | --- loco_directory/services/urls.py 2010-07-15 16:47:45 +0000 | |||
676 | +++ loco_directory/services/urls.py 2010-08-26 14:45:53 +0000 | |||
677 | @@ -17,7 +17,7 @@ | |||
678 | 17 | url(r'^venues/(.*)$', 'services.views.venue_service', name='venue_service'), | 17 | url(r'^venues/(.*)$', 'services.views.venue_service', name='venue_service'), |
679 | 18 | url(r'^users/(.*)$', 'services.views.user_service', name='user_service'), | 18 | url(r'^users/(.*)$', 'services.views.user_service', name='user_service'), |
680 | 19 | url(r'^groups/(.*)$', 'services.views.group_service', name='group_service'), | 19 | url(r'^groups/(.*)$', 'services.views.group_service', name='group_service'), |
682 | 20 | url(r'^admins/(.*)$', 'services.views.admin_service', name='admin_service'), | 20 | url(r'^profiles/(.*)$', 'services.views.profile_service', name='profile_service'), |
683 | 21 | url(r'^languages/(.*)$', 'services.views.language_service', name='language_service'), | 21 | url(r'^languages/(.*)$', 'services.views.language_service', name='language_service'), |
684 | 22 | ) | 22 | ) |
685 | 23 | 23 | ||
686 | 24 | 24 | ||
687 | === modified file 'loco_directory/services/views.py' | |||
688 | --- loco_directory/services/views.py 2010-07-15 16:32:07 +0000 | |||
689 | +++ loco_directory/services/views.py 2010-08-26 14:45:53 +0000 | |||
690 | @@ -1,6 +1,7 @@ | |||
691 | 1 | from teams.models import Team, Continent, Country, Language | 1 | from teams.models import Team, Continent, Country, Language |
693 | 2 | from events.models import GlobalEvent, TeamEvent, TeamEventComment, Attendee, TeamAdministrator | 2 | from events.models import GlobalEvent, TeamEvent, TeamEventComment, Attendee |
694 | 3 | from venues.models import Venue | 3 | from venues.models import Venue |
695 | 4 | from userprofiles.models import UserProfile | ||
696 | 4 | from django.contrib.auth.models import User, Group | 5 | from django.contrib.auth.models import User, Group |
697 | 5 | 6 | ||
698 | 6 | from services import model_service | 7 | from services import model_service |
699 | @@ -35,8 +36,8 @@ | |||
700 | 35 | def group_service(request, url): | 36 | def group_service(request, url): |
701 | 36 | return model_service(Group, request, url, exclude=['permissions']) | 37 | return model_service(Group, request, url, exclude=['permissions']) |
702 | 37 | 38 | ||
705 | 38 | def admin_service(request, url): | 39 | def profile_service(request, url): |
706 | 39 | return model_service(TeamAdministrator, request, url) | 40 | return model_service(UserProfile, request, url, exclude=['user']) |
707 | 40 | 41 | ||
708 | 41 | def language_service(request, url): | 42 | def language_service(request, url): |
709 | 42 | return model_service(Language, request, url) | 43 | return model_service(Language, request, url) |
710 | 43 | 44 | ||
711 | === modified file 'loco_directory/settings.py' | |||
712 | --- loco_directory/settings.py 2010-08-20 13:05:47 +0000 | |||
713 | +++ loco_directory/settings.py 2010-08-26 14:45:53 +0000 | |||
714 | @@ -115,6 +115,7 @@ | |||
715 | 115 | 'teams', | 115 | 'teams', |
716 | 116 | 'venues', | 116 | 'venues', |
717 | 117 | 'events', | 117 | 'events', |
718 | 118 | 'userprofiles', | ||
719 | 118 | 'django_openid_auth', | 119 | 'django_openid_auth', |
720 | 119 | 'south', | 120 | 'south', |
721 | 120 | ) | 121 | ) |
722 | @@ -124,6 +125,8 @@ | |||
723 | 124 | 'django.contrib.auth.backends.ModelBackend', | 125 | 'django.contrib.auth.backends.ModelBackend', |
724 | 125 | ) | 126 | ) |
725 | 126 | 127 | ||
726 | 128 | AUTH_PROFILE_MODULE = 'userprofiles.UserProfile' | ||
727 | 129 | |||
728 | 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? |
729 | 128 | OPENID_CREATE_USERS = True | 131 | OPENID_CREATE_USERS = True |
730 | 129 | 132 | ||
731 | 130 | 133 | ||
732 | === modified file 'loco_directory/teams/admin.py' | |||
733 | --- loco_directory/teams/admin.py 2010-07-09 10:56:49 +0000 | |||
734 | +++ loco_directory/teams/admin.py 2010-08-26 14:45:53 +0000 | |||
735 | @@ -1,7 +1,7 @@ | |||
736 | 1 | # -*- coding: utf-8 -*- | 1 | # -*- coding: utf-8 -*- |
737 | 2 | 2 | ||
738 | 3 | from django.contrib import admin | 3 | from django.contrib import admin |
740 | 4 | from teams.models import Team, TeamAdministrator, Continent, Country, Language | 4 | from teams.models import Team, Continent, Country, Language |
741 | 5 | 5 | ||
742 | 6 | class TeamAdmin(admin.ModelAdmin): | 6 | class TeamAdmin(admin.ModelAdmin): |
743 | 7 | search_fields = ('name',) | 7 | search_fields = ('name',) |
744 | @@ -12,10 +12,6 @@ | |||
745 | 12 | field.widget.attrs['rows'] = '4' | 12 | field.widget.attrs['rows'] = '4' |
746 | 13 | return field | 13 | return field |
747 | 14 | 14 | ||
748 | 15 | class TeamAdministratorAdmin(admin.ModelAdmin): | ||
749 | 16 | search_fields = ('lpid',) | ||
750 | 17 | list_display = ('lpid',) | ||
751 | 18 | |||
752 | 19 | class ContinentAdmin(admin.ModelAdmin): | 15 | class ContinentAdmin(admin.ModelAdmin): |
753 | 20 | search_fields = ('name',) | 16 | search_fields = ('name',) |
754 | 21 | 17 | ||
755 | @@ -26,7 +22,6 @@ | |||
756 | 26 | search_fields = ('name',) | 22 | search_fields = ('name',) |
757 | 27 | 23 | ||
758 | 28 | admin.site.register(Team, TeamAdmin) | 24 | admin.site.register(Team, TeamAdmin) |
759 | 29 | admin.site.register(TeamAdministrator, TeamAdministratorAdmin) | ||
760 | 30 | admin.site.register(Continent, ContinentAdmin) | 25 | admin.site.register(Continent, ContinentAdmin) |
761 | 31 | admin.site.register(Country, CountryAdmin) | 26 | admin.site.register(Country, CountryAdmin) |
762 | 32 | admin.site.register(Language, LanguageAdmin) | 27 | admin.site.register(Language, LanguageAdmin) |
763 | 33 | 28 | ||
764 | === modified file 'loco_directory/teams/management/commands/lpupdate.py' | |||
765 | --- loco_directory/teams/management/commands/lpupdate.py 2010-08-12 09:59:25 +0000 | |||
766 | +++ loco_directory/teams/management/commands/lpupdate.py 2010-08-26 14:45:53 +0000 | |||
767 | @@ -5,20 +5,33 @@ | |||
768 | 5 | from common import launchpad | 5 | from common import launchpad |
769 | 6 | from teams import models | 6 | from teams import models |
770 | 7 | from django.contrib.auth.models import Group | 7 | from django.contrib.auth.models import Group |
771 | 8 | from userprofiles.models import create_profile | ||
772 | 8 | 9 | ||
773 | 9 | from datetime import datetime | 10 | from datetime import datetime |
774 | 10 | import sys | 11 | import sys |
775 | 11 | 12 | ||
784 | 12 | def update_admins(ld_team, lp_team): | 13 | def create_admin_dict(admins): |
785 | 13 | ld_admin_names = set([a.lpid for a in ld_team.admins.all()]) | 14 | admin_dict = {} |
786 | 14 | lp_admin_names = set([a.name for a in lp_team.getMembersByStatus(status='Administrator')]) | 15 | for (lpid, realname) in admins: |
787 | 15 | for admin_name in ld_admin_names.difference(lp_admin_names): | 16 | admin_dict[lpid] = realname |
788 | 16 | admin = ld_team.admins.get(lpid=admin_name) | 17 | return admin_dict |
789 | 17 | admin.delete() | 18 | |
790 | 18 | for admin_name in lp_admin_names.difference(ld_admin_names): | 19 | def update_admins(ld_team, lp_team, lp): |
791 | 19 | admin = models.TeamAdministrator(lpid=admin_name) | 20 | ld_admin_names = create_admin_dict([(a.user.username, a.realname) \ |
792 | 21 | for a in ld_team.admin_profiles.all()]) | ||
793 | 22 | lp_admin_names = create_admin_dict([(a.name, a.display_name) \ | ||
794 | 23 | for a in lp_team.getMembersByStatus(status='Administrator')]) | ||
795 | 24 | ld_admin_set = set(ld_admin_names.keys()) | ||
796 | 25 | lp_admin_set = set(lp_admin_names.keys()) | ||
797 | 26 | for admin_name in ld_admin_set.difference(lp_admin_set): | ||
798 | 27 | admin = ld_team.admin_profiles.get(user__username=admin_name) | ||
799 | 28 | admin.delete() | ||
800 | 29 | for admin_name in lp_admin_set.difference(ld_admin_set): | ||
801 | 30 | admin = create_profile(admin_name) | ||
802 | 31 | admin.realname = lp_admin_names[admin_name] | ||
803 | 32 | admin.tz = launchpad.get_user_timezone(admin_name, lp) | ||
804 | 20 | admin.save() | 33 | admin.save() |
806 | 21 | ld_team.admins.add(admin) | 34 | ld_team.admin_profiles.add(admin) |
807 | 22 | 35 | ||
808 | 23 | 36 | ||
809 | 24 | class Command(NoArgsCommand): | 37 | class Command(NoArgsCommand): |
810 | @@ -36,13 +49,14 @@ | |||
811 | 36 | lp.people["locoteams"].members) | 49 | lp.people["locoteams"].members) |
812 | 37 | for l in locos: | 50 | for l in locos: |
813 | 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]: |
815 | 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, |
816 | 53 | owner_profile=create_profile(l.team_owner.name)) | ||
817 | 40 | team.save() | 54 | team.save() |
818 | 41 | else: | 55 | else: |
819 | 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] |
820 | 43 | team.name = l.display_name | 57 | team.name = l.display_name |
823 | 44 | team.owner = l.team_owner.name | 58 | team.owner_profile = create_profile(l.team_owner.name) |
824 | 45 | update_admins(team, l) | 59 | update_admins(team, l, lp) |
825 | 46 | 60 | ||
826 | 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]: |
827 | 48 | group = Group(name=l.name) | 62 | group = Group(name=l.name) |
828 | 49 | 63 | ||
829 | === modified file 'loco_directory/teams/migrations/0002_add_mugshot_field.py' | |||
830 | --- loco_directory/teams/migrations/0002_add_mugshot_field.py 2010-02-04 00:39:29 +0000 | |||
831 | +++ loco_directory/teams/migrations/0002_add_mugshot_field.py 2010-08-26 14:45:53 +0000 | |||
832 | @@ -13,6 +13,7 @@ | |||
833 | 13 | 13 | ||
834 | 14 | 14 | ||
835 | 15 | def backwards(self, orm): | 15 | def backwards(self, orm): |
836 | 16 | db.current_orm.models['teams'] = db.current_orm.models['teams.team'] | ||
837 | 16 | 17 | ||
838 | 17 | # Deleting field 'Team.mugshot_url' | 18 | # Deleting field 'Team.mugshot_url' |
839 | 18 | db.delete_column('teams', 'mugshot_url') | 19 | db.delete_column('teams', 'mugshot_url') |
840 | 19 | 20 | ||
841 | === added file 'loco_directory/teams/migrations/0005_add_profile_fields.py' | |||
842 | --- loco_directory/teams/migrations/0005_add_profile_fields.py 1970-01-01 00:00:00 +0000 | |||
843 | +++ loco_directory/teams/migrations/0005_add_profile_fields.py 2010-08-26 14:45:53 +0000 | |||
844 | @@ -0,0 +1,142 @@ | |||
845 | 1 | |||
846 | 2 | from south.db import db | ||
847 | 3 | from django.db import models | ||
848 | 4 | from teams.models import * | ||
849 | 5 | |||
850 | 6 | class Migration: | ||
851 | 7 | depends_on = ( | ||
852 | 8 | ("userprofiles", "0001_initial"), | ||
853 | 9 | ) | ||
854 | 10 | |||
855 | 11 | def forwards(self, orm): | ||
856 | 12 | |||
857 | 13 | # Adding field 'Team.owner_profile' | ||
858 | 14 | db.add_column('teams', 'owner_profile', orm['teams.team:owner_profile']) | ||
859 | 15 | |||
860 | 16 | # Adding ManyToManyField 'Team.admin_profiles' | ||
861 | 17 | db.create_table('teams_admin_profiles', ( | ||
862 | 18 | ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), | ||
863 | 19 | ('team', models.ForeignKey(orm.Team, null=False)), | ||
864 | 20 | ('userprofile', models.ForeignKey(orm['userprofiles.UserProfile'], null=False)) | ||
865 | 21 | )) | ||
866 | 22 | |||
867 | 23 | # Adding ManyToManyField 'Team.contact_profiles' | ||
868 | 24 | db.create_table('teams_contact_profiles', ( | ||
869 | 25 | ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), | ||
870 | 26 | ('team', models.ForeignKey(orm.Team, null=False)), | ||
871 | 27 | ('userprofile', models.ForeignKey(orm['userprofiles.UserProfile'], null=False)) | ||
872 | 28 | )) | ||
873 | 29 | |||
874 | 30 | |||
875 | 31 | |||
876 | 32 | def backwards(self, orm): | ||
877 | 33 | db.current_orm.models['teams'] = db.current_orm.models['teams.team'] | ||
878 | 34 | |||
879 | 35 | # Deleting field 'Team.owner_profile' | ||
880 | 36 | db.delete_column('teams', 'owner_profile_id') | ||
881 | 37 | |||
882 | 38 | # Dropping ManyToManyField 'Team.admin_profiles' | ||
883 | 39 | db.delete_table('teams_admin_profiles') | ||
884 | 40 | |||
885 | 41 | # Dropping ManyToManyField 'Team.contact_profiles' | ||
886 | 42 | db.delete_table('teams_contact_profiles') | ||
887 | 43 | |||
888 | 44 | |||
889 | 45 | |||
890 | 46 | models = { | ||
891 | 47 | 'auth.group': { | ||
892 | 48 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
893 | 49 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
894 | 50 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) | ||
895 | 51 | }, | ||
896 | 52 | 'auth.permission': { | ||
897 | 53 | 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, | ||
898 | 54 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
899 | 55 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
900 | 56 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
901 | 57 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
902 | 58 | }, | ||
903 | 59 | 'auth.user': { | ||
904 | 60 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
905 | 61 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
906 | 62 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
907 | 63 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), | ||
908 | 64 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
909 | 65 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
910 | 66 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
911 | 67 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
912 | 68 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
913 | 69 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
914 | 70 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
915 | 71 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), | ||
916 | 72 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
917 | 73 | }, | ||
918 | 74 | 'contenttypes.contenttype': { | ||
919 | 75 | 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, | ||
920 | 76 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
921 | 77 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
922 | 78 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
923 | 79 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
924 | 80 | }, | ||
925 | 81 | 'teams.continent': { | ||
926 | 82 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
927 | 83 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'}) | ||
928 | 84 | }, | ||
929 | 85 | 'teams.country': { | ||
930 | 86 | 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}), | ||
931 | 87 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
932 | 88 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'}) | ||
933 | 89 | }, | ||
934 | 90 | 'teams.language': { | ||
935 | 91 | 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}), | ||
936 | 92 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
937 | 93 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}) | ||
938 | 94 | }, | ||
939 | 95 | 'teams.team': { | ||
940 | 96 | 'Meta': {'db_table': "'teams'"}, | ||
941 | 97 | 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
942 | 98 | 'admins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.TeamAdministrator']"}), | ||
943 | 99 | 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
944 | 100 | 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
945 | 101 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
946 | 102 | 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
947 | 103 | 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}), | ||
948 | 104 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), | ||
949 | 105 | 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
950 | 106 | 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
951 | 107 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
952 | 108 | 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), | ||
953 | 109 | 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}), | ||
954 | 110 | 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}), | ||
955 | 111 | 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
956 | 112 | 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
957 | 113 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}), | ||
958 | 114 | 'owner': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'null': 'True', 'db_index': 'True'}), | ||
959 | 115 | 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}), | ||
960 | 116 | 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
961 | 117 | 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
962 | 118 | 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
963 | 119 | 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
964 | 120 | }, | ||
965 | 121 | 'teams.teamadministrator': { | ||
966 | 122 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
967 | 123 | 'lpid': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'db_index': 'True'}) | ||
968 | 124 | }, | ||
969 | 125 | 'userprofiles.userprofile': { | ||
970 | 126 | 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
971 | 127 | 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
972 | 128 | 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
973 | 129 | 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
974 | 130 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
975 | 131 | 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
976 | 132 | 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
977 | 133 | 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
978 | 134 | 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}), | ||
979 | 135 | 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
980 | 136 | 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}), | ||
981 | 137 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}), | ||
982 | 138 | 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) | ||
983 | 139 | } | ||
984 | 140 | } | ||
985 | 141 | |||
986 | 142 | complete_apps = ['teams'] | ||
987 | 0 | 143 | ||
988 | === added file 'loco_directory/teams/migrations/0006_migrate_profile_fields.py' | |||
989 | --- loco_directory/teams/migrations/0006_migrate_profile_fields.py 1970-01-01 00:00:00 +0000 | |||
990 | +++ loco_directory/teams/migrations/0006_migrate_profile_fields.py 2010-08-26 14:45:53 +0000 | |||
991 | @@ -0,0 +1,140 @@ | |||
992 | 1 | |||
993 | 2 | from south.db import db | ||
994 | 3 | from django.db import models | ||
995 | 4 | from teams.models import * | ||
996 | 5 | |||
997 | 6 | def _create_profile(orm, lpid): | ||
998 | 7 | user, created = orm['auth.User'].objects.get_or_create(username=lpid) | ||
999 | 8 | if created: | ||
1000 | 9 | user.save() | ||
1001 | 10 | profile, created = orm['userprofiles.UserProfile'].objects.get_or_create(user=user) | ||
1002 | 11 | if created: | ||
1003 | 12 | # set real name as lpid for now, we get the name later on via cronjob | ||
1004 | 13 | profile.realname = lpid | ||
1005 | 14 | profile.save() | ||
1006 | 15 | return profile | ||
1007 | 16 | |||
1008 | 17 | class Migration: | ||
1009 | 18 | |||
1010 | 19 | def forwards(self, orm): | ||
1011 | 20 | db.current_orm.models['teams'] = db.current_orm.models['teams.team'] | ||
1012 | 21 | for team in orm['teams.Team'].objects.all(): | ||
1013 | 22 | if not team.owner_profile: | ||
1014 | 23 | team.owner_profile = _create_profile(orm, team.owner) | ||
1015 | 24 | for admin in team.admins.all(): | ||
1016 | 25 | admin_profile = _create_profile(orm, admin.lpid) | ||
1017 | 26 | team.admin_profiles.add(admin_profile) | ||
1018 | 27 | team.save() | ||
1019 | 28 | |||
1020 | 29 | |||
1021 | 30 | def backwards(self, orm): | ||
1022 | 31 | db.current_orm.models['teams'] = db.current_orm.models['teams.team'] | ||
1023 | 32 | for team in orm['teams.Team'].objects.all(): | ||
1024 | 33 | if not team.owner: | ||
1025 | 34 | team.owner = team.owner_profile.user.username | ||
1026 | 35 | # for some reason TeamAdministrator was never unique | ||
1027 | 36 | for admin_profile in team.admin_profiles.all(): | ||
1028 | 37 | if orm['teams.TeamAdministrator'].objects.filter(lpid=admin_profile.user.username): | ||
1029 | 38 | admin = orm['teams.TeamAdministrator'].objects.filter(lpid=admin_profile.user.username)[0] | ||
1030 | 39 | else: | ||
1031 | 40 | admin = orm['teams.TeamAdministrator'].objects.create(lpid=admin_profile.user.username) | ||
1032 | 41 | admin.save() | ||
1033 | 42 | team.save() | ||
1034 | 43 | |||
1035 | 44 | models = { | ||
1036 | 45 | 'auth.group': { | ||
1037 | 46 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1038 | 47 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
1039 | 48 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) | ||
1040 | 49 | }, | ||
1041 | 50 | 'auth.permission': { | ||
1042 | 51 | 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, | ||
1043 | 52 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1044 | 53 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
1045 | 54 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1046 | 55 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
1047 | 56 | }, | ||
1048 | 57 | 'auth.user': { | ||
1049 | 58 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
1050 | 59 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
1051 | 60 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
1052 | 61 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), | ||
1053 | 62 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1054 | 63 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
1055 | 64 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1056 | 65 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1057 | 66 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
1058 | 67 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
1059 | 68 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
1060 | 69 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), | ||
1061 | 70 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
1062 | 71 | }, | ||
1063 | 72 | 'contenttypes.contenttype': { | ||
1064 | 73 | 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, | ||
1065 | 74 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1066 | 75 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1067 | 76 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1068 | 77 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
1069 | 78 | }, | ||
1070 | 79 | 'teams.continent': { | ||
1071 | 80 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1072 | 81 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'}) | ||
1073 | 82 | }, | ||
1074 | 83 | 'teams.country': { | ||
1075 | 84 | 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}), | ||
1076 | 85 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1077 | 86 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'}) | ||
1078 | 87 | }, | ||
1079 | 88 | 'teams.language': { | ||
1080 | 89 | 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}), | ||
1081 | 90 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1082 | 91 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}) | ||
1083 | 92 | }, | ||
1084 | 93 | 'teams.team': { | ||
1085 | 94 | 'Meta': {'db_table': "'teams'"}, | ||
1086 | 95 | 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
1087 | 96 | 'admins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.TeamAdministrator']"}), | ||
1088 | 97 | 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1089 | 98 | 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
1090 | 99 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
1091 | 100 | 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
1092 | 101 | 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}), | ||
1093 | 102 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), | ||
1094 | 103 | 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
1095 | 104 | 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1096 | 105 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1097 | 106 | 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), | ||
1098 | 107 | 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}), | ||
1099 | 108 | 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}), | ||
1100 | 109 | 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1101 | 110 | 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1102 | 111 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}), | ||
1103 | 112 | 'owner': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'null': 'True', 'db_index': 'True'}), | ||
1104 | 113 | 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}), | ||
1105 | 114 | 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
1106 | 115 | 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
1107 | 116 | 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1108 | 117 | 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
1109 | 118 | }, | ||
1110 | 119 | 'teams.teamadministrator': { | ||
1111 | 120 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1112 | 121 | 'lpid': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'db_index': 'True'}) | ||
1113 | 122 | }, | ||
1114 | 123 | 'userprofiles.userprofile': { | ||
1115 | 124 | 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1116 | 125 | 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1117 | 126 | 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1118 | 127 | 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1119 | 128 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1120 | 129 | 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1121 | 130 | 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1122 | 131 | 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1123 | 132 | 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}), | ||
1124 | 133 | 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1125 | 134 | 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}), | ||
1126 | 135 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}), | ||
1127 | 136 | 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) | ||
1128 | 137 | } | ||
1129 | 138 | } | ||
1130 | 139 | |||
1131 | 140 | complete_apps = ['teams'] | ||
1132 | 0 | 141 | ||
1133 | === added file 'loco_directory/teams/migrations/0007_remove_old_person_fields.py' | |||
1134 | --- loco_directory/teams/migrations/0007_remove_old_person_fields.py 1970-01-01 00:00:00 +0000 | |||
1135 | +++ loco_directory/teams/migrations/0007_remove_old_person_fields.py 2010-08-26 14:45:53 +0000 | |||
1136 | @@ -0,0 +1,136 @@ | |||
1137 | 1 | |||
1138 | 2 | from south.db import db | ||
1139 | 3 | from django.db import models | ||
1140 | 4 | from teams.models import * | ||
1141 | 5 | |||
1142 | 6 | class Migration: | ||
1143 | 7 | |||
1144 | 8 | def forwards(self, orm): | ||
1145 | 9 | db.current_orm.models['teams'] = db.current_orm.models['teams.team'] | ||
1146 | 10 | # Dropping ManyToManyField 'Team.admins' | ||
1147 | 11 | db.delete_table('teams_admins') | ||
1148 | 12 | |||
1149 | 13 | # Deleting field 'Team.owner' | ||
1150 | 14 | db.delete_column('teams', 'owner') | ||
1151 | 15 | |||
1152 | 16 | # Deleting model 'teamadministrator' | ||
1153 | 17 | db.delete_table('teams_teamadministrator') | ||
1154 | 18 | |||
1155 | 19 | |||
1156 | 20 | |||
1157 | 21 | def backwards(self, orm): | ||
1158 | 22 | db.current_orm.models['teams'] = db.current_orm.models['teams.team'] | ||
1159 | 23 | # Adding ManyToManyField 'Team.admins' | ||
1160 | 24 | db.create_table('teams_admins', ( | ||
1161 | 25 | ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), | ||
1162 | 26 | ('team', models.ForeignKey(orm.Team, null=False)), | ||
1163 | 27 | ('teamadministrator', models.ForeignKey(orm.teamadministrator, null=False)) | ||
1164 | 28 | )) | ||
1165 | 29 | |||
1166 | 30 | # Adding field 'Team.owner' | ||
1167 | 31 | db.add_column('teams', 'owner', orm['teams.team:owner']) | ||
1168 | 32 | |||
1169 | 33 | # Adding model 'teamadministrator' | ||
1170 | 34 | db.create_table('teams_teamadministrator', ( | ||
1171 | 35 | ('id', orm['teams.TeamAdministrator:id']), | ||
1172 | 36 | ('lpid', orm['teams.TeamAdministrator:lpid']), | ||
1173 | 37 | )) | ||
1174 | 38 | db.send_create_signal('teams', ['teamadministrator']) | ||
1175 | 39 | |||
1176 | 40 | |||
1177 | 41 | |||
1178 | 42 | models = { | ||
1179 | 43 | 'auth.group': { | ||
1180 | 44 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1181 | 45 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
1182 | 46 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) | ||
1183 | 47 | }, | ||
1184 | 48 | 'auth.permission': { | ||
1185 | 49 | 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, | ||
1186 | 50 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1187 | 51 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
1188 | 52 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1189 | 53 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
1190 | 54 | }, | ||
1191 | 55 | 'auth.user': { | ||
1192 | 56 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
1193 | 57 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
1194 | 58 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
1195 | 59 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), | ||
1196 | 60 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1197 | 61 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
1198 | 62 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1199 | 63 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1200 | 64 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
1201 | 65 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
1202 | 66 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
1203 | 67 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), | ||
1204 | 68 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
1205 | 69 | }, | ||
1206 | 70 | 'contenttypes.contenttype': { | ||
1207 | 71 | 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, | ||
1208 | 72 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1209 | 73 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1210 | 74 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1211 | 75 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
1212 | 76 | }, | ||
1213 | 77 | 'teams.continent': { | ||
1214 | 78 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1215 | 79 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'}) | ||
1216 | 80 | }, | ||
1217 | 81 | 'teams.country': { | ||
1218 | 82 | 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']"}), | ||
1219 | 83 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1220 | 84 | 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'}) | ||
1221 | 85 | }, | ||
1222 | 86 | 'teams.language': { | ||
1223 | 87 | 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}), | ||
1224 | 88 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1225 | 89 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}) | ||
1226 | 90 | }, | ||
1227 | 91 | 'teams.team': { | ||
1228 | 92 | 'Meta': {'db_table': "'teams'"}, | ||
1229 | 93 | 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
1230 | 94 | 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1231 | 95 | 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
1232 | 96 | 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
1233 | 97 | 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']"}), | ||
1234 | 98 | 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']"}), | ||
1235 | 99 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), | ||
1236 | 100 | 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), | ||
1237 | 101 | 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1238 | 102 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1239 | 103 | 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}), | ||
1240 | 104 | 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']"}), | ||
1241 | 105 | 'lp_name': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'null': 'True', 'db_index': 'True'}), | ||
1242 | 106 | 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1243 | 107 | 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1244 | 108 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}), | ||
1245 | 109 | 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}), | ||
1246 | 110 | 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
1247 | 111 | 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), | ||
1248 | 112 | 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1249 | 113 | 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) | ||
1250 | 114 | }, | ||
1251 | 115 | 'teams.teamadministrator': { | ||
1252 | 116 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key' : 'True'}), | ||
1253 | 117 | 'lpid': ('django.db.models.fields.SlugField', [], {'max_length': '40', 'db_index': 'True'}), | ||
1254 | 118 | }, | ||
1255 | 119 | 'userprofiles.userprofile': { | ||
1256 | 120 | 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1257 | 121 | 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1258 | 122 | 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1259 | 123 | 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1260 | 124 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1261 | 125 | 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1262 | 126 | 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1263 | 127 | 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1264 | 128 | 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}), | ||
1265 | 129 | 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1266 | 130 | 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}), | ||
1267 | 131 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}), | ||
1268 | 132 | 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) | ||
1269 | 133 | } | ||
1270 | 134 | } | ||
1271 | 135 | |||
1272 | 136 | complete_apps = ['teams'] | ||
1273 | 0 | 137 | ||
1274 | === modified file 'loco_directory/teams/models.py' | |||
1275 | --- loco_directory/teams/models.py 2010-07-30 20:55:49 +0000 | |||
1276 | +++ loco_directory/teams/models.py 2010-08-26 14:45:53 +0000 | |||
1277 | @@ -2,6 +2,7 @@ | |||
1278 | 2 | from django.utils.translation import ugettext_lazy as _ | 2 | from django.utils.translation import ugettext_lazy as _ |
1279 | 3 | 3 | ||
1280 | 4 | from common.utils import flat_list | 4 | from common.utils import flat_list |
1281 | 5 | from userprofiles.models import UserProfile | ||
1282 | 5 | 6 | ||
1283 | 6 | class Language(models.Model): | 7 | class Language(models.Model): |
1284 | 7 | class Meta: | 8 | class Meta: |
1285 | @@ -15,11 +16,6 @@ | |||
1286 | 15 | class TeamManager(models.Manager): | 16 | class TeamManager(models.Manager): |
1287 | 16 | pass | 17 | pass |
1288 | 17 | 18 | ||
1289 | 18 | class TeamAdministrator(models.Model): | ||
1290 | 19 | lpid = models.SlugField(_("Launchpad ID"), max_length=40, null=False, blank=False) | ||
1291 | 20 | def __unicode__(self): | ||
1292 | 21 | return u'%s' % (self.lpid) | ||
1293 | 22 | |||
1294 | 23 | class Continent(models.Model): | 19 | class Continent(models.Model): |
1295 | 24 | name = models.TextField(_("Name"), max_length=50) | 20 | name = models.TextField(_("Name"), max_length=50) |
1296 | 25 | 21 | ||
1297 | @@ -84,8 +80,9 @@ | |||
1298 | 84 | approved = models.BooleanField(_("Approved Team"), default=False) | 80 | approved = models.BooleanField(_("Approved Team"), default=False) |
1299 | 85 | approved_date = models.DateField(_("Date Approved"), null=True, blank=True) | 81 | approved_date = models.DateField(_("Date Approved"), null=True, blank=True) |
1300 | 86 | expires_date = models.DateField(_("Date Expires"), null=True, blank=True) | 82 | expires_date = models.DateField(_("Date Expires"), null=True, blank=True) |
1303 | 87 | owner = models.SlugField(_("Launchpad Team Owner"), null=True, blank=False) | 83 | owner_profile = models.ForeignKey(UserProfile, related_name='owner', null=True) |
1304 | 88 | admins = models.ManyToManyField(TeamAdministrator) | 84 | admin_profiles = models.ManyToManyField(UserProfile, related_name='admins') |
1305 | 85 | contact_profiles = models.ManyToManyField(UserProfile, related_name='contacts') | ||
1306 | 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) |
1307 | 90 | languages = models.ManyToManyField(Language) | 87 | languages = models.ManyToManyField(Language) |
1308 | 91 | 88 | ||
1309 | 92 | 89 | ||
1310 | === modified file 'loco_directory/templates/events/team_event_detail_attendees.inc.html' | |||
1311 | --- loco_directory/templates/events/team_event_detail_attendees.inc.html 2010-08-16 18:14:57 +0000 | |||
1312 | +++ loco_directory/templates/events/team_event_detail_attendees.inc.html 2010-08-26 14:45:53 +0000 | |||
1313 | @@ -27,7 +27,7 @@ | |||
1314 | 27 | </tr> | 27 | </tr> |
1315 | 28 | {% for registration in team_event_object.attendee_set.all %} | 28 | {% for registration in team_event_object.attendee_set.all %} |
1316 | 29 | <tr class="team_event_list_row {% cycle "odd" "even" %}"> | 29 | <tr class="team_event_list_row {% cycle "odd" "even" %}"> |
1318 | 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> |
1319 | 31 | <td align="center">{{registration.get_promise_display}}</td> | 31 | <td align="center">{{registration.get_promise_display}}</td> |
1320 | 32 | <td align="center">{{registration.guests}}</td> | 32 | <td align="center">{{registration.guests}}</td> |
1321 | 33 | </tr> | 33 | </tr> |
1322 | 34 | 34 | ||
1323 | === modified file 'loco_directory/templates/events/team_event_detail_comments.inc.html' | |||
1324 | --- loco_directory/templates/events/team_event_detail_comments.inc.html 2010-08-16 18:14:57 +0000 | |||
1325 | +++ loco_directory/templates/events/team_event_detail_comments.inc.html 2010-08-26 14:45:53 +0000 | |||
1326 | @@ -16,7 +16,7 @@ | |||
1327 | 16 | </tr> | 16 | </tr> |
1328 | 17 | {% for comment in comment_date.list %} | 17 | {% for comment in comment_date.list %} |
1329 | 18 | <tr> | 18 | <tr> |
1331 | 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> |
1332 | 20 | <td class="form-item-value">{{comment.comment}}</td> | 20 | <td class="form-item-value">{{comment.comment}}</td> |
1333 | 21 | </tr> | 21 | </tr> |
1334 | 22 | {% endfor %} | 22 | {% endfor %} |
1335 | 23 | 23 | ||
1336 | === modified file 'loco_directory/templates/teams/team_detail.html' | |||
1337 | --- loco_directory/templates/teams/team_detail.html 2010-08-23 08:18:37 +0000 | |||
1338 | +++ loco_directory/templates/teams/team_detail.html 2010-08-26 14:45:53 +0000 | |||
1339 | @@ -50,7 +50,7 @@ | |||
1340 | 50 | 50 | ||
1341 | 51 | <tr> | 51 | <tr> |
1342 | 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> |
1344 | 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> |
1345 | 54 | </tr> | 54 | </tr> |
1346 | 55 | 55 | ||
1347 | 56 | {% if team.approved_date %} | 56 | {% if team.approved_date %} |
1348 | @@ -71,8 +71,14 @@ | |||
1349 | 71 | </tr> | 71 | </tr> |
1350 | 72 | <tr> | 72 | <tr> |
1351 | 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> |
1354 | 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 %} |
1355 | 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 %} |
1356 | 76 | {% endfor %}</td> | ||
1357 | 77 | </tr> | ||
1358 | 78 | <tr> | ||
1359 | 79 | <th class="form-item-label" scope="row"><label>{% trans "Loco Contacts(s):" %}</label></th> | ||
1360 | 80 | <td class="form-item-value">{% for contact in team.contact_profiles.all %} | ||
1361 | 81 | <a href="https://launchpad.net/~{{ contact.user.username }}">{{ contact.realname }}</a>{% if not forloop.last %},{% endif %} | ||
1362 | 76 | {% endfor %}</td> | 82 | {% endfor %}</td> |
1363 | 77 | </tr> | 83 | </tr> |
1364 | 78 | 84 | ||
1365 | 79 | 85 | ||
1366 | === added directory 'loco_directory/userprofiles' | |||
1367 | === added file 'loco_directory/userprofiles/__init__.py' | |||
1368 | === added file 'loco_directory/userprofiles/admin.py' | |||
1369 | --- loco_directory/userprofiles/admin.py 1970-01-01 00:00:00 +0000 | |||
1370 | +++ loco_directory/userprofiles/admin.py 2010-08-26 14:45:53 +0000 | |||
1371 | @@ -0,0 +1,7 @@ | |||
1372 | 1 | from django.contrib import admin | ||
1373 | 2 | from userprofiles.models import UserProfile | ||
1374 | 3 | |||
1375 | 4 | class UserProfileAdmin(admin.ModelAdmin): | ||
1376 | 5 | search_fields = ('realname',) | ||
1377 | 6 | |||
1378 | 7 | admin.site.register(UserProfile, UserProfileAdmin) | ||
1379 | 0 | 8 | ||
1380 | === added directory 'loco_directory/userprofiles/migrations' | |||
1381 | === added file 'loco_directory/userprofiles/migrations/0001_initial.py' | |||
1382 | --- loco_directory/userprofiles/migrations/0001_initial.py 1970-01-01 00:00:00 +0000 | |||
1383 | +++ loco_directory/userprofiles/migrations/0001_initial.py 2010-08-26 14:45:53 +0000 | |||
1384 | @@ -0,0 +1,89 @@ | |||
1385 | 1 | |||
1386 | 2 | from south.db import db | ||
1387 | 3 | from django.db import models | ||
1388 | 4 | from userprofiles.models import * | ||
1389 | 5 | |||
1390 | 6 | class Migration: | ||
1391 | 7 | |||
1392 | 8 | def forwards(self, orm): | ||
1393 | 9 | |||
1394 | 10 | # Adding model 'UserProfile' | ||
1395 | 11 | db.create_table('userprofiles_userprofile', ( | ||
1396 | 12 | ('id', orm['userprofiles.UserProfile:id']), | ||
1397 | 13 | ('user', orm['userprofiles.UserProfile:user']), | ||
1398 | 14 | ('realname', orm['userprofiles.UserProfile:realname']), | ||
1399 | 15 | ('tz', orm['userprofiles.UserProfile:tz']), | ||
1400 | 16 | ('blog', orm['userprofiles.UserProfile:blog']), | ||
1401 | 17 | ('twitter', orm['userprofiles.UserProfile:twitter']), | ||
1402 | 18 | ('identica', orm['userprofiles.UserProfile:identica']), | ||
1403 | 19 | ('picasa', orm['userprofiles.UserProfile:picasa']), | ||
1404 | 20 | ('flickr', orm['userprofiles.UserProfile:flickr']), | ||
1405 | 21 | ('facebook', orm['userprofiles.UserProfile:facebook']), | ||
1406 | 22 | ('irc', orm['userprofiles.UserProfile:irc']), | ||
1407 | 23 | ('aim', orm['userprofiles.UserProfile:aim']), | ||
1408 | 24 | ('xmpp', orm['userprofiles.UserProfile:xmpp']), | ||
1409 | 25 | )) | ||
1410 | 26 | db.send_create_signal('userprofiles', ['UserProfile']) | ||
1411 | 27 | |||
1412 | 28 | |||
1413 | 29 | |||
1414 | 30 | def backwards(self, orm): | ||
1415 | 31 | |||
1416 | 32 | # Deleting model 'UserProfile' | ||
1417 | 33 | db.delete_table('userprofiles_userprofile') | ||
1418 | 34 | |||
1419 | 35 | |||
1420 | 36 | |||
1421 | 37 | models = { | ||
1422 | 38 | 'auth.group': { | ||
1423 | 39 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1424 | 40 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
1425 | 41 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) | ||
1426 | 42 | }, | ||
1427 | 43 | 'auth.permission': { | ||
1428 | 44 | 'Meta': {'unique_together': "(('content_type', 'codename'),)"}, | ||
1429 | 45 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1430 | 46 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), | ||
1431 | 47 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1432 | 48 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
1433 | 49 | }, | ||
1434 | 50 | 'auth.user': { | ||
1435 | 51 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
1436 | 52 | 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), | ||
1437 | 53 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
1438 | 54 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), | ||
1439 | 55 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1440 | 56 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), | ||
1441 | 57 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1442 | 58 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), | ||
1443 | 59 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
1444 | 60 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
1445 | 61 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
1446 | 62 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), | ||
1447 | 63 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
1448 | 64 | }, | ||
1449 | 65 | 'contenttypes.contenttype': { | ||
1450 | 66 | 'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"}, | ||
1451 | 67 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1452 | 68 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1453 | 69 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
1454 | 70 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
1455 | 71 | }, | ||
1456 | 72 | 'userprofiles.userprofile': { | ||
1457 | 73 | 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1458 | 74 | 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), | ||
1459 | 75 | 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1460 | 76 | 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1461 | 77 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
1462 | 78 | 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1463 | 79 | 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1464 | 80 | 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1465 | 81 | 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}), | ||
1466 | 82 | 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), | ||
1467 | 83 | 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}), | ||
1468 | 84 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}), | ||
1469 | 85 | 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}) | ||
1470 | 86 | } | ||
1471 | 87 | } | ||
1472 | 88 | |||
1473 | 89 | complete_apps = ['userprofiles'] | ||
1474 | 0 | 90 | ||
1475 | === added file 'loco_directory/userprofiles/migrations/__init__.py' | |||
1476 | === added file 'loco_directory/userprofiles/models.py' | |||
1477 | --- loco_directory/userprofiles/models.py 1970-01-01 00:00:00 +0000 | |||
1478 | +++ loco_directory/userprofiles/models.py 2010-08-26 14:45:53 +0000 | |||
1479 | @@ -0,0 +1,60 @@ | |||
1480 | 1 | from django.db import models | ||
1481 | 2 | from django.utils.translation import ugettext_lazy as _ | ||
1482 | 3 | from django.contrib.auth import models as auth_models | ||
1483 | 4 | # Create your models here. | ||
1484 | 5 | |||
1485 | 6 | class UserProfile(models.Model): | ||
1486 | 7 | " Store profile information about a user " | ||
1487 | 8 | |||
1488 | 9 | user = models.OneToOneField(auth_models.User) | ||
1489 | 10 | realname = models.CharField(_("Real Name"), max_length=150, blank=True) | ||
1490 | 11 | tz = models.CharField(verbose_name=_('Timezone'), max_length=32, default='UTC') | ||
1491 | 12 | |||
1492 | 13 | blog = models.URLField(verbose_name=_('Blog URL'), blank=True, null=True, verify_exists=False) | ||
1493 | 14 | twitter = models.CharField(verbose_name=_('Twitter ID'), max_length=32, blank=True, null=True) | ||
1494 | 15 | identica = models.CharField(verbose_name=_('Identi.ca ID'), max_length=32, blank=True, null=True) | ||
1495 | 16 | picasa = models.CharField(verbose_name=_('Picasa ID'), max_length=32, blank=True, null=True) | ||
1496 | 17 | flickr = models.CharField(verbose_name=_('Flickr ID'), max_length=32, blank=True, null=True) | ||
1497 | 18 | facebook = models.CharField(verbose_name=_('Facebook ID'), max_length=32, blank=True, null=True) | ||
1498 | 19 | irc = models.CharField(verbose_name=_('IRC Nick'), max_length=32, blank=True, null=True) | ||
1499 | 20 | aim = models.CharField(verbose_name=_('AOL IM Nick'), max_length=32, blank=True, null=True) | ||
1500 | 21 | xmpp = models.CharField(verbose_name=_('XMPP IM Nick'), max_length=32, blank=True, null=True) | ||
1501 | 22 | |||
1502 | 23 | def __unicode__(self): | ||
1503 | 24 | try: | ||
1504 | 25 | if self.realname: | ||
1505 | 26 | return "%s (%s)" % (self.user.username, self.realname) | ||
1506 | 27 | return "%s" % self.user.username | ||
1507 | 28 | except: | ||
1508 | 29 | return "Unknown Profile" | ||
1509 | 30 | |||
1510 | 31 | def _getUserProfile(self): | ||
1511 | 32 | if not self.is_authenticated(): | ||
1512 | 33 | return UserProfile() | ||
1513 | 34 | |||
1514 | 35 | profile, created = UserProfile.objects.get_or_create(user=self) | ||
1515 | 36 | |||
1516 | 37 | if created: | ||
1517 | 38 | from common.launchpad import get_user_timezone | ||
1518 | 39 | profile.tz = get_user_timezone(self.username) | ||
1519 | 40 | profile.save() | ||
1520 | 41 | |||
1521 | 42 | return profile | ||
1522 | 43 | |||
1523 | 44 | def _getAnonProfile(self): | ||
1524 | 45 | return UserProfile() | ||
1525 | 46 | |||
1526 | 47 | auth_models.User.profile = property(_getUserProfile) | ||
1527 | 48 | auth_models.AnonymousUser.profile = property(_getAnonProfile) | ||
1528 | 49 | |||
1529 | 50 | def create_profile(username): | ||
1530 | 51 | user, created = auth_models.User.objects.get_or_create(username=username) | ||
1531 | 52 | if created: | ||
1532 | 53 | user.save() | ||
1533 | 54 | profile, created = UserProfile.objects.get_or_create(user=user) | ||
1534 | 55 | if created: | ||
1535 | 56 | # set real name as username for now, | ||
1536 | 57 | # we get the name later on via cronjob | ||
1537 | 58 | profile.realname = username | ||
1538 | 59 | profile.save() | ||
1539 | 60 | return profile |
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. :-)