Esempio n. 1
0
def add(request):
    Video = get_video_model()
    VideoForm = get_video_form(Video)

    if request.POST:
        video = Video(uploaded_by_user=request.user)
        form = VideoForm(request.POST, request.FILES, instance=video, user=request.user)
        if form.is_valid():
            form.save()

            # Reindex the video entry to make sure all tags are indexed
            for backend in get_search_backends():
                backend.add(video)

            messages.success(request, _("Video file '{0}' added.").format(video.title), buttons=[
                messages.button(reverse('wagtail_video:edit', args=(video.id,)), _('Edit'))
            ])
            return redirect('wagtail_video:index')
        else:
            messages.error(request, _("The video file could not be saved due to errors."))
    else:
        video = Video(uploaded_by_user=request.user)
        form = VideoForm(user=request.user, instance=video)

    return render(request, "wagtail_video/video/add.html", {
        'form': form,
    })
Esempio n. 2
0
def usage(request, video_id):
    Video = get_video_model()
    video = get_object_or_404(Video, id=video_id)

    paginator, used_by = paginate(request, video.get_usage())

    return render(request, "wagtail_video/video/usage.html", {
        'video': video,
        'used_by': used_by
    })
Esempio n. 3
0
def video_chosen(request, video_id):
    video = get_object_or_404(get_video_model(), id=video_id)

    return render_modal_workflow(request,
                                 None,
                                 None,
                                 None,
                                 json_data={
                                     'step': 'video_chosen',
                                     'result': get_video_result_data(video)
                                 })
Esempio n. 4
0
def usage(request, video_id):
    Video = get_video_model()
    video = get_object_or_404(Video, id=video_id)


    paginator = Paginator(video.get_usage(), per_page=25)
    used_by = paginator.get_page(request.GET.get('p'))

    return render(request, "wagtail_video/video/usage.html", {
        'video': video,
        'used_by': used_by
    })
def describe_collection_video(collection):
    video_count = get_video_model().objects.filter(
        collection=collection).count()
    if video_count:
        url = reverse('wagtail_video:index') + ('?collection_id=%d' %
                                                collection.id)
        return {
            'count': video_count,
            'count_text': ungettext("%(count)s video file",
                                    "%(count)s video files", video_count) % {
                                        'count': video_count
                                    },
            'url': url,
        }
Esempio n. 6
0
def chooser_upload(request):
    Video = get_video_model()
    VideoForm = get_video_form(Video)

    if request.POST:
        video = Video(uploaded_by_user=request.user)
        form = VideoForm(request.POST,
                         request.FILES,
                         instance=video,
                         user=request.user)
        if form.is_valid():
            form.save()

            # Reindex the video entry to make sure all tags are indexed
            for backend in get_search_backends():
                backend.add(video)

            return render_modal_workflow(request,
                                         None,
                                         None,
                                         None,
                                         json_data={
                                             'step': 'video_chosen',
                                             'result':
                                             get_video_result_data(video)
                                         })
    else:
        video = Video(uploaded_by_user=request.user)
        form = VideoForm(user=request.user, instance=video)

    video_files = Video.objects.order_by('-created_at')
    paginator = Paginator(video_files, per_page=10)
    video_files = paginator.get_page(request.GET.get('p'))

    context = {
        'video_files': video_files,
        'searchform': SearchForm(),
        'is_searching': False,
        'can_add': True,
        'uploadform': form,
        'popular_tags': popular_tags_for_model(Video),
    }

    return render_modal_workflow(request,
                                 'wagtailimages/chooser/chooser.html',
                                 None,
                                 context,
                                 json_data={
                                     'step': 'chooser',
                                 })
Esempio n. 7
0
def delete(request, video_id):
    Video = get_video_model()
    video = get_object_or_404(Video, id=video_id)

    if not permission_policy.user_has_permission_for_instance(request.user, 'delete', video):
        return permission_denied(request)

    if request.POST:
        video.delete()
        messages.success(request, _("Video file '{0}' deleted.").format(video.title))
        return redirect('wagtail_video:index')

    return render(request, "wagtail_video/video/confirm_delete.html", {
        'video': video,
    })
Esempio n. 8
0
 def target_model(self):
     from wagtail_video.models import get_video_model
     return get_video_model()
Esempio n. 9
0
from wagtail.core.permission_policies.collections import CollectionOwnershipPermissionPolicy

from wagtail_video.models import Video, get_video_model

permission_policy = CollectionOwnershipPermissionPolicy(
    get_video_model(), auth_model=Video, owner_field_name='uploaded_by_user')
