Skip to content

Commit

Permalink
fix: Redirect behavior if prefix_default_language = False (port forwa…
Browse files Browse the repository at this point in the history
…rd of #6851 to v4) (#7527)

* fix: prefix_default_language = False redirect behavior fixes (#6851)

* make is_language_prefix_patterns_used check for non-empty language_prefix insted of doing isinstance check on pattern only
* if prefix patterns are used get_language_from_request normally, otherwise default
* updated CHANGELOG
* remove previous details request_language change and replace it with page model cache workaround
* fix tests
* if prefix patterns are used get_language_from_request normally, otherwise default
* add language check workaround to menus as well

Co-authored-by: Radosław Stępień <rstepien@cloudferro.com>
Co-authored-by: Florian Delizy <florian.delizy@gmail.com>

* Fix flake8 issue

---------

Co-authored-by: Radek Stępień <rstepien@protonmail.com>
Co-authored-by: Radosław Stępień <rstepien@cloudferro.com>
Co-authored-by: Florian Delizy <florian.delizy@gmail.com>
  • Loading branch information
4 people committed Apr 21, 2023
1 parent ee4e7d7 commit bdab9e9
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 13 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.rst
Expand Up @@ -9,6 +9,8 @@ unreleased
* feat: graceful plugin exceptions. Exceptions when rendering a plugin are caught and logged
* Remove outdated Django setting SEND_BROKEN_LINK_EMAILS
* Introduce dropdown menus in the page tree for status indicators
* Fixed redirect issues when i18n_patterns had prefix_default_language = False


4.0.0 (unreleased)
==================
Expand Down
20 changes: 10 additions & 10 deletions cms/utils/i18n.py
Expand Up @@ -196,16 +196,16 @@ def hide_untranslated(language, site_id=None):

def is_language_prefix_patterns_used():
"""
Returns `True` if the `LocaleRegexURLResolver` or `LocalePrefixPattern` is
used at root level of the urlpatterns, else it returns `False`.
"""
return any(
isinstance(
getattr(url_pattern, 'pattern', url_pattern),
LocalePrefixPattern
)
for url_pattern in get_resolver(None).url_patterns
)
Returns `True` if the `LocaleRegexURLResolver` or `LocalePrefixPattern`
is used at root level of the urlpatterns and doesn't have empty
language_prefix, else it returns `False`.
"""
for url_pattern in get_resolver(None).url_patterns:
pattern = getattr(url_pattern, 'pattern', url_pattern)
if isinstance(pattern, LocalePrefixPattern):
if pattern.language_prefix != '':
return True
return False


def is_valid_site_language(language, site_id):
Expand Down
4 changes: 3 additions & 1 deletion cms/views.py
Expand Up @@ -116,7 +116,9 @@ def details(request, slug):
else:
user_languages = get_public_languages(site_id=site.pk)

request_language = get_language_from_request(request, check_path=True)
request_language = None
if is_language_prefix_patterns_used():
request_language = get_language_from_request(request, check_path=True)
if not request_language:
request_language = get_default_language_for_site(get_current_site().pk)

Expand Down
8 changes: 6 additions & 2 deletions menus/menu_pool.py
Expand Up @@ -14,7 +14,9 @@

from cms.utils import get_current_site
from cms.utils.conf import get_cms_setting
from cms.utils.i18n import get_default_language_for_site
from cms.utils.i18n import (
get_default_language_for_site, is_language_prefix_patterns_used,
)
from menus.base import Menu
from menus.exceptions import NamespaceAlreadyRegistered
from menus.models import CacheKey
Expand Down Expand Up @@ -103,7 +105,9 @@ def __init__(self, pool, request):
# instance lives.
self.menus = pool.get_registered_menus(for_rendering=True)
self.request = request
self.request_language = get_language_from_request(request, check_path=True)
self.request_language = None
if is_language_prefix_patterns_used():
self.request_language = get_language_from_request(request, check_path=True)
if not self.request_language:
self.request_language = get_default_language_for_site(get_current_site().pk)
self.site = Site.objects.get_current(request)
Expand Down

0 comments on commit bdab9e9

Please sign in to comment.