1
1
from django .db .models .query import Prefetch , prefetch_related_objects
2
2
from django .urls import reverse
3
3
from django .utils .functional import SimpleLazyObject
4
+ from django .utils .translation import override as force_language
4
5
5
6
from cms import constants
6
7
from cms .apphook_pool import apphook_pool
7
8
from cms .models import EmptyPageContent , PageContent , PageUrl
8
9
from cms .toolbar .utils import get_object_preview_url , get_toolbar_from_request
9
10
from cms .utils .conf import get_cms_setting
10
11
from cms .utils .i18n import (
11
- force_language ,
12
12
get_fallback_languages ,
13
13
get_public_languages ,
14
14
hide_untranslated ,
@@ -66,7 +66,6 @@ def user_can_see_page(page):
66
66
if perm .user_id == user_id or perm .group_id in user_groups :
67
67
return True
68
68
return False
69
-
70
69
return [page for page in pages if user_can_see_page (page )]
71
70
72
71
@@ -153,6 +152,7 @@ def get_menu_node_for_page(renderer, page, language, fallbacks=None, url=""):
153
152
154
153
155
154
class CMSNavigationNode (NavigationNode ):
155
+
156
156
def __init__ (self , * args , ** kwargs ):
157
157
self .path = kwargs .pop ('path' )
158
158
# language is only used when we're dealing with a fallback
@@ -232,12 +232,16 @@ def get_nodes(self, request):
232
232
to_attr = "filtered_urls" ,
233
233
queryset = PageUrl .objects .filter (language__in = languages ),
234
234
)
235
+ if toolbar .edit_mode_active or toolbar .preview_mode_active :
236
+ # Get all translations visible in the admin for the current page
237
+ translations_qs = PageContent .admin_manager .current_content (language__in = languages )
238
+ else :
239
+ # Only get public translations
240
+ translations_qs = PageContent .objects .filter (language__in = languages )
235
241
translations_lookup = Prefetch (
236
242
"pagecontent_set" ,
237
243
to_attr = "filtered_translations" ,
238
- queryset = PageContent .admin_manager .current_content (language__in = languages )
239
- if toolbar .edit_mode_active or toolbar .preview_mode_active
240
- else PageContent .objects .filter (language__in = languages ),
244
+ queryset = translations_qs ,
241
245
)
242
246
prefetch_related_objects (pages , urls_lookup , translations_lookup )
243
247
# Build the blank title instances only once
@@ -258,6 +262,7 @@ def _page_to_node(page):
258
262
page .page_content_cache [trans .language ] = trans
259
263
260
264
if toolbar .preview_mode_active or toolbar .edit_mode_active :
265
+ # Override URL to link to preview endpoint
261
266
url = get_object_preview_url (page .page_content_cache .get (lang ))
262
267
else :
263
268
url = ""
0 commit comments