Esempio n. 10
0
def chooser(request):
    Video = get_video_model()

    video_files = []

    if request.user.has_perm('wagtail_video.add_video'):
        can_add = True
    else:
        can_add = False

    q = None
    is_searching = False
    if 'q' in request.GET or 'p' in request.GET:
        video_files = Video.objects.all()

        collection_id = request.GET.get('collection_id')
        if collection_id:
            video_files = video_files.filter(collection=collection_id)

        searchform = SearchForm(request.GET)
        if searchform.is_valid():
            q = searchform.cleaned_data['q']

            video_files = video_files.search(q)
            is_searching = True
        else:
            video_files = video_files.order_by('-created_at')
            is_searching = False

        # Pagination
        paginator, video_files = paginate(request, video_files, per_page=10)

        return render(
            request, "wagtail_video/chooser/results.html", {
                'video_files': video_files,
                'query_string': q,
                'is_searching': is_searching,
            })
    else:
        searchform = SearchForm()

        collections = Collection.objects.all()
        if len(collections) < 2:
            collections = None

        video_files = Video.objects.order_by('-created_at')
        paginator, video_files = paginate(request, video_files, per_page=10)

    # return render_modal_workflow(request, 'wagtail_video/chooser/chooser.html', None, {
    #     'video_files': video_files,
    #     'searchform': searchform,
    #     'collections': collections,
    #     'is_searching': False,
    # })

    return render_modal_workflow(request,
                                 'wagtail_video/chooser/chooser.html',
                                 None,
                                 template_vars={
                                     'video_files': video_files,
                                     'searchform': searchform,
                                     'is_searching': False,
                                     'can_add': can_add,
                                     'query_string': q,
                                     'popular_tags':
                                     popular_tags_for_model(Video),
                                 },
                                 json_data={
                                     'step': 'chooser',
                                 })
Esempio n. 11
0
 def get_context(self):
     return {
         'total_video': get_video_model().objects.count(),
     }
Esempio n. 12
0
 def __init__(self, **kwargs):
     super(AdminVideoChooser, self).__init__(**kwargs)
     self.video_model = get_video_model()
Esempio n. 13
0
def index(request):
    Video = get_video_model()

    # Get video files (filtered by user permission)
    video = permission_policy.instances_user_has_any_permission_for(
        request.user, ['change', 'delete']
    )

    # Ordering
    if 'ordering' in request.GET and request.GET['ordering'] in ['title', '-created_at']:
        ordering = request.GET['ordering']
    else:
        ordering = '-created_at'
    video = video.order_by(ordering)

    # Filter by collection
    current_collection = None
    collection_id = request.GET.get('collection_id')
    if collection_id:
        # noinspection PyUnresolvedReferences
        try:
            current_collection = Collection.objects.get(id=collection_id)
            video = video.filter(collection=current_collection)
        except (ValueError, Collection.DoesNotExist):
            pass

    # Search
    query_string = None
    if 'q' in request.GET:
        form = SearchForm(request.GET, placeholder=_("Search video files"))
        if form.is_valid():
            query_string = form.cleaned_data['q']
            video = video.search(query_string)
    else:
        form = SearchForm(placeholder=_("Search video"))

    # Pagination
    paginator = Paginator(video, per_page=25)
    video = paginator.get_page(request.GET.get('p'))

    collections = permission_policy.collections_user_has_any_permission_for(
        request.user, ['add', 'change']
    )
    if len(collections) < 2:
        collections = None

    # Create response
    if request.is_ajax():
        return render(request, 'wagtail_video/video/results.html', {
            'ordering': ordering,
            'video_files': video,
            'query_string': query_string,
            'is_searching': bool(query_string),
        })
    else:
        return render(request, 'wagtail_video/video/index.html', {
            'ordering': ordering,
            'video_files': video,
            'query_string': query_string,
            'is_searching': bool(query_string),

            'search_form': form,
            'popular_tags': popular_tags_for_model(Video),
            'user_can_add': permission_policy.user_has_permission(request.user, 'add'),
            'collections': collections,
            'current_collection': current_collection,
        })
Esempio n. 14
0
def edit(request, video_id):
    Video = get_video_model()
    VideoForm = get_video_form(Video)

    video = get_object_or_404(Video, id=video_id)

    if not permission_policy.user_has_permission_for_instance(request.user, 'change', video):
        return permission_denied(request)

    if request.POST:
        original_file = video.mp4
        form = VideoForm(request.POST, request.FILES, instance=video, user=request.user)
        if form.is_valid():
            if 'file' in form.changed_data:
                # if providing a new video file, delete the old one.
                # NB Doing this via original_file.delete() clears the file field,
                # which definitely isn't what we want...
                original_file.storage.delete(original_file.name)
            video = form.save()

            # Reindex the video entry to make sure all tags are indexed
            for backend in get_search_backends():
                backend.add(video)

            messages.success(request, _("Video file '{0}' updated").format(video.title), buttons=[
                messages.button(reverse('wagtail_video:edit', args=(video.id,)), _('Edit'))
            ])
            return redirect('wagtail_video:index')
        else:
            messages.error(request, _("The video could not be saved due to errors."))
    else:
        form = VideoForm(instance=video, user=request.user)

    filesize = None

    # Get file size when there is a file associated with the Video object
    if video.mp4:
        try:
            filesize = video.mp4.size
        except OSError:
            # File doesn't exist
            pass

    if video.ogg:
        try:
            filesize = video.ogg.size
        except OSError:
            # File doesn't exist
            pass

    if video.webm:
        try:
            filesize = video.webm.size
        except OSError:
            # File doesn't exist
            pass

    if not filesize:
        messages.error(
            request,
            _("The file could not be found. Please change the source or delete the video file"),
            buttons=[messages.button(reverse('wagtail_video:delete', args=(video.id,)), _('Delete'))]
        )

    return render(request, "wagtail_video/video/edit.html", {
        'video': video,
        'filesize': filesize,
        'form': form,
        'user_can_delete': permission_policy.user_has_permission_for_instance(
            request.user, 'delete', video
        ),
    })