Skip to content

Commit

Permalink
Fix: views.details revealed existence of unpublished language
Browse files Browse the repository at this point in the history
  • Loading branch information
fsbraun committed Mar 22, 2024
1 parent d123d11 commit 7864672
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 11 deletions.
5 changes: 3 additions & 2 deletions cms/cms_toolbars.py
Expand Up @@ -429,8 +429,9 @@ def get_on_delete_redirect_url(self):

# if the current page has a parent in the request's current language redirect to it
if parent_page and language in parent_page.get_languages():
with force_language(language):
return parent_page.get_absolute_url(language=language)
return get_object_preview_url(
parent_page.pagecontent_set(manager="admin_manager").latest_content(language=language).first()
)

# else redirect to root, do not redirect to Page.objects.get_home() because user could have deleted the last
# page, if DEBUG == False this could cause a 404
Expand Down
1 change: 1 addition & 0 deletions cms/extensions/toolbar.py
Expand Up @@ -92,6 +92,7 @@ def get_title_extension_admin(self, language=None):
urls = []
page = self._get_page()
if page:
page._prefetched_objects_cache = {} # Remove prefetched objects cache to avoid conflicts
page_contents = (
page.pagecontent_set(manager="admin_manager")
.latest_content()
Expand Down
2 changes: 1 addition & 1 deletion cms/models/pagemodel.py
Expand Up @@ -607,7 +607,7 @@ def delete_translations(self, language=None):
else:
languages = [language]

self.pagecontent_set.filter(language__in=languages).delete()
self.pagecontent_set(manager="admin_manager").filter(language__in=languages).delete()

def save(self, **kwargs):
if self.reverse_id == "":
Expand Down
10 changes: 3 additions & 7 deletions cms/utils/page.py
Expand Up @@ -95,14 +95,10 @@ def get_page_from_request(request, use_path=None, clean_path=None):
.get_for_site(site)
.filter(path=path)
.select_related('page__node')
.prefetch_related('page__pagecontent_set')
)
page_urls = list(page_urls)

try:
page = page_urls[0].page
except IndexError:
page = None
else:
page = getattr(page_urls.first(), "page", None)
if page is not None:
page.urls_cache = {url.language: url for url in page_urls}
return page

Expand Down
5 changes: 4 additions & 1 deletion cms/views.py
Expand Up @@ -143,9 +143,12 @@ def details(request, slug):
# get_published_languages will return all languages in draft mode
# and published only in live mode.
# These languages are then filtered out by the user allowed languages
pagecontent_languages = [
pagecontent.language for pagecontent in page._prefetched_objects_cache.get('pagecontent_set', [])
]
available_languages = [
language for language in user_languages
if language in list(page.get_languages())
if language in pagecontent_languages
]

own_urls = [
Expand Down

0 comments on commit 7864672

Please sign in to comment.