def media_chosen(request, media_id): media = get_object_or_404(get_media_model(), id=media_id) return render_modal_workflow( request, None, 'wagtailmedia/chooser/media_chosen.js', {'media_json': get_media_json(media)} )
def add(request, media_type): Media = get_media_model() MediaForm = get_media_form(Media) if request.POST: media = Media(uploaded_by_user=request.user, type=media_type) form = MediaForm(request.POST, request.FILES, instance=media, user=request.user) if form.is_valid(): form.save() # Reindex the media entry to make sure all tags are indexed for backend in get_search_backends(): backend.add(media) messages.success(request, _("Media file '{0}' added.").format(media.title), buttons=[ messages.button(reverse('wagtailmedia:edit', args=(media.id,)), _('Edit')) ]) return redirect('wagtailmedia:index') else: messages.error(request, _("The media file could not be saved due to errors.")) else: media = Media(uploaded_by_user=request.user, type=media_type) form = MediaForm(user=request.user, instance=media) return render(request, "wagtailmedia/media/add.html", { 'form': form, 'media_type': media_type, })
def edit(request, media_id): Media = get_media_model() MediaForm = get_media_form(Media) media = get_object_or_404(Media, id=media_id) if not permission_policy.user_has_permission_for_instance(request.user, 'change', media): return permission_denied(request) if request.POST: original_file = media.file form = MediaForm(request.POST, request.FILES, instance=media, user=request.user) if form.is_valid(): if 'file' in form.changed_data: # if providing a new media 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) media = form.save() # Reindex the media entry to make sure all tags are indexed for backend in get_search_backends(): backend.add(media) messages.success(request, _("Media file '{0}' updated").format(media.title), buttons=[ messages.button(reverse('wagtailmedia:edit', args=(media.id,)), _('Edit')) ]) return redirect('wagtailmedia:index') else: messages.error(request, _("The media could not be saved due to errors.")) else: form = MediaForm(instance=media, user=request.user) filesize = None # Get file size when there is a file associated with the Media object if media.file: try: filesize = media.file.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 media file"), buttons=[messages.button(reverse('wagtailmedia:delete', args=(media.id,)), _('Delete'))] ) return render(request, "wagtailmedia/media/edit.html", { 'media': media, 'filesize': filesize, 'form': form, 'user_can_delete': permission_policy.user_has_permission_for_instance( request.user, 'delete', media ), })
def usage(request, media_id): Media = get_media_model() media = get_object_or_404(Media, id=media_id) paginator, used_by = paginate(request, media.get_usage()) return render(request, "wagtailmedia/media/usage.html", { 'media': media, 'used_by': used_by })
def describe_collection_media(collection): media_count = get_media_model().objects.filter(collection=collection).count() if media_count: url = reverse('wagtailmedia:index') + ('?collection_id=%d' % collection.id) return { 'count': media_count, 'count_text': ungettext( "%(count)s media file", "%(count)s media files", media_count ) % {'count': media_count}, 'url': url, }
def delete(request, media_id): Media = get_media_model() media = get_object_or_404(Media, id=media_id) if not permission_policy.user_has_permission_for_instance(request.user, 'delete', media): return permission_denied(request) if request.POST: media.delete() messages.success(request, _("Media file '{0}' deleted.").format(media.title)) return redirect('wagtailmedia:index') return render(request, "wagtailmedia/media/confirm_delete.html", { 'media': media, })
def chooser(request): Media = get_media_model() media_files = [] q = None is_searching = False if 'q' in request.GET or 'p' in request.GET or 'collection_id' in request.GET: media_files = Media.objects.all() collection_id = request.GET.get('collection_id') if collection_id: media_files = media_files.filter(collection=collection_id) searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data['q'] media_files = media_files.search(q) is_searching = True else: media_files = media_files.order_by('-created_at') is_searching = False # Pagination paginator, media_files = paginate(request, media_files, per_page=10) return render(request, "wagtailmedia/chooser/results.html", { 'media_files': media_files, 'query_string': q, 'is_searching': is_searching, }) else: searchform = SearchForm() collections = Collection.objects.all() if len(collections) < 2: collections = None media_files = Media.objects.order_by('-created_at') paginator, media_files = paginate(request, media_files, per_page=10) return render_modal_workflow(request, 'wagtailmedia/chooser/chooser.html', 'wagtailmedia/chooser/chooser.js', { 'media_files': media_files, 'searchform': searchform, 'collections': collections, 'is_searching': False, })
def get_context(self): return { 'total_media': get_media_model().objects.count(), }
def chooser(request): media_files = permission_policy.instances_user_has_any_permission_for( request.user, ["change", "delete"]) # allow hooks to modify the queryset for hook in hooks.get_hooks("construct_media_chooser_queryset"): media_files = hook(media_files, request) if permission_policy.user_has_permission(request.user, "add"): Media = get_media_model() MediaForm = get_media_form(Media) uploadform = MediaForm(user=request.user, prefix="media-chooser-upload") else: uploadform = None q = None is_searching = False if "q" in request.GET or "p" in request.GET or "collection_id" in request.GET: collection_id = request.GET.get("collection_id") if collection_id: media_files = media_files.filter(collection=collection_id) searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data["q"] media_files = media_files.search(q) is_searching = True else: media_files = media_files.order_by("-created_at") is_searching = False # Pagination paginator, media_files = paginate(request, media_files, per_page=10) return render( request, "wagtailmedia/chooser/results.html", { "media_files": media_files, "query_string": q, "is_searching": is_searching, "pagination_template": pagination_template, }, ) else: searchform = SearchForm() collections = Collection.objects.all() if len(collections) < 2: collections = None media_files = media_files.order_by("-created_at") paginator, media_files = paginate(request, media_files, per_page=10) return render_modal_workflow( request, "wagtailmedia/chooser/chooser.html", None, { "media_files": media_files, "searchform": searchform, "collections": collections, "uploadform": uploadform, "is_searching": False, "pagination_template": pagination_template, }, json_data={ "step": "chooser", "error_label": "Server Error", "error_message": "Report this error to your webmaster with the following information:", "tag_autocomplete_url": reverse("wagtailadmin_tag_autocomplete"), }, )
try: from wagtail.core.permission_policies.collections import ( CollectionOwnershipPermissionPolicy ) except ImportError: from wagtail.wagtailcore.permission_policies.collections import ( CollectionOwnershipPermissionPolicy ) from wagtailmedia.models import Media, get_media_model permission_policy = CollectionOwnershipPermissionPolicy( get_media_model(), auth_model=Media, owner_field_name='uploaded_by_user' )
def index(request): Media = get_media_model() # Get media files (filtered by user permission) media = 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' media = media.order_by(ordering) # Filter by collection current_collection = None collection_id = request.GET.get('collection_id') if collection_id: try: current_collection = Collection.objects.get(id=collection_id) media = media.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search media files")) if form.is_valid(): query_string = form.cleaned_data['q'] media = media.search(query_string) else: form = SearchForm(placeholder=_("Search media")) # Pagination paginator, media = paginate(request, media) 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, 'wagtailmedia/media/results.html', { 'ordering': ordering, 'media_files': media, 'query_string': query_string, 'is_searching': bool(query_string), }) else: return render( request, 'wagtailmedia/media/index.html', { 'ordering': ordering, 'media_files': media, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Media), 'user_can_add': permission_policy.user_has_permission(request.user, 'add'), 'collections': collections, 'current_collection': current_collection, })
def edit(request, media_id): Media = get_media_model() MediaForm = get_media_form(Media) media = get_object_or_404(Media, id=media_id) if not permission_policy.user_has_permission_for_instance( request.user, 'change', media): return permission_denied(request) if request.POST: original_file = media.file form = MediaForm(request.POST, request.FILES, instance=media, user=request.user) if form.is_valid(): if 'file' in form.changed_data: # if providing a new media 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) media = form.save() # Reindex the media entry to make sure all tags are indexed for backend in get_search_backends(): backend.add(media) messages.success(request, _("Media file '{0}' updated").format(media.title), buttons=[ messages.button( reverse('wagtailmedia:edit', args=(media.id, )), _('Edit')) ]) return redirect('wagtailmedia:index') else: messages.error(request, _("The media could not be saved due to errors.")) else: form = MediaForm(instance=media, user=request.user) filesize = None # Get file size when there is a file associated with the Media object if media.file: try: filesize = media.file.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 media file" ), buttons=[ messages.button( reverse('wagtailmedia:delete', args=(media.id, )), _('Delete')) ]) return render( request, "wagtailmedia/media/edit.html", { 'media': media, 'filesize': filesize, 'form': form, 'user_can_delete': permission_policy.user_has_permission_for_instance( request.user, 'delete', media), })
def media_safe_delete(request, media_id): media = get_object_or_404(get_media_model(), pk=media_id) if media.get_usage().exists(): messages.error(request, MESSAGE) return redirect('wagtailmedia:edit', media_id) return media_delete_view(request, media_id)
def test_media_model(self): cls = get_media_model() self.assertEqual( "%s.%s" % (cls._meta.app_label, cls.__name__), "wagtailmedia_tests.CustomMedia", )
def chooser_upload(request, media_type): Media = get_media_model() MediaForm = get_media_form(Media) if request.method == "POST": media = Media(uploaded_by_user=request.user, type=media_type) form = MediaForm( request.POST, request.FILES, instance=media, user=request.user, prefix="media-chooser-upload", ) if form.is_valid(): form.save() # Reindex the media entry to make sure all tags are indexed for backend in get_search_backends(): backend.add(media) return render_modal_workflow( request, None, None, None, json_data={ "step": "media_chosen", "result": get_media_json(media) }, ) media_files = permission_policy.instances_user_has_any_permission_for( request.user, ["change", "delete"]) # allow hooks to modify the queryset for hook in hooks.get_hooks("construct_media_chooser_queryset"): media_files = hook(media_files, request) searchform = SearchForm() collections = Collection.objects.all() if len(collections) < 2: collections = None media_files = media_files.order_by("-created_at") paginator, media_files = paginate(request, media_files, per_page=10) context = { "media_files": media_files, "searchform": searchform, "collections": collections, "uploadform": form, "is_searching": False, "pagination_template": pagination_template, "media_type": media_type, } return render_modal_workflow( request, "wagtailmedia/chooser/chooser.html", None, context, json_data={"step": "chooser"}, )
def get_media_type(): registry.media[Media] = MediaObjectType mdl = get_media_model() return registry.media[mdl]
def get_context_data(self, parent_context): context = super().get_context_data(parent_context) context["total_media"] = get_media_model().objects.count() return context
def __init__(self, **kwargs): super(AdminMediaChooser, self).__init__(**kwargs) self.media_model = get_media_model()
def chooser(request): Media = get_media_model() media_files = Media.objects.all() # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_media_chooser_queryset'): media_files = hook(media_files, request) q = None is_searching = False if 'q' in request.GET or 'p' in request.GET or 'collection_id' in request.GET: collection_id = request.GET.get('collection_id') if collection_id: media_files = media_files.filter(collection=collection_id) searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data['q'] media_files = media_files.search(q) is_searching = True else: media_files = media_files.order_by('-created_at') is_searching = False # Pagination paginator, media_files = paginate(request, media_files, per_page=10) return render( request, "wagtailmedia/chooser/results.html", { 'media_files': media_files, 'query_string': q, 'is_searching': is_searching, 'pagination_template': pagination_template, }) else: searchform = SearchForm() collections = Collection.objects.all() if len(collections) < 2: collections = None media_files = media_files.order_by('-created_at') paginator, media_files = paginate(request, media_files, per_page=10) return render_modal_workflow( request, 'wagtailmedia/chooser/chooser.html', None, { 'media_files': media_files, 'searchform': searchform, 'collections': collections, 'is_searching': False, 'pagination_template': pagination_template, }, json_data={ 'step': 'chooser', 'error_label': "Server Error", 'error_message': "Report this error to your webmaster with the following information:", 'tag_autocomplete_url': reverse('wagtailadmin_tag_autocomplete'), })
def target_model(self): from wagtailmedia.models import get_media_model return get_media_model()
def target_model(self): from wagtailmedia.models import get_media_model return get_media_model()
def media_chosen(request, media_id): media = get_object_or_404(get_media_model(), id=media_id) return render_modal_workflow(request, None, 'wagtailmedia/chooser/media_chosen.js', {'media_json': get_media_json(media)})
def index(request): Media = get_media_model() # Get media files (filtered by user permission) media = 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" media = media.order_by(ordering) # Filter by collection current_collection = None collection_id = request.GET.get("collection_id") if collection_id: try: current_collection = Collection.objects.get(id=collection_id) media = media.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass # Search query_string = None if "q" in request.GET: form = SearchForm(request.GET, placeholder=_("Search media files")) if form.is_valid(): query_string = form.cleaned_data["q"] media = media.search(query_string) else: form = SearchForm(placeholder=_("Search media")) # Pagination paginator, media = paginate(request, media) 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, "wagtailmedia/media/results.html", { "ordering": ordering, "media_files": media, "query_string": query_string, "is_searching": bool(query_string), }, ) else: return render( request, "wagtailmedia/media/index.html", { "ordering": ordering, "media_files": media, "query_string": query_string, "is_searching": bool(query_string), "search_form": form, "popular_tags": popular_tags_for_model(Media), "user_can_add": permission_policy.user_has_permission(request.user, "add"), "collections": collections, "current_collection": current_collection, }, )
def __init__(self, **kwargs): super(AdminMediaChooser, self).__init__(**kwargs) self.media_model = get_media_model()
def get_context(self): return { "total_media": get_media_model().objects.count(), }
def index(request): Media = get_media_model() # Get media files (filtered by user permission) media = 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' media = media.order_by(ordering) # Filter by collection current_collection = None collection_id = request.GET.get('collection_id') if collection_id: try: current_collection = Collection.objects.get(id=collection_id) media = media.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search media files")) if form.is_valid(): query_string = form.cleaned_data['q'] media = media.search(query_string) else: form = SearchForm(placeholder=_("Search media")) # Pagination paginator, media = paginate(request, media) 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, 'wagtailmedia/media/results.html', { 'ordering': ordering, 'media_files': media, 'query_string': query_string, 'is_searching': bool(query_string), }) else: return render(request, 'wagtailmedia/media/index.html', { 'ordering': ordering, 'media_files': media, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Media), 'user_can_add': permission_policy.user_has_permission(request.user, 'add'), 'collections': collections, 'current_collection': current_collection, })
from wagtail.core.permission_policies.collections import CollectionOwnershipPermissionPolicy from wagtailmedia.models import Media, get_media_model permission_policy = CollectionOwnershipPermissionPolicy( get_media_model(), auth_model=Media, owner_field_name='uploaded_by_user')