
    h*                     &   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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 m!Z!m"Z" ddlmZ# ddl$m%Z% g dZ&d Z' G d dejP                        Z) G d de)      Z* G d dejP                        Z+ G d de      Z, G d d      Z- G d de-ej\                        Z/ G d d e-ej\                        Z0 G d! d"ejb                        Z2 G d# d$ejb                        Z3y%)&    )	CMSPluginPlaceholder)get_current_site)get_model_permission_codenamehas_plugin_permission)admin_reverse)forms)admin)AdminTextInputWidgetAutocompleteSelectRelatedFieldWidgetWrapper)Site)transaction)gettext_lazy)TranslatableModelForm   )CATEGORY_SELECT2_URL_NAMESELECT2_ALIAS_URL_NAME)AliasAliasContentAliasPluginCategory)r   )emit_content_change)AliasPluginFormBaseCreateAliasFormCreateAliasFormCreateAliasWizardFormCreateCategoryWizardFormc                 T   t         j                  j                  d      }t        | j                  |j
                  t        j                  |j                  t        t        d            |j                  t        t        d            |j                  t        t        d                  S )Ncategoryaddchangedelete)
admin_sitecan_add_relatedcan_change_relatedcan_delete_related)
AliasModel_meta	get_fieldr   widgetremote_fieldr
   sitehas_permr   r   )	formfielduserdbfields      E/home/dcms/DCMS/lib/python3.12/site-packages/djangocms_alias/forms.pyget_category_widgetr3   )   s    ((4G$::)(E:
  ==)(H=
  ==)(H=
     c                   j    e Zd Z ej                  ej                  j                  d      d ej                               Z	 ej                  e
j                  j                         d ej                               Z ej                   ej                               Z G d d      Z fdZ xZS )	r   r   )plugin_typeF)querysetrequiredr+   )r+   c                       e Zd ZdZy)BaseCreateAliasForm.Media)z djangocms_alias/js/databridge.jsN)__name__
__module____qualname__js r4   r2   Mediar:   H   s    2r4   r@   c                     t         |          }|j                  d      }|j                  d      }|s |st        j                  t        d            |r |rt        j                  t        d            |S )Npluginplaceholderz7A plugin or placeholder is required to create an alias.zDAn alias can only be created from a plugin or placeholder, not both.)supercleangetr	   ValidationError_)selfcleaned_datarB   rC   	__class__s       r2   rE   zBaseCreateAliasForm.cleanK   sw    w}!!(+"&&}5k''*c(deek''   r4   )r;   r<   r=   r	   ModelChoiceFieldr   objectsexcludeHiddenInputrB   r   allrC   	CharFieldlanguager@   rE   __classcell__rK   s   @r2   r   r   ;   s    #U##""**w*? u  "F
 )%(($$((* u  "K
 u&7e&7&7&9:H3 3 r4   r   c                   d    e Zd Z ej                  d e             Z ej                  ej                  j                         d      Z ej                  ej                  j                         d      Z ej                   ed       ed      d      Zdd	 fd

Z fdZd Zd Zd Z xZS )r   T)r8   r+   Fr7   r8   zReplace current pluginz!Replace current plugin with alias)label	help_textr8   N)initialc          	         |j                  d      | _        t        |   |d|i| t	        t
        j                  j                  t        j                  | j                  d   j                  dt        d      i      | j                  d   _        t	        t
        j                  j                  t        j                  | j                  d   j                  dt        d      i      | j                  d   _        t        | j                  d	d
      s&t        j                          | j                  d   _        |xs i }|j#                  d      }|r|j$                  rw|j$                  j'                         }|j)                  |j*                  j,                  |j$                        }|r*d	|vr&t        j                          | j                  d   _        | j/                  | j                         t1               | j                  d   _        y )Nr0   rY   r-   data-placeholderzSelect a site)choicesattrsr    zSelect a categoryr   r!   replacerB   )instance)popr0   rD   __init__r   r   r-   fieldr
   fieldsr\   rH   r+   r    r   r	   rO   rF   parentget_plugin_classget_child_classesrC   slotset_category_widgetr   rY   )rI   rY   argskwargsrB   plugin_classallowed_childrenrK   s          r2   ra   zCreateAliasForm.__init__o   s   JJv&	$::6:%7JJJJKK'//%q'9:	&
