
    hu4                        d dl Z 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 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' ddl(m)Z)m*Z* ddl+m,Z, g dZ-dZ.d Z/ G d de&      Z0 G d dejb                        Z2 G d deejf                        Z4d Z5 G d  d!ejb                        Z6d" Z7 G d# d$e      Z8y)%    N)defaultdict)
add_plugin)	CMSPluginPlaceholder)PlaceholderRelationField)ContentAdminManagerWithUserMixin)get_model_permission_codename)copy_plugins_to_placeholder)admin_reverse)settings)Site)modelstransaction)FQ)	force_str)cached_property)get_language)gettext_lazy)TranslatableModelTranslatedFields   )CHANGE_ALIAS_URL_NAMECHANGE_CATEGORY_URL_NAME)is_versioning_enabled)CategoryAliasAliasContentAliasPlugindefaultc                  R    t         t        d      fg} | t        t        dg       z  } | S )NDefaultDJANGOCMS_ALIAS_TEMPLATES)TEMPLATE_DEFAULT_getattrr   )choicess    F/home/dcms/DCMS/lib/python3.12/site-packages/djangocms_alias/models.pyget_templatesr*   $   s8    	1Y<(G w#
 G
 N    c                   v    e Zd Z e ej
                   ed      d      ddgi      Z G d d      Zd	 Z	d
 Z
y)r   namex   verbose_name
max_lengthunique_together)r-   language_code)r-   metac                   2    e Zd Z ed      Z ed      ZdgZy)Category.Metacategory
categoriestranslations__nameN)__name__
__module____qualname__r&   r0   verbose_name_pluralordering r+   r)   Metar6   9   s    }o()r+   r@   c                 (    | j                  dd      S )Nr-   T)any_language)safe_translation_getterselfs    r)   __str__zCategory.__str__>   s    ++F+FFr+   c                 :    t        t        | j                  g      S )z0Builds the url to the admin category change viewargs)r   r   pkrD   s    r)   get_admin_change_urlzCategory.get_admin_change_urlB   s    5TWWIFFr+   N)r:   r;   r<   r   r   	CharFieldr&   translationsr@   rF   rK   r?   r+   r)   r   r   0   sJ    #V6
  ";!<=L* *
GGr+   r   c            	       B    e Zd ZdZdZe ed      fe ed      ffZ ej                   ed      eedd      Z	 ej                  e ed	      d
ej                        Z ej                   ed      d      Z ej                   ed      ddd ed            Z ej                  eej$                  dd      Z G d d      Z fdZd Zed        Zed        Zd Zed        Zd%dZd&dZd&dZd&dZd  Z d! Z!e"jF                   fd"       Z$ fd#Z%d$ Z& xZ'S )'r   templatecodezby templatezby codecreation_method   T)r0   r(   r!   r1   blankr7   aliasesr0   related_name	on_deletepositionr   )r0   r!   zstatic code   z!To render the alias in templates.)r0   r1   rS   null	help_text)rW   rZ   rS   c                   6    e Zd Z ed      Z ed      ZdgZdZy)
Alias.MetaaliasrT   rX   ))static_codesiteN)r:   r;   r<   r&   r0   r=   r>   r2   r?   r+   r)   r@   r]   h   s!    z	l<4r+   r@   c                 N    i | _         i | _        g | _        t        |   |i | y N)_plugins_cache_content_cache_content_languages_cachesuper__init__rE   rI   kwargs	__class__s      r)   rg   zAlias.__init__n   s-      (*%$)&)r+   c                     | j                   S rb   )r-   rD   s    r)   rF   zAlias.__str__t   s    yyr+   c                 *    | j                         xs dS )z$Show alias name for current language )get_namerD   s    r)   r-   z
Alias.namew   s     }}$"$r+   c                 6    | j                   j                         S rb   )cms_pluginsexistsrD   s    r)   	is_in_usezAlias.is_in_use|   s    &&((r+   c                 :    t        t        | j                  g      S )NrH   )r   r   rJ   rD   s    r)   rK   zAlias.get_admin_change_url   s    2$''CCr+   c           
         t               }t        t               }| j                  j                  d      j	                  d      }|D ]  }|j
                  j                  }||j                  j                  }|j                  d      r|j                  dd      j                         }|j                  j                  |      j                  }t        || d      }	|	r||   j!                  |	g       |j!                  |g       |j!                  |g        |j!                  |j#                         D 
cg c](  \  }
}|
j$                  j'                  |      D ]  }| * c}}}
       t)        |      S c c}}}
