
    BhOB              	          d dl mZ d dlmZmZ d dlmZ d dlmZ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mZmZmZ  eed
      Z eed      Z eed      Z eed      Z eed      ZeegegegegeegeegegeegdZd?dZd?dZd@dZd Z d Z!d Z"e e d      d?d              Z#e e d      d?d              Z$e e d      d?d              Z%e e d      d?d              Z&e e d      d?d              Z'e e d       d?d!              Z(e e d"      d?d#              Z)e e d$      d?d%              Z*e e d&      d?d'              Z+ed?d(       Z,e e d      d?d)              Z-e e d      d*               Z. e d      dAd+       Z/ed,        Z0d- Z1d@d.Z2d@d/Z3d@d0Z4d@d1Z5d@d2Z6d@d3Z7d@d4Z8d@d5Z9d@d6Z:d@d7Z;d@d8Z<d@d9Z=d@d:Z>d@d;Z?d@d<Z@d@d=ZAdBd>ZBy)C    )wraps)get_permission_cacheset_permission_cache)GRANT_ALL_PERMISSIONS)PagePermissionTuple)get_current_site)available_attrs)RemovedInDjangoCMS51Warningget_cms_setting)cached_funcget_model_permission_codenameget_page_actions_for_userhas_global_permissionaddchangedeletepublishview)add_pagechange_pagechange_page_advanced_settingschange_page_permissionsdelete_pagedelete_page_translation	move_pagepublish_pageNc                    ddl m} ddlm}m} |j
                  j                  |       }|r|j                  |      }|j                  j                  |      }|j                  j                  ||j                  dd      	      S )
Nr   )ContentType)PageContentPlaceholder)page)languagepkTflat)content_typeobject_id__in)
"django.contrib.contenttypes.modelsr    
cms.modelsr!   r"   admin_managerfilterobjectsget_for_modelvalues_list)r#   r$   r    r!   r"   page_contentsr(   s          J/home/dcms/DCMS/lib/python3.12/site-packages/cms/utils/page_permissions.py_get_all_placeholdersr3   %   s    >3--44$4?M%,,h,?&&44[AL%%!#//4/@ &      c                     t        | ||      S )Nsiteuser_can_change_page)userr#   r$   r7   s       r2   _check_delete_translationr;   4   s    d66r4   c                 8   | j                   st        d      st        S |rt        | |||      rt        S |rt	        | |      }t
        }nd }t
        j                  }||S  || |      }|j                         D ]  \  }}	t        | |t        |	              ||   S )N
PERMISSION)action	use_cache)
is_superuserr   r   r   r   r   without_cacheitemsr   list)
r:   r7   r>   check_globalr?   cachedget_page_actionspage_actionsact
page_pathss
             r2   &_get_page_permission_tuples_for_actionrJ   8   s     = %$-dDS\]$$%dF344BB#D$/L'--/ :ZT3Z(89:r4   c                       fd}|S )Nc                 H     t         t                      fd       }|S )Nassignedc                     | j                   syt           }| j                  |      syt        d      }| j                  s|r | g|i |S y)NFr=   T)is_authenticated_django_permissions_by_action	has_permsr   r@   )r:   argskwargspermissionspermissions_enabledr>   funcs        r2   wrapperz<auth_permission_required.<locals>.decorator.<locals>.wrapperU   sY    ((7?K>>+. "1,"?$$)<D242622r4   r   r
   )rW   rX   r>   s   ` r2   	decoratorz+auth_permission_required.<locals>.decoratorT   s(    	tod3	4	 
5	  r4    )r>   rZ   s   ` r2   auth_permission_requiredr\   S   s    & r4   c                 F     t         t                     d fd	       }|S )NrM   c                 8    t        | ||      sy | ||      S )Nr6   Fr8   r:   r#   r7   rW   s      r2   rX   z+change_permission_required.<locals>.wrapperk   s!    #D$T:D$T**r4   NrY   rW   rX   s   ` r2   change_permission_requiredrb   j   (    
4/$/0+ 1+ Nr4   c                 F     t         t                     d fd	       }|S )NrM   c                 2    t        d      sy | ||      S )Nr=   Tr6   r   r_   s      r2   rX   z-skip_if_permissions_disabled.<locals>.wrappert   s    |,D$T**r4   r`   rY   ra   s   ` r2   skip_if_permissions_disabledrf   s   rc   r4   r   c                 6    |
t               }t        | |d      S )Nr   r>   )r	   r   r:   r7   s     r2   user_can_add_pagerj   |   s      |! tJ??r4   c                 $    t        || d|      }|S )z
    Return true if the current user has permission to add a new page
    under target.
    :param user:
    :param target: a Page object
    :param site: optional Site object (not just PK)
    :return: Boolean
    r   r#   r:   r>   r7   has_generic_permission)r:   targetr7   has_perms       r2   user_can_add_subpagerq      s!     &	H Or4   r   c                 $    t        || d|      }|S Nr   rl   rm   )r:   r#   r7   