F" *<NN  JJKK
+33%q)<'=>	*
J& %TYY?,1,=,=,?DKK	") -RX&fmm!==99;L+==f>P>P>U>U`f`m`m=nG3C$C050A0A0CI&-  +&6&8F#r4   c                    t         |          }t        j                  j	                  |j                  d      |j                  d      |j                  d            j                         rt        j                  t        d            |S NnamerR   r    )ro   rR   alias__categoryz1Alias with this Name and Category already exists.)
rD   rE   r   rM   filterrF   existsr	   rG   rH   rI   rJ   rK   s     r2   rE   zCreateAliasForm.clean   s~    w}&&!!&)!%%j1(,,Z8 ' 
 &(	
 ''*](^__r4   c                 D    | j                   d   }t        ||      |_        y Nr    rc   r3   r+   rI   r0   r/   s      r2   rh   z#CreateAliasForm.set_category_widget       KK
+	.y$?	r4   c                 ,   | j                   j                  d      }| j                   j                  d      }|r5|j                  | j                   j                  d            }t        |      S |gt        |j	                               z   }t        |      S )NrB   rC   rR   )rJ   rF   get_pluginslistget_descendants)rI   rB   rC   pluginss       r2   rz   zCreateAliasForm.get_plugins   s    ""&&x0''++M:!--!!%%j1G
 G} hf&<&<&>!??GG}r4   c                    t         j                  j                  | j                  j	                  d      | j                  j	                  d            }t
        j                  j                  | j                        j                  || j                  j	                  d      | j                  j	                  d            }| j                  j	                  d      r9| j                  j	                  d      }| j                  j	                  d	      }d }nd
\  }}| j                         }|j                  |||      }|||fS )Nr    r-   r    r-   ro   rR   aliasro   rR   r^   rC   rB   )NN)replaced_placeholderreplaced_pluginr}   )
r(   rM   createrJ   rF   r   	with_userr0   rz   populate)rI   r   alias_contentrC   rB   source_plugins
new_plugins          r2   savezCreateAliasForm.save   s)   ""))&&**:6""&&v. * 
 %,,66tyyAHH""&&v.&&**:6 I 

   +++//>K&&**84F!N",K!--/N"++!,"" , 


 mZ//r4   )r;   r<   r=   r	   rQ   r   ro   rL   r   rM   rP   r-   r   r    BooleanFieldrH   r^   ra   rE   rh   rz   r   rS   rT   s   @r2   r   r   _   s    5??D1E1GHD!5!!!!#D &u%%!!%%'H !e  ()78G '+  9D
@
0r4   r   c                   8    e Zd Z ej                   ed      d e             Z ej                  e	j                  j                         d      Z ej                  ej                  j                         d      Z fdZd Zej$                  d        Z xZS )	r   NameT)rW   r8   r+   FrV   c                     t        |   |i | t        | dd       s| j                  j                  | _        | j                  | j                         t               | j                  d   _        y )Nr0   r-   )	rD   ra   getattr_requestr0   rh   r   rc   rY   rI   ri   rj   rK   s      r2   ra   zCreateAliasWizardForm.__init__   sX    $)&)tVT***DI  +&6&8F#r4   c                 D    | j                   d   }t        ||      |_        y ru   rv   rw   s      r2   rh   z)CreateAliasWizardForm.set_category_widget   rx   r4   c                    t         j                  j                  | j                  j	                  d      | j                  j	                  d            }t
        j                  j                  | j                  j                        j                  || j                  j	                  d      | j                        }t        |g       |S )Nr    r-   r   ro   r   )r(   rM   r   rJ   rF   r   r   r   r0   language_coder   )rI   r   r   s      r2   r   zCreateAliasWizardForm.save   s    ""))&&**:6""&&v. * 
 %,,66t}}7I7IJQQ""&&v.'' R 
 	]O,r4   )r;   r<   r=   r	   rQ   rH   r   ro   rL   r   rM   rP   r-   r   r    ra   rh   r   atomicr   rS   rT   s   @r2   r   r      s    5??6TBVBXYD!5!!!!#D &u%%!!%%'H
9@  r4   r   c                        e Zd Z G d d      Zy)r   c                       e Zd ZeZdgZy)CreateCategoryWizardForm.Metaro   N)r;   r<   r=   r   modelrc   r?   r4   r2   Metar      s    
r4   r   N)r;   r<   r=   r   r?   r4   r2   r   r      s    
 
