@@ -55,9 +55,7 @@ def _is_versioned(self):
5555 versioning
5656 """
5757 versioning_extension = apps .get_app_config ("djangocms_versioning" ).cms_extension
58- return versioning_extension .is_content_model_versioned (
59- self .toolbar .obj .__class__
60- )
58+ return versioning_extension .is_content_model_versioned (self .toolbar .obj .__class__ )
6159
6260 def _get_proxy_model (self ):
6361 """Helper method to get the proxy model class for the content
@@ -66,8 +64,7 @@ def _get_proxy_model(self):
6664 return self ._get_versionable ().version_model_proxy
6765
6866 def _add_publish_button (self ):
69- """Helper method to add a publish button to the toolbar
70- """
67+ """Helper method to add a publish button to the toolbar"""
7168 # Check if object is registered with versioning otherwise don't add
7269 if not self ._is_versioned ():
7370 return
@@ -99,8 +96,7 @@ def add_edit_button(self):
9996 self ._add_unlock_button ()
10097
10198 def _add_edit_button (self , disabled = False ):
102- """Helper method to add an edit button to the toolbar
103- """
99+ """Helper method to add an edit button to the toolbar"""
104100 item = ButtonList (side = self .toolbar .RIGHT )
105101 proxy_model = self ._get_proxy_model ()
106102 version = Version .objects .get_for_content (self .toolbar .obj )
@@ -109,9 +105,9 @@ def _add_edit_button(self, disabled=False):
109105 f"admin:{ proxy_model ._meta .app_label } _{ proxy_model .__name__ .lower ()} _edit_redirect" ,
110106 args = (version .pk ,),
111107 )
112- pks_for_grouper = version .versionable .for_content_grouping_values (
113- version . content
114- ). values_list ( "pk" , flat = True )
108+ pks_for_grouper = version .versionable .for_content_grouping_values (version . content ). values_list (
109+ "pk" , flat = True
110+ )
115111 content_type = ContentType .objects .get_for_model (version .content )
116112 draft_exists = Version .objects .filter (
117113 object_id__in = pks_for_grouper , content_type = content_type , state = DRAFT
@@ -125,8 +121,7 @@ def _add_edit_button(self, disabled=False):
125121 self .toolbar .add_item (item )
126122
127123 def _add_unlock_button (self ):
128- """Helper method to add an edit button to the toolbar
129- """
124+ """Helper method to add an edit button to the toolbar"""
130125 if LOCK_VERSIONS and self ._is_versioned ():
131126 item = ButtonList (side = self .toolbar .RIGHT )
132127 proxy_model = self ._get_proxy_model ()
@@ -164,8 +159,7 @@ def _add_lock_message(self):
164159 self .toolbar .add_item (lock_message , position = 0 )
165160
166161 def _add_revert_button (self , disabled = False ):
167- """Helper method to add a revert button to the toolbar
168- """
162+ """Helper method to add a revert button to the toolbar"""
169163 # Check if object is registered with versioning otherwise don't add
170164 if not self ._is_versioned ():
171165 return
@@ -186,8 +180,7 @@ def _add_revert_button(self, disabled=False):
186180 self .toolbar .add_item (item )
187181
188182 def _add_versioning_menu (self ):
189- """ Helper method to add version menu in the toolbar
190- """
183+ """Helper method to add version menu in the toolbar"""
191184 # Check if object is registered with versioning otherwise don't add
192185 if not self ._is_versioned ():
193186 return
@@ -215,13 +208,15 @@ def _add_versioning_menu(self):
215208 proxy_model = self ._get_proxy_model ()
216209 url = reverse (
217210 f"admin:{ proxy_model ._meta .app_label } _{ proxy_model .__name__ .lower ()} _compare" ,
218- args = (version .source .pk ,)
211+ args = (version .source .pk ,),
219212 )
220213
221- url += "?" + urlencode ({
222- "compare_to" : version .pk ,
223- "back" : self .toolbar .request_path ,
224- })
214+ url += "?" + urlencode (
215+ {
216+ "compare_to" : version .pk ,
217+ "back" : self .toolbar .request_path ,
218+ }
219+ )
225220 versioning_menu .add_link_item (name , url = url )
226221 # Discard changes menu entry (wrt to source)
227222 if version .check_discard .as_bool (self .request .user ): # pragma: no cover
@@ -230,26 +225,22 @@ def _add_versioning_menu(self):
230225 _ ("Discard Changes" ),
231226 url = reverse (
232227 f"admin:{ proxy_model ._meta .app_label } _{ proxy_model .__name__ .lower ()} _discard" ,
233- args = (version .pk ,)
234- )
228+ args = (version .pk ,),
229+ ),
235230 )
236231
237232 def _get_published_page_version (self ):
238- """Returns a published page if one exists for the toolbar object
239- """
233+ """Returns a published page if one exists for the toolbar object"""
240234 language = self .current_lang
241235
242236 # Exit the current toolbar object is not a Page / PageContent instance
243237 if not isinstance (self .toolbar .obj , PageContent ) or not self .page :
244238 return
245239
246- return PageContent .objects .filter (
247- page = self .page , language = language
248- ).select_related ("page" ).first ()
240+ return PageContent .objects .filter (page = self .page , language = language ).select_related ("page" ).first ()
249241
250242 def _add_view_published_button (self ):
251- """Helper method to add a publish button to the toolbar
252- """
243+ """Helper method to add a publish button to the toolbar"""
253244 # Check if object is registered with versioning otherwise don't add
254245 if not self ._is_versioned ():
255246 return
@@ -347,50 +338,38 @@ def override_language_menu(self):
347338 language_menu .add_link_item (name , url = url , active = self .current_lang == code )
348339
349340 def change_language_menu (self ):
350- if self .toolbar .edit_mode_active and self .page :
351- can_change = page_permissions .user_can_change_page (
341+ can_change = (
342+ self .page
343+ and page_permissions .user_can_change_page (
352344 user = self .request .user , page = self .page , site = self .current_site
353345 )
354- else :
355- can_change = False
346+ )
356347
357348 if can_change :
358349 language_menu = self .toolbar .get_menu (LANGUAGE_MENU_IDENTIFIER )
359350 if not language_menu :
360351 return None
361352
362353 languages = get_language_dict (self .current_site .pk )
363- remove = [
364- (code , languages .get (code , code ))
365- for code in self .page .get_languages ()
366- if code in languages
367- ]
368- add = [
369- code
370- for code in languages .items ()
371- if code not in remove
372- ]
354+ remove = [(code , languages .get (code , code )) for code in self .page .get_languages () if code in languages ]
355+ add = [code for code in languages .items () if code not in remove ]
373356 copy = [
374- (code , name )
375- for code , name in languages .items ()
376- if code != self .current_lang and (code , name ) in remove
357+ (code , name ) for code , name in languages .items () if code != self .current_lang and (code , name ) in remove
377358 ]
378359
360+ # ADD TRANSLATION — only if user has change permission
379361 if add :
380362 language_menu .add_break (ADD_PAGE_LANGUAGE_BREAK )
381363
382- add_plugins_menu = language_menu .get_or_create_menu (
383- f"{ LANGUAGE_MENU_IDENTIFIER } -add" , _ ("Add Translation" )
384- )
364+ add_plugins_menu = language_menu .get_or_create_menu (f"{ LANGUAGE_MENU_IDENTIFIER } -add" , _ ("Add Translation" )) # noqa: E501
385365
386366 page_add_url = admin_reverse ("cms_pagecontent_add" )
387367
388368 for code , name in add :
389- url = add_url_parameters (
390- page_add_url , cms_page = self .page .pk , language = code
391- )
369+ url = add_url_parameters (page_add_url , cms_page = self .page .pk , language = code )
392370 add_plugins_menu .add_modal_item (name , url = url )
393371
372+ # DELETE TRANSLATION — only if user has change permission
394373 if remove and ALLOW_DELETING_VERSIONS and CMS_SUPPORTS_DELETING_TRANSLATIONS :
395374 remove_plugins_menu = language_menu .get_or_create_menu (
396375 f"{ LANGUAGE_MENU_IDENTIFIER } -del" , _ ("Delete Translation" )
@@ -404,12 +383,17 @@ def change_language_menu(self):
404383 on_close = REFRESH_PAGE
405384 if self .toolbar .get_object () == pagecontent and not disabled :
406385 other_content = next (
407- (self .page .get_admin_content (lang ) for lang in self .page .get_languages ()
408- if lang != pagecontent .language and lang in languages ), None )
386+ (
387+ self .page .get_admin_content (lang )
388+ for lang in self .page .get_languages ()
389+ if lang != pagecontent .language and lang in languages
390+ ),
391+ None ,
392+ )
409393 on_close = get_object_preview_url (other_content )
410394 remove_plugins_menu .add_modal_item (name , url = url , disabled = disabled , on_close = on_close )
411-
412- if copy :
395+ # COPY ALL PLUGINS — only if user can change AND in edit mode
396+ if self . toolbar . edit_mode_active and copy :
413397 copy_plugins_menu = language_menu .get_or_create_menu (
414398 f"{ LANGUAGE_MENU_IDENTIFIER } -copy" , _ ("Copy all plugins" )
415399 )
@@ -422,9 +406,11 @@ def change_language_menu(self):
422406 if page_content : # Only offer to copy if content for source language exists
423407 page_copy_url = admin_reverse ("cms_pagecontent_copy_language" , args = (page_content .pk ,))
424408 copy_plugins_menu .add_ajax_item (
425- title % name , action = page_copy_url ,
409+ title % name ,
410+ action = page_copy_url ,
426411 data = {"source_language" : code , "target_language" : self .current_lang },
427- question = question % name , on_success = self .toolbar .REFRESH_PAGE
412+ question = question % name ,
413+ on_success = self .toolbar .REFRESH_PAGE ,
428414 )
429415 item_added = True
430416 if not item_added : # pragma: no cover
@@ -467,8 +453,7 @@ def replace_toolbar(old, new):
467453 new_name = "." .join ((new .__module__ , new .__name__ ))
468454 old_name = "." .join ((old .__module__ , old .__name__ ))
469455 toolbar_pool .toolbars = OrderedDict (
470- (new_name , new ) if name == old_name else (name , toolbar )
471- for name , toolbar in toolbar_pool .toolbars .items ()
456+ (new_name , new ) if name == old_name else (name , toolbar ) for name , toolbar in toolbar_pool .toolbars .items ()
472457 )
473458
474459
0 commit comments