Merge lp:~cjohnston/summit/462832 into lp:summit

Proposed by Chris Johnston
Status: Merged
Approved by: Michael Hall
Approved revision: 296
Merged at revision: 301
Proposed branch: lp:~cjohnston/summit/462832
Merge into: lp:summit
Diff against target: 251 lines (+210/-2)
4 files modified
summit/schedule/admin/roomadmin.py (+1/-1)
summit/schedule/migrations/0017_add_irc_chan_room.py (+204/-0)
summit/schedule/models/roommodel.py (+2/-1)
summit/schedule/templates/schedule/daily.html (+3/-0)
To merge this branch: bzr merge lp:~cjohnston/summit/462832
Reviewer Review Type Date Requested Status
Michael Hall (community) Approve
Review via email: mp+91693@code.launchpad.net

Commit message

Adds IRC Channel field to roommodel, adds chat icon to agenda page when there is an IRC Channel defined.

To post a comment you must log in.
Revision history for this message
Michael Hall (mhall119) wrote :

Look good. Do we have links to the IRC channel anywhere in the current summit?

review: Approve
Revision history for this message
Chris Johnston (cjohnston) wrote :

Not that I'm aware of.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'summit/media/img/chat.png'
0Binary files summit/media/img/chat.png 1970-01-01 00:00:00 +0000 and summit/media/img/chat.png 2012-02-06 18:29:24 +0000 differ0Binary files summit/media/img/chat.png 1970-01-01 00:00:00 +0000 and summit/media/img/chat.png 2012-02-06 18:29:24 +0000 differ
=== modified file 'summit/schedule/admin/roomadmin.py'
--- summit/schedule/admin/roomadmin.py 2012-01-23 01:18:55 +0000
+++ summit/schedule/admin/roomadmin.py 2012-02-06 18:29:24 +0000
@@ -37,7 +37,7 @@
37 fieldsets = (37 fieldsets = (
38 (None, {38 (None, {
39 'fields': ('summit', 'name', 'title', 'type', 'size', 'tracks',39 'fields': ('summit', 'name', 'title', 'type', 'size', 'tracks',
40 'icecast_url', 'has_dial_in'),40 'icecast_url', 'irc_channel', 'has_dial_in'),
41 }),41 }),
42 ("Availability", {42 ("Availability", {
43 'fields': ('start_utc', 'end_utc'),43 'fields': ('start_utc', 'end_utc'),
4444
=== added file 'summit/schedule/migrations/0017_add_irc_chan_room.py'
--- summit/schedule/migrations/0017_add_irc_chan_room.py 1970-01-01 00:00:00 +0000
+++ summit/schedule/migrations/0017_add_irc_chan_room.py 2012-02-06 18:29:24 +0000
@@ -0,0 +1,204 @@
1# encoding: utf-8
2import datetime
3from south.db import db
4from south.v2 import SchemaMigration
5from django.db import models
6
7class Migration(SchemaMigration):
8
9 def forwards(self, orm):
10
11 # Adding field 'Room.irc_channel'
12 db.add_column('schedule_room', 'irc_channel', self.gf('django.db.models.fields.CharField')(default='', max_length=50, blank=True), keep_default=False)
13
14
15 def backwards(self, orm):
16
17 # Deleting field 'Room.irc_channel'
18 db.delete_column('schedule_room', 'irc_channel')
19
20
21 models = {
22 'auth.group': {
23 'Meta': {'object_name': 'Group'},
24 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
25 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
26 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
27 },
28 'auth.permission': {
29 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
30 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
31 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
32 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
33 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
34 },
35 'auth.user': {
36 'Meta': {'ordering': "['username']", 'object_name': 'User'},
37 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
38 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
39 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
40 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
41 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
42 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
43 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
44 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
46 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
47 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
48 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
49 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
50 },
51 'contenttypes.contenttype': {
52 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
53 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
54 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
55 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
56 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
57 },
58 'schedule.agenda': {
59 'Meta': {'ordering': "('slot', 'room')", 'unique_together': "(('slot', 'room'),)", 'object_name': 'Agenda'},
60 'auto': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
61 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
62 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}),
63 'room': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Room']"}),
64 'slot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Slot']"})
65 },
66 'schedule.attendee': {
67 'Meta': {'ordering': "('user__username', 'summit')", 'object_name': 'Attendee'},
68 'crew': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_column': "'crew'"}),
69 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
70 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
71 'secret_key_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
72 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}),
73 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
74 'topics': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Topic']", 'symmetrical': 'False', 'blank': 'True'}),
75 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}),
76 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
77 },
78 'schedule.attendeebusy': {
79 'Meta': {'ordering': "('attendee', 'start_utc', 'end_utc')", 'object_name': 'AttendeeBusy'},
80 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Attendee']"}),
81 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
82 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
83 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"})
84 },
85 'schedule.crew': {
86 'Meta': {'ordering': "('date_utc', 'attendee')", 'object_name': 'Crew'},
87 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'crew_schedule'", 'to': "orm['schedule.Attendee']"}),
88 'date_utc': ('django.db.models.fields.DateField', [], {'db_column': "'date'"}),
89 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
90 },
91 'schedule.lead': {
92 'Meta': {'ordering': "('summit', 'track')", 'object_name': 'Lead'},
93 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
94 'lead': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'lead'", 'to': "orm['schedule.Attendee']"}),
95 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
96 'track': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Track']"})
97 },
98 'schedule.meeting': {
99 'Meta': {'object_name': 'Meeting'},
100 'approver': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'approver_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
101 'assignee': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'assignee_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
102 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}),
103 'drafter': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'drafter_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
104 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
105 'name': ('summit.schedule.fields.NameField', [], {'max_length': '100'}),
106 'pad_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
107 'participants': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Attendee']", 'symmetrical': 'False', 'through': "orm['schedule.Participant']", 'blank': 'True'}),
108 'priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
109 'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
110 'private_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
111 'requires_dial_in': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
112 'scribe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'scribe_set'", 'null': 'True', 'to': "orm['schedule.Attendee']"}),
113 'slots': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
114 'spec_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
115 'status': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
116 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
117 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
118 'topics': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Topic']", 'symmetrical': 'False', 'blank': 'True'}),
119 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}),
120 'type': ('django.db.models.fields.CharField', [], {'default': "u'blueprint'", 'max_length': '15'}),
121 'video': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
122 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
123 },
124 'schedule.participant': {
125 'Meta': {'ordering': "('meeting', 'attendee', 'required')", 'object_name': 'Participant'},
126 'attendee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Attendee']"}),
127 'from_launchpad': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
128 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Meeting']"}),
130 'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
131 },
132 'schedule.room': {
133 'Meta': {'ordering': "('summit', 'name')", 'object_name': 'Room'},
134 'end_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'end'", 'blank': 'True'}),
135 'has_dial_in': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
136 'icecast_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
137 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
138 'irc_channel': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
139 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}),
140 'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
141 'start_utc': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_column': "'start'", 'blank': 'True'}),
142 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
143 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
144 'tracks': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['schedule.Track']", 'symmetrical': 'False', 'blank': 'True'}),
145 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'})
146 },
147 'schedule.roombusy': {
148 'Meta': {'ordering': "('room', 'start_utc', 'end_utc')", 'object_name': 'RoomBusy'},
149 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
150 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
151 'room': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'busy_set'", 'to': "orm['schedule.Room']"}),
152 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"})
153 },
154 'schedule.slot': {
155 'Meta': {'ordering': "('summit', 'start_utc', 'end_utc')", 'object_name': 'Slot'},
156 'end_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'end'"}),
157 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158 'start_utc': ('django.db.models.fields.DateTimeField', [], {'db_column': "'start'"}),
159 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
160 'type': ('django.db.models.fields.CharField', [], {'default': "u'open'", 'max_length': '7'})
161 },
162 'schedule.summit': {
163 'Meta': {'ordering': "('name',)", 'object_name': 'Summit'},
164 'date_end': ('django.db.models.fields.DateField', [], {'null': 'True'}),
165 'date_start': ('django.db.models.fields.DateField', [], {'null': 'True'}),
166 'description': ('django.db.models.fields.TextField', [], {'max_length': '2047', 'blank': 'True'}),
167 'etherpad': ('django.db.models.fields.URLField', [], {'default': "'http://pad.ubuntu.com/'", 'max_length': '75'}),
168 'hashtag': ('django.db.models.fields.CharField', [], {'max_length': '25', 'blank': 'True'}),
169 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
170 'last_update': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
171 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
172 'managers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'managers'", 'blank': 'True', 'to': "orm['auth.User']"}),
173 'name': ('summit.schedule.fields.NameField', [], {'max_length': '50'}),
174 'qr': ('django.db.models.fields.URLField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}),
175 'schedulers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'schedulers'", 'blank': 'True', 'to': "orm['auth.User']"}),
176 'state': ('django.db.models.fields.CharField', [], {'default': "u'sponsor'", 'max_length': '10'}),
177 'timezone': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
178 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
179 },
180 'schedule.summitsprint': {
181 'Meta': {'ordering': "('summit', 'import_url')", 'object_name': 'SummitSprint'},
182 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
183 'import_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
184 'summit': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sprint_set'", 'to': "orm['schedule.Summit']"})
185 },
186 'schedule.topic': {
187 'Meta': {'ordering': "('summit', 'title')", 'object_name': 'Topic'},
188 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
189 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
190 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
191 },
192 'schedule.track': {
193 'Meta': {'ordering': "('summit', 'title', 'slug')", 'object_name': 'Track'},
194 'allow_adjacent_sessions': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
195 'color': ('django.db.models.fields.CharField', [], {'default': "'FFFFFF'", 'max_length': '6'}),
196 'description': ('django.db.models.fields.TextField', [], {'max_length': '1000', 'null': 'True'}),
197 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
198 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
199 'summit': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Summit']"}),
200 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
201 }
202 }
203
204 complete_apps = ['schedule']
0205
=== modified file 'summit/schedule/models/roommodel.py'
--- summit/schedule/models/roommodel.py 2012-01-23 01:18:55 +0000
+++ summit/schedule/models/roommodel.py 2012-02-06 18:29:24 +0000
@@ -51,7 +51,8 @@
51 verbose_name="End (UTC)")51 verbose_name="End (UTC)")
52 icecast_url = models.URLField(blank=True, verify_exists=False,52 icecast_url = models.URLField(blank=True, verify_exists=False,
53 verbose_name="Icecast URL")53 verbose_name="Icecast URL")
5454 irc_channel = models.CharField(max_length=50, verbose_name="IRC Channel", blank=True, help_text="Please enter the IRC channel without the #")
55
55 # Whether the room has dial-in capability56 # Whether the room has dial-in capability
56 has_dial_in = models.BooleanField(default=False)57 has_dial_in = models.BooleanField(default=False)
5758
5859
=== modified file 'summit/schedule/templates/schedule/daily.html'
--- summit/schedule/templates/schedule/daily.html 2012-02-02 16:40:27 +0000
+++ summit/schedule/templates/schedule/daily.html 2012-02-06 18:29:24 +0000
@@ -231,6 +231,9 @@
231 {% if agenda.room.icecast_url %}231 {% if agenda.room.icecast_url %}
232 <a href="{{agenda.room.icecast_url}}"><img class="icon" src="/media/img/audio.png" title="Audio Feed", alt="(Audio Feed)"></a>232 <a href="{{agenda.room.icecast_url}}"><img class="icon" src="/media/img/audio.png" title="Audio Feed", alt="(Audio Feed)"></a>
233 {% endif %}233 {% endif %}
234 {% if agenda.room.irc_channel %}
235 <a href="irc://irc.freenode.net:6667/#{{agenda.room.irc_channel}}"><img class="icon" src="/media/img/chat.png" title="IRC Channel" alt="(IRC Channel)" /></a>
236 {% endif %}
234</td>237</td>
235</tr>238</tr>
236{% endfor %} 239{% endfor %}

Subscribers

People subscribed via source and target branches