Commit b2d3a929 authored by Seb's avatar Seb
Browse files

Deleting videos working

parent ead24890
...@@ -13,6 +13,8 @@ from django.core.exceptions import ImproperlyConfigured ...@@ -13,6 +13,8 @@ from django.core.exceptions import ImproperlyConfigured
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import models from django.db import models
from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver
from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from enum import Enum from enum import Enum
...@@ -244,6 +246,13 @@ class Video(AbstractVideo): ...@@ -244,6 +246,13 @@ class Video(AbstractVideo):
) )
# Delete files when model is deleted
@receiver(pre_delete, sender=Video)
def video_delete(sender, instance, **kwargs):
print('Video pre delete received')
instance.file.delete(False)
def get_video_model(): def get_video_model():
from django.conf import settings from django.conf import settings
from django.apps import apps from django.apps import apps
...@@ -290,3 +299,8 @@ class VideoTranscode(AbstractVideoTranscode): ...@@ -290,3 +299,8 @@ class VideoTranscode(AbstractVideoTranscode):
unique_together = ( unique_together = (
('video', 'media_format') ('video', 'media_format')
) )
# Delete files when model is deleted
@receiver(pre_delete, sender=VideoTranscode)
def transcode_delete(sender, instance, **kwargs):
instance.file.delete(False)
{% extends "wagtailadmin/base.html" %} {% extends "wagtailadmin/base.html" %}
{% load wagtailimages_tags %} {% load wagtailvideos_tags %}
{% load i18n %} {% load i18n %}
{% block titletag %}{% trans "Delete image" %}{% endblock %} {% block titletag %}{% trans "Delete image" %}{% endblock %}
...@@ -9,11 +9,11 @@ ...@@ -9,11 +9,11 @@
<div class="row row-flush nice-padding"> <div class="row row-flush nice-padding">
<div class="col6"> <div class="col6">
{% image image max-800x600 %} {% video video controls %}
</div> </div>
<div class="col6"> <div class="col6">
<p>{% trans "Are you sure you want to delete this image?" %}</p> <p>{% trans "Are you sure you want to delete this video?" %}</p>
<form action="{% url 'wagtailimages:delete' image.id %}" method="POST"> <form action="{% url 'wagtailvideos:delete' video.id %}" method="POST">
{% csrf_token %} {% csrf_token %}
<input type="submit" value="{% trans 'Yes, delete' %}" class="serious" /> <input type="submit" value="{% trans 'Yes, delete' %}" class="serious" />
</form> </form>
......
{% extends "wagtailadmin/base.html" %} {% extends "wagtailadmin/base.html" %}
{% load wagtailimages_tags staticfiles i18n wagtailvideos_tags %} {% load staticfiles i18n wagtailvideos_tags %}
{% block titletag %}{% blocktrans with title=video.title %}Editing video {{ title }}{% endblocktrans %}{% endblock %} {% block titletag %}{% blocktrans with title=video.title %}Editing video {{ title }}{% endblocktrans %}{% endblock %}
{% block extra_js %} {% block extra_js %}
...@@ -66,11 +66,6 @@ ...@@ -66,11 +66,6 @@
{% endif %} {% endif %}
</div> </div>
<div class="col2 "> <div class="col2 ">
{% if url_generator_enabled %}
<a href="{% url 'wagtailvideos:url_generator' video.id %}" class="button bicolor icon icon-link">{% trans "URL Generator" %}</a>
<hr />
{% endif %}
<img src='{{video.thumbnail.url}}' /> <img src='{{video.thumbnail.url}}' />
<dl> <dl>
......
...@@ -6,12 +6,8 @@ urlpatterns = [ ...@@ -6,12 +6,8 @@ urlpatterns = [
url(r'^$', videos.index, name='index'), url(r'^$', videos.index, name='index'),
url(r'^(\d+)/$', videos.edit, name='edit'), url(r'^(\d+)/$', videos.edit, name='edit'),
url(r'^(\d+)/delete/$', videos.delete, name='delete'), url(r'^(\d+)/delete/$', videos.delete, name='delete'),
url(r'^(\d+)/generate_url/$', videos.url_generator, name='url_generator'),
url(r'^(\d+)/generate_url/(.*)/$', videos.generate_url, name='generate_url'),
url(r'^(\d+)/create_transcode/$', videos.create_transcode, name='create_transcode'), url(r'^(\d+)/create_transcode/$', videos.create_transcode, name='create_transcode'),
#url(r'^(\d+)/preview/(.*)/$', videos.preview, name='preview'),
url(r'^add/$', videos.add, name='add'), url(r'^add/$', videos.add, name='add'),
url(r'^usage/(\d+)/$', videos.usage, name='video_usage'), url(r'^usage/(\d+)/$', videos.usage, name='video_usage'),
......
...@@ -6,6 +6,7 @@ from django.views.decorators.http import require_POST ...@@ -6,6 +6,7 @@ from django.views.decorators.http import require_POST
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from wagtail.wagtailadmin.utils import PermissionPolicyChecker from wagtail.wagtailadmin.utils import PermissionPolicyChecker
from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtailsearch.backends import get_search_backends
from wagtailvideos.fields import ALLOWED_EXTENSIONS from wagtailvideos.fields import ALLOWED_EXTENSIONS
from wagtailvideos.forms import get_video_form from wagtailvideos.forms import get_video_form
from wagtailvideos.models import get_video_model from wagtailvideos.models import get_video_model
...@@ -62,14 +63,14 @@ def add(request): ...@@ -62,14 +63,14 @@ def add(request):
video.file_size = video.file.size video.file_size = video.file.size
video.save() video.save()
# Success! Send back an edit form for this image to the user # Success! Send back an edit form
return JsonResponse({ return JsonResponse({
'success': True, 'success': True,
'video_id': int(video.id), 'video_id': int(video.id),
'form': render_to_string('wagtailvideos/multiple/edit_form.html', { 'form': render_to_string('wagtailvideos/multiple/edit_form.html', {
'video': video, 'video': video,
'form': get_video_edit_form(Video)( 'form': get_video_edit_form(Video)(
instance=video, prefix='image-%d' % video.id), instance=video, prefix='video-%d' % video.id),
}, request=request), }, request=request),
}) })
else: else:
......
...@@ -8,14 +8,18 @@ from django.views.decorators.vary import vary_on_headers ...@@ -8,14 +8,18 @@ from django.views.decorators.vary import vary_on_headers
from wagtail.utils.pagination import paginate from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin import messages from wagtail.wagtailadmin import messages
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import PermissionPolicyChecker
from wagtail.wagtailcore.models import Collection, Site from wagtail.wagtailcore.models import Collection, Site
from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtailsearch.backends import get_search_backends
from wagtailvideos.forms import (URLGeneratorForm, VideoTranscodeAdminForm, from wagtailvideos.forms import (URLGeneratorForm, VideoTranscodeAdminForm,
get_video_form) get_video_form)
from wagtailvideos.models import get_video_model from wagtailvideos.models import get_video_model
from wagtailvideos.permissions import permission_policy
permission_checker = PermissionPolicyChecker(permission_policy)
@permission_checker.require_any('add', 'change', 'delete')
@vary_on_headers('X-Requested-With') @vary_on_headers('X-Requested-With')
def index(request): def index(request):
Video = get_video_model() Video = get_video_model()
...@@ -66,7 +70,7 @@ def index(request): ...@@ -66,7 +70,7 @@ def index(request):
}) })
return response return response
@permission_checker.require('change')
def edit(request, video_id): def edit(request, video_id):
Video = get_video_model() Video = get_video_model()
VideoForm = get_video_form(Video) VideoForm = get_video_form(Video)
...@@ -103,13 +107,6 @@ def edit(request, video_id): ...@@ -103,13 +107,6 @@ def edit(request, video_id):
else: else:
form = VideoForm(instance=video) form = VideoForm(instance=video)
# Check if we should enable the frontend url generator
try:
reverse('wagtailvideos_serve', args=('foo', '1', 'bar'))
url_generator_enabled = True
except NoReverseMatch:
url_generator_enabled = False
if video.is_stored_locally(): if video.is_stored_locally():
# Give error if image file doesn't exist # Give error if image file doesn't exist
if not os.path.isfile(video.file.path): if not os.path.isfile(video.file.path):
...@@ -122,10 +119,10 @@ def edit(request, video_id): ...@@ -122,10 +119,10 @@ def edit(request, video_id):
return render(request, "wagtailvideos/videos/edit.html", { return render(request, "wagtailvideos/videos/edit.html", {
'video': video, 'video': video,
'form': form, 'form': form,
'url_generator_enabled': url_generator_enabled,
'filesize': video.get_file_size(), 'filesize': video.get_file_size(),
'transcodes': video.transcodes.all(), 'transcodes': video.transcodes.all(),
'transcode_form': VideoTranscodeAdminForm(video=video) 'transcode_form': VideoTranscodeAdminForm(video=video),
'user_can_delete': permission_policy.user_has_permission_for_instance(request.user, 'delete', video)
}) })
...@@ -141,63 +138,20 @@ def create_transcode(request, video_id): ...@@ -141,63 +138,20 @@ def create_transcode(request, video_id):
transcode_form.save() transcode_form.save()
return redirect('wagtailvideos:edit', video_id) return redirect('wagtailvideos:edit', video_id)
@permission_checker.require('delete')
# TODO was dis? def delete(request, video_id):
def url_generator(request, image_id): video = get_object_or_404(get_video_model(), id=video_id)
image = get_object_or_404(get_video_model(), id=image_id)
form = URLGeneratorForm(initial={
'filter_method': 'original',
'width': image.width,
'height': image.height,
})
return render(request, "wagtailvideos/images/url_generator.html", {
'image': image,
'form': form,
})
def generate_url(request, image_id, filter_spec):
# Get the image
Image = get_video_model()
try:
Image.objects.get(id=image_id)
except Image.DoesNotExist:
return JsonResponse({
'error': "Cannot find image."
}, status=404)
# Check if this user has edit permission on this image
# Generate url
url = reverse('wagtailvideos_serve', args=(image_id, filter_spec))
# Get site root url
try:
site_root_url = Site.objects.get(is_default_site=True).root_url
except Site.DoesNotExist:
site_root_url = Site.objects.first().root_url
# Generate preview url
preview_url = reverse('wagtailvideos:preview', args=(image_id, filter_spec))
return JsonResponse({'url': site_root_url + url, 'preview_url': preview_url}, status=200)
def delete(request, image_id):
image = get_object_or_404(get_video_model(), id=image_id)
if request.POST: if request.POST:
image.delete() video.delete()
messages.success(request, _("Image '{0}' deleted.").format(image.title)) messages.success(request, _("Video '{0}' deleted.").format(video.title))
return redirect('wagtailvideos:index') return redirect('wagtailvideos:index')
return render(request, "wagtailvideos/images/confirm_delete.html", { return render(request, "wagtailvideos/videos/confirm_delete.html", {
'image': image, 'video': video,
}) })
@permission_checker.require('add')
def add(request): def add(request):
ImageModel = get_video_model() ImageModel = get_video_model()
ImageForm = get_video_form(ImageModel) ImageForm = get_video_form(ImageModel)
......
...@@ -43,5 +43,5 @@ def editor_js(): ...@@ -43,5 +43,5 @@ def editor_js():
def register_images_menu_item(): def register_images_menu_item():
return MenuItem( return MenuItem(
_('Videos'), urlresolvers.reverse('wagtailvideos:index'), _('Videos'), urlresolvers.reverse('wagtailvideos:index'),
name='videos', classnames='icon icon-video', order=300 name='videos', classnames='icon icon-media', order=300
) )
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment