#!/usr/bin/env python # -*- coding: utf-8 -*- from django.views import View from django.views.generic.edit import CreateView from django.contrib.messages.views import SuccessMessageMixin from django.contrib import messages from django.urls import reverse_lazy, reverse from django.shortcuts import render, redirect, get_object_or_404 from django.http import HttpResponseForbidden from django.utils.translation import gettext as _ from lostplaces.forms import SignupVoucherForm, TagSubmitForm from lostplaces.models import Place, PhotoAlbum from lostplaces.views.base_views import IsAuthenticatedMixin from lostplaces.common import redirect_referer_or from lostplaces.views.base_views import ( PlaceAssetCreateView, PlaceAssetDeleteView, ) from taggit.models import Tag class SignUpView(SuccessMessageMixin, CreateView): form_class = SignupVoucherForm success_url = reverse_lazy('login') template_name = 'signup.html' success_message = _('User created') class HomeView(IsAuthenticatedMixin, View): def get(self, request, *args, **kwargs): place_list = request.user.explorer.get_places_eligible_to_see() context = { 'place_list': place_list, 'mapping_config': { 'all_points': place_list, 'map_center': Place.average_latlon(place_list) } } return render(request, 'home.html', context) def handle_no_permission(self): place_list = Place.objects.filter(level=1)[:5] context = { 'place_list': place_list } return render(self.request, 'home_unauth.html', context) class PhotoAlbumCreateView(PlaceAssetCreateView): model = PhotoAlbum fields = ['url', 'label'] template_name = 'photo_album/photo_album_create.html' success_message = _('Photo album link submitted') class PhotoAlbumDeleteView(PlaceAssetDeleteView): model = PhotoAlbum pk_url_kwarg = 'pk' success_message = _('Photo album link deleted') permission_denied_messsage = _('You are not allowed to edit this photo album link') class PlaceTagSubmitView(IsAuthenticatedMixin, View): def post(self, request, tagged_id, *args, **kwargs): place = get_object_or_404(Place, pk=tagged_id) form = TagSubmitForm(request.POST) if form.is_valid(): tag_list_raw = form.cleaned_data['tag_list'] tag_list_raw = tag_list_raw.strip().split(',') tag_list = [] for tag in tag_list_raw: tag_list.append(tag.strip()) place.tags.add(*tag_list) place.save() return redirect(reverse_lazy('place_detail', kwargs={'pk': place.id})) class PlaceTagDeleteView(IsAuthenticatedMixin, View): def get(self, request, tagged_id, tag_id, *args, **kwargs): place = get_object_or_404(Place, pk=tagged_id) tag = get_object_or_404(Tag, pk=tag_id) place.tags.remove(tag) return redirect_referer_or(request, reverse('place_detail', kwargs={'pk': tagged_id})) def FlatView(request, slug): if request.LANGUAGE_CODE == 'de': return render(request, 'flat/' + slug + '-de' + '.html') else: return render(request, 'flat/' + slug + '.html') class OSMMapView(IsAuthenticatedMixin, View): def get(self, request): place_list = Place.objects.all() context = { 'mapping_config': { 'all_points': place_list, 'map_center': Place.average_latlon(place_list) } } return render(request, 'osm_map_full.html', context)