combo/combo/apps/maps/manager_views.py

168 lines
5.7 KiB
Python

# combo - content management system
# Copyright (C) 2017 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import Http404
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext_lazy as _
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
from combo.data.models import CellBase, PageSnapshot
from .models import Map
from .models import MapLayer
from .models import MapLayerOptions
from .forms import MapLayerForm, MapLayerOptionsForm
class MapLayerMixin(object):
model = MapLayer
success_url = reverse_lazy('maps-manager-homepage')
class ManagerHomeView(MapLayerMixin, ListView):
template_name = 'maps/manager_home.html'
ordering = ['kind', 'label']
def get_context_data(self, **kwargs):
context = super(ManagerHomeView, self).get_context_data(**kwargs)
context['map_list'] = Map.objects.all()
return context
class LayerAddView(MapLayerMixin, CreateView):
form_class = MapLayerForm
template_name = 'maps/map_layer_form.html'
def get_form_kwargs(self):
kwargs = super(LayerAddView, self).get_form_kwargs()
kwargs['instance'] = self.model(kind=self.kwargs['kind'])
return kwargs
class LayerEditView(MapLayerMixin, UpdateView):
form_class = MapLayerForm
template_name = 'maps/map_layer_form.html'
class LayerDeleteView(MapLayerMixin, DeleteView):
template_name = 'maps/map_layer_confirm_delete.html'
class MapCellAddLayer(CreateView):
form_class = MapLayerOptionsForm
template_name = 'maps/layer_options_form.html'
def dispatch(self, request, *args, **kwargs):
try:
self.cell = CellBase.get_cell(kwargs['cell_reference'], page=kwargs['page_pk'])
except Map.DoesNotExist:
raise Http404
return super(MapCellAddLayer, self).dispatch(request, *args, **kwargs)
def get_form_kwargs(self):
kwargs = super(MapCellAddLayer, self).get_form_kwargs()
kwargs['instance'] = MapLayerOptions(map_cell=self.cell)
kwargs['kind'] = self.kwargs['kind']
return kwargs
def form_valid(self, form):
PageSnapshot.take(
self.cell.page,
request=self.request,
comment=_('added layer "%s" to cell "%s"') % (form.instance.map_layer, self.cell))
return super(MapCellAddLayer, self).form_valid(form)
def get_success_url(self):
return '%s#cell-%s' % (
reverse('combo-manager-page-view', kwargs={'pk': self.kwargs.get('page_pk')}),
self.kwargs['cell_reference'])
map_cell_add_layer = MapCellAddLayer.as_view()
class MapCellEditLayer(UpdateView):
form_class = MapLayerOptionsForm
template_name = 'maps/layer_options_form.html'
def dispatch(self, request, *args, **kwargs):
try:
self.cell = CellBase.get_cell(kwargs['cell_reference'], page=kwargs['page_pk'])
except Map.DoesNotExist:
raise Http404
self.object = get_object_or_404(
MapLayerOptions,
pk=kwargs['layeroptions_pk'],
map_cell=self.cell)
return super(MapCellEditLayer, self).dispatch(request, *args, **kwargs)
def get_object(self, *args, **kwargs):
return self.object
def get_form_kwargs(self):
kwargs = super(MapCellEditLayer, self).get_form_kwargs()
kwargs['kind'] = self.object.map_layer.kind
return kwargs
def form_valid(self, form):
PageSnapshot.take(
self.cell.page,
request=self.request,
comment=_('changed options of layer "%s" in cell "%s"') % (form.instance.map_layer, self.cell))
return super(MapCellEditLayer, self).form_valid(form)
def get_success_url(self):
return '%s#cell-%s' % (
reverse('combo-manager-page-view', kwargs={'pk': self.kwargs.get('page_pk')}),
self.kwargs['cell_reference'])
map_cell_edit_layer = MapCellEditLayer.as_view()
class MapCellDeleteLayer(DeleteView):
template_name = 'combo/generic_confirm_delete.html'
def dispatch(self, request, *args, **kwargs):
try:
self.cell = CellBase.get_cell(kwargs['cell_reference'], page=kwargs['page_pk'])
except Map.DoesNotExist:
raise Http404
self.object = get_object_or_404(
MapLayerOptions,
pk=kwargs['layeroptions_pk'],
map_cell=self.cell)
return super(MapCellDeleteLayer, self).dispatch(request, *args, **kwargs)
def get_object(self, *args, **kwargs):
return self.object
def delete(self, request, *args, **kwargs):
response = super(MapCellDeleteLayer, self).delete(request, *args, **kwargs)
PageSnapshot.take(
self.cell.page,
request=self.request,
comment=_('removed layer "%s" from cell "%s"') % (self.object.map_layer, self.cell))
return response
def get_success_url(self):
return '%s#cell-%s' % (
reverse('combo-manager-page-view', kwargs={'pk': self.kwargs.get('page_pk')}),
self.kwargs['cell_reference'])
map_cell_delete_layer = MapCellDeleteLayer.as_view()