diff options
-rw-r--r-- | chimere/views.py | 250 |
1 files changed, 140 insertions, 110 deletions
diff --git a/chimere/views.py b/chimere/views.py index 562688d..55775f4 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -56,6 +56,7 @@ from chimere.forms import MarkerForm, RouteForm, ContactForm, FileForm, \ from chimere.route import router + def get_base_uri(request): base_uri = 'http://' if 'HTTP_REFERER' in request.META: @@ -68,14 +69,17 @@ def get_base_uri(request): base_uri += ":" + str(request.META['SERVER_PORT']) return base_uri -#TODO: convert to requestcontext +# TODO: convert to requestcontext + + def get_base_response(request, area_name=""): """ Get the base url """ - base_response_dct = {'media_path':settings.MEDIA_URL,} - base_response_dct['MOBILE'] = settings.MOBILE_TEST or \ - get_current_site(request).domain in settings.MOBILE_DOMAINS + base_response_dct = {'media_path': settings.MEDIA_URL} + base_response_dct['MOBILE'] = \ + settings.MOBILE_TEST or \ + get_current_site(request).domain in settings.MOBILE_DOMAINS base_url = reverse("chimere:index") if not base_url.startswith('/'): base_url = '/' + base_url @@ -104,8 +108,8 @@ def get_base_response(request, area_name=""): base_response_dct['area_name'] = area_name if area and area.external_css: base_response_dct['css_area'] = area.external_css - base_response_dct['dynamic_categories'] = True \ - if area and area.dynamic_categories else False + base_response_dct['dynamic_categories'] = \ + True if area and area.dynamic_categories else False base_response_dct['JQUERY_JS_URLS'] = settings.JQUERY_JS_URLS base_response_dct['JQUERY_CSS_URLS'] = settings.JQUERY_CSS_URLS base_response_dct['PROJECT_NAME'] = settings.PROJECT_NAME @@ -113,6 +117,7 @@ def get_base_response(request, area_name=""): base_response_dct['EXTRA_CSS'] = settings.EXTRA_CSS return base_response_dct, None + def getShareUrl(request, area_name='', network=''): """ Get a share url @@ -120,9 +125,11 @@ def getShareUrl(request, area_name='', network=''): data = getTinyfiedUrl(request, request.GET.urlencode(), area_name) for name, url, img in settings.CHIMERE_SHARE_NETWORKS: if defaultfilters.slugify(name) == network: - return HttpResponse(url % {'text':data['text'], 'url':data['url']}) + return HttpResponse(url % {'text': data['text'], + 'url': data['url']}) return HttpResponse('') + def getShareNetwork(request, area_name='', marker=None): """ Get URLs to share items @@ -130,14 +137,15 @@ def getShareNetwork(request, area_name='', marker=None): parameters = "" if marker: parameters = u'current_feature=%d' % marker.pk - parameters += u"&checked_categories=%s" % "_".join([str(m.id) \ - for m in marker.categories.all()]) + parameters += u"&checked_categories=%s" % "_".join( + [str(m.id) for m in marker.categories.all()]) net_dct = getTinyfiedUrl(request, parameters, area_name) share_networks = [] for network in settings.CHIMERE_SHARE_NETWORKS: share_networks.append((network[0], network[1] % net_dct, network[2])) return share_networks, net_dct + def index(request, area_name=None, default_area=None, simple=False, get_response=False): """ @@ -147,7 +155,7 @@ def index(request, area_name=None, default_area=None, simple=False, # only if user is not came yet today today = datetime.date.today().strftime('%y-%m-%d') news_visible = False - if not 'last_visit' in request.session or \ + if 'last_visit' not in request.session or \ request.session['last_visit'] != today: request.session['last_visit'] = today news_visible = True @@ -157,7 +165,7 @@ def index(request, area_name=None, default_area=None, simple=False, # don't mess with permalink zoomout = True if request.GET and 'lat' in request.GET \ - and 'lon' in request.GET: + and 'lon' in request.GET: zoomout = None if hasattr(settings, 'CHIMERE_ENABLE_ROUTING') and \ settings.CHIMERE_ENABLE_ROUTING: @@ -171,24 +179,24 @@ def index(request, area_name=None, default_area=None, simple=False, except: pass response_dct.update({ - 'actions':actions(response_dct['area_name']), - 'action_selected':('view',), - 'error_message':'', - 'is_map':True, - 'news_visible': news_visible, - 'areas_visible': settings.CHIMERE_DISPLAY_AREAS, - 'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, - 'dynamic_categories':response_dct['dynamic_categories'], - 'zoomout':zoomout, - 'has_default_area':Area.objects.filter(default=True).count(), - 'zoomout':zoomout, - 'has_search':hasattr(settings, 'CHIMERE_SEARCH_ENGINE') and \ - settings.CHIMERE_SEARCH_ENGINE - }) + 'actions': actions(response_dct['area_name']), + 'action_selected': ('view',), + 'error_message': '', + 'is_map': True, + 'news_visible': news_visible, + 'areas_visible': settings.CHIMERE_DISPLAY_AREAS, + 'map_layer': settings.CHIMERE_DEFAULT_MAP_LAYER, + 'dynamic_categories': response_dct['dynamic_categories'], + 'zoomout': zoomout, + 'has_default_area': Area.objects.filter(default=True).count(), + 'zoomout': zoomout, + 'has_search': hasattr(settings, 'CHIMERE_SEARCH_ENGINE') and + settings.CHIMERE_SEARCH_ENGINE + }) if hasattr(settings, 'CONTACT_EMAIL') and settings.CONTACT_EMAIL: response_dct['contact_email'] = settings.CONTACT_EMAIL response_dct['share_networks'], net_dct = \ - getShareNetwork(request, response_dct['area_name']) + getShareNetwork(request, response_dct['area_name']) tpl = 'chimere/main_map.html' response_dct['simple'] = simple if simple: @@ -198,6 +206,7 @@ def index(request, area_name=None, default_area=None, simple=False, return render_to_response(tpl, response_dct, context_instance=RequestContext(request)) + def get_edit_page(redirect_url, item_cls, item_form, multimediafile_formset=MultimediaFileFormSet, picturefile_formset=PictureFileFormSet): @@ -215,19 +224,21 @@ def get_edit_page(redirect_url, item_cls, item_form, listed_subcats = [] if subcategories: for cat, subcats in subcategories: - listed_subcats.append((unicode(cat), - [(subcat.pk, subcat.name) for subcat in subcats])) + listed_subcats.append( + (unicode(cat), + [(subcat.pk, subcat.name) for subcat in subcats])) # 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 \ + return redirect(redirect_url, area_name + '/' if area_name else ''), None, None ref_item = init_item - modified_item = item_cls.objects.filter(ref_item=init_item, - submiter_session_key=request.session.session_key) + 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] response_dct['is_modification'] = True @@ -235,8 +246,8 @@ def get_edit_page(redirect_url, item_cls, item_form, init_multi = init_item.get_init_multi() if init_item else None init_picture = init_item.get_init_picture() if init_item else None if init_item and not request.user.is_superuser and \ - not init_item.submiter_session_key == \ - request.session.session_key: + not init_item.submiter_session_key == \ + request.session.session_key: # hide personal information for k in ('submiter_name', 'submiter_email', 'submiter_comment'): setattr(init_item, k, '') @@ -245,16 +256,19 @@ def get_edit_page(redirect_url, item_cls, item_form, 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): + 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, subcategories=listed_subcats) - formset_multi = multimediafile_formset(request.POST, request.FILES, - initial=init_multi, prefix='multimedia') - formset_picture = picturefile_formset(request.POST, request.FILES, - initial=init_picture, prefix='picture') + formset_multi = multimediafile_formset( + request.POST, request.FILES, initial=init_multi, + prefix='multimedia') + formset_picture = picturefile_formset( + request.POST, request.FILES, initial=init_picture, + prefix='picture') # All validation rules pass if form.is_valid() and formset_multi.is_valid() and \ formset_picture.is_valid(): @@ -269,7 +283,7 @@ def get_edit_page(redirect_url, item_cls, item_form, item.status = 'M' if hasattr(ref_item, 'has_associated_marker'): item.has_associated_marker = \ - ref_item.has_associated_marker + ref_item.has_associated_marker elif not item.ref_item: # initialisation item.ref_item = item @@ -293,24 +307,27 @@ def get_edit_page(redirect_url, item_cls, item_form, base_uri = get_base_uri(request) notifySubmission(base_uri, item) response_dct = get_base_response(request, area_name) - return redirect(redirect_url + '-item', - area_name + '/' if area_name else '', - item.ref_item.pk, 'submited'), None, subcategories + return redirect( + redirect_url + '-item', + area_name + '/' if area_name else '', + item.ref_item.pk, 'submited'), None, subcategories else: - response_dct['error_message'] = _(u"There are missing field(s)" - u" and/or errors in the submited form.") + response_dct['error_message'] = _( + u"There are missing field(s)" + u" and/or errors in the submited form.") else: form = item_form(instance=init_item, subcategories=listed_subcats) formset_multi = multimediafile_formset(initial=init_multi, - prefix='multimedia') + prefix='multimedia') formset_picture = picturefile_formset(initial=init_picture, - prefix='picture') + prefix='picture') return None, (item_id, init_item, response_dct, form, formset_multi, formset_picture), subcategories return func get_edit_marker = get_edit_page('chimere:edit', Marker, MarkerForm) + def edit(request, area_name="", item_id=None, submited=False): """ Edition page @@ -320,12 +337,12 @@ def edit(request, area_name="", item_id=None, submited=False): if response: return response item_id, init_item, response_dct, form, formset_multi, formset_picture = \ - values + values # get the "manualy" declared_fields. Ie: properties declared_fields = form.declared_fields.keys() declared_fields = PropertyModel.objects.filter(available=True).all() - filtered_properties = PropertyModel.objects.filter(available=True, - subcategories__id__isnull=False).all() + filtered_properties = PropertyModel.objects.filter( + available=True, subcategories__id__isnull=False).all() point_value = init_item.point if init_item else None if request.POST and request.POST.get('point'): point_value = request.POST.get('point') @@ -334,18 +351,17 @@ def edit(request, area_name="", item_id=None, submited=False): 'action_selected': ('contribute', 'edit'), 'map_layer': settings.CHIMERE_DEFAULT_MAP_LAYER, 'form': form, - 'formset_multi':formset_multi, - 'formset_picture':formset_picture, - 'dated':settings.CHIMERE_DAYS_BEFORE_EVENT, - 'extra_head':form.media, - 'marker_id':item_id, - 'sub_categories':sub_categories, - 'point_widget':PointChooserWidget().render('point', - point_value, - area_name=response_dct['area_name']), - 'properties':declared_fields, - 'filtered_properties':filtered_properties, - 'submited':submited + 'formset_multi': formset_multi, + 'formset_picture': formset_picture, + 'dated': settings.CHIMERE_DAYS_BEFORE_EVENT, + 'extra_head': form.media, + 'marker_id': item_id, + 'sub_categories': sub_categories, + 'point_widget': PointChooserWidget().render( + 'point', point_value, area_name=response_dct['area_name']), + 'properties': declared_fields, + 'filtered_properties': filtered_properties, + 'submited': submited }) # manualy populate the custom widget if 'subcategory' in form.data and form.data['subcategory']: @@ -353,6 +369,7 @@ def edit(request, area_name="", item_id=None, submited=False): return render_to_response('chimere/edit.html', response_dct, context_instance=RequestContext(request)) + def uploadFile(request, category_id='', area_name=''): response_dct, redir = get_base_response(request, area_name) if redir: @@ -378,17 +395,20 @@ def uploadFile(request, category_id='', area_name=''): routefile.save() if not category_id: response_dct['gpx_id'] = routefile.pk - return render_to_response('chimere/upload_file.html', - response_dct, context_instance=RequestContext(request)) + return render_to_response( + 'chimere/upload_file.html', response_dct, + context_instance=RequestContext(request)) routefile.process() if not routefile.route: - response_dct['errors'] = _(u"Bad file. Please check it with an " - u"external software.") - response_dct.update({'form':form}) - return render_to_response('chimere/upload_file.html', - response_dct, context_instance=RequestContext(request)) - route = Route(name=form.cleaned_data['name'], route=routefile.route, - associated_file=routefile, status='S') + response_dct['errors'] = _( + u"Bad file. Please check it with an external software.") + response_dct.update({'form': form}) + return render_to_response( + 'chimere/upload_file.html', response_dct, + context_instance=RequestContext(request)) + route = Route(name=form.cleaned_data['name'], + route=routefile.route, associated_file=routefile, + status='S') route.save() route.categories.add(category) route.save() @@ -397,10 +417,11 @@ def uploadFile(request, category_id='', area_name=''): else: # An unbound form form = Form() - response_dct.update({'form':form}) + response_dct.update({'form': form}) return render_to_response('chimere/upload_file.html', response_dct, context_instance=RequestContext(request)) + def processRouteFile(request, area_name='', file_id=None): if file_id: try: @@ -409,8 +430,8 @@ def processRouteFile(request, area_name='', file_id=None): route = route_file.route if not route: return HttpResponse(status=500) - return HttpResponse('(' + json.dumps({'wkt':route, - 'file_id':file_id})+')', + return HttpResponse('(' + json.dumps({'wkt': route, + 'file_id': file_id}) + ')', 'application/javascript', status=200) except OSError as e: return HttpResponse(e.strerror, status=500) @@ -419,16 +440,17 @@ def processRouteFile(request, area_name='', file_id=None): get_edit_route = get_edit_page('chimere:editroute', Route, RouteForm) + def editRoute(request, area_name="", item_id=None, submited=False): """ Route edition page """ response, values, sub_categories = get_edit_route(request, area_name, - item_id, ['R', 'B']) + item_id, ['R', 'B']) if response: return response item_id, init_item, response_dct, form, formset_multi, formset_picture = \ - values + values # get the "manualy" declared_fields. Ie: properties declared_fields = form.declared_fields.keys() @@ -438,20 +460,21 @@ def editRoute(request, area_name="", item_id=None, submited=False): if request.POST and request.POST.get('route'): route_value = request.POST.get('route') response_dct.update({ - 'actions':actions(response_dct['area_name']), - 'action_selected':('contribute', 'edit-route'), - 'error_message':'', - 'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER, - 'form':form, - 'formset_multi':formset_multi, - 'formset_picture':formset_picture, - 'dated':settings.CHIMERE_DAYS_BEFORE_EVENT, - 'extra_head':form.media, - 'sub_categories':sub_categories, - 'route_widget':RouteChooserWidget().render('route', route_value, - area_name=response_dct['area_name'], routefile_id='',), - 'properties':declared_fields, - 'submited':submited + 'actions': actions(response_dct['area_name']), + 'action_selected': ('contribute', 'edit-route'), + 'error_message': '', + 'map_layer': settings.CHIMERE_DEFAULT_MAP_LAYER, + 'form': form, + 'formset_multi': formset_multi, + 'formset_picture': formset_picture, + 'dated': settings.CHIMERE_DAYS_BEFORE_EVENT, + 'extra_head': form.media, + 'sub_categories': sub_categories, + 'route_widget': RouteChooserWidget().render( + 'route', route_value, area_name=response_dct['area_name'], + routefile_id='',), + 'properties': declared_fields, + 'submited': submited }) # manualy populate the custom widget if 'subcategory' in form.data and form.data['subcategory']: @@ -459,6 +482,7 @@ def editRoute(request, area_name="", item_id=None, submited=False): return render_to_response('chimere/edit_route.html', response_dct, context_instance=RequestContext(request)) + def submited(request, area_name="", action=""): """ Successful submission page @@ -466,14 +490,15 @@ def submited(request, area_name="", action=""): response_dct, redir = get_base_response(request, area_name) if redir: return redir - dct = {'actions':actions(response_dct['area_name']), - 'action_selected':action,} + dct = {'actions': actions(response_dct['area_name']), + 'action_selected': action} if hasattr(settings, 'CONTACT_EMAIL') and settings.CONTACT_EMAIL: response_dct['contact_email'] = settings.CONTACT_EMAIL response_dct.update(dct) return render_to_response('chimere/submited.html', response_dct, context_instance=RequestContext(request)) + def charte(request, area_name=""): """ Affichage de la charte @@ -481,11 +506,12 @@ def charte(request, area_name=""): response_dct, redir = get_base_response(request, area_name) if redir: return redir - response_dct.update({'actions':actions(response_dct['area_name']), - 'action_selected':('charte',)}) + response_dct.update({'actions': actions(response_dct['area_name']), + 'action_selected': ('charte',)}) return render_to_response('chimere/charte.html', response_dct, context_instance=RequestContext(request)) + def contactus(request, area_name=""): """ Contact page @@ -497,11 +523,12 @@ def contactus(request, area_name=""): form = ContactForm(request.POST) # All validation rules pass if form.is_valid(): - response = notifyStaff(_(u"Comments/request on the map"), - form.cleaned_data['content'], form.cleaned_data['email']) + response = notifyStaff( + _(u"Comments/request on the map"), + form.cleaned_data['content'], form.cleaned_data['email']) if response: - msg = _(u"Thank you for your contribution. It will be taken "\ - u"into account. If you have left your email you may "\ + msg = _(u"Thank you for your contribution. It will be taken " + u"into account. If you have left your email you may " u"be contacted soon for more details.") else: msg = _(u"Temporary error. Renew your message later.") @@ -510,12 +537,13 @@ def contactus(request, area_name=""): response_dct, redir = get_base_response(request, area_name) if redir: return redir - response_dct.update({'actions':actions(response_dct['area_name']), - 'action_selected':('contact',), - 'contact_form':form, 'message':msg}) + response_dct.update({'actions': actions(response_dct['area_name']), + 'action_selected': ('contact',), + 'contact_form': form, 'message': msg}) return render_to_response('chimere/contactus.html', response_dct, context_instance=RequestContext(request)) + def extraPage(request, area_name="", page_id=""): """ Extra dynamic pages @@ -527,15 +555,16 @@ def extraPage(request, area_name="", page_id=""): response_dct, redir = get_base_response(request, area_name) if redir: return redir - response_dct.update({'actions':actions(response_dct['area_name']), - 'action_selected':(page_id,), - 'content':page.content, - 'title':page.title}) + response_dct.update({'actions': actions(response_dct['area_name']), + 'action_selected': (page_id,), + 'content': page.content, + 'title': page.title}) tpl = page.template_path if page.template_path \ - else 'chimere/default_extra_page.html' + else 'chimere/default_extra_page.html' return render_to_response(tpl, response_dct, context_instance=RequestContext(request)) + def getDetail(request, area_name, marker_id): ''' Get the detail for a marker @@ -553,21 +582,22 @@ def getDetail(request, area_name, marker_id): if 'simple' in request.GET and request.GET['simple']: response_dct['simple'] = True response_dct['share_networks'], net_dct = \ - getShareNetwork(request, response_dct['area_name'], marker) + getShareNetwork(request, response_dct['area_name'], marker) response_dct['share_url'] = net_dct['url'] net_dct['to'] = settings.CONTACT_EMAIL if net_dct['to']: net_dct["body"] = _(settings.CHIMERE_MODIF_EMAIL) response_dct['modif_by_email'] = 'mailto:?to=%(to)s&subject='\ - '%(text)s&body=%(body)s%(url)s' % net_dct + '%(text)s&body=%(body)s%(url)s' % net_dct # to be sure there is unique IDs during a browsing response_dct['time_now'] = datetime.datetime.now().strftime('%H%M%S') response_dct['dated'] = settings.CHIMERE_DAYS_BEFORE_EVENT \ - and marker.start_date + and marker.start_date response_dct['routing_enabled'] = settings.CHIMERE_ENABLE_ROUTING return render_to_response('chimere/detail.html', response_dct, context_instance=RequestContext(request)) + def getDescriptionDetail(request, area_name, category_id): ''' Get the description for a category |