def get_success_url(self): urlquery = "" if self.locale and self.object.locale is not Locale.get_default(): urlquery = "?locale=" + self.object.locale.language_code return (reverse("wagtailsnippets:list", args=[self.app_label, self.model_name]) + urlquery)
def get(self, request, *args, **kwargs): if getattr(settings, "WAGTAIL_I18N_ENABLED", False): if request.GET.get("locale"): self.locale = get_object_or_404( Locale, language_code=request.GET["locale"]) else: self.locale = Locale.get_default() return super().get(request, *args, **kwargs)
def _get_locale(self): if getattr(settings, "WAGTAIL_I18N_ENABLED", False) and issubclass( self.model, TranslatableMixin): selected_locale = self.request.GET.get("locale") if selected_locale: return get_object_or_404(Locale, language_code=selected_locale) return Locale.get_default() return None
def get_locale(self): i18n_enabled = getattr(settings, "WAGTAIL_I18N_ENABLED", False) if hasattr(self, "model") and self.model: i18n_enabled = i18n_enabled and issubclass(self.model, TranslatableMixin) if not i18n_enabled: return None if hasattr(self, "object") and self.object: return self.object.locale selected_locale = self.request.GET.get("locale") if selected_locale: return get_object_or_404(Locale, language_code=selected_locale) return Locale.get_default()
def dispatch(self, request, *args, **kwargs): if self.is_pagemodel: user = request.user parents = self.permission_helper.get_valid_parent_pages(user) parent_count = parents.count() # There's only one available parent for this page type for this # user, so we send them along with that as the chosen parent page if parent_count == 1: parent = parents.get() parent_pk = quote(parent.pk) return redirect( self.url_helper.get_action_url("add", self.app_label, self.model_name, parent_pk)) # The page can be added in multiple places, so redirect to the # choose_parent view so that the parent can be specified return redirect(self.url_helper.get_action_url("choose_parent")) if getattr(settings, "WAGTAIL_I18N_ENABLED", False) and issubclass( self.model, TranslatableMixin): selected_locale = self.request.GET.get("locale") if selected_locale: locale = get_object_or_404(Locale, language_code=selected_locale) else: locale = Locale.get_default() kwargs.update({ "locale": locale, "translations": [{ "locale": locale, "url": self.create_url + "?locale=" + locale.language_code, } for locale in Locale.objects.all().exclude(id=locale.id)], }) return super().dispatch(request, *args, **kwargs)
def create(request, app_label, model_name): model = get_snippet_model_from_url_params(app_label, model_name) permission = get_permission_name("add", model) if not request.user.has_perm(permission): raise PermissionDenied for fn in hooks.get_hooks("before_create_snippet"): result = fn(request, model) if hasattr(result, "status_code"): return result instance = model() # Set locale of the new instance if issubclass(model, TranslatableMixin): selected_locale = request.GET.get("locale") if selected_locale: instance.locale = get_object_or_404(Locale, language_code=selected_locale) else: instance.locale = Locale.get_default() # Make edit handler edit_handler = get_snippet_edit_handler(model) form_class = edit_handler.get_form_class() if request.method == "POST": form = form_class(request.POST, request.FILES, instance=instance, for_user=request.user) if form.is_valid(): with transaction.atomic(): form.save() log(instance=instance, action="wagtail.create") messages.success( request, _("%(snippet_type)s '%(instance)s' created.") % { "snippet_type": capfirst(model._meta.verbose_name), "instance": instance, }, buttons=[ messages.button( reverse( "wagtailsnippets:edit", args=(app_label, model_name, quote(instance.pk)), ), _("Edit"), ) ], ) for fn in hooks.get_hooks("after_create_snippet"): result = fn(request, instance) if hasattr(result, "status_code"): return result urlquery = "" if (isinstance(instance, TranslatableMixin) and instance.locale is not Locale.get_default()): urlquery = "?locale=" + instance.locale.language_code return redirect( reverse("wagtailsnippets:list", args=[app_label, model_name]) + urlquery) else: messages.validation_error( request, _("The snippet could not be created due to errors."), form) else: form = form_class(instance=instance, for_user=request.user) edit_handler = edit_handler.get_bound_panel(request=request, instance=instance, form=form) action_menu = SnippetActionMenu(request, view="create", model=model) context = { "model_opts": model._meta, "edit_handler": edit_handler, "form": form, "action_menu": action_menu, "locale": None, "translations": [], "media": edit_handler.media + form.media + action_menu.media, } if getattr(settings, "WAGTAIL_I18N_ENABLED", False) and issubclass( model, TranslatableMixin): context.update({ "locale": instance.locale, "translations": [{ "locale": locale, "url": reverse("wagtailsnippets:add", args=[app_label, model_name]) + "?locale=" + locale.language_code, } for locale in Locale.objects.all().exclude(id=instance.locale.id) ], }) return TemplateResponse(request, "wagtailsnippets/snippets/create.html", context)
def get_success_url(self): urlquery = "" if self.locale and self.object.locale is not Locale.get_default(): urlquery = "?locale=" + self.object.locale.language_code return reverse(self.index_url_name) + urlquery
def test_default_doesnt_have_to_be_english(self): locale = Locale.get_default() self.assertEqual(locale.language_code, "fr")
def test_default(self): locale = Locale.get_default() self.assertEqual(locale.language_code, "en")