alltracks.insert(0, {'id': 0, 'trackname': 'No track'})
alltrackids = [t['id'] for t in alltracks]
selectedtracks = [int(id) for id in request.GET.getlist('tracks') if int(id) in alltrackids]
+ allstatusids = [id for id,status in STATUS_CHOICES]
+ selectedstatuses = [int(id) for id in request.GET.getlist('statuses') if int(id) in allstatusids]
if selectedtracks:
urltrackfilter = "{0}&".format("&".join(["tracks={0}".format(t) for t in selectedtracks]))
else:
selectedtracks = alltrackids
urltrackfilter = ''
+ if selectedstatuses:
+ urlstatusfilter = "{0}&".format("&".join(["statuses={0}".format(t) for t in selectedstatuses]))
+ else:
+ selectedstatuses = allstatusids
+ urlstatusfilter = ''
+
curs = connection.cursor()
order = ""
# Render the form. Need to do this with a manual query, can't figure
# out the right way to do it with the django ORM.
- curs.execute("SELECT s.id, s.title, s.status, s.lastnotifiedstatus, s.abstract, s.submissionnote, (SELECT string_agg(spk.fullname, ',') FROM confreg_speaker spk INNER JOIN confreg_conferencesession_speaker cs ON cs.speaker_id=spk.id WHERE cs.conferencesession_id=s.id) AS speakers, (SELECT string_agg(spk.fullname || '(' || spk.company || ')', ',') FROM confreg_speaker spk INNER JOIN confreg_conferencesession_speaker cs ON cs.speaker_id=spk.id WHERE cs.conferencesession_id=s.id) AS speakers_full, (SELECT string_agg('####' ||spk.fullname || '\n' || spk.abstract, '\n\n') FROM confreg_speaker spk INNER JOIN confreg_conferencesession_speaker cs ON cs.speaker_id=spk.id WHERE cs.conferencesession_id=s.id) AS speakers_long, u.username, v.vote, v.comment, avg(v.vote) OVER (PARTITION BY s.id)::numeric(3,2) AS avg, trackname FROM (confreg_conferencesession s CROSS JOIN auth_user u) LEFT JOIN confreg_track track ON track.id=s.track_id LEFT JOIN confreg_conferencesessionvote v ON v.session_id=s.id AND v.voter_id=u.id WHERE s.conference_id=%(confid)s AND u.id IN (SELECT user_id FROM confreg_conference_talkvoters tv WHERE tv.conference_id=%(confid)s) AND (COALESCE(s.track_id,0)=ANY(%(tracks)s)) ORDER BY " + order + "s.title,s.id, u.id=%(userid)s DESC, u.username", {
+ curs.execute("SELECT s.id, s.title, s.status, s.lastnotifiedstatus, s.abstract, s.submissionnote, (SELECT string_agg(spk.fullname, ',') FROM confreg_speaker spk INNER JOIN confreg_conferencesession_speaker cs ON cs.speaker_id=spk.id WHERE cs.conferencesession_id=s.id) AS speakers, (SELECT string_agg(spk.fullname || '(' || spk.company || ')', ',') FROM confreg_speaker spk INNER JOIN confreg_conferencesession_speaker cs ON cs.speaker_id=spk.id WHERE cs.conferencesession_id=s.id) AS speakers_full, (SELECT string_agg('####' ||spk.fullname || '\n' || spk.abstract, '\n\n') FROM confreg_speaker spk INNER JOIN confreg_conferencesession_speaker cs ON cs.speaker_id=spk.id WHERE cs.conferencesession_id=s.id) AS speakers_long, u.username, v.vote, v.comment, avg(v.vote) OVER (PARTITION BY s.id)::numeric(3,2) AS avg, trackname FROM (confreg_conferencesession s CROSS JOIN auth_user u) LEFT JOIN confreg_track track ON track.id=s.track_id LEFT JOIN confreg_conferencesessionvote v ON v.session_id=s.id AND v.voter_id=u.id WHERE s.conference_id=%(confid)s AND u.id IN (SELECT user_id FROM confreg_conference_talkvoters tv WHERE tv.conference_id=%(confid)s) AND (COALESCE(s.track_id,0)=ANY(%(tracks)s)) AND status=ANY(%(statuses)s) ORDER BY " + order + "s.title,s.id, u.id=%(userid)s DESC, u.username", {
'confid': conference.id,
'userid': request.user.id,
'tracks': selectedtracks,
+ 'statuses': selectedstatuses,
})
def getusernames(all):
'status_choices': STATUS_CHOICES,
'tracks': alltracks,
'selectedtracks': selectedtracks,
- 'urltrackfilter': urltrackfilter,
+ 'selectedstatuses': selectedstatuses,
+ 'urlfilter': urltrackfilter + urlstatusfilter,
'helplink': 'callforpapers',
})
$('#selectTracks').selectize({
plugins: ['remove_button'],
});
+ $('#selectStatuses').selectize({
+ plugins: ['remove_button'],
+ });
$('#ajaxStatus').hide();
<select id="selectTracks" name="tracks" multiple="multiple" style="inline-block; width=80%;">
{%for t in tracks%}
<option value="{{t.id}}"{%if t.id in selectedtracks%} SELECTED{%endif%}>{{t.trackname}}</option>
+{%endfor%}
+ </select>
+ </div>
+ <div>
+ <select id="selectStatuses" name="statuses" multiple="multiple" style="inline-block; width=80%;">
+{%for sid,s in status_choices %}
+ <option value="{{sid}}"{%if sid in selectedstatuses%} SELECTED{%endif%}>{{s}}</option>
{%endfor%}
</select>
</div>
<table id="votetable" class="table table-bordered table-condensed" style="display:none">
<tr>
- <th class="col-md-6"><a href="?{{urltrackfilter}}sort=session">Session</a> | <a href="?{{urltrackfilter}}sort=speakers">Speakers</a></th>
+ <th class="col-md-6"><a href="?{{urlfilter}}sort=session">Session</a> | <a href="?{{urlfilter}}sort=speakers">Speakers</a></th>
<th>Status</th>
{%for u in users%}
<th>{{u}}</th>
{%endfor%}
- <th><a href="?{{urltrackfilter}}sort=avg">Average</a></th>
+ <th><a href="?{{urlfilter}}sort=avg">Average</a></th>
<th>Comments</th>
</tr>
{%for s in sessionvotes%}