Ejemplo n.º 1
0
    def get_object(self):
        model = get_snippet_model_from_url_params(self.kwargs["app_label"],
                                                  self.kwargs["model_name"])

        if not issubclass(model, TranslatableMixin):
            raise Http404

        return get_object_or_404(model, pk=unquote(self.kwargs["pk"]))
Ejemplo n.º 2
0
    def get(self, request, app_label, model_name):
        self.model = get_snippet_model_from_url_params(app_label, model_name)

        items = self.model.objects.all()

        # Preserve the snippet's model-level ordering if specified, but fall back on PK if not
        # (to ensure pagination is consistent)
        if not items.ordered:
            items = items.order_by('pk')

        # Filter by locale
        self.locale = None
        self.locale_filter = None
        self.selected_locale = None
        if issubclass(self.model, TranslatableMixin):
            # 'locale' is the Locale of the object that this snippet is being chosen for
            if request.GET.get('locale'):
                self.locale = get_object_or_404(
                    Locale, language_code=request.GET['locale'])

            # 'locale_filter' is the current value of the "Locale" selector in the UI
            if request.GET.get('locale_filter'):
                self.locale_filter = get_object_or_404(
                    Locale, language_code=request.GET['locale_filter'])

            self.selected_locale = self.locale_filter or self.locale

            if self.selected_locale:
                items = items.filter(locale=self.selected_locale)

        # Search
        self.is_searchable = class_is_indexed(self.model)
        self.is_searching = False
        self.search_query = None
        if self.is_searchable and 'q' in request.GET:
            self.search_form = SearchForm(
                request.GET,
                placeholder=_("Search %(snippet_type_name)s") %
                {'snippet_type_name': self.model._meta.verbose_name})

            if self.search_form.is_valid():
                self.search_query = self.search_form.cleaned_data['q']

                search_backend = get_search_backend()
                items = search_backend.search(self.search_query, items)
                self.is_searching = True

        else:
            self.search_form = SearchForm(
                placeholder=_("Search %(snippet_type_name)s") %
                {'snippet_type_name': self.model._meta.verbose_name})

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

        return self.render_to_response()
Ejemplo n.º 3
0
def choose(request, app_label, model_name):
    model = get_snippet_model_from_url_params(app_label, model_name)

    items = model.objects.all()

    # Preserve the snippet's model-level ordering if specified, but fall back on PK if not
    # (to ensure pagination is consistent)
    if not items.ordered:
        items = items.order_by('pk')

    # Search
    is_searchable = class_is_indexed(model)
    is_searching = False
    search_query = None
    if is_searchable and 'q' in request.GET:
        search_form = SearchForm(
            request.GET,
            placeholder=_("Search %(snippet_type_name)s") %
            {'snippet_type_name': model._meta.verbose_name})

        if search_form.is_valid():
            search_query = search_form.cleaned_data['q']

            search_backend = get_search_backend()
            items = search_backend.search(search_query, items)
            is_searching = True

    else:
        search_form = SearchForm(
            placeholder=_("Search %(snippet_type_name)s") %
            {'snippet_type_name': model._meta.verbose_name})

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

    # If paginating or searching, render "results.html"
    if request.GET.get('results', None) == 'true':
        return render(
            request, "wagtailsnippets/chooser/results.html", {
                'model_opts': model._meta,
                'items': paginated_items,
                'query_string': search_query,
                'is_searching': is_searching,
            })

    return render_modal_workflow(request,
                                 'wagtailsnippets/chooser/choose.html',
                                 None, {
                                     'model_opts': model._meta,
                                     'items': paginated_items,
                                     'is_searchable': is_searchable,
                                     'search_form': search_form,
                                     'query_string': search_query,
                                     'is_searching': is_searching,
                                 },
                                 json_data={'step': 'choose'})
