forked from ungleich-public/dynamicweb
81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
# TODO: this is just stuff from utils.py - should be split / moved
|
|
from typing import TYPE_CHECKING
|
|
|
|
from django.http import HttpRequest
|
|
|
|
from cms.utils.compat.warnings import RemovedInDjangoCMS60Warning
|
|
from cms.utils.i18n import (
|
|
get_current_language,
|
|
get_default_language,
|
|
get_language_code,
|
|
get_language_list,
|
|
)
|
|
|
|
if TYPE_CHECKING:
|
|
from django.contrib.sites.models import Site
|
|
|
|
|
|
def get_current_site(request: HttpRequest = None) -> "Site":
|
|
"""
|
|
Returns the current Site instance associated with the given request.
|
|
"""
|
|
from django.contrib.sites.models import Site
|
|
|
|
if request is None:
|
|
import warnings
|
|
|
|
warnings.warn(
|
|
"get_current_site() called without request. This may lead to unexpected behavior. "
|
|
"Use get_current_site(request) instead.",
|
|
RemovedInDjangoCMS60Warning,
|
|
stacklevel=2,
|
|
)
|
|
|
|
# Allow middleware to identify the site
|
|
request_site = getattr(request, "site", None) if request else None
|
|
if request_site:
|
|
return request_site
|
|
|
|
# Fallback to the default site configuration by SITE_ID or through request
|
|
return Site.objects.get_current(request=request)
|
|
|
|
|
|
def get_language_from_request(request: HttpRequest, current_page=None) -> str:
|
|
"""
|
|
Return the most obvious language according the request
|
|
"""
|
|
if getattr(request, '_cms_language', None):
|
|
return request._cms_language
|
|
|
|
language = None
|
|
if hasattr(request, 'POST'):
|
|
language = request.POST.get('language', None)
|
|
if hasattr(request, 'GET') and not language:
|
|
language = request.GET.get('language', None)
|
|
site_id = current_page.site_id if current_page else get_current_site(request).pk
|
|
if language:
|
|
language = get_language_code(language, site_id=site_id)
|
|
if language not in get_language_list(site_id):
|
|
language = None
|
|
if not language and request:
|
|
# get the active language
|
|
language = get_current_language()
|
|
if language:
|
|
if language not in get_language_list(site_id):
|
|
language = None
|
|
|
|
if not language and current_page:
|
|
# in last resort, get the first language available in the page
|
|
languages = current_page.get_languages()
|
|
|
|
if len(languages) > 0:
|
|
language = languages[0]
|
|
|
|
if not language:
|
|
# language must be defined in CMS_LANGUAGES, so check first if there
|
|
# is any language with LANGUAGE_CODE, otherwise try to split it and find
|
|
# best match
|
|
language = get_default_language(site_id=site_id)
|
|
|
|
request._cms_language = language
|
|
return language
|