can_changes       r2   r9   r9      s"     (	J r4   r   c                     t        || d|      }|syt        |      }|D ]+  }|j                  | |j                  j                  g      r+ y y)Nr   rl   FT)rn   r3   has_delete_plugins_permissionsourcer$   )r:   r#   r7   rp   placeholdersplaceholders         r2   user_can_delete_pagerz      sb     &	H (.L# 88@S@S@\@\?]^ r4   r   c                     t        || d|      }|syt        ||      j                  |      j                         }|j	                         D ]  }|j                  | |g      r y y)Nr   rl   F)cmsplugin__languageT)rn   r3   r-   distinctiteratorrv   )r:   r#   r$   r7   rp   rx   ry   s          r2    user_can_delete_page_translationr      sz     &(	H  	dH-	H	-	  $,,. 88zJ r4   r   c                 $    t        || d|      }|S )Nr   rl   rm   r:   r#   r7   rp   s       r2   user_can_publish_pager      s!     &	H Or4   r   c                 $    t        || d|      }|S )Nr   rl   rm   r   s       r2   &user_can_change_page_advanced_settingsr      s!     &.	H Or4   r   c                 $    t        || d|      }|S )Nr   rl   rm   r   s       r2    user_can_change_page_permissionsr      s!     &(	H Or4   r   c                 $    t        || d|      }|S )Nr   rl   rm   r   s       r2   user_can_move_pager      s!     &	H Or4   c                 "   |
t               }| j                  ryt        d      }|dk(  xs |dk(  xr | j                  }|j	                  |      }|s|ry| j
                  syt        | |      ry|syt        | |      ryt        || dd      }|S )	NT
PUBLIC_FORallstaffFr6   	view_page)r#   r:   r>   rD   )	r	   r@   r   is_staffhas_view_restrictionsrP   user_can_view_all_pagesr9   rn   )r:   r#   r7   
public_forcan_see_unrestrictedis_restrictedrp   s          r2   user_can_view_pager     s    |! .J%.[:3H3ZT]] ..t4M1 "" t$/D$' %	H Or4   c                 $    t        || d|      }|S rs   rm   r   s       r2   user_can_view_page_draftr   -  s!     &	H Or4   c                     t        | |d      S )Nr   rh   )r   ri   s     r2   user_can_change_all_pagesr   9  s     !tMBBr4   c                 L    t        | |d|      }|t        k(  xs t        |      S )NTr:   r7   rD   r?   )get_change_perm_tuplesr   bool)r:   r7   r?   perm_tupless       r2   !user_can_change_at_least_one_pager   ?  s0    (	K //D43DDr4   c                     | j                   ryt        d      s't        d      }|dk(  xs |dk(  xr | j                  }|S | j                  sy| j	                  t
              ryt        | |      ryt        | |d      S )	NTr=   r   r   r   Fr   rh   )r@   r   r   rP   rp   PAGE_VIEW_CODENAMEr   r   )r:   r7   r   r   s       r2   r   r   J  s    <($\2
)U2_zW7L7^QUQ^Q^##  }}'(  t, tK@@r4   c                    dd l }dd l}ddlm} dj	                  |j                         d   d   j                  d      d d       }|j                  | d| dt        d	        |       }| D ]  }|t        |      j                  d
      z  }! t        t        j                  j                  |      j                  dd            S )Nr   )Q_      z_ids is deprecated. Use z_perm_tuples instead.)
