diff options
Diffstat (limited to 'chimere/views.py')
| -rw-r--r-- | chimere/views.py | 153 |
1 files changed, 80 insertions, 73 deletions
diff --git a/chimere/views.py b/chimere/views.py index e249d56..c6fba50 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -100,60 +100,77 @@ def index(request, area_name=None, default_area=None, simple=False): return render_to_response(tpl, response_dct, context_instance=RequestContext(request)) -def edit(request, area_name="", marker_id=None): +def get_edit_page(redirect_url, item_cls, item_form): """ Edition page """ - response_dct = get_base_response(area_name) + def func(request, area_name="", item_id=None): + response_dct = get_base_response(area_name) + + # if an item_id is provided: modification + init_item, ref_item = None, None + if item_id: + try: + init_item = item_cls.objects.get(pk=item_id) + except: + return redirect(redirect_url, area_name if area_name else ''),\ + None + ref_item = init_item + modified_item = item_cls.objects.filter(ref_item=init_item, + submiter_session_key=request.session.session_key) + if modified_item.count(): + init_item = modified_item.all()[0] + + # If the form has been submited + if request.method == 'POST': + inst = None + # allow to directly modify only if owner or superuser + if init_item and (request.user.is_superuser or \ + init_item.submiter_session_key == \ + request.session.session_key): + inst = init_item + + form = item_form(request.POST, request.FILES, instance=inst) + # All validation rules pass + if form.is_valid(): + item = form.save() + # set the session key (to permit modifications) + item.submiter_session_key = request.session.session_key + + # associate to the reference item + if ref_item: + item.ref_item = ref_item + if item.pk != ref_item.pk: + item.status = 'M' + elif not item.ref_item: + # initialisation + item.ref_item = item + + # just submited + if not item.status: + item.status = 'S' + item.save() + notifySubmission(item) + response_dct = get_base_response(area_name) + return redirect(redirect_url + '-item', + area_name if area_name else '', item.ref_item.pk),\ + None + else: + form = item_form(instance=init_item) + return None, (item_id, init_item, response_dct, form) + return func - # if a marker_id is provided: modification - init_marker, ref_marker = None, None - if marker_id: - try: - init_marker = Marker.objects.get(pk=marker_id) - except: - return redirect('chimere:edit', area_name if area_name else '') - ref_marker = init_marker - modified_marker = Marker.objects.filter(ref_item=init_marker, - submiter_session_key=request.session.session_key) - if modified_marker.count(): - init_marker = modified_marker.all()[0] +get_edit_marker = get_edit_page('chimere:edit', Marker, MarkerForm) + +def edit(request, area_name="", item_id=None): + """ + Edition page + """ + response, values = get_edit_marker(request, area_name, item_id) + if response: + return response + item_id, init_item, response_dct, form = values - # If the form has been submited - if request.method == 'POST': - inst = None - # allow to directly modify only if owner or superuser - if init_marker and (request.user.is_superuser or \ - init_marker.submiter_session_key == \ - request.session.session_key): - inst = init_marker - - form = MarkerForm(request.POST, request.FILES, instance=inst) - # All validation rules pass - if form.is_valid(): - marker = form.save() - # set the session key (to permit modifications) - marker.submiter_session_key = request.session.session_key - - # associate to the reference marker - if ref_marker: - marker.ref_item = ref_marker - if marker.pk != ref_marker.pk: - marker.status = 'M' - elif not marker.ref_item: - # initialisation - marker.ref_item = marker - - # just submited - if not marker.status: - marker.status = 'S' - marker.save() - notifySubmission(marker) - response_dct = get_base_response(area_name) - return redirect('chimere:edit-marker', - area_name if area_name else '', marker.ref_item.pk) - else: - form = MarkerForm(instance=init_marker) # get the "manualy" declared_fields. Ie: properties declared_fields = form.declared_fields.keys() response_dct.update({'actions':actions, @@ -163,11 +180,11 @@ def edit(request, area_name="", marker_id=None): 'form':form, 'dated':settings.CHIMERE_DAYS_BEFORE_EVENT, 'extra_head':form.media, - 'marker_id':marker_id, + 'marker_id':item_id, 'sub_categories':SubCategory.getAvailable(['M', 'B'], area_name), 'point_widget':PointChooserWidget().render('point', - init_marker.point if init_marker else None, + init_item.point if init_item else None, area_name=area_name), 'properties':declared_fields, }) @@ -239,31 +256,21 @@ def processRouteFile(request, area_name='', file_id=None): else: return HttpResponse(status=400) -def editRoute(request, area_name=""): +get_edit_route = get_edit_page('chimere:editroute', Route, RouteForm) + +def editRoute(request, area_name="", item_id=None): """ Route edition page """ - # If the form has been submited - if request.method == 'POST': - form = RouteForm(request.POST, request.FILES) - # All validation rules pass - if form.is_valid(): - route = form.save() - # set the submited status - route.status = 'S' - route.save() - notifySubmission(route) - response_dct = get_base_response(area_name) - return HttpResponseRedirect(response_dct['extra_url'] + \ - 'submited/edit') - else: - # An unbound form - form = RouteForm() + response, values = get_edit_route(request, area_name, item_id) + if response: + return response + item_id, init_item, response_dct, form = values + # get the "manualy" declared_fields. Ie: properties declared_fields = form.declared_fields.keys() - response_dct = get_base_response(area_name) response_dct.update({'actions':actions, - 'action_selected':('contribute', 'edit_route'), + 'action_selected':('contribute', 'edit-route'), 'error_message':'', 'map_layer':settings.CHIMERE_MAP_LAYER, 'form':form, @@ -271,9 +278,9 @@ def editRoute(request, area_name=""): 'extra_head':form.media, 'sub_categories':SubCategory.getAvailable(['R', 'B'], area_name), - 'route_widget':RouteChooserWidget().render('route', None, - area_name=area_name, - routefile_id='',), + 'route_widget':RouteChooserWidget().render('route', + init_item.route if init_item else None, + area_name=area_name, routefile_id='',), 'properties':declared_fields }) # manualy populate the custom widget |
