
    Bh                     v    d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ  G d	 d
e      Zy)    N)NoReverseMatch)PageContent)
CMSToolbar)get_language_list)RemovedInDjangoCMS51Warning)user_can_change_page)admin_reversec                   F    e Zd ZdZdZdZdZd Zd Zd Z	d	dZ
d	dZd	dZy)
ExtensionToolbarzOffers simplified API for providing the user access to the admin of page extensions and
    page content extensions through the toolbar.Nc                     | j                         }|r<t        | j                  j                  |      r| j                  j                  d      S y)z
        Does all the sanity check for the current environment:

            * that a page exists
            * permissions check on the current page

        It returns the page menu or None if the above conditions are not met
        )pager   N)	_get_pager   requestusertoolbarget_or_create_menu)selfr   s     F/home/dcms/DCMS/lib/python3.12/site-packages/cms/extensions/toolbar.py_setup_extension_toolbarz)ExtensionToolbar._setup_extension_toolbar   s?     ~~():):F<<226::    c                 p   | j                   s| j                  j                         }t        |t              r$|j                   | _         || _        | j                   S | j                  j                  | _         | j                   r*| j                   j                  | j                        | _        | j                   S N)
r   r   
get_object
isinstancer   page_contentr   current_pageget_content_objcurrent_lang)r   objs     r   r   zExtensionToolbar._get_page#   s    yy,,))+C#{+HH	$'!
 yy !LL55	99(,		(A(A$BSBS(TD%yyr   c                 ,   | j                         }	 | j                  j                  j                  |j                        }	 | j                  j                  j                  | j                  j                  j                         }}|rt        | d| d|j                  f      }n5dj                  t        | d| d      | j                  j                        }||fS # | j                  j
                  $ r d}Y w xY w# t        $ r d}Y ||fS w xY w)aO  
        Get the admin url for the page extension menu item, depending on whether a PageExtension instance exists
        for the current page or not.

        Return a tuple of the current extension and the url; the extension is None if no instance exists,
        the url is None is no admin is registered for the extension.
        extended_object_idN__changeargs{}?extended_object={}_add)r   modelobjectsgetpkDoesNotExist_meta	app_label__name__lowerr	   formatr   r   )r   r   page_extensionr/   
model_name	admin_urls         r   get_page_extension_adminz)ExtensionToolbar.get_page_extension_admin/   s	    ~~	"!ZZ//33tww3ON		$(JJ$4$4$>$>

@S@S@Y@Y@[zI)YKqG*LTbTeTeSgh	3::!YKqD"ABDIILL	
 y(( zz&& 	"!N	"  	Iy((	s$   0C! BD !C?>C?DDc                 D   t        j                  dt        d       g }| j                         }|ro|j	                  d      j                         j                  t        |j                              }|D ]'  }| j                  |      }|s|j                  |       ) |S )am  
        Deprecated.

        Reflects now obsolete behavior in django CMS 3.x:

        Get the admin urls for the page content extensions menu items, depending on whether a
        :class:`~cms.extensions.models.PageContentExtension` instance exists for each
        :class:`~cms.models.contentmodels.PageContent` in the current page.
        A single language can be passed to only work on a single page content object.

        Return a list of tuples of the page content extension and the url; the extension is None
        if no instance exists, the url is None is no admin is registered for the extension.
        z^get_title_extension_admin has been deprecated and replaced by get_page_content_extension_admin   )
stackleveladmin_manager)manager)language__in)warningswarnr   r   pagecontent_setlatest_contentfilterr   site_id get_page_content_extension_adminappend)r   languageurlsr   page_contentsr   r5   s          r   get_title_extension_adminz*ExtensionToolbar.get_title_extension_adminI   s     	l'	

 ~~$$_$=!%6t||%DE  !. + AA,O	KK	*+ r   c                 8   | j                          |xs | j                  }	 | j                  j                  j	                  |j
                        }	 | j                  j                  j                  | j                  j                  j                         }}|rt        | d| d|j
                  f      }n+dj                  t        | d| d      |j
                        }||fS # | j                  j                  $ r d}Y w xY w# t        $ r d}Y ||fS w xY w)a  
        Get the admin url for the page content extensions menu item, depending on whether a
        :class:`~cms.extensions.models.PageContentExtension` instance exists for the
        :class:`~cms.models.contentmodels.PageContent` displayed.

        Return a tuple of the page content extension and the url; the extension is None
        if no instance exists, the url is None is no admin is registered for the extension.
        r!   Nr#   r$   r%   r'   r(   )r   r   r)   r*   r+   r,   r-   r.   r/   r0   r1   r	   r2   r   )r   page_content_objr   pagecontent_extensionr/   r4   r5   s          r   rC   z1ExtensionToolbar.get_page_content_extension_admink   s    	'<4+<+<	)$(JJ$6$6$:$:loo$:$^!		$(JJ$4$4$>$>

@S@S@Y@Y@[zI$)YKqG*LTiTlTlSno	3::!YKqD"ABLOO	
 %i// zz&& 	)$(!	)  	I$i//	s$   0C' BD 'DDDDc                 .    |j                  |||      }|S )zG
        Utility function to get a submenu of the current menu
        )position)r   )r   current_menukeylabelrM   extension_menus         r   _get_sub_menuzExtensionToolbar._get_sub_menu   s!     &88eh8Wr   r   )r0   
__module____qualname____doc__r)   r   r   r   r   r6   rH   rC   rR    r   r   r   r      s5    4EDL
)4 D06r   r   )r=   django.urlsr   
cms.modelsr   cms.toolbar_baser   	cms.utilsr   cms.utils.compat.warningsr   cms.utils.page_permissionsr   cms.utils.urlutilsr	   r   rV   r   r   <module>r^      s+     & " ' ' A ; ,~z ~r   