Ejemplo n.º 4
0
def choose(request, app_label, model_name):
    model = get_snippet_model_from_url_params(app_label, model_name)

    items = model.objects.all()

    # Preserve the snippet's model-level ordering if specified, but fall back on PK if not
    # (to ensure pagination is consistent)
    if not items.ordered:
        items = items.order_by('pk')

    # Search
    is_searchable = class_is_indexed(model)
    is_searching = False
    search_query = None
    if is_searchable and 'q' in request.GET:
        search_form = SearchForm(request.GET, placeholder=_("Search %(snippet_type_name)s") % {
            'snippet_type_name': model._meta.verbose_name
        })

        if search_form.is_valid():
            search_query = search_form.cleaned_data['q']

            search_backend = get_search_backend()
            items = search_backend.search(search_query, items)
            is_searching = True

    else:
        search_form = SearchForm(placeholder=_("Search %(snippet_type_name)s") % {
            'snippet_type_name': model._meta.verbose_name
        })

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

    # If paginating or searching, render "results.html"
    if request.GET.get('results', None) == 'true':
        return render(request, "wagtailsnippets/chooser/results.html", {
            'model_opts': model._meta,
            'items': paginated_items,
            'query_string': search_query,
            'is_searching': is_searching,
        })

    return render_modal_workflow(
        request,
        'wagtailsnippets/chooser/choose.html', None,
        {
            'model_opts': model._meta,
            'items': paginated_items,
            'is_searchable': is_searchable,
            'search_form': search_form,
            'query_string': search_query,
            'is_searching': is_searching,
        }, json_data={'step': 'choose'}
    )
Ejemplo n.º 5
0
def copy(request, app_label, model_name, id):
    # Validate snippet has been registered and title_field is set.
    title_field_name = snippet_copy_registry.get(app_label, model_name)
    if title_field_name is None:
        raise Exception("This snippet isn't registered as copyable")

    model = get_snippet_model_from_url_params(app_label, model_name)

    permission = get_permission_name('change', model)
    if not request.user.has_perm(permission):
        return permission_denied(request)

    snippet = get_object_or_404(model, id=id)

    # Create the form
    form = CopyForm(request.POST or None, snippet=snippet, title_field_name=title_field_name)

    next_url = get_valid_next_url_from_request(request)

    for fn in hooks.get_hooks('before_copy_snippet'):
        result = fn(request, snippet)
        if hasattr(result, 'status_code'):
            return result

    # Check if user is submitting
    if request.method == 'POST':

        if form.is_valid():

            # Copy the snippet
            new_snippet = form.copy()

            # Give a success message back to the user
            messages.success(request, _("Snippet '{0}' copied.").format(snippet))

            for fn in hooks.get_hooks('after_copy_snippet'):
                result = fn(request, snippet, new_snippet)
                if hasattr(result, 'status_code'):
                    return result

            if next_url:
                return redirect(next_url)
            if 'wagtail.contrib.modeladmin' in settings.INSTALLED_APPS:
                url_helper = AdminURLHelper(new_snippet)
                return redirect(url_helper.get_action_url('edit', quote(new_snippet.pk)))

            return redirect('wagtailsnippets:edit', app_label, model_name, new_snippet.id)

    return render(request, 'wagtailsnippetscopy/copy.html', {
        'snippet': snippet,
        'app_label': app_label,
        'model_name': model_name,
        'form': form,
        'next': next_url,
    })
Ejemplo n.º 6
0
def chosen(request, app_label, model_name, pk):
    model = get_snippet_model_from_url_params(app_label, model_name)
    item = get_object_or_404(model, pk=unquote(pk))

    snippet_data = {
        "id": str(item.pk),
        "string": str(item),
        "edit_link": reverse(
            "wagtailsnippets:edit", args=(app_label, model_name, quote(item.pk))
        ),
    }

    return render_modal_workflow(
        request, None, None, None, json_data={"step": "chosen", "result": snippet_data}
    )
Ejemplo n.º 7
0
def chosen(request, app_label, model_name, pk):
    model = get_snippet_model_from_url_params(app_label, model_name)
    item = get_object_or_404(model, pk=unquote(pk))

    snippet_data = {
        'id': str(item.pk),
        'string': str(item),
        'edit_link': reverse('wagtailsnippets:edit', args=(
            app_label, model_name, quote(item.pk)))
    }

    return render_modal_workflow(
        request,
        None, None,
        None, json_data={'step': 'chosen', 'result': snippet_data}
    )
Ejemplo n.º 8
0
def chosen(request, app_label, model_name, pk):
    model = get_snippet_model_from_url_params(app_label, model_name)
    item = get_object_or_404(model, pk=unquote(pk))

    snippet_data = {
        'id': str(item.pk),
        'string': str(item),
        'edit_link': reverse('wagtailsnippets:edit', args=(
            app_label, model_name, quote(item.pk)))
    }

    return render_modal_workflow(
        request,
        None, None,
        None, json_data={'step': 'chosen', 'result': snippet_data}
    )
