Skip to content

Commit f8b1568

Browse files
committed
Rewrite meeting PUTs to POSTs. For no apparent reason, parts of the
meeting AJAX code is using PUT instead of POST (even if it's not PUT'ing in the literal sense but POST'ing). Theoretical discussions aside, Django has poor support for PUTs turned POSTs so rewriting them removes the need for a couple of hacks, and makes it easier to test. - Legacy-Id: 7067
1 parent 9cab5e8 commit f8b1568

6 files changed

Lines changed: 25 additions & 25 deletions

File tree

ietf/meeting/ajax.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from django.core.urlresolvers import reverse
44
from django.shortcuts import get_object_or_404, redirect
5-
from django.http import HttpResponseRedirect, HttpResponse, QueryDict
5+
from django.http import HttpResponseRedirect, HttpResponse
66

77
from dajaxice.decorators import dajaxice_register
88
from ietf.ietfauth.utils import role_required, has_role, user_is_person
@@ -208,7 +208,7 @@ def timeslot_roomurl(request, num=None, roomid=None):
208208
return HttpResponse(json.dumps(room.json_dict(request.build_absolute_uri('/'))),
209209
content_type="application/json")
210210
# XXX FIXME: timeslot_updroom() doesn't exist
211-
# elif request.method == 'PUT':
211+
# elif request.method == 'POST':
212212
# return timeslot_updroom(request, meeting)
213213
elif request.method == 'DELETE':
214214
return timeslot_delroom(request, meeting, roomid)
@@ -275,7 +275,7 @@ def timeslot_sloturl(request, num=None, slotid=None):
275275
slot = get_object_or_404(meeting.timeslot_set, pk=slotid)
276276
return HttpResponse(json.dumps(slot.json_dict(request.build_absolute_uri('/'))),
277277
content_type="application/json")
278-
elif request.method == 'PUT':
278+
elif request.method == 'POST':
279279
# not yet implemented!
280280
#return timeslot_updslot(request, meeting)
281281
return HttpResponse(status=406)
@@ -317,8 +317,8 @@ def agenda_add(request, meeting):
317317
@role_required('Area Director','Secretariat')
318318
def agenda_update(request, meeting, schedule):
319319
# forms are completely useless for update actions that want to
320-
# accept a subset of values.
321-
update_dict = QueryDict(request.body, encoding=request._encoding)
320+
# accept a subset of values. (huh? just use required=False)
321+
update_dict = request.POST
322322

323323
#debug.log("99 meeting.agenda: %s / %s / %s" %
324324
# (schedule, update_dict, request.body))
@@ -390,7 +390,7 @@ def agenda_infourl(request, num=None, schedule_name=None):
390390
if request.method == 'GET':
391391
return HttpResponse(json.dumps(schedule.json_dict(request.build_absolute_uri('/'))),
392392
content_type="application/json")
393-
elif request.method == 'PUT':
393+
elif request.method == 'POST':
394394
return agenda_update(request, meeting, schedule)
395395
elif request.method == 'DELETE':
396396
return agenda_del(request, meeting, schedule)
@@ -409,7 +409,7 @@ def meeting_get(request, meeting):
409409
@role_required('Secretariat')
410410
def meeting_update(request, meeting):
411411
# at present, only the official agenda can be updated from this interface.
412-
update_dict = QueryDict(request.body, encoding=request._encoding)
412+
update_dict = request.POST
413413

414414
#debug.log("1 meeting.agenda: %s / %s / %s" % (meeting.agenda, update_dict, request.body))
415415
if "agenda" in update_dict:
@@ -433,7 +433,7 @@ def meeting_json(request, num):
433433

434434
if request.method == 'GET':
435435
return meeting_get(request, meeting)
436-
elif request.method == 'PUT':
436+
elif request.method == 'POST':
437437
return meeting_update(request, meeting)
438438
elif request.method == 'POST':
439439
return meeting_update(request, meeting)

ietf/meeting/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ def edit_agenda(request, num=None, schedule_name=None):
282282

283283
##############################################################################
284284
# show the properties associated with an agenda (visible, public)
285-
# this page uses ajax PUT requests to the API
285+
# this page uses ajax POST requests to the API
286286
#
287287
AgendaPropertiesForm = modelform_factory(Schedule, fields=('name','visible', 'public'))
288288

ietf/templates/meeting/properties_edit.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
</td></tr></table>
5353
</div>
5454

55-
<form action="{{schedule.json_url}}" method="PUT">
55+
<form action="{{schedule.json_url}}" method="POST">
5656
<fieldset>
5757
<table>
5858
{{ form.as_table }}

static/js/agenda/agenda_properties_edit.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,21 @@ function toggle_public(event) {
5252
var agenda_url = $(event.target).closest('tr').attr('href');
5353

5454
var new_value = 1;
55-
log("value "+current_value)
55+
log("value "+current_value);
5656
if(current_value == "public") {
57-
new_value = 0
57+
new_value = 0;
5858
}
5959
event.preventDefault();
6060

6161
$.ajax({ "url": agenda_url,
62-
"type": "PUT",
62+
"type": "POST",
6363
"data": { "public" : new_value },
6464
"dataType": "json",
6565
"success": function(result) {
6666
/* result is a json object */
67-
value = result["public"]
68-
log("new value "+value)
69-
$(span_to_replace).html(value)
67+
value = result["public"];
68+
log("new value "+value);
69+
$(span_to_replace).html(value);
7070
}});
7171
}
7272

@@ -76,14 +76,14 @@ function toggle_visible(event) {
7676
var agenda_url = $(event.target).closest('tr').attr('href');
7777

7878
var new_value = 1;
79-
log("value "+current_value)
79+
log("value "+current_value);
8080
if(current_value == "visible") {
81-
new_value = 0
81+
new_value = 0;
8282
}
8383
event.preventDefault();
8484

8585
$.ajax({ "url": agenda_url,
86-
"type": "PUT",
86+
"type": "POST",
8787
"data": { "visible" : new_value },
8888
"dataType": "json",
8989
"success": function(result) {
@@ -131,7 +131,7 @@ function toggle_official(event) {
131131
//log("clicked on "+agenda_url+" sending to "+meeting_url);
132132

133133
$.ajax({ "url": meeting_url,
134-
"type": "PUT",
134+
"type": "POST",
135135
"data": { "agenda" : new_value },
136136
"dataType": "json",
137137
"success": function(result) {
@@ -151,12 +151,12 @@ function save_agenda(form) {
151151

152152
public_flag = form.elements["public"].checked ? true : false;
153153
visible_flag = form.elements["visible"].checked ? true: false;
154-
console.log("PUT to ",agenda_url," with name:", name_str,
154+
console.log("POST to ",agenda_url," with name:", name_str,
155155
"visible:", visible_flag,
156156
"public:", public_flag);
157157

158158
$.ajax({"url": agenda_url,
159-
"type": "PUT",
159+
"type": "POST",
160160
"data": { "public" : public_flag,
161161
"visible": visible_flag,
162162
"name" : name_str,

static/js/agenda/agenda_property_utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ function toggle_public(event) {
5858
event.preventDefault();
5959

6060
$.ajax({ "url": agenda_url,
61-
"type": "PUT",
61+
"type": "POST",
6262
"data": { "public" : new_value },
6363
"dataType": "json",
6464
"success": function(result) {
@@ -82,7 +82,7 @@ function toggle_visible(event) {
8282
event.preventDefault();
8383

8484
$.ajax({ "url": agenda_url,
85-
"type": "PUT",
85+
"type": "POST",
8686
"data": { "visible" : new_value },
8787
"dataType": "json",
8888
"success": function(result) {

static/js/agenda/agendas_edit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ function toggle_official(event) {
9494
log("clicked on "+agenda_url+" sending to "+meeting_url);
9595

9696
$.ajax({ "url": meeting_url,
97-
"type": "PUT",
97+
"type": "POST",
9898
"data": { "agenda" : new_value },
9999
"dataType": "json",
100100
"success": function(result) {

0 commit comments

Comments
 (0)