Beispiel #1
0
def chooser_select_format(request, image_id):
    image = get_object_or_404(get_image_model(), id=image_id)

    if request.method == 'POST':
        form = ImageInsertionForm(request.POST,
                                  initial={'alt_text': image.default_alt_text},
                                  prefix='image-chooser-insertion')
        if form.is_valid():

            format = get_image_format(form.cleaned_data['format'])
            preview_image = image.get_rendition(format.filter_spec)

            image_data = {
                'id':
                image.id,
                'title':
                image.title,
                'format':
                format.name,
                'alt':
                form.cleaned_data['alt_text'],
                'class':
                format.classnames,
                'edit_link':
                reverse('wagtailimages:edit', args=(image.id, )),
                'preview': {
                    'url': preview_image.url,
                    'width': preview_image.width,
                    'height': preview_image.height,
                },
                'html':
                format.image_to_editor_html(image,
                                            form.cleaned_data['alt_text']),
            }

            return render_modal_workflow(request,
                                         None,
                                         None,
                                         None,
                                         json_data={
                                             'step': 'image_chosen',
                                             'result': image_data
                                         })
    else:
        initial = {'alt_text': image.default_alt_text}
        initial.update(request.GET.dict())
        # If you edit an existing image, and there is no alt text, ensure that
        # "image is decorative" is ticked when you open the form
        initial['image_is_decorative'] = initial['alt_text'] == ''
        form = ImageInsertionForm(initial=initial,
                                  prefix='image-chooser-insertion')

    return render_modal_workflow(request,
                                 'wagtailimages/chooser/select_format.html',
                                 None, {
                                     'image': image,
                                     'form': form
                                 },
                                 json_data={'step': 'select_format'})
Beispiel #2
0
    def post(self, request, image_id):
        image = get_object_or_404(get_image_model(), id=image_id)

        self.form = ImageInsertionForm(
            request.POST,
            initial={"alt_text": image.default_alt_text},
            prefix="image-chooser-insertion",
        )
        if self.form.is_valid():
            return self.get_chosen_response(image)
        else:
            return self.render_select_format_response(image, self.form)
Beispiel #3
0
def chooser_select_format(request, image_id):
    image = get_object_or_404(get_image_model(), id=image_id)

    if request.method == 'POST':
        form = ImageInsertionForm(request.POST,
                                  initial={'alt_text': image.default_alt_text})
        if form.is_valid():

            format = get_image_format(form.cleaned_data['format'])
            preview_image = image.get_rendition(format.filter_spec)

            image_json = json.dumps({
                'id':
                image.id,
                'title':
                image.title,
                'format':
                format.name,
                'alt':
                form.cleaned_data['alt_text'],
                'class':
                format.classnames,
                'edit_link':
                reverse('wagtailimages:edit', args=(image.id, )),
                'preview': {
                    'url': preview_image.url,
                    'width': preview_image.width,
                    'height': preview_image.height,
                },
                'html':
                format.image_to_editor_html(image,
                                            form.cleaned_data['alt_text']),
            })

            return render_modal_workflow(
                request, None, 'wagtailimages/chooser/image_chosen.js',
                {'image_json': image_json})
    else:
        initial = {'alt_text': image.default_alt_text}
        initial.update(request.GET.dict())
        form = ImageInsertionForm(initial=initial)

    return render_modal_workflow(request,
                                 'wagtailimages/chooser/select_format.html',
                                 'wagtailimages/chooser/select_format.js', {
                                     'image': image,
                                     'form': form
                                 })
Beispiel #4
0
    def post(self, request):
        self.model = get_image_model()
        self.form = self.get_creation_form()

        if self.form.is_valid():
            image = self.save_form(self.form)

            duplicates = find_image_duplicates(
                image=image,
                user=request.user,
                permission_policy=permission_policy,
            )
            existing_image = duplicates.first()
            if existing_image:
                return self.render_duplicate_found_response(
                    request, image, existing_image
                )

            if request.GET.get("select_format"):
                insertion_form = ImageInsertionForm(
                    initial={"alt_text": image.default_alt_text},
                    prefix="image-chooser-insertion",
                )
                return self.render_select_format_response(image, insertion_form)
            else:
                # not specifying a format; return the image details now
                return self.get_chosen_response(image)

        else:  # form is invalid
            return self.get_reshow_creation_form_response()
