summaryrefslogtreecommitdiff
path: root/chimere/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/views.py')
-rw-r--r--chimere/views.py153
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