r4   r   c                        e Zd Z G d d      Zy)Select2Mixinc                       e Zd ZddiZdZy)Select2Mixin.Mediascreen)zcms/js/select2/select2.css)zadmin/js/jquery.init.jszcms/js/select2/select2.jszdjangocms_alias/js/create.jsz"djangocms_alias/js/alias_plugin.jsN)r;   r<   r=   cssr>   r?   r4   r2   r@   r      s    5

r4   r@   N)r;   r<   r=   r@   r?   r4   r2   r   r      s    	
 	
r4   r   c                   $     e Zd Zd Z fdZ xZS )CategorySelectWidgetc                      t        t              S N)r   r   rI   s    r2   get_urlzCategorySelectWidget.get_url  s    677r4   c                 f    t        |   |i |}|j                  d| j                                |S Nzdata-select2-urlrD   build_attrs
setdefaultr   rI   ri   rj   r]   rK   s       r2   r   z CategorySelectWidget.build_attrs  3    #T4V4+T\\^<r4   r;   r<   r=   r   r   rS   rT   s   @r2   r   r     s    8 r4   r   c                   $     e Zd Zd Z fdZ xZS )AliasSelectWidgetc                      t        t              S r   )r   r   r   s    r2   r   zAliasSelectWidget.get_url  s    344r4   c                 f    t        |   |i |}|j                  d| j                                |S r   r   r   s       r2   r   zAliasSelectWidget.build_attrs  r   r4   r   rT   s   @r2   r   r     s    5 r4   r   c            
           e Zd Z ej                   ed      ej                  j                         ej                  d      Z
 ej                   ed      ej                  j                          ed ed      i      dd	      Z ej                   ed
      ej                  j                          ed ed      i            Z fdZd Z G d d      Z xZS )r   r   F)rW   r7   r+   r8   r   r[   z5Select category to restrict the list of aliases below)r]    )rW   r7   r+   empty_labelr8   r   zSelect an alias)rW   r7   r+   c                 D    t        |   |i | | j                          y r   )rD   ra   _set_category_widget_valuer   s      r2   ra   zAliasPluginForm.__init__2  s!    $)&)'')r4   c                     | j                   rI| j                   j                  r3| j                   j                  j                  | j                  d   _        n	 t               | j                  d   _        y)z[
        When the user loads the form the site and category should be pre-selected
        r    r-   N)r_   pkr   r    rc   rY   r   r   s    r2   r   z*AliasPluginForm._set_category_widget_value6  sQ     ==T]]--.2mm.A.A.J.JDKK
#+ &6&8F#r4   c                       e Zd ZeZdZy)AliasPluginForm.Meta)r-   r    r   templateN)r;   r<   r=   r   r   rc   r?   r4   r2   r   r   D  s    
r4   r   )r;   r<   r=   r	   rL   rH   r   rM   rP   rO   r-   r   r   r    r(   r   r   ra   r   r   rS   rT   s   @r2   r   r     s    !5!!i!!#  	D &u%%
m!!%%'#"A&]$^

 
H #E""j##'') "A&7$8
E*9
 
r4   r   c                   2     e Zd Z G d d      Z fdZ xZS )AliasGrouperAdminFormc                       e Zd ZeZdZy)AliasGrouperAdminForm.Meta__all__N)r;   r<   r=   r   r   rc   r?   r4   r2   r   r   O  s    r4   r   c                    t         |          }t        j                  j	                  |j                  d      |j                  d      |j                  d            j                         rt        j                  t        d            |S rn   )
rD   rE   r   admin_managerrq   rF   rr   r	   rG   rH   rs   s     r2   rE   zAliasGrouperAdminForm.cleanS  s~    w}%%,,!!&)!%%j1(,,Z8 - 
 &(	
 ''*](^__r4   )r;   r<   r=   r   rE   rS   rT   s   @r2   r   r   N  s     	 	r4   r   N)4
cms.modelsr   r   	cms.utilsr   cms.utils.permissionsr   r   cms.utils.urlutilsr   djangor	   django.contribr
   django.contrib.admin.widgetsr   r   r   django.contrib.sites.modelsr   	django.dbr   django.utils.translationr   rH   parler.formsr   	constantsr   r   modelsr   r   r   r   r(   utilsr   r   r3   Formr   r   r   r   r   	TextInputr   r   	ModelFormr   r   r?   r4   r2   <module>r      s    - & -    
 - ! 6 . H  '$!%** !Hd0) d0N#EJJ #L
4 


 

< eoo 6
eoo 6
rEOO r4   