Merge lp:~cjohnston/summit/add-all-meetings into lp:summit

Proposed by Chris Johnston
Status: Merged
Approved by: Chris Johnston
Approved revision: 544
Merged at revision: 545
Proposed branch: lp:~cjohnston/summit/add-all-meetings
Merge into: lp:summit
Diff against target: 284 lines (+197/-27)
5 files modified
summit/schedule/templates/schedule/actions.html (+27/-27)
summit/schedule/templates/schedule/all_meetings.html (+135/-0)
summit/schedule/tests/reverse_url.py (+6/-0)
summit/schedule/views.py (+24/-0)
summit/urls.py (+5/-0)
To merge this branch: bzr merge lp:~cjohnston/summit/add-all-meetings
Reviewer Review Type Date Requested Status
Joe Talbott Approve
Chris Johnston Needs Resubmitting
Review via email: mp+163042@code.launchpad.net

Commit message

Creates a page that lists all meetings for an event

To post a comment you must log in.
Revision history for this message
Joe Talbott (joetalbott) wrote :

Nothing jumps out at me. Those loops on L240 and L245 could get ugly if you have a lot of tracks and meetings but I don't thing that's the case right now.

I'm not familiar enough with the codebase to really comment on the templates and CSS stuff.

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

I don't see tracks ever getting too much, but adding meetings in maybe. This code is just duplicated from elsewhere in summit, so it may be worthwhile to look at both of them.

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

I'm going to merge it in, it can be fixed and used for the next UDS however we are running short of time now.

Revision history for this message
Tarmac WebDev (tarmac-webdev) wrote :

Attempt to merge into lp:summit failed due to conflicts:

text conflict in summit/schedule/templates/schedule/actions.html

544. By Chris Johnston <email address hidden>

Fixes conflict

Revision history for this message
Chris Johnston (cjohnston) :
review: Needs Resubmitting
Revision history for this message
Joe Talbott (joetalbott) wrote :