w )Nplaceholderplaceholder__sourceContentrm   _id)pk__in)setr   rp   select_relatedprefetch_relatedru   sourcerj   r:   endswithreplacelower_meta	get_fieldrelated_modelr'   updateitemsobjectsfilterlist)rE   r   
object_idspluginspluginobjobj_class_name	attr_nameattr_related_modelid_attrmodel_classidss               r)   objects_usingzAlias.objects_using   sZ   % %
""11-@QQRgh 	&F$$++C { ]]33N&&y1*229bAGGI	%(YY%8%8%C%Q%Q"!#)C'8912997)DNNC5)u%#	&$ 	)3)9)9);nn%[#{GZGZGaGailGaGmnSnSn	
 G} os   ;-E<c                     | j                  |d      }t        |dd| j                   d      }t               r6|r4ddlm} |j                  j                         }|j                  |k(  r| dS |S )	NTshow_draft_contentr-   zAlias z (No content)r   )DRAFTz (Not published))	get_contentr'   rJ   r   djangocms_versioning.constantsr   versionsfirststate)rE   languagecontentr-   r   versions         r)   rn   zAlias.get_name   sp    ""8"Ew&	(GH "w<&&,,.G}}%/00r+   c                 N   |s
t               }	 | j                  |   S # t        $ r~ |r!| j                  d      j	                         }n| j                  j                         }|j                  |      }|j                         | j                  |<   | j                  |   cY S w xY w)Nadmin_managermanager)r   )r   rd   KeyErrorcontentslatest_contentallr   r   )rE   r   r   qss       r)   r   zAlias.get_content   s    #~H
	1&&x00 	1!]]?];JJL]]&&(H-B,.HHJD)&&x00	1s    BB$#B$c                 H    | j                  ||      }|r|j                  S d S )N)r   r   )r   ru   )rE   r   r   r   s       r)   get_placeholderzAlias.get_placeholder   s+    ""HI["\&-w""747r+   c                     |s
t               }	 | j                  |   S # t        $ rH | j                  ||      }|r|j	                         ng }|| j                  |<   | j                  |   cY S w xY w)Nr   )r   rc   r   r   get_plugins_list)rE   r   r   ru   r   s        r)   get_pluginszAlias.get_plugins   sz    #~H	1&&x00 	1..xL^._K8Ck224G,3D)&&x00		1s    AA.-A.c                     | j                   s8| j                  d      j                         }|j                  dd      | _         | j                   S )Nr   r   r   T)flat)re   r   current_contentvalues_list)rE   querysets     r)   get_languageszAlias.get_languages   sI    ,,}}_}=MMOH,4,@,@RV,@,WD),,,r+   c                 .    i | _         i | _        g | _        y rb   )rc   rd   re   rD   s    r)   clear_cachezAlias.clear_cache   s      (*%r+   c                     t        |   |i | | j                  j                  j	                  | j
                        j                  t        d      dz
         y )N)position__gtrX   r   rX   )rf   deleter7   rT   r   rX   r   r   rh   s      r)   r   zAlias.delete   sP    ''$$$--$@GGz]Q& 	H 	
