def get(self, request): self.image_model = get_image_model() images = permission_policy.instances_user_has_any_permission_for( request.user, ["choose"]).order_by("-created_at") # allow hooks to modify the queryset for hook in hooks.get_hooks("construct_image_chooser_queryset"): images = hook(images, request) collection_id = request.GET.get("collection_id") if collection_id: images = images.filter(collection=collection_id) self.is_searching = False self.q = None if "q" in request.GET: self.search_form = SearchForm(request.GET) if self.search_form.is_valid(): self.q = self.search_form.cleaned_data["q"] self.is_searching = True images = images.search(self.q) else: self.search_form = SearchForm() if not self.is_searching: tag_name = request.GET.get("tag") if tag_name: images = images.filter(tags__name=tag_name) # Pagination paginator = Paginator(images, per_page=CHOOSER_PAGE_SIZE) self.images = paginator.get_page(request.GET.get("p")) return self.render_to_response()
def index(request): Image = get_image_model() # Get images (filtered by user permission) images = permission_policy.instances_user_has_any_permission_for( request.user, ['change', 'delete'] ).order_by('-created_at') # Search query_string = None if 'q' in request.GET: form = SearchForm(request.GET, placeholder=_("Search images")) if form.is_valid(): query_string = form.cleaned_data['q'] images = images.search(query_string) else: form = SearchForm(placeholder=_("Search images")) # 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) images = images.filter(collection=current_collection) except (ValueError, Collection.DoesNotExist): pass paginator = Paginator(images, per_page=20) images = 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 else: collections = Collection.order_for_display(collections) # Create response if request.is_ajax(): return render(request, 'wagtailimages/images/results.html', { 'images': images, 'query_string': query_string, 'is_searching': bool(query_string), }) else: return render(request, 'wagtailimages/images/index.html', { 'images': images, 'query_string': query_string, 'is_searching': bool(query_string), 'search_form': form, 'popular_tags': popular_tags_for_model(Image), 'collections': collections, 'current_collection': current_collection, 'user_can_add': permission_policy.user_has_permission(request.user, 'add'), })
def get_context(self): images = permission_policy.instances_user_has_any_permission_for( self.request.user, ['change', 'delete']) return { #'total_images': get_image_model().objects.count(), #'total_images': get_image_model().objects.filter(uploaded_by_user=self.request.user).count(), 'total_images': images.count(), }
def get_object_list(self): return ( permission_policy.instances_user_has_any_permission_for( self.request.user, ["choose"] ) .select_related("collection") .prefetch_renditions("max-165x165") )
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Get images (filtered by user permission) images = (permission_policy.instances_user_has_any_permission_for( self.request.user, ["change", "delete" ]).order_by("-created_at").select_related("collection")) # Search query_string = None if "q" in self.request.GET: self.form = SearchForm(self.request.GET, placeholder=_("Search images")) if self.form.is_valid(): query_string = self.form.cleaned_data["q"] images = images.search(query_string) else: self.form = SearchForm(placeholder=_("Search images")) # Filter by collection self.current_collection = None collection_id = self.request.GET.get("collection_id") if collection_id: try: self.current_collection = Collection.objects.get( id=collection_id) images = images.filter(collection=self.current_collection) except (ValueError, Collection.DoesNotExist): pass # Filter by tag self.current_tag = self.request.GET.get("tag") if self.current_tag: try: images = images.filter(tags__name=self.current_tag) except (AttributeError): self.current_tag = None paginator = Paginator(images, per_page=INDEX_PAGE_SIZE) images = paginator.get_page(self.request.GET.get("p")) next_url = reverse("wagtailimages:index") request_query_string = self.request.META.get("QUERY_STRING") if request_query_string: next_url += "?" + request_query_string context.update({ "images": images, "query_string": query_string, "is_searching": bool(query_string), "next": next_url, }) return context
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Get images (filtered by user permission) images = permission_policy.instances_user_has_any_permission_for( self.request.user, ['change', 'delete' ]).order_by('-created_at').select_related('collection') # Search query_string = None if 'q' in self.request.GET: self.form = SearchForm(self.request.GET, placeholder=_("Search images")) if self.form.is_valid(): query_string = self.form.cleaned_data['q'] images = images.search(query_string) else: self.form = SearchForm(placeholder=_("Search images")) # Filter by collection self.current_collection = None collection_id = self.request.GET.get('collection_id') if collection_id: try: self.current_collection = Collection.objects.get( id=collection_id) images = images.filter(collection=self.current_collection) except (ValueError, Collection.DoesNotExist): pass # Filter by tag self.current_tag = self.request.GET.get('tag') if self.current_tag: try: images = images.filter(tags__name=self.current_tag) except (AttributeError): self.current_tag = None paginator = Paginator(images, per_page=INDEX_PAGE_SIZE) images = paginator.get_page(self.request.GET.get('p')) context.update({ 'images': images, 'query_string': query_string, 'is_searching': bool(query_string), 'next': self.request.get_full_path(), }) return context
def import_as_image_model(name, content, owner, title=None): if not title: title = name Image = get_image_model() image = Image(title=title, uploaded_by_user=owner) image.file = ContentFile(content, name=name) # Set image file size image.file_size = image.file.size # Set image file hash image.file.seek(0) image._set_file_hash(image.file.read()) image.file.seek(0) # Before we save the image, let's check if there are any choosable images with the same hash # so we can avoid importing a duplicate from wagtail.images.permissions import permission_policy if USER_NEEDS_IMAGE_CHOOSE_PERMISSION: existing_images = permission_policy.instances_user_has_any_permission_for( owner, ['choose']) else: existing_images = Image.objects.all() existing_images = existing_images.filter( file_hash=image.file_hash).iterator(chunk_size=1) for potential_duplicate in existing_images: if not getattr( settings, "WAGTAILCONTENTIMPORT_CHECK_DUPLICATE_IMAGE_CONTENT", False): # We don't need to check the file content return potential_duplicate # Check the file contents actually match - hash collisions are extremely unlikely by default # hence the chunk_size=1, but could happen if someone is using a custom image model with # some other hashing scheme if potential_duplicate.file.size == image.file.size and all( a == b for a, b in zip(potential_duplicate.file.chunks(), image.file.chunks())): # We've found an existing image in the library # so let's not save our new image, and return this one instead return potential_duplicate image.save() return image
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Get ordering ordering = self.get_ordering() # Get images (filtered by user permission and ordered by `ordering`) images = ( permission_policy.instances_user_has_any_permission_for( self.request.user, ["change", "delete"] ) .order_by(ordering) .select_related("collection") .prefetch_renditions("max-165x165") ) # Search query_string = None if "q" in self.request.GET: self.form = SearchForm(self.request.GET, placeholder=_("Search images")) if self.form.is_valid(): query_string = self.form.cleaned_data["q"] images = images.search(query_string) else: self.form = SearchForm(placeholder=_("Search images")) # Filter by collection self.current_collection = None collection_id = self.request.GET.get("collection_id") if collection_id: try: self.current_collection = Collection.objects.get(id=collection_id) images = images.filter(collection=self.current_collection) except (ValueError, Collection.DoesNotExist): pass # Filter by tag self.current_tag = self.request.GET.get("tag") if self.current_tag: try: images = images.filter(tags__name=self.current_tag) except (AttributeError): self.current_tag = None entries_per_page = self.get_num_entries_per_page() paginator = Paginator(images, per_page=entries_per_page) images = paginator.get_page(self.request.GET.get("p")) next_url = reverse("wagtailimages:index") request_query_string = self.request.META.get("QUERY_STRING") if request_query_string: next_url += "?" + request_query_string context.update( { "images": images, "query_string": query_string, "is_searching": bool(query_string), "next": next_url, "entries_per_page": entries_per_page, "ENTRIES_PER_PAGE_CHOICES": self.ENTRIES_PER_PAGE_CHOICES, "current_ordering": ordering, "ORDERING_OPTIONS": self.ORDERING_OPTIONS, } ) return context
def chooser(request): Image = get_image_model() if permission_policy.user_has_permission(request.user, 'add'): ImageForm = get_image_form(Image) uploadform = ImageForm(user=request.user, prefix='image-chooser-upload') else: uploadform = None images = permission_policy.instances_user_has_any_permission_for( request.user, ['choose']).order_by('-created_at') # allow hooks to modify the queryset for hook in hooks.get_hooks('construct_image_chooser_queryset'): images = hook(images, request) if ('q' in request.GET or 'p' in request.GET or 'tag' in request.GET or 'collection_id' in request.GET): # this request is triggered from search, pagination or 'popular tags'; # we will just render the results.html fragment collection_id = request.GET.get('collection_id') if collection_id: images = images.filter(collection=collection_id) searchform = SearchForm(request.GET) if searchform.is_valid(): q = searchform.cleaned_data['q'] images = images.search(q) is_searching = True else: is_searching = False q = None tag_name = request.GET.get('tag') if tag_name: images = images.filter(tags__name=tag_name) # Pagination paginator = Paginator(images, per_page=CHOOSER_PAGE_SIZE) images = paginator.get_page(request.GET.get('p')) return TemplateResponse( request, "wagtailimages/chooser/results.html", { 'images': images, 'is_searching': is_searching, 'query_string': q, 'will_select_format': request.GET.get('select_format') }) else: paginator = Paginator(images, per_page=CHOOSER_PAGE_SIZE) images = paginator.get_page(request.GET.get('p')) context = get_chooser_context(request) context.update({ 'images': images, 'uploadform': uploadform, }) return render_modal_workflow(request, 'wagtailimages/chooser/chooser.html', None, context, json_data=get_chooser_js_data())