
    Bh*/                     v   d dl mZ 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 d dlmZmZ ej4                  j7                  dd      \  ZZdZ	  ej>                  ee      Ze e
dej4                  ded      dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(e! ed      fe" ed      fe# ed      fe$ ed      fe% ed      ffZ) G d dejT                        Z+ G d de+      Z, G d d e-      Z. G d! d"e+      Z/ G d# d$e      Z0 G d% d&e      Z1 G d' d(e      Z2y# e $ r Y w xY w))    )apps)settings)GroupUserManager)Site)ImproperlyConfiguredValidationError)models)Q)	force_str)gettext_lazy)Page)GlobalPagePermissionManagerPagePermissionManager.   Nz%You have defined a custom user model z, but the app z" is not in settings.INSTALLED_APPS            zCurrent pagezPage children (immediate)zPage and children (immediate)zPage descendantszPage and descendantsc                       e Zd ZdZ ej
                  ej                  ej                   e	d      dd      Z
 ej
                  eej                   e	d      dd      Z ej                   e	d      d      Z ej                   e	d      d      Z ej                   e	d	      d      Z ej                   e	d
      d      Z ej                   e	d      d      Z ej                   e	d      d e	d            Z ej                   e	d      d      Z ej                   e	d      d e	d            Z G d d      Z fdZed        Z fdZd Zd Zed        Zed        Z xZ S )AbstractPagePermissionzAbstract page permissions
    userT)	on_deleteverbose_nameblanknullgroupzcan edit)defaultzcan addz
can deletezcan publishzcan change advanced settingsFzcan change permissionszon page level)r   	help_textzcan movezview restrictedzfrontend view restrictionc                       e Zd ZdZdZy)AbstractPagePermission.MetaTcmsN)__name__
__module____qualname__abstract	app_label     K/home/dcms/DCMS/lib/python3.12/site-packages/cms/models/permissionmodels.pyMetar"   _   s    	r*   r,   c                 ,   t         |           | j                  s | j                  st	        t        d            | j                  ry | j                  rt        d      }t	        |      | j                  rt        d      }t	        |      | j                  rt        d      }t	        |      | j                  rt        d      }t	        |      | j                  rt        d      }t	        |      | j                  rt        d      }t	        |      y )NzPlease select user or group.zdUsers can't create a page without permissions to change the created page. Edit permissions required.z\Users can't delete a page without permissions to change the page. Edit permissions required.z]Users can't publish a page without permissions to change the page. Edit permissions required.zlUsers can't change page advanced settings without permissions to change the page. Edit permissions required.zfUsers can't change page permissions without permissions to change the page. Edit permissions required.zZUsers can't move a page without permissions to change the page. Edit permissions required.)supercleanr   r   r	   _
can_changecan_add
can_deletecan_publishcan_change_advanced_settingscan_change_permissionscan_move_pageselfmessage	__class__s     r+   r/   zAbstractPagePermission.cleanc   s   yy!!$B"CDD??<< Q RG!'**?? I JG!'** I JG!'**,, I JG!'**&& I JG!'** I JG!'** r*   c                     t        d | j                  | j                  f      }dj                  |D cg c]  }t	        |       c}      xs dS c c}w )z<Return audience by priority, so: All or User, Group
        c                     | S Nr)   )items    r+   <lambda>z1AbstractPagePermission.audience.<locals>.<lambda>   s    d r*   z, zNo one)filterr   r   joinr   )r9   targetsts      r+   audiencezAbstractPagePermission.audience   sD     *TYY

,DEyy81)A,89EXE8s   Ac                 T    | j                   s| j                  sy t        |   |i |S r>   )r   r   r.   save)r9   argskwargsr;   s      r+   rG   zAbstractPagePermission.save   s'    yyw|T,V,,r*   c                 l    | j                         D cg c]  }| j                  |      r| }}|S c c}w r>   )get_permissions_by_actionhas_configured_action)r9   actionactionss      r+   get_configured_actionsz-AbstractPagePermission.get_configured_actions   s?    (,(F(F(H :f008  : ::s   1c                 R      j                         |   }t         fd|D              S )Nc              3   6   K   | ]  }t        |        y wr>   )getattr).0permr9   s     r+   	<genexpr>z?AbstractPagePermission.has_configured_action.<locals>.<genexpr>   s     ?474&?s   )rK   all)r9   rM   permissionss   `  r+   rL   z,AbstractPagePermission.has_configured_action   s'    446v>?;???r*   c                     g d}|S )N)r2   r1   r3   r4   r5   r6   r7   can_viewr)   )clspermss     r+   get_all_permissionsz*AbstractPagePermission.get_all_permissions   s    	
 r*   c           
      >    ddgdgddgddgddgddgddgddgdgd		}|S )
Nr2   r1   r5   r6   r3   r4   r7   rY   )	add_pagechange_pagechange_page_advanced_settingschange_page_permissionsdelete_pagedelete_page_translationpublish_page	move_page	view_pager)   )rZ   permissions_by_actions     r+   rK   z0AbstractPagePermission.get_permissions_by_action   sX    
 #L1(>.:<Z-[(46N'O(,7(4l'C)=9&8$
!
 %$r*   )!r$   r%   r&   __doc__r
   
ForeignKeyr   AUTH_USER_MODELCASCADEr0   r   r   r   BooleanFieldr1   r2   r3   r4   r5   r6   r7   rY   r,   r/   propertyrE   rG   rO   rL   classmethodr\   rK   __classcell__r;   s   @r+   r   r   ?   s    6  ..vYD F..wZE %$$Qz]DAJ!f!!!I,=G$$$Q|_dCJ%&%%a&6EK#66#6#6q9W7Xbg#h 0V00	
"#Ua>P (F''*tDM"v""1%6#7RSToRpqH %+N F F-
@   % %r*   r   c                       e Zd ZdZ ej
                   ed      d ed            Z ej                  e	d ed       ed            Z
 e       Z G d	 d
      Zd Zy)GlobalPagePermissionz(Permissions for all pages (global).
    zcan recover pagesTzcan recover any deleted page)r   r   r    z>If none selected, user haves granted permissions to all sites.sites)tor   r    r   c                   0    e Zd Z ed      Z ed      ZdZy)GlobalPagePermission.MetazPage global permissionzPages global permissionsr#   Nr$   r%   r&   r0   r   verbose_name_pluralr(   r)   r*   r+   r,   rv      s    12 :;	r*   r,   c                      d| j                   z  S )Nz%s :: GLOBAL)rE   r9   s    r+   __str__zGlobalPagePermission.__str__   s    --r*   N)r$   r%   r&   rh   r
   rl   r0   can_recover_pageManyToManyFieldr   rs   r   objectsr,   r{   r)   r*   r+   rr   rr      sr    *v***+23
 #F""TUwZ	E *+G 
.r*   rr   c                   f    e Zd Zej                  fdededefdZdej                  fdedede	fdZ
y)	PermissionTuplepathsteplenreturnc                    | \  }}|t         k(  r||k(  S |t        k(  r-|j                  |      xr t        |      t        |      |z   k(  S |t        k(  r*|j                  |      xr t        |      t        |      kD  S |t
        k(  r|j                  |      S |t        k(  r-|j                  |      xr t        |      t        |      |z   k  S y)NF)ACCESS_PAGEACCESS_CHILDREN
startswithlenACCESS_DESCENDANTSACCESS_PAGE_AND_DESCENDANTSACCESS_PAGE_AND_CHILDREN)r9   r   r   grant_on	perm_paths        r+   containszPermissionTuple.contains   s    "){"9$$(??9-W#d)s9~PW?W2WW++??9-L#d)c)n2LL44??9--11??9-W#d)s9~PW?W2WWr*    rA   c           
         |dk7  r| d}| \  }}|t         k(  rt        di | d|iS |t        k(  r!t        di | d|| dt        |      |z   iS |t        k(  rt        di | d|| dt        |      iS |t
        k(  rt        di | d|iS |t        k(  r!t        di | d|| dt        |      |z   iS t               S )	Nr   __r   path__startswith__path__length__path__length__gt__path__length__lter)   )r   r   r   r   r   r   r   )r9   rA   r   r   r   s        r+   
allow_listzPermissionTuple.allow_list   s   R<xr]F${"/6($.//(k6("23TfX^;TVYZ^V_biVijkk++e6("23TfXEW;XZ]^bZcdee44;6("23T:;;11p6("23TfXEX;Y[^_c[dgn[nopps
r*   N)r$   r%   r&   r   r   strintboolr   r   r   r)   r*   r+   r   r      sH    15 S 3 $  (*$,,  C 1 r*   r   c            	            e Zd ZdZ ej
                   ed      ee      Z	 ej                  eej                  dd ed            Z e       Z G d d      Zd	 Z fd
Zd Zd Zd Z xZS )PagePermissionz'Page permissions for a single page
    zGrant on)choicesr   Tpage)r   r   r   r   c                   0    e Zd Z ed      Z ed      ZdZy)PagePermission.MetazPage permissionzPage permissionsr#   Nrw   r)   r*   r+   r,   r     s    *+ 23	r*   r,   c                     | j                   xr t        | j                        xs d}| d| j                   dt        | j	                                S )NNonez :: z has: )page_idr   r   rE   get_grant_on_display)r9   r   s     r+   r{   zPagePermission.__str__  sH    ||4	$)) 4>tDMM?&4;T;T;V1W0XYYr*   c                     t         |           | j                  r*| j                  t        k(  rt        d      }t        |      y y )Nz{Add page permission requires also access to children, or descendants, otherwise added page can't be changed by its creator.)r.   r/   r2   r   r   r0   r	   r8   s     r+   r/   zPagePermission.clean  sC    <<DMM[8  * +G "'** 9<r*   c                 X    t        | j                  | j                  j                  f      S r>   )r   r   r   r   rz   s    r+   get_page_permission_tuplez(PagePermission.get_page_permission_tuple  s    tyy~~>??r*   c                 ^    dd l }ddlm} |j                  d|d       | j	                         S )Nr   )RemovedInDjangoCMS60WarningzAget_page_ids is deprecated, use get_page_permission_tuple insteadr   )
stacklevel)warningscms.utils.compat.warningsr   warn_get_page_ids)r9   r   r   s      r+   get_page_idszPagePermission.get_page_ids  s6    I >?Zgh 	 	j !!##r*   c              #     K   | j                   t        z  r| j                   | j                   t        z  r6| j                  j                         j                  dd      }|E d {    y | j                   t        z  r| j                  j                         r"d | j                  j                         D        }n9| j                  j                         j                  dd      j                         }|E d {    y y 7 7 w)NpkT)flatc              3   4   K   | ]  }|j                     y wr>   )r   )rS   r   s     r+   rU   z/PagePermission._get_page_ids.<locals>.<genexpr>-  s     V4twwVs   )r   	MASK_PAGEr   MASK_CHILDRENr   get_child_pagesvalues_listMASK_DESCENDANTS_has_cached_hierarchyget_cached_descendantsget_descendant_pagesiterator)r9   childrendescendantss      r+   r   zPagePermission._get_page_ids#  s     ==9$,,===(yy002>>t$>OH]]--yy..0V4993S3S3UV"ii<<>JJ4VZJ[ddf""" .   #s%   A%D'D(BD:D;DD)r$   r%   r&   rh   r
   IntegerFieldr0   ACCESS_CHOICESr   r   ri   r   rk   r   r   r~   r,   r{   r/   r   r   r   ro   rp   s   @r+   r   r      su    "v""1Z=.RmnH6TV^^$dabciajkD#%G 
Z
+@$#r*   r   c                       e Zd ZdZy)PageUserManagerFN)r$   r%   r&   use_in_migrationsr)   r*   r+   r   r   4  s    r*   r   c                       e Zd ZdZ ej
                  ej                  ej                  dd      Z	 e
       Z G d d      Zy)PageUserz;Cms specific user data, required for permission system
    Tcreated_usersr   r   related_namec                   0    e Zd Z ed      Z ed      ZdZy)PageUser.MetazUser (page)zUsers (page)r#   Nrw   r)   r*   r+   r,   r   ?  s    '/	r*   r,   N)r$   r%   r&   rh   r
   ri   r   rj   SET_NULL
created_byr   r~   r,   r)   r*   r+   r   r   8  s@    """8#;#;v]ap  AJG r*   r   c                   x    e Zd ZdZ ej
                  ej                  ej                  dd      Z	 G d d      Z
y)PageUserGroupz<Cms specific group data, required for permission system
    Tcreated_usergroupsr   c                   0    e Zd Z ed      Z ed      ZdZy)PageUserGroup.MetazUser group (page)zUser groups (page)r#   Nrw   r)   r*   r+   r,   r   O  s    ,- 45	r*   r,   N)r$   r%   r&   rh   r
   ri   r   rj   r   r   r,   r)   r*   r+   r   r   E  s9    """  //)	J r*   r   )3django.appsr   django.confr   django.contrib.auth.modelsr   r   django.contrib.sites.modelsr   django.core.exceptionsr   r	   	django.dbr
   django.db.modelsr   django.utils.encodingr   django.utils.translationr   r0   
cms.modelsr   cms.models.managersr   r   rj   rsplituser_app_nameuser_model_nameUserget_registered_modelKeyErrorr   r   r   r   r   r   r   r   r   Modelr   rr   tupler   r   r   r   r   r)   r*   r+   <module>r      s      9 , H   + 6  "*!9!9!@!@a!H 	$4$$]ODD <
(0(@(@-	Q           	  !N#$a345q!@AB-./ !$:";<~%V\\ ~%B.1 .4e @7#+ 7#tk 
t 
E _	  		s   +D0 0D87D8