Looks good to me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'summit/schedule/templates/schedule/actions.html'
2--- summit/schedule/templates/schedule/actions.html 2013-05-08 20:26:52 +0000
3+++ summit/schedule/templates/schedule/actions.html 2013-05-09 23:52:27 +0000
4@@ -5,28 +5,41 @@
5 <h3>Quick Links</h3>
6 <div>
7 <ul class="list">
8+
9+{% ifequal summit.state "schedule" %}
10+ <li><a href="{% url all_meetings summit.name %}">All meetings</a></li>
11+ {% if summit_organizer %}
12+ <li><a href="/{{ summit.name }}/create_meeting" title="Create Private Meeting">Create a meeting</a></li>
13+ <li><a href="/{{ summit.name }}/review" title="Review Proposed Meetings">Review proposed meetings</a></li>
14+ {% else %}
15+ <li class="propose"><a href="/{{ summit.name }}/propose_meeting">Propose a meeting</a></li>
16+ {% endif %}
17+ {% if attendee %}
18+ <li><a href="{% url summit.schedule.views.created_meetings summit.name attendee.user.username %}">My proposed meetings</a></li>
19+ {% endif %}
20+{% endifequal %}
21
22 {% ifchangeschedule summit attendee %}
23- {% if schedule.date %}
24- <li><a href="/{{ summit.name }}/{{schedule.date|date:'Y-m-d'}}/display?edit">Schedule Meetings</a></li>
25+ {% if schedule.date %}
26+ <li><a href="/{{ summit.name }}/{{schedule.date|date:'Y-m-d'}}/display?edit">Schedule meetings</a></li>
27+ {% else %}
28+ {% if viewdate %}
29+ <li><a href="/{{ summit.name }}/{{viewdate|date:'Y-m-d'}}/display?edit">Schedule meetings</a></li>
30 {% else %}
31- {% if viewdate %}
32- <li><a href="/{{ summit.name }}/{{viewdate|date:'Y-m-d'}}/display?edit">Schedule Meetings</a></li>
33- {% else %}
34- <li><a href="/{{ summit.name }}/{{summit.date_start|date:'Y-m-d'}}/display?edit">Schedule Meetings</a></li>
35- {% endif %}
36+ <li><a href="/{{ summit.name }}/{{summit.date_start|date:'Y-m-d'}}/display?edit">Schedule meetings</a></li>
37 {% endif %}
38+ {% endif %}
39 {% endifchangeschedule %}
40
41 {% ifequal summit.state "sponsor" %}
42- <li><a href="/{{ summit.name }}/sponsorship">Request sponsorship</a></li>
43- {% if perms.sponsor.add_sponsorshipscore %}
44- <li><a href="/{{ summit.name }}/suggestsponsorship">Suggest sponsorship</a></li>
45- {% endif %}
46+ <li><a href="/{{ summit.name }}/sponsorship">Request sponsorship</a></li>
47+ {% if perms.sponsor.add_sponsorshipscore %}
48+ <li><a href="/{{ summit.name }}/suggestsponsorship">Suggest sponsorship</a></li>
49+ {% endif %}
50 {% else %}
51-{% if not user.is_authenticated %}
52- <p><a href="/openid/login?next={{login_next}}">Log in now</a></p>
53-{% endif %}
54+ {% if not user.is_authenticated %}
55+ <p><a href="/openid/login?next={{login_next}}">Log in now</a></p>
56+ {% endif %}
57 {% endifequal %}
58
59 {% ifequal summit.state "review" %}
60@@ -35,19 +48,6 @@
61 {% endif %}
62 {% endifequal %}
63
64-
65-{% ifequal summit.state "schedule" %}
66- {% if summit_organizer %}
67- <li><a href="/{{ summit.name }}/create_meeting" title="Create Private Meeting">Create a meeting</a></li>
68- <li><a href="/{{ summit.name }}/review" title="Review Proposed Meetings">Review proposed meetings</a></li>
69- {% else %}
70- <li class="propose"><a href="/{{ summit.name }}/propose_meeting">Propose a meeting</a></li>
71- {% endif %}
72- {% if attendee %}
73- <li><a href="{% url summit.schedule.views.created_meetings summit.name attendee.user.username %}">My proposed meetings</a></li>
74- {% endif %}
75-{% endifequal %}
76-
77 {% if attendee %}
78 <li><a href="{% url registration summit.name %}">Update registration</a></li>
79 {% endif %}
80
81=== added file 'summit/schedule/templates/schedule/all_meetings.html'
82--- summit/schedule/templates/schedule/all_meetings.html 1970-01-01 00:00:00 +0000
83+++ summit/schedule/templates/schedule/all_meetings.html 2013-05-09 23:52:27 +0000
84@@ -0,0 +1,135 @@
85+{% extends "base.html" %}
86+
87+{% block page_name %}
88+All meetings - {{ summit.title }}
89+{% endblock %}
90+
91+{% block extrahead %}
92+{{ block.super }}
93+<style>
94+TABLE img.icon {
95+ vertical-align: bottom;
96+ width: 16px;
97+ height: 16px;
98+}
99+
100+table.basic span.main-agenda-item-tracks {
101+ font-size: 0.8em;
102+}
103+
104+div.agenda-details {
105+ display: none;
106+ padding: 5px;
107+ position: absolute;
108+ margin-left: 20px;
109+ font-size: 0.9em;
110+ color: #FFFFFF;
111+ background-color: #101010;
112+ border: #000000 1px solid;
113+ border-radius: 5px;
114+ min-width: 200px;
115+ max-width: 500px;
116+ z-index: 100;
117+}
118+
119+div.meeting-description {
120+ white-space: pre-wrap;
121+}
122+
123+div.agenda-details LI {
124+ font-size: 1.0em;
125+}
126+
127+div.schedule-head {
128+ position: relative;
129+ overflow: visible;
130+ z-index: 10;
131+}
132+
133+div.schedule-head .schedule-qrcode {
134+ height: 63px;
135+ vertical-align: top;
136+ margin-left: -3px;
137+ margin-top: -3px;
138+}
139+
140+div.schedule-head .schedule-date {
141+ font-weight: normal;
142+ font-size: 36px;
143+ margin-left: 5px;
144+}
145+
146+div.schedule-head .schedule-crew, .last-updated {
147+ font-size: 0.7pc;
148+}
149+
150+</style>
151+{% endblock %}
152+
153+{% block sub_nav %}
154+{% endblock %}
155+
156+{% block content %}
157+<div class="row">
158+<article class="span-12">
159+
160+{% for track, meetings in schedule.items %}
161+<div class="schedule-head">
162+ <h2>{{ track.title }}</h2>
163+</div>
164+<table class="basic">
165+{% for meeting in meetings %}
166+<tr style="background-color: {{ meeting.track_color }}; {% if meeting.private %}border: 1px; border-style: solid; border-color: #FF0000;{% endif %}">
167+<td width="75%">
168+ <span onMouseOver="show_meeting_details({{meeting.id}});" onMouseOut="hide_meeting_details({{meeting.id}});">
169+ <a href="{{ meeting.meeting_page_url }}" style="color: #000000;" class="main-agenda-item-name">
170+ {{ meeting.title }}
171+ </a>
172+<div id="meeting-{{meeting.id}}-details" class="agenda-details">
173+<div class="arrow"></div>
174+<div class="meeting-description">{{meeting.description}}</div>
175+{% if meeting.participant_set.count %}
176+<br /><b>Participants:</b>
177+<div>{% for participant in meeting.participant_set.all %}
178+ <div>
179+ {% if participant.required %}
180+ <img class="icon" src="/media/img/required.png" title="required" alt="(required)">
181+ {% else %}
182+ <img class="icon" src="/media/img/attending.png" alt="attending">
183+ {% endif %}{{ participant.attendee.user }}</div>
184+{% endfor %}</div>
185+{% endif %}
186+{% if meeting.tracks.count > 0 %}
187+<br /><b>Tracks:</b>
188+<ul>{% for track in meeting.tracks.all %}
189+ <li style="color: #{{track.color}};">{{ track.title }}</li>
190+{% endfor %}</ul>
191+{% endif %}
192+</div>
193+</td>
194+</tr>
195+{% endfor %}
196+</table>
197+{% endfor%}
198+</article>
199+</div>
200+{% block closure %}
201+
202+<script language="JavaScript">
203+
204+function show_meeting_details(meeting_id) {
205+ var elem_id = 'meeting-'+meeting_id+'-details'
206+ var details = document.getElementById(elem_id)
207+ details.style.display='block';
208+}
209+
210+function hide_meeting_details(meeting_id) {
211+ var elem_id = 'meeting-'+meeting_id+'-details'
212+ var details = document.getElementById(elem_id)
213+ details.style.display='none';
214+}
215+
216+</script>
217+{% endblock %}
218+
219+{% endblock %}
220
221=== modified file 'summit/schedule/tests/reverse_url.py'
222--- summit/schedule/tests/reverse_url.py 2013-02-27 03:39:43 +0000
223+++ summit/schedule/tests/reverse_url.py 2013-05-09 23:52:27 +0000
224@@ -218,3 +218,9 @@
225 rev_args = ['uds-test', 'test+user']
226 reverse_url = reverse('summit.schedule.views.user_ical', args=rev_args)
227 self.assertEquals(reverse_url, '/uds-test/participant/test+user.ical')
228+
229+ def test_all_meetings_url(self):
230+ rev_args = ['uds-test']
231+ response = self.client.get(reverse('all_meetings', args=rev_args))
232+ self.assertEquals(response.status_code, 200)
233+ self.assertTemplateUsed(response, 'schedule/all_meetings.html')
234
235=== modified file 'summit/schedule/views.py'
236--- summit/schedule/views.py 2013-04-08 20:50:49 +0000
237+++ summit/schedule/views.py 2013-05-09 23:52:27 +0000
238@@ -924,6 +924,30 @@
239 )
240
241
242+@summit_only_required
243+def all_meetings(request, summit):
244+
245+ schedule = SortedDict()
246+
247+ for track in summit.track_set.all():
248+ if not track in schedule:
249+ schedule[track] = list()
250+
251+ # Add meetings from this slot
252+ for meeting in track.meeting_set.filter(approved='APPROVED'):
253+ schedule[track].append(meeting)
254+
255+ context = {
256+ 'summit': summit,
257+ 'schedule': schedule,
258+ }
259+ return render_to_response(
260+ "schedule/all_meetings.html",
261+ context,
262+ context_instance=RequestContext(request),
263+ )
264+
265+
266 @summit_required
267 def created_meetings(request, summit, attendee, username):
268
269
270=== modified file 'summit/urls.py'
271--- summit/urls.py 2013-04-04 13:05:26 +0000
272+++ summit/urls.py 2013-05-09 23:52:27 +0000
273@@ -77,6 +77,11 @@
274 (r'^(?P<summit_name>[\w-]+)/edit_meeting/(?P<meeting_id>\d+)/(?P<meeting_slug>[%+\.\w-]+)/$',
275 'edit_meeting'),
276 (r'^(?P<summit_name>[\w-]+)/review/$', 'review_pending'),
277+ url(
278+ r'^(?P<summit_name>[\w-]+)/all/$',
279+ 'all_meetings',
280+ name='all_meetings',
281+ ),
282 (r'^(?P<summit_name>[\w-]+)/review_meeting/(?P<meeting_id>\d+)/$',
283 'meeting_review'),
284 (r'^(?P<summit_name>[\w-]+)/attend_meeting/(?P<meeting_id>\d+)/$',

Subscribers

People subscribed via source and target branches