stacklevelnoder%   Tr&   )inspectwarningsdjango.db.modelsr   joinstacksplitwarnr   r   
allow_listrC   r   r.   r-   r0   )r   r   r   r   fn_nameallowed_pagesperms          r2   _perm_tuples_to_idsr   c  s    "hhw}}q)!,2237<=GMMWI5gY>ST-!  = CM B.99&AAB ##M2>>t$>OPPr4   c                 &    t        | |d||      }|S )zt
    Give a list of page where the user has add page rights or the string
    "All" if the user has all rights.
    r   r:   r7   r>   rD   r?   rJ   r:   r7   rD   r?   r   s        r2   get_add_perm_tuplesr   t  s%    
 9!K r4   c                 6    t        | |||      }t        |      S NrD   r?   )r   r   r   s        r2   get_add_idsr     s    %dD|W`aK{++r4   c                 &    t        | |d||      }|S )zp
    Give a list of page where the user has edit rights or the string "All" if
    the user has all rights.
    r   r   r   r   s        r2   r   r     %    
 9!K r4   c                 6    t        | |||      }t        |      S r   )r   r   r   s        r2   get_change_idsr         (t,ZcdK{++r4   c                 &    t        | |d||      }|S )z}
    Give a list of page where the user can change advanced settings or the
    string "All" if the user has all rights.
    r   r   r   r   s        r2   (get_change_advanced_settings_perm_tuplesr     s%    
 9.!K r4   c                 6    t        | |||      }t        |      S Nr   )r   r   r   s        r2    get_change_advanced_settings_idsr     s%    :!	K {++r4   c                 &    t        | |d||      }|S )z?Give a list of page where the user can change permissions.
    r   r   r   r   s        r2   "get_change_permissions_perm_tuplesr     s%     9(!K r4   c                 6    t        | |||      }t        |      S r   )r   r   r   s        r2   get_change_permissions_idsr     s%    4!	K {++r4   c                 &    t        | |d||      }|S )zr
    Give a list of page where the user has delete rights or the string "All" if
    the user has all rights.
    r   r   r   r   s        r2   get_delete_perm_tuplesr     r   r4   c                 6    t        | |||      }t        |      S r   )r   r   r   s        r2   get_delete_idsr     r   r4   c                 &    t        | |d||      }|S )z.Give a list of pages which user can move.
    r   r   r   r   s        r2   get_move_page_perm_tuplesr     %     9!K r4   c                 6    t        | |||      }t        |      S r   )r   r   r   s        r2   get_move_page_idsr     s    +D$\]fgK{++r4   c                 &    t        | |d||      }|S )zs
    Give a list of page where the user has publish rights or the string "All" if
    the user has all rights.
    r   r   r   r   s        r2   get_publish_perm_tuplesr     s%    
 9!K r4   c                 6    t        | |||      }t        |      S r   )r   r   r   s        r2   get_publish_idsr     s    )$<[deK{++r4   c                 &    t        | |d||      }|S )z.Give a list of pages which user can view.
    r   r   r   r   s        r2   get_view_perm_tuplesr     r   r4   c                 6    t        | |||      }t        |      S r   )r   r   r   s        r2   get_view_idsr     s    &tTXabK{++r4   c           
         	 |
t               }| j                  	t        t        t        t
        t        t        t        t        t        d	}||   } |||||      }|t        k(  xs t        	fd|D              S )N)	r   r   r   r   r   r   r   r   r   r   c              3   R   K   | ]  }t        |      j                           y wr`   )r   contains).0r   	page_paths     r2   	<genexpr>z)has_generic_permission.<locals>.<genexpr>,  s&      66:&&y16s   $')r	   pathr   r   r   r   r   r   r   r   r   any)
r#   r:   r>   r7   rD   r?   actions_maprW   
page_permsr   s
            @r2   rn   rn     s~    |!		I'-)Q#E-#9/.)
K vDdD|yQJ.. # 6>H6 3 r4   r`   )TT)T)NTT)C	functoolsr   cms.cache.permissionsr   r   cms.constantsr   r+   r   r   	cms.utilsr	   cms.utils.compat.djr
   cms.utils.compat.warningsr   cms.utils.confr   cms.utils.permissionsr   r   r   r   PAGE_ADD_CODENAMEPAGE_CHANGE_CODENAMEPAGE_DELETE_CODENAMEPAGE_PUBLISH_CODENAMEr   rQ   r3   r;   rJ   r\   rb   rf   rj   rq   r9   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rn   r[   r4   r2   <module>r      s    L / , & / A *  2$> 4T8D 4T8D 5dIF 24@ 
 #$89()&:%; 45(*>? 46JK&')+@A	! 7 6. *%@ & @ *% & $ -( )  -( ) $ 34 5 . .) *  9: ;  34 5  +& '  ( (V -( )  -(C ) C -(E )E A A0Q",
,
,
,,

,
,

,
r4   