Beispiel #5
0
def chooser_upload(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    if request.method == 'POST':
        image = Image(uploaded_by_user=request.user)
        form = ImageForm(
            request.POST, request.FILES, instance=image, user=request.user, prefix='image-chooser-upload'
        )

        if form.is_valid():
            # 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)

            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            if request.GET.get('select_format'):
                form = ImageInsertionForm(
                    initial={'alt_text': image.default_alt_text}, prefix='image-chooser-insertion'
                )
                return render_modal_workflow(
                    request, 'wagtailimages/chooser/select_format.html', None,
                    {'image': image, 'form': form}, json_data={'step': 'select_format'}
                )
            else:
                # not specifying a format; return the image details now
                return render_modal_workflow(
                    request, None, None,
                    None, json_data={'step': 'image_chosen', 'result': get_image_result_data(image)}
                )
    else:
        form = ImageForm(user=request.user, prefix='image-chooser-upload')

    images = Image.objects.order_by('-created_at')

    # allow hooks to modify the queryset
    for hook in hooks.get_hooks('construct_image_chooser_queryset'):
        images = hook(images, request)

    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': form,
    })
    return render_modal_workflow(
        request, 'wagtailimages/chooser/chooser.html', None, context,
        json_data=get_chooser_js_data()
    )
Beispiel #6
0
 def get(self, request, image_id):
     image = get_object_or_404(self.model, id=image_id)
     initial = {"alt_text": image.default_alt_text}
     initial.update(request.GET.dict())
     # If you edit an existing image, and there is no alt text, ensure that
     # "image is decorative" is ticked when you open the form
     initial["image_is_decorative"] = initial["alt_text"] == ""
     form = ImageInsertionForm(initial=initial, prefix="image-chooser-insertion")
     return self.render_select_format_response(image, form)
Beispiel #7
0
def chooser_upload(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    if request.method == 'POST':
        image = Image(uploaded_by_user=request.user)
        form = ImageForm(
            request.POST, request.FILES, instance=image, user=request.user, prefix='image-chooser-upload'
        )

        if form.is_valid():
            # 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)

            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            if request.GET.get('select_format'):
                form = ImageInsertionForm(
                    initial={'alt_text': image.default_alt_text}, prefix='image-chooser-insertion'
                )
                return render_modal_workflow(
                    request, 'wagtailimages/chooser/select_format.html', None,
                    {'image': image, 'form': form}, json_data={'step': 'select_format'}
                )
            else:
                # not specifying a format; return the image details now
                return render_modal_workflow(
                    request, None, None,
                    None, json_data={'step': 'image_chosen', 'result': get_image_result_data(image)}
                )
    else:
        form = ImageForm(user=request.user, prefix='image-chooser-upload')

    upload_form_html = render_to_string('wagtailimages/chooser/upload_form.html', {
        'form': form,
        'will_select_format': request.GET.get('select_format'),
    }, request)

    return render_modal_workflow(
        request, None, None, None,
        json_data={
            'step': 'reshow_upload_form',
            'htmlFragment': upload_form_html
        }
    )
Beispiel #8
0
def chooser_select_format(request, image_id):
    image = get_object_or_404(get_image_model(), id=image_id)

    if request.method == 'POST':
        form = ImageInsertionForm(
            request.POST, initial={'alt_text': image.default_alt_text}, prefix='image-chooser-insertion'
        )
        if form.is_valid():

            format = get_image_format(form.cleaned_data['format'])
            preview_image = image.get_rendition(format.filter_spec)

            image_data = {
                'id': image.id,
                'title': image.title,
                'format': format.name,
                'alt': form.cleaned_data['alt_text'],
                'class': format.classnames,
                'edit_link': reverse('wagtailimages:edit', args=(image.id,)),
                'preview': {
                    'url': preview_image.url,
                    'width': preview_image.width,
                    'height': preview_image.height,
                },
                'html': format.image_to_editor_html(image, form.cleaned_data['alt_text']),
            }

            return render_modal_workflow(
                request, None, None,
                None, json_data={'step': 'image_chosen', 'result': image_data}
            )
    else:
        initial = {'alt_text': image.default_alt_text}
        initial.update(request.GET.dict())
        form = ImageInsertionForm(initial=initial, prefix='image-chooser-insertion')

    return render_modal_workflow(
        request, 'wagtailimages/chooser/select_format.html', None,
        {'image': image, 'form': form}, json_data={'step': 'select_format'}
    )
Beispiel #9
0
def chooser_upload(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    if request.method == 'POST':
        image = Image(uploaded_by_user=request.user)
        form = ImageForm(request.POST,
                         request.FILES,
                         instance=image,
                         user=request.user)

        if form.is_valid():
            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            if request.GET.get('select_format'):
                form = ImageInsertionForm(
                    initial={'alt_text': image.default_alt_text})
                return render_modal_workflow(
                    request, 'wagtailimages/chooser/select_format.html',
                    'wagtailimages/chooser/select_format.js', {
                        'image': image,
                        'form': form
                    })
            else:
                # not specifying a format; return the image details now
                return render_modal_workflow(
                    request, None, 'wagtailimages/chooser/image_chosen.js',
                    {'image_json': get_image_json(image)})
    else:
        form = ImageForm(user=request.user)

    images = Image.objects.order_by('-created_at')

    # allow hooks to modify the queryset
    for hook in hooks.get_hooks('construct_image_chooser_queryset'):
        images = hook(images, request)

    paginator, images = paginate(request, images, per_page=12)

    context = get_chooser_context(request)
    context.update({
        'images': images,
        'uploadform': form,
    })
    return render_modal_workflow(request, 'wagtailimages/chooser/chooser.html',
                                 'wagtailimages/chooser/chooser.js', context)
Beispiel #10
0
def chooser_upload(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    searchform = SearchForm()

    if request.method == 'POST':
        image = Image(uploaded_by_user=request.user)
        form = ImageForm(request.POST, request.FILES, instance=image, user=request.user)

        if form.is_valid():
            # 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())

            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            if request.GET.get('select_format'):
                form = ImageInsertionForm(initial={'alt_text': image.default_alt_text})
                return render_modal_workflow(
                    request, 'wagtailimages/chooser/select_format.html', None,
                    {'image': image, 'form': form}, json_data={'step': 'select_format'}
                )
            else:
                # not specifying a format; return the image details now
                return render_modal_workflow(
                    request, None, None,
                    None, json_data={'step': 'image_chosen', 'result': get_image_result_data(image)}
                )
    else:
        form = ImageForm(user=request.user)

    images = Image.objects.order_by('-created_at')
    paginator, images = paginate(request, images, per_page=12)

    return render_modal_workflow(
        request, 'wagtailimages/chooser/chooser.html', None,
        {'images': images, 'uploadform': form, 'searchform': searchform},
        json_data=get_chooser_context()
    )
Beispiel #11
0
class ImageSelectFormatView(SelectFormatResponseMixin, ImageChosenResponseMixin, View):
    model = None

    def get(self, request, image_id):
        image = get_object_or_404(self.model, id=image_id)
        initial = {"alt_text": image.default_alt_text}
        initial.update(request.GET.dict())
        # If you edit an existing image, and there is no alt text, ensure that
        # "image is decorative" is ticked when you open the form
        initial["image_is_decorative"] = initial["alt_text"] == ""
        form = ImageInsertionForm(initial=initial, prefix="image-chooser-insertion")
        return self.render_select_format_response(image, form)

    def get_chosen_response_data(self, image):
        format = get_image_format(self.form.cleaned_data["format"])
        alt_text = self.form.cleaned_data["alt_text"]
        response_data = super().get_chosen_response_data(
            image, preview_image_filter=format.filter_spec
        )
        response_data.update(
            {
                "format": format.name,
                "alt": alt_text,
                "class": format.classnames,
                "html": format.image_to_editor_html(image, alt_text),
            }
        )
        return response_data

    def post(self, request, image_id):
        image = get_object_or_404(get_image_model(), id=image_id)

        self.form = ImageInsertionForm(
            request.POST,
            initial={"alt_text": image.default_alt_text},
            prefix="image-chooser-insertion",
        )
        if self.form.is_valid():
            return self.get_chosen_response(image)
        else:
            return self.render_select_format_response(image, self.form)
Beispiel #12
0
def image_select_format(request, image_id):
    image = get_object_or_404(get_image_model(), id=image_id)

    if request.method == "POST":
        form = ImageInsertionForm(
            request.POST,
            initial={"alt_text": image.default_alt_text},
            prefix="image-chooser-insertion",
        )
        if form.is_valid():
            format = get_image_format(form.cleaned_data["format"])
            preview_image = image.get_rendition(format.filter_spec)

            image_data = {
                "id":
                image.id,
                "title":
                image.title,
                "format":
                format.name,
                "alt":
                form.cleaned_data["alt_text"],
                "class":
                format.classnames,
                "edit_link":
                reverse("wagtailimages:edit", args=(image.id, )),
                "preview": {
                    "url": preview_image.url,
                    "width": preview_image.width,
                    "height": preview_image.height,
                },
                "html":
                format.image_to_editor_html(image,
                                            form.cleaned_data["alt_text"]),
            }

            return render_modal_workflow(
                request,
                None,
                None,
                None,
                json_data={
                    "step": "image_chosen",
                    "result": image_data
                },
            )
    else:
        initial = {"alt_text": image.default_alt_text}
        initial.update(request.GET.dict())
        form = ImageInsertionForm(initial=initial,
                                  prefix="image-chooser-insertion")

    return render_modal_workflow(
        request,
        "non_admin_draftail/image/select_format.html",
        None,
        {
            "image": image,
            "form": form
        },
        json_data={"step": "select_format"},
    )
Beispiel #13
0
def image_chooser_and_upload(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    if request.method == "POST":
        image = Image(uploaded_by_user=request.user)
        form = ImageForm(
            request.POST,
            request.FILES,
            instance=image,
            user=request.user,
            prefix="image-chooser-upload",
        )

        if form.is_valid():
            # 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)

            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            if request.GET.get("select_format"):
                form = ImageInsertionForm(
                    initial={"alt_text": image.default_alt_text},
                    prefix="image-chooser-insertion",
                )
                return render_modal_workflow(
                    request,
                    "non_admin_draftail/image/select_format.html",
                    None,
                    {
                        "image": image,
                        "form": form
                    },
                    json_data={"step": "select_format"},
                )
            else:
                # not specifying a format; return the image details now
                return render_modal_workflow(
                    request,
                    None,
                    None,
                    None,
                    json_data={
                        "step": "image_chosen",
                        "result": get_image_result_data(image),
                    },
                )
    else:
        form = ImageForm(user=request.user, prefix="image-chooser-upload")

    context = get_chooser_context(request)
    context.update({"uploadform": form})
    return render_modal_workflow(
        request,
        "non_admin_draftail/image/upload.html",
        None,
        context,
        json_data=get_chooser_js_data(),
    )
Beispiel #14
0
def chooser_upload(request):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    if request.method == "POST":
        image = Image(uploaded_by_user=request.user)
        form = ImageForm(
            request.POST,
            request.FILES,
            instance=image,
            user=request.user,
            prefix="image-chooser-upload",
        )

        if form.is_valid():
            # 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)

            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            duplicates = find_image_duplicates(
                image=image,
                user=request.user,
                permission_policy=permission_policy,
            )
            existing_image = duplicates.first()
            if existing_image:
                return duplicate_found(request, image, existing_image)

            if request.GET.get("select_format"):
                form = ImageInsertionForm(
                    initial={"alt_text": image.default_alt_text},
                    prefix="image-chooser-insertion",
                )
                return render_modal_workflow(
                    request,
                    "wagtailimages/chooser/select_format.html",
                    None,
                    {
                        "image": image,
                        "form": form
                    },
                    json_data={"step": "select_format"},
                )
            else:
                # not specifying a format; return the image details now
                return render_modal_workflow(
                    request,
                    None,
                    None,
                    None,
                    json_data={
                        "step": "image_chosen",
                        "result": get_image_result_data(image),
                    },
                )
    else:
        form = ImageForm(user=request.user, prefix="image-chooser-upload")

    upload_form_html = render_to_string(
        "wagtailimages/chooser/upload_form.html",
        {
            "form": form,
            "will_select_format": request.GET.get("select_format"),
        },
        request,
    )

    return render_modal_workflow(
        request,
        None,
        None,
        None,
        json_data={
            "step": "reshow_upload_form",
            "htmlFragment": upload_form_html
        },
    )
Beispiel #15
0
def chooser_select(request, image_id):
    Image = get_image_model()
    ImageForm = get_image_form(Image, hide_file=True)

    image = get_object_or_404(Image, id=image_id)

    if not request.is_ajax():
        return HttpResponseBadRequest("Cannot POST to this view without AJAX")

    if not image.is_editable_by_user(request.user):
        raise PermissionDenied

    form = ImageForm(request.POST,
                     request.FILES,
                     instance=image,
                     prefix='image-' + image_id,
                     user=request.user)

    if form.is_valid():
        form.save()

        # Reindex the image to make sure all tags are indexed
        search_index.insert_or_update_object(image)

        # several possibilities starting from here, based on the GET params
        #
        will_select_format = request.GET.get('select_format')
        will_select_rendition = request.GET.get('select_rendition')

        if will_select_format:
            form = ImageInsertionForm(
                initial={'alt_text': image.default_alt_text})
            return render_modal_workflow(
                request, 'wagtailimages/chooser/select_format.html',
                'wagtailimages/chooser/select_format.js', {
                    'image': image,
                    'form': form
                })
        elif will_select_rendition:
            form = ImageCropperForm(**get_cropper_settings(request, image))
            return render_modal_workflow(
                request, 'wagtailimages/chooser/select_rendition.html',
                'wagtailimages/chooser/select_rendition.js', {
                    'image': image,
                    'form': form
                })
        else:
            # not specifying a format; return the image details now
            return render_modal_workflow(
                request, None, 'wagtailimages/chooser/image_chosen.js',
                {'image_json': get_image_json(image)})

    else:
        # something was wrong with the submitted data
        #
        return JsonResponse({
            'success':
            False,
            'image_id':
            int(image_id),
            'form':
            render_to_string('wagtailimages/chooser/update.html', {
                'image': image,
                'form': form,
                'additional_params': get_cropper_params(request),
            },
                             request=request),
        })