Ejemplo n.º 9
0
def chosen(request, app_label, model_name, id):
    model = get_snippet_model_from_url_params(app_label, model_name)
    item = get_object_or_404(model, id=id)

    snippet_json = json.dumps({
        'id':
        item.id,
        'string':
        str(item),
        'edit_link':
        reverse('wagtailsnippets:edit', args=(app_label, model_name, item.id))
    })

    return render_modal_workflow(request, None,
                                 'wagtailsnippets/chooser/chosen.js', {
                                     'snippet_json': snippet_json,
                                 })
Ejemplo n.º 10
0
def chosen(request, app_label, model_name, pk):
    model = get_snippet_model_from_url_params(app_label, model_name)
    item = get_object_or_404(model, pk=unquote(pk))

    snippet_json = json.dumps({
        'id': item.pk,
        'string': str(item),
        'edit_link': reverse('wagtailsnippets:edit', args=(
            app_label, model_name, quote(item.pk)))
    })

    return render_modal_workflow(
        request,
        None, 'wagtailsnippets/chooser/chosen.js',
        {
            'snippet_json': snippet_json,
        }
    )
Ejemplo n.º 11
0
def choose(request, app_label, model_name):
    model = get_snippet_model_from_url_params(app_label, model_name)

    items = model.objects.all()

    # Preserve the snippet's model-level ordering if specified, but fall back on PK if not
    # (to ensure pagination is consistent)
    if not items.ordered:
        items = items.order_by('pk')

    # Filter by locale
    locale = None
    locale_filter = None
    selected_locale = None
    if issubclass(model, TranslatableMixin):
        # 'locale' is the Locale of the object that this snippet is being chosen for
        if request.GET.get('locale'):
            locale = get_object_or_404(Locale,
                                       language_code=request.GET['locale'])

        # 'locale_filter' is the current value of the "Locale" selector in the UI
        if request.GET.get('locale_filter'):
            locale_filter = get_object_or_404(
                Locale, language_code=request.GET['locale_filter'])

        selected_locale = locale_filter or locale

        if selected_locale:
            items = items.filter(locale=selected_locale)

    # Search
    is_searchable = class_is_indexed(model)
    is_searching = False
    search_query = None
    if is_searchable and 'q' in request.GET:
        search_form = SearchForm(
            request.GET,
            placeholder=_("Search %(snippet_type_name)s") %
            {'snippet_type_name': model._meta.verbose_name})

        if search_form.is_valid():
            search_query = search_form.cleaned_data['q']

            search_backend = get_search_backend()
            items = search_backend.search(search_query, items)
            is_searching = True

    else:
        search_form = SearchForm(
            placeholder=_("Search %(snippet_type_name)s") %
            {'snippet_type_name': model._meta.verbose_name})

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

    # If paginating or searching, render "results.html"
    if request.GET.get('results', None) == 'true':
        return TemplateResponse(
            request, "wagtailsnippets/chooser/results.html", {
                'model_opts': model._meta,
                'items': paginated_items,
                'query_string': search_query,
                'is_searching': is_searching,
                'locale': locale,
                'locale_filter': locale_filter,
                'selected_locale': selected_locale,
            })

    return render_modal_workflow(request,
                                 'wagtailsnippets/chooser/choose.html',
                                 None, {
                                     'model_opts':
                                     model._meta,
                                     'items':
                                     paginated_items,
                                     'is_searchable':
                                     is_searchable,
                                     'search_form':
                                     search_form,
                                     'query_string':
                                     search_query,
                                     'is_searching':
                                     is_searching,
                                     'locale':
                                     locale,
                                     'locale_filter':
                                     locale_filter,
                                     'selected_locale':
                                     selected_locale,
                                     'locale_options':
                                     Locale.objects.all() if issubclass(
                                         model, TranslatableMixin) else [],
                                 },
                                 json_data={'step': 'choose'})
Ejemplo n.º 12
0
 def get_model(self):
     return get_snippet_model_from_url_params(self.kwargs["app_label"],
                                              self.kwargs["model_name"])
Ejemplo n.º 13
0
 def get_model(self):
     return get_snippet_model_from_url_params(self.kwargs['app_label'], self.kwargs['model_name'])