r+   c                     | j                   j                  r)| j                  j                  j	                         | _        t        |   |i |S rb   )_stateaddingr7   rT   countrX   rf   saverh   s      r)   r   z
Alias.save   s>    ;; MM11779DMw|T,V,,r+   c                 r   | j                   }||kD  rt        j                  }||f}nt        j                  }||f}t	        | j
                         t	        |      g}|| _         | j                           | j                  j                  j                  | j                   |t        d      d             y )NrJ   )position__rangerX   r   r   )rX   operatoraddsubr   rJ   r   r7   rT   r   r   r   )rE   rX   previous_positionopposition_rangefilterss         r)   _set_positionzAlias._set_position   s     MMx'B&(9:NB/:N $'']Nn-

 !		$$$g.55r!J-QR?S5Tr+   rb   )NF)(r:   r;   r<   CREATION_BY_TEMPLATECREATION_BY_CODEr&   CREATION_METHODSr   rL   rQ   
ForeignKeyr   PROTECTr7   PositiveIntegerFieldrX   r_   r   CASCADEr`   r@   rg   rF   r   r-   rr   rK   r   rn   r   r   r   r   r   r   atomicr   r   r   __classcell__rj   s   @r)   r   r   G   s   %	q/0	1Y<( 'f&&()  O !v  z]..	H +v**z]H #&""}%78K 6TV^^$dSD5 5* % % ) )D  61 8	1-+
 
 
-
Ur+   r   c                       e Zd ZdZy)AliasContentManagerz:Adds with_user syntax to AliasContent w/o using versioningN)r:   r;   r<   __doc__r?   r+   r)   r   r      s    Dr+   r   c                 D    t        t        d      }|j                  |      S )Nchange)r
   r   has_perm)ru   user
permissions      r)   can_change_aliasr      s    .|XFJ==$$r+   c                   N    e Zd Z ej                  eej                  d      Z ej                   e	d      d      Z
 eeg      ZdZ ej                  de	      Z e       Z e       Z G d
 d      Z fdZd Zed        Zd Zd Zd Zej<                  dd       Z xZ S )r   r   )rW   rV   r-   r.   r/   )checksr   
   )r1   r!   c                   ,    e Zd Z ed      Z ed      Zy)AliasContent.Metazalias contentzalias contentsNr:   r;   r<   r&   r0   r=   r?   r+   r)   r@   r     s    ) 01r+   r@   c                     t        |   |i | t        j                  | j                  j                  d      _        y )Nr   )rf   rg   r   	LANGUAGESr   r   r(   rh   s      r)   rg   zAliasContent.__init__  s2    $)&)3;3E3E

Z(0r+   c                 :    | j                    d| j                   dS )Nz ())r-   r   rD   s    r)   rF   zAliasContent.__str__  s    ))Bt}}oQ//r+   c                     | j                   j                  | j                  j                  xs | j                        d   }| |_        |S )N)slotr   )placeholdersget_or_creater^   r_   placeholder_slotnamer}   )rE   ru   s     r)   ru   zAliasContent.placeholder   sE    ''554::;Q;Q;nUYUnUn5opqr!r+   c                     | j                   gS rb   ru   rD   s    r)   get_placeholderszAliasContent.get_placeholders&  s      !!r+   c                      y rb   r?   rD   s    r)   get_templatezAliasContent.get_template)  s    r+   c                 0    | j                   j                  gS )z9Returns a list of placeholder slots used by this content.)ru   r   rD   s    r)   get_placeholder_slotsz"AliasContent.get_placeholder_slots,  s      %%&&r+   c                    |s|st        || j                         y |rI|j                  j                  | j                         t	        |d| j
                  | j                        S |j                  }t        j                  j                  |j                  g|j                         z         }d|d}t        || j                  | j
                         |j                          t	        |fd| j
                  | j                  d|}|S )Nr   r   )plugin_typer   r^   )id__inleft)rX   target)ru   r   )r   ru   cmsplugin_setr   r   r   r^   r   r   r   rJ   _get_descendants_idsr   )rE   replaced_placeholderreplaced_pluginr   ru   add_plugin_kwargs
new_plugins          r)   populatezAliasContent.populate0  s   #O' ,,  ..55$BRBR5S$#jj	  &11##**#&&'/*N*N*PP + 
 *0?K#((]]	

 	 
]]**	

  

 r+   )NNN)!r:   r;   r<   r   r   r   r   r^   rL   r&   r-   r   r   r   r   r   r   r   r   r   r   r@   rg   rF   r   ru   r   r   r   r   r   r   r   r   s   @r)   r   r     s    F..E
 6vYD ,4D3EFL$vH
 "#G')M2 2F0  
"' $ $r+   r   c           	      N   t         j                  j                  D ci c]T  }t         j                  j                  j                  |j                  k7  r!|j                  t        | |j                        V }}t        j                  j                  di |}g }| j                  j                         D ]  }t        j                  j                  D ci c]U  }|j                  t        j                  j                  j                  dfvr!|j                  t        ||j                        W }}|j                  r||d<   t        j                  j                  di |}|j                  |       |j                  |         |j                  j                  |  |S c c}w c c}w )zCopy the AliasContent object and deepcopy its
    placeholders and plugins

    This is needed for versioning integration.
    r}   r?   )r   r   fieldsrJ   r-   r'   r   creater   r   r   r}   copy_pluginsappendr   )original_contentfieldcontent_fieldsnew_contentnew_placeholdersru   placeholder_fieldsnew_placeholders           r)   copy_alias_contentr  X  s{    "''..  %%3 	

G,ejj99N  &&--??K '4488: 1 %**11
 zz+"3"3"6"6";";X!FF	 JJUZZ88
 
 +6x(%--44J7IJ  101 !K  "235
s   AFAF"c                       e Zd Z ej                  e ed      dej                        Z ej                   ed       e
       ed      Z G d d      Zd	 ZddZy
)r    r^   rp   rU   rO   rY   )r0   r(   r!   r1   c                   ,    e Zd Z ed      Z ed      Zy)AliasPlugin.Metazalias plugin modelzalias plugin modelsNr   r?   r+   r)   r@   r    s    -. 56r+   r@   c                 @    t        | j                  j                        S rb   )r   r^   r-   rD   s    r)   rF   zAliasPlugin.__str__  s    ))r+   Nc                     | j                   j                  |      }t        j                  j	                  |      }|j	                  t        |       t        |      z        }|j                         S )N)placeholder_idr   )alias__contents__placeholders)r^   r   r    r   r   r   rq   )rE   r   ru   r   s       r)   is_recursivezAliasPlugin.is_recursive  sa     jj00:%%,,& - 
 ..dak.Z!Z[~~r+   rb   )r:   r;   r<   r   r   r   r&   r   r^   rL   r*   r%   rO   r@   rF   r  r?   r+   r)   r    r    |  sb    FwZ"..	E  vz] 	H7 7*	 r+   r    )9r   collectionsr   cms.apir   
cms.modelsr   r   cms.models.fieldsr   cms.models.managersr   r	   cms.utils.permissionsr
   cms.utils.pluginsr   cms.utils.urlutilsr   django.confr   django.contrib.sites.modelsr   	django.dbr   r   django.db.modelsr   r   django.utils.encodingr   django.utils.functionalr   django.utils.translationr   r   r&   parler.modelsr   r   	constantsr   r   utilsr   __all__r%   r*   r   Modelr   Managerr   r   r   r  r    r?   r+   r)   <module>r)     s     #  - 6 B ? 9 ,   , ) ! + 3 1 6 = F (  	G  G.lUFLL lU^	- 	%
T6<< Tn!H )  r+   