OpenSlides/openslides/mediafile/views.py

97 lines
3.4 KiB
Python
Raw Normal View History

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.mediafile.views
~~~~~~~~~~~~~~~~~~~~~~~~~~
Views for the mediafile app.
:copyright: 20112013 by OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
"""
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
from openslides.utils.template import Tab
from openslides.utils.views import ListView, CreateView, UpdateView, DeleteView
from .models import Mediafile
from .forms import MediafileNormalUserCreateForm, MediafileUpdateForm
class MediafileListView(ListView):
"""View to see a table of all uploaded files."""
model = Mediafile
def has_permission(self, request, *args, **kwargs):
return (request.user.has_perm('mediafile.can_see') or
request.user.has_perm('mediafile.can_upload') or
request.user.has_perm('mediafile.can_manage'))
class MediafileCreateView(CreateView):
"""View to upload a new file
A manager can also set the uploader, else the request user is set as uploader.
"""
model = Mediafile
permission_required = 'mediafile.can_upload'
success_url_name = 'mediafile_list'
def get_form(self, form_class):
form_kwargs = self.get_form_kwargs()
if self.request.method == 'GET':
form_kwargs['initial'].update({'uploader': self.request.user.person_id}) # TODO: Check this.
if not self.request.user.has_perm('mediafile.can_manage'):
# Return our own ModelForm
return MediafileNormalUserCreateForm(**form_kwargs)
else:
# Return a ModelForm created by Django.
return form_class(**form_kwargs)
def manipulate_object(self, *args, **kwargs):
if not self.request.user.has_perm('mediafile.can_manage'):
self.object.uploader = self.request.user
return super(MediafileCreateView, self).manipulate_object(*args, **kwargs)
class MediafileUpdateView(UpdateView):
"""View to edit the entry of an uploaded file."""
model = Mediafile
permission_required = 'mediafile.can_manage'
form_class = MediafileUpdateForm
success_url_name = 'mediafile_list'
def get_form_kwargs(self, *args, **kwargs):
form_kwargs = super(MediafileUpdateView, self).get_form_kwargs(*args, **kwargs)
form_kwargs['initial'].update({'uploader': self.object.uploader.person_id})
return form_kwargs
class MediafileDeleteView(DeleteView):
"""View to delete the entry of an uploaded file and the file itself."""
model = Mediafile
permission_required = 'mediafile.can_manage'
success_url_name = 'mediafile_list'
def case_yes(self, *args, **kwargs):
"""Deletes the file in the filesystem, if user clicks "Yes"."""
self.object.mediafile.delete()
return super(MediafileDeleteView, self).case_yes(*args, **kwargs)
def register_tab(request):
"""Inserts a new Tab to the views for files."""
selected = request.path.startswith('/mediafile/')
return Tab(
title=_('Media'),
app='mediafile', # TODO: Rename this to icon='mediafile' later
stylefile='styles/mediafile.css',
url=reverse('mediafile_list'),
permission=(request.user.has_perm('mediafile.can_see') or
request.user.has_perm('mediafile.can_upload') or
request.user.has_perm('mediafile.can_manage')),
selected=selected)