
    Bh                        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 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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* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZCmDZD d dlEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d d lPmQZQ d d!lRmSZSmTZT d d"lUmVZV d d#lWmXZXmYZYmZZZm[Z[ d d$l\m]Z] d d%l^m_Z_ d& Z`d' Zad( Zbd) Zcd* Zd G d+ d,ej                        Zf G d- d.ej                  j                        Zi G d/ d0ej                        Zk G d1 d2ek      Zl G d3 d4el      Zm G d5 d6el      Zn G d7 d8ek      Zo G d9 d:ej                        Zp G d; d<ej                        Zq G d= d>eq      Zr G d? d@eq      Zs G dA dBej                        Zt G dC dDej                        Zu G dE dFeu      Zv G dG dHeu      Zw G dI dJeu      Zx G dK dLej                        Zy G dM dNej                        Zz G dO dPeM      Z{ G dQ dRey      Z| G dS dTej                        Z} G dU dVej                        Z~y)W    N)forms)apps)get_permission_codenameget_user_model)
Permission)ContentType)Site)ObjectDoesNotExistValidationError)	ErrorList)HiddenInput)timezone)	force_str)cached_property)get_languagegettextgettext_lazy)api)apphook_pool)clear_permission_cache)PAGE_TYPES_IDROOT_USER_LEVEL)PluginLimitReached)extension_pool)PageSmartLinkField)validate_relative_urlvalidate_url_uniqueness)AppHookSelectApplicationConfigSelectUserSelectAdminWidget)		CMSPluginGlobalPagePermissionPagePageContentPagePermissionPageTypePageUserPageUserGroupPlaceholder)User)ADD_PAGE_TRANSLATIONCHANGE_PAGE_TRANSLATION)send_post_page_operationsend_pre_page_operation)plugin_pool)set_restart_trigger)UserChangeForm)RemovedInDjangoCMS51Warningget_cms_setting)get_language_listget_site_language_from_request)get_clean_username)get_current_userget_subordinate_groupsget_subordinate_usersget_user_permission_level)static_with_version)	menu_poolc                 \    t               }t        | t        |f      rd}nd}t        | |      S )Nuser_permissionspermissions)r   
isinstancer'   getattr)objr*   rel_names      ?/home/dcms/DCMS/lib/python3.12/site-packages/cms/admin/forms.pyget_permission_accessorrF   @   s9    D	
 & 3!!    c               #      K   t         j                  j                         j                  d      j	                  dd      } dt        d      f | D ]  }||f 
 y w)N
changed_byTflat All)r#   objectsdistinctorder_byvalues_list_)valuesvalues     rE   "get_page_changed_by_filter_choicesrU   P   s]      \\""$--l;GG[_G`Fqx. ens   AAc               #   T   K   dt        d      f t        d      E d {    y 7 w)NrL   rM   	TEMPLATES)rR   r4    rG   rE    get_page_template_filter_choicesrY   \   s"     qx.{+++s   (&(c                     | r6	 | j                         d   }| j                  |      }|r|j                  S d S y # t        t        f$ r Y y w xY w)Nr   language)get_languagesget_admin_contenttemplate
IndexErrorAttributeError)new_pagemain_languagemain_language_page_contents      rE   'get_main_language_page_content_templatere   b   sk     	$224Q7M)1)C)C])C)[&:T-66^Z^^
 	 N+ 	 		s   2: : AAc                    t         dft        dft        dft        dff}|j                  s|j                          t        |      }|D ]  \  }}t        j                  j                  |      }dD ]z  }t        ||j                        }t        j                  j                  ||      }	d| d| }
| j                  |
      r|j                  |	       e|
| v sj|j                  |	       |  y )Npagepageuserpagepermissionaddchangedelete)content_typecodenamecan_rR   )r#   r'   r(   r%   pksaverF   r   rN   get_for_modelr   _metar   getrk   remove)datarC   modelspermission_accessormodelnamern   keyro   
permissionfields              rE   save_permissionsr   q   s    	v	:	
#	)*	F 66
1#6 7t"**88?. 		7C.sEKK@H#++//\T\/]J3%q'Exx#''
3$#**:6		77rG   c                   F    e Zd ZdZ ej
                   ed      dd      Zy)CopyPermissionFormz2
    Holds the specific field for permissions
    zCopy permissionsFTlabelrequiredinitialN)__name__
__module____qualname____doc__r   BooleanFieldrR   copy_permissionsrX   rG   rE   r   r      s+     *u))"#rG   r   c                   :     e Zd ZdZd fd	Zd Zed        Z xZS )
SlugWidgetzv
    Special widget for the slug field that requires Title field to be there.
    Adds the js for the slugifying.
    c                     |i }n|j                         }|j                  dt                     }| j                  |      \  | _        | _        | j                  |d<   t        |   |       y )Nr\   zdata-decoder)copyru   r   get_unihandecode_settingsuhd_languhd_urlssuper__init__)selfattrsr\   	__class__s      rE   r   zSlugWidget.__init__   s^    =EJJLE99Z8'+'E'Eh'O$t} $nrG   c                     |d d t        d      v r|d d }nt        d      }t        d      }t        d      }|r|r|r| d| d| d| d| d	g}||fS g }||fS )
N   UNIHANDECODE_DECODERSUNIHANDECODE_DEFAULT_DECODERUNIHANDECODE_HOSTUNIHANDECODE_VERSIONzunihandecode-z.core.min.js.z.min.jsr3   )r   r\   r   uhd_hostuhd_versionr   s         rE   r   z$SlugWidget.get_unihandecode_settings   s    BQ<?+BCC|H&'EFH"#67%&<=[*M+lC*M+azIH !! H!!rG   c                 b    dt        d      g| j                  z   }t        j                  |      S )Nzadmin/js/urlify.jsz*cms/js/dist/bundle.forms.slugwidget.min.js)js)r<   r   r   Media)r   js_medias     rE   mediazSlugWidget.media   s6     ! LM
 MM {{h''rG   N)	r   r   r   r   r   r   propertyr   __classcell__r   s   @rE   r   r      s&    
 "  ( (rG   r   c            
       p    e Zd ZdZdZ ej                  ej                  j                  d      j                  j                         d ej                         ej                  j                  d      j                        Z ej                   ed      d ed            Z ej                  ej                  j                  d      j                  j                          ej                         ej                  j                  d      j                  d	
      Z ej                  ej                  j                  d      j                  j                          ej                         d	ej                  j                  d      j                        Z ej                  ej                  j                  d      j                  j                         dd	 ej(                  ddd      ej                  j                  d      j                        Z G d d      Z fdZed        Zed        Z xZS )BasePageContentFormNtitle   )r   
max_lengthwidget	help_textSlugz-The part of the title that is used in the URL)r   r   r   
menu_titleF)r   r   r   r   
page_title)r   r   r   r   meta_descriptioni@  3204)	maxlengthrowsr   )r   r   r   r   r   c                       e Zd ZeZg Zy)BasePageContentForm.MetaNr   r   r   r$   rz   fieldsrX   rG   rE   Metar      s    rG   r   c                     t        |   |i | t        | j                  d   j                  j
                  xs i | j                        }t        |      | j                  d   _        y )Nslugr[   r   )r   r   dictr   r   r   	_languager   )r   argskwargsr   r   s       rE   r   zBasePageContentForm.__init__   sU    $)&)T[[(//55;dnnU%/e%<F"rG   c                 X    t        | j                  | j                  j                        S Nsite_idr6   _request_siterq   r   s    rE   r   zBasePageContentForm._language       -dmmTZZ]]SSrG   c                 .    | j                   j                  S r   )r   userr   s    rE   _userzBasePageContentForm._user   s    }}!!!rG   )r   r   r   r   r   r   	CharFieldr$   rt   	get_fieldverbose_name
capitalize	TextInputr   r   	SlugFieldrR   r   r   r   Textarear   r   r   r   r   r   r   r   r   s   @rE   r   r      s   EHEOO))'2??JJLu ##--g6@@	E 5??iCDD
 !)),7DDOOQu ##--l;EE	J !)),7DDOOQu ##--l;EE	J 'u))*<=JJUUWu~~%$EF##--.@AKK =
 T T " "rG   r   c                       e Zd Z ej                   ed      ej                  j                  d      d      Z	 ej                  ej                  j                         d ej                               Z ej                  ej                  j                         d ej                               Z ej                  d ej                               Zd ed	      iZ G d
 d      Z fdZd Zd ZddZddZd Zd Zd Z xZS )AddPageFormz	Page typeTis_page_typeF)r   querysetr   r   r   r   r   r   in_navigationDEFAULT_IN_NAVIGATIONc                       e Zd ZeZdgZy)AddPageForm.MetasourceNr   rX   rG   rE   r   r     s    rG   r   c                    t        	|   |i | | j                  j                  d      }|r|j                  j
                  ry | j                  j                  d      }|r+|j                  j                  | j                        |_        t        j                  | j                        }|rn|j                         j                  d      }t        j                  j                  || j                        }dg}|j                  d |D               ||_        ng }t#        |      d	k  rt%        j&                         |_        y y )
Nr   cms_pagesiteTr   )page__inr\   rL   z	---------c              3   L   K   | ]  }|j                   |j                  f  y wr   )page_idr   ).0r   s     rE   	<genexpr>z'AddPageForm.__init__.<locals>.<genexpr>(  s     LEEMM5;;7Ls   "$r   )r   r   r   ru   r   	is_hiddenr   filterr   r&   get_root_pageget_descendant_pagesr$   rN   r   extendchoiceslenr   r   )
r   r   r   source_field
page_field	root_pagedescendantstitlesr   r   s
            rE   r   zAddPageForm.__init__  s   $)&){{x0|22<<[[__Z0
","5"5"<"<$**"<"MJ**

;	#88:AAtATK ((//t~~/^F()GNNLVLL#*L Gw<!"'"3"3"5L rG   c                 z   | j                   }| j                  r|S |j                  d      }|r,|d   }|j                  | j                        }|r| d| n|}n|d   }	 t        | j                  || j                  | j                         ||d<   |S # t        $ r}| j                  d|       Y d }~|S d }~ww xY w)Nparent_pager   /)pathr\   user_languager   )	cleaned_data_errorsru   get_pathr   r   r   r   	add_error)r   rw   r   r   parent_pathr   errors          rE   cleanzAddPageForm.clean0  s      << Khh}-<D%..t~~>K.9k]!D6*tD<D	 #

"nn	  DL	  	*NN65)) 		*s    -B 	B:B55B:c                     | j                   j                  d      }|r.|j                  | j                  j                  k7  rt        d      |S )Nr   z)Site doesn't match the parent's page site)r   ru   r   r   rq   r   )r   r   s     rE   clean_parent_pagezAddPageForm.clean_parent_pageN  sB    ''++M:;..$**--?!"MNNrG   c                 :   | j                   }|| j                  |d   |d   |d   | j                         | j                  d}|j	                  | j
                         d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   |r||d<   t        j                  d	i |S )
Nr   r   r   )rg   r\   r   r   r   r_   
created_byr   r   r   r_   rX   )r   r   get_templater   updatecontent_defaultsr   create_page_content)r   rg   #main_language_page_content_templaterw   title_kwargss        rE   create_translationzAddPageForm.create_translationT  s      LL']))+**
 	D1124)-l);L&4)-l);L&%/34F/GL+,.'JL$&&666rG   c           	          |j                  | j                  || j                  ddd| j                        }|j	                  d       |S )NF)r   r   r\   translationsr@   
extensionsr   r   )r   r   r   r   r  r   r   parentrb   s       rE   from_sourcezAddPageForm.from_sourceo  sK    ;;^^  
 	U+rG   c                     | j                   j                  d      }|r|j                  | j                        S t        j
                  S )Nr   )r   ru   r
  r   r$   TEMPLATE_DEFAULT)r   r   s     rE   r
  zAddPageForm.get_template|  s<    ""&&x0&&t~~66+++rG   c                 v   | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }t        | j                  t        | j
                        }|r|}nO|r| j                  ||      }n9t        | j                  |      }|j                  d       |j                          | j                  |t        |      	      }||j                  |j                  <   |rt        j                   |||j                  g
       |j#                  |j                        }	|	D ]P  }
|j$                  j'                  |
j(                  |
j*                        }|
j-                  ||j                         R t        j.                  j1                  | j                        j3                  |j4                        j7                          }|r'|j8                  s|j;                  | j<                         t?        | j                  t        ||| j
                         |S )Nr   r   r   request	operationr\   r  )r   r  
last-child)position)r  )source_pagetarget_page	languages)slotdefault_widthr[   rq   r  r  tokenrC   r\   ) r   ru   r.   r   r+   r   r  r#   r   add_to_treerr   r  re   page_content_cacher\   r   copy_extensionsget_placeholdersplaceholderscreater#  r$  copy_pluginsrN   on_siteexcludeidexistsr   set_as_homepager   r-   )r   r   r   rg   r   r  operation_tokenrb   translationr,  source_placeholdertarget_placeholderis_firsts                rE   rr   zAddPageForm.save  s     $$Z0""&&x0""&&}51MM*^^
 H''v'>HF;H  , 7MMO--:abj:k . 
 =H##K$8$89**"$&//0
 "22;3G3GHL&2 c"%0%=%=%D%D+00"4"B"B &E &" #//0B[MaMa/bc ,,TZZ8@@HKK@PWWYZH11$$TZZ0 MM*!^^	
 rG   c                      y r   rX   r   s    rE   save_m2mzAddPageForm.save_m2m  s    rG   r   )r   r   r   r   ModelChoiceFieldrR   r#   rN   r   r   allr   r   r   IntegerFieldeditr4   r  r   r   r  r  r  r  r
  rr   r:  r   r   s   @rE   r   r      s   #U##n$$$$7F
 &u%%!!# u  "H
 )%((!!# u  "K
 5 u  "D 	)@A 68<76,5nrG   r   c                        e Zd ZdZdZdZ ej                  ej                  j                         d ej                               ZddiZd Z fdZd	dZ fdZ xZS )
AddPageTypeFormNFr   r   c                 Z   t        j                  | j                        }|s7t        d      }|j	                  | j                         |j                          |j                  | j                        s6t        j                  | j                  t        d      |t        t        d       |S )zv
        Creates the root node used to store all page types
        for the current site if it doesn't exist.
        r   Tr   z
Page TypesF)r\   r   rg   r   r   r   )r&   r   r   r#   set_tree_noderr   has_translationr   r   r  r   r   )r   r   s     rE   get_or_create_rootz"AddPageTypeForm.get_or_create_root  s    
 **

;	$/I##DJJ/NN((8##l+""# rG   c                     t         |          }|r!|j                  j                  st	        d      |s| j                         }|S )NzParent has to be a page type.)r   r  itemr   r   rD  )r   r   r   s     rE   r  z!AddPageTypeForm.clean_parent_page  sF    g/1{//<<!"ABB 113KrG   c                     |j                  | j                  || j                  ddd      }|j                  d       |S )NF)r   r   r\   r  r@   r  Tr   )r   r   r   r  r  s       rE   r  zAddPageTypeForm.from_source  sD    ;;^^  
 	T*rG   c                     t        |   |i |}| j                  j                  d      s|j	                  d       |S )Nr   Tr   )r   rr   r   ru   r  )r   r   r   rb   r   s       rE   rr   zAddPageTypeForm.save  s?    7<00  $$X. OOO.rG   r   )r   r   r   r   r   r   r   r;  r#   rN   r<  r   r   r  rD  r  r  rr   r   r   s   @rE   r@  r@    sn    JJ#U##!!# u  "F 	,

 rG   r@  c                       e Zd Z ej                  ej                  j                         d ej                               Z	y)DuplicatePageFormTr   N)
r   r   r   r   r;  r#   rN   r<  r   r   rX   rG   rE   rJ  rJ    s5    #U##!!# u  "FrG   rJ  c            	           e Zd Z ej                   ed      dd ed            Z ej                  ej                  j                  d      j                  dej                  j                  d      j                        Z eej                  j                  d      j                  dej                  j                  d      j                   ed	      d
      Z ej                   ej                  j                  d      j"                   ed       ed      ej                  j                  d      j$                  ded      Z ej*                  ej                  j                  d      j"                   ed       ed      ej                  j                  d      j$                  d      Zdddif ed      ddgdf ed      ddgdf ed      ddgdffZ fdZed         Z fd!Zd" Zd$ fd#	Z xZS )%ChangePageFormzOverwrite URLr   Fz6Keep this field empty if standard path should be used.)r   r   r   r   	soft_root)r   r   r   redirectzStart typing...zadmin:cms_page_get_list)r   r   r   placeholder_text	ajax_viewlimit_visibility_in_menuzmenu visibilityz+limit when this page is visible in the menuN)r   r   r   r   r   coerceempty_valuexframe_optionszX Frame Optionsz=Whether this page can be embedded in other pages or websites.)r   r   r   r   r   r   )r   r   r_   r   r   zURL options)overwrite_urlrN  collapse)r   classeszMenu options)rM  r   rQ  Headers)rT  c                    t        |   |i | | j                  j                  j	                  | j
                        | _        | j                  j                  | j                  d   _	        | j
                  | j                  d   j                  _        | j                  j                  | j                  d   _	        | j                  j                  s)| j                  j                  | j                  d   _	        y y )Nr   rN  rU  )r   r   instancerg   get_urlr   url_objr   r   r   r   r\   rN  managedr   r   r   r   r   s      rE   r   zChangePageForm.__init__Q  s    $)&)}}))11$..A&*ll&7&7F#26..J&&/*.--*@*@J'||##37<<3D3DDKK(0 $rG   c                 .    | j                   j                  S r   )rZ  r\   r   s    rE   r   zChangePageForm._language\  s    }}%%%rG   c                    t         
|          }| j                  r|S | j                  j                  }|j
                  rd|d<   |S |d   }| j                  j                  d      }|r|j                  d      }nX|j                  rJ|j                  j
                  r|}n3|j                  j                  | j                        }|r| d| nd }n|}|d |d<   |S t        | j                  | j                  j                        }	 t!        | j                  || j                  ||       ||d<   |S # t"        $ r#}|rdnd}	| j%                  |	|       Y d }~|S d }~ww xY w)NrL   r   r   rU  r   r   )r   r\   r   exclude_page)r   r  r   rZ  rg   is_homer   ru   stripr  r  r   r6   r   r   rq   r   r   r  )r   rw   rg   r   path_overrider   	base_pathr   r  r~   r   s             rE   r  zChangePageForm.clean`  sN   w}<< K}}!!<<DLKF|))--o> &&s+D[[{{"" KK00@	09)AdV,tD<DLK6t}}djjmm\	 #

+!  DL  	)'4O&ENN5%(( 	)s   $D3 3	E<EEc                     d| j                   vry | j                  d   }|dk(  r)t        j                  j	                  d      j
                  S |S )NrT  rL   )r   r   r$   rt   r   default)r   rT  s     rE   clean_xframe_optionsz#ChangePageForm.clean_xframe_options  sN    4;;.**+;<R$$../?@HHHrG   c                    t        | j                  t        | j                        }| j                  j                         }| j                  j                  }|j                  dd       }|j                  dd       }|j                  dd       }t        	| )  d      } |j                  dt        | j                  j                        t        j                         d| |j!                  | j                  ||t#        |              |j%                  | j                         |j'                  d	
       |j(                  rd| j*                  v r
t-                t/        | j                  t        ||| j                         |S )Nr  r   r   rU  Fcommit)rI   changed_date)r   r   r]  Tmenur&  rX   )r.   r   r,   r   r   r   rZ  rg   popr   rr   r  r7   r   r   nowupdate_urlsbool_update_url_path_recursiveclear_cacheapplication_urlschanged_datar0   r-   )
r   rk  r4  rw   rg   	page_slug	page_pathpage_overwrite_urlpage_contentr   s
            rE   rr   zChangePageForm.save  sT   1MM-^^
   %%'}}!!HHVT*	HHVT*	!XXot<w|5|1 	
)$--*<*<=!	
 	

 	NN/00	 	 	
 	''7d#  Vt/@/@%@! MM-!^^	
 rG   T)r   r   r   r   r   rR   rU  r   r$   rt   r   r   r   rM  r   rN  TypedChoiceFieldr   rg  intrQ  ChoiceFieldrT  	fieldsetsr   r   r   r  rh  rr   r   r   s   @rE   rL  rL  
  s*   #EOO LM	M #""))+6CC##--k:DDI
 "))*5BB##--j9CC,-+H  6u55!!++,FGOO!"AB!!++,FGOO  'U&&!!++,<=EE!"ST!!++,<=EEN  	
 m7&<	
 nQ&<	
 iL-&<	
7"IH	E & &0d% %rG   rL  c                        e Zd ZdZdZ ej                   ed      dd ed            Z ej                   ed      de
      Z G d	 d
      Z fdZed        Z fdZd Zd Zd Zd Zd Z fdZ xZS )AdvancedSettingsFormNApplicationrX   FzHook application to this page.)r   r   r   r   zApplication configurations)r   r   r   c                       e Zd ZeZg dZy)AdvancedSettingsForm.Meta)login_required
reverse_idnavigation_extendersru  application_namespaceapplication_configsN)r   r   r   r#   rz   r   rX   rG   rE   r   r    s    
rG   r   c                 V   t        |   |i | d| j                  v r<| j                         }t	        j
                  i dg|z         | j                  d   _        d| j                  v ri }i }t        j                         D ]M  }t        j                  |d         }|j                  r|j                  ||d   <   |j                  sF|||d   <   O t        ddi|      | j                  d   _        dgt        j                         z   | j                  d   _        | j                  r| j                  n| j                  }|rt!        ddi|      | j                  d   _        |j#                  dd	      r|d   |v r||d      j%                         }	|	D 
cg c]  }
|
j&                  t)        |
      f c}
| j                  d   j                  _        	 |	j#                  | j                  d
         }
|
j&                  | j                  d   _        y y y y y c c}
w # t*        $ r Y y w xY w)Nr  r   ru  r   r1  )r   app_namespacesr  )r   app_configsFr  )	namespace)r   r   r   get_navigation_extendersr   Selectr   r   get_apphooksget_apphookapp_name
app_configr   r   rw   r   r   ru   get_configsrq   r   r
   )r   r   r   r  r  r  hookapp	page_dataconfigsconfigr   s              rE   r   zAdvancedSettingsForm.__init__  s$   $)&)!T[[0#'#@#@#B 9>bK\J]`tJt9uDKK./6,  NK$113 /"..tAw7<<.1llN47+>>+.KQ(/ 6C/06DKK*+2 8I6ILLeLeLg6gDKK*+3%)YY		DLLI<S!67 +=129
 ==!3U;	J\@]al@l))4F*GHTTVGELI;AIf$56IDKK 56==E!(t||D[7\!]EKYY$9:B Am; % -4I .  	s   H=H 	H('H(c                 X    t        | j                  | j                  j                        S r   r   r   s    rE   r   zAdvancedSettingsForm._language  r   rG   c                    t         |          }| j                  r|S d| j                  v r|d   }|rt        j
                  j                  | j                        j                  |      }|j                  | j                  j                        j                         r(| j                  t        d      g      | j                  d<   |j                  dd       }|j                  dd       }|j                  dd       }|rT| j!                         }||v r|r	 t#        j$                  d	      j'                  |      }	 ||   j/                         j                  |      }	| j3                  |	j4                        r#t+        t        d      g      | j                  d<   n|	j4                  | j,                  d<   n|r4| j3                  |      rt+        t        d      g      | j                  d<   nft7        j8                  |      j:                  }
|
rE|sC| j3                  |
      r#t+        t        d      g      | j                  d<   n|
| j,                  d<   |r|sd | j,                  d<   |r|sd | j,                  d<   | j,                  S # t(        $ r1 t+        t        d
      g      | j                  d<   | j,                  cY S w xY w# t0        $ r1 t+        t        d
      g      | j                  d<   | j,                  cY S w xY w)Nr  )r  r%  z/A page with this reverse URL id exists already.ru  r  r  Tr   z Invalid application config valuez@An application instance using this configuration already exists.z6An application instance with this name already exists.)r   r  r   r   r#   rN   r/  r   r   r0  rZ  rq   r2  error_classrR   ru   get_apphooks_with_configr   r=  	to_pythonr   r   r   r  r
    _check_unique_namespace_instancer  r   r  r  )r   r   r  lookupapphookinstance_namespaceapplication_configapphooks_with_configappconfig_pkr  r  r   s              rE   r  zAdvancedSettingsForm.clean  s   w}<<4;;&%l3J--djj9@@J@W>>T]]%5%5>6==?151A1ALMN2DLL. ""#5t< *--.EtL)--.CTJ#'#@#@#B  ..3E-#(#5#5t#D#N#NOa#bL
-1':FFHLLP\L]F
 889I9IJ ;D]^_;DLL!67 BHAQAQD%%&=>%<<=OP@IWXYA%<= -9,D,DW,M,V,V),5G@@AVW EN!"#[!\ ]EDLL)@A J_D--.EFg9=D56g7;D34   c ' -:CQGiEjDk:lDLL!67,,,- * -:CQGiEjDk:lDLL!67,,,-s$   %J >#K 7K K7K>=K>c              #   |   K   t        j                         D ]!  }|d   t        j                  |d         f # y w)Nr   )r   r  r  )r   r  s     rE   r  z!AdvancedSettingsForm.get_apphooksd  s<      --/ 	?D7L44T!W=>>	?s   :<c                 p    | j                         D ci c]  \  }}|j                  s|| c}}S c c}}w r   )r  r  )r   r|   r  s      rE   r  z-AdvancedSettingsForm.get_apphooks_with_configh  s-    )-):):)<OXS#SOOOs   22c                 .    t        j                  dd      S )Ncms_enabledT)r=   get_menus_by_attributer   s    rE   r  z-AdvancedSettingsForm.get_navigation_extendersk  s    //tDDrG   c                     t         j                  j                  | j                        j	                  |      j                  | j                  j                        j                         S )N)r  r%  )	r#   rN   r/  r   r   r0  rZ  rq   r2  )r   r  s     rE   r  z5AdvancedSettingsForm._check_unique_namespace_instancen  sF    LL  ,V)V4W((W)VX		
rG   c                 ,    | j                   }d|v ryd|v S )Nru  Tr  )rv  )r   rv  s     rE   has_changed_apphooksz)AdvancedSettingsForm.has_changed_apphooksv  s#    ((-&,66rG   c                     t        |   |i |}|j                  d       t                | j	                         r
t                |S )NTrm  )r   rr   rt  r   r  r0   )r   r   r   rg   r   s       rE   rr   zAdvancedSettingsForm.save}  sD    w|T,V,d# $$&!rG   )r   r   r   r   r   r   r~  rR   ru  r   r   r  r   r   r   r   r  r  r  r  r  r  rr   r   r   s   @rE   r  r    s    EH(u((45	 *%//,-&	
 	
+Z T TP!d?PE
7 rG   r  c                        e Zd Z ej                  dd      Z ej                  ej                  j                         d      Z
 fdZd Zd Zd	 Zd
 Zd Z xZS )PageTreeFormr   Tr   r   Fr   r   c                 X   |j                  d      | _        |j                  dt        j                  j	                               | _        t        |   |i | t        j                  j                  | j
                  | j                  j                        | j                  d   _        y )Nrg   r   )r   r   target)ro  rg   r	   rN   get_currentr   r   r   r#   r   r   r   r   r^  s      rE   r   zPageTreeForm.__init__  s}    JJv&	ZZ(@(@(BC
$)&))-)<)<// *= *
H&rG   c                 x    t        j                         }|j                  | j                  j                         S )Nr   )r#   get_root_nodesr0  rg   r   )r   pagess     rE   get_root_pageszPageTreeForm.get_root_pages  s.    ##%}}dii.D.D*D}EErG   c                 Z    t        j                  dt        d       | j                         S )NzMMethod `get_root_nodes()` is deprecated. Instead use method `get_root_pages`.r   )
stacklevel)warningswarnr2   r  r   s    rE   r  zPageTreeForm.get_root_nodes  s(    ['	

 ""$$rG   c                     | j                   d   }| j                   j                  d      x}r| j                  ||      S | j                  |      S )Nr  r  )r   ru   _get_tree_options_for_parent_get_tree_options_for_root)r   r  r!  s      rE   get_tree_optionszPageTreeForm.get_tree_options  sR    $$Z0++//99;944[(KK..x88rG   c                     t        j                         j                  | j                        }	 ||   dfS # t        $ r |j                         d   dfcY S w xY w)Nr   leftr   right)r#   r  r   r   r`   reverse)r   r  siblingss      rE   r  z'PageTreeForm._get_tree_options_for_root  sa    &&(//TZZ/@	2H%v-- 	2 ##%a('11		2s   7 AAc                     |dk(  r|dfS |j                         j                  | j                        }	 ||   dfS # t        $ r |dfcY S w xY w)Nr   first-childr   r  r  )get_childrenr   r   r`   )r   r   r  r  s       rE   r  z)PageTreeForm._get_tree_options_for_parent  se    q=--++-44$**4E	-H%v-- 	- ,,	-s   < AA)r   r   r   r   r=  r  r;  r#   rN   noner  r   r  r  r  r  r  r   r   s   @rE   r  r    sW    !u!!!d;H#U##T\\->->-@5QF
F%92
-rG   r  c                   @     e Zd Z fdZ fdZd Zd Zd Zd Z xZ	S )MovePageFormc                    t         	|          }| j                  j                  r7|j	                  d      r&| j                  dt        t        d                   |S | j                         \  }}| j                  ||      }| j                  j                         j                  }| j                  j                  |      }|dvr| j                  |||       |r|j                  |      }|r| d| n|}n|}| j                  ||       |S )Nr  z0You can't move the home page inside another pager  r  r   )r   r  rg   rb  ru   r  r   rR   r  _determine_new_parentget_content_objr\   get_slug_validate_slug_uniquenessr  _validate_url_uniqueness)
r   r   r!  r  
new_parentr\   r   r  new_pathr   s
            rE   r  zMovePageForm.clean  s    w}99!1!1(!;NN!NOP   $ 5 5 7X//XF
99,,.77yy!!(+88**:xF$--h7K2=+av.4HH%%h9rG   c                     t         |          \  }}|dk7  r||fS | j                  j                  |j                  k  r#| j                  j	                  |      r|dfS |dfS |dfS )Nr  r  )r   r  rg   r   is_sibling_of)r   r!  target_page_positionr   s      rE   r  zMovePageForm.get_tree_options  sy    ,1G,D,F))6) 44499>>K,,,yy&&{3 #G++ && F""rG   c                 R     | j                   j                  | j                           y r   )rg   	move_pager  r   s    rE   r  zMovePageForm.move_page  s    		T2245rG   c                 &    |dv r|S |j                   S )Nr  r  )r   r!  r  s      rE   r  z"MovePageForm._determine_new_parent  s    44!!!rG   c                     t         j                  j                  |      j                  | j                  j
                        }|j                  ||      j                         rt        t        d            y )Nr  r%  )
urls__slugurls__languageYou cannot have two pages with the same slug at the same page level. Please alter the slug of one of the pages before trying to move again.)	r#   rN   r   r0  rg   rq   r2  r   rR   )r   r  r\   r   target_siblingss        rE   r  z&MovePageForm._validate_slug_uniqueness  sl    ,,--V-<DD		DU!!T(!KRRT!]  UrG   c                     	 t        | j                  ||| j                         y # t        $ r t        t	        d            w xY w)N)r   r\   ra  r  )r   r   rg   r   rR   )r   r   r\   s      rE   r  z%MovePageForm._validate_url_uniqueness   sO    	#

!!YY	  	!] 	s	   #& A)
r   r   r   r  r  r  r  r  r  r   r   s   @rE   r  r    s!    :#&6"
rG   r  c                        e Zd Z ej                  ej                  j                         d      Z ej                  dd      Z
d Z fdZ xZS )CopyPageFormTr  Fr  c                     | j                         \  }}| j                  j                  dd      }| j                  j	                  |||| j
                  |      }|S )Nr   F)r!  r  r   target_siter   )r  r   ru   rg   copy_with_descendantsr   )r   r   r!  r  r   rb   s         rE   	copy_pagezCopyPageForm.copy_page  sb     $ 5 5 7X,,001CUK9922#-

 3 
 rG   c                     	 t         |   |      S # t        $ r( | j                         j	                         }|d   dfcY S w xY w)Nr   r  )r   r  r`   r  r  )r   r  r  r   s      rE   r  z'CopyPageForm._get_tree_options_for_root!  sO    	*75h?? 	* **,446HQK))		*s    .AA)r   r   r   r   r;  r	   rN   r<  source_siter   r   r  r  r   r   s   @rE   r  r    sH    (%(($,,2B2B2DtTK)u))%%H
* *rG   r  c                   L    e Zd Zd ed      fd ed      fd ed      ffZ ej                  d ej                               Z ej                  de	      Z
 ej                  d
      Z ej                  d
      Z ej                  de	      Z fdZd Zd Zd Z xZS )ChangeListFormrL   rM   1Yes0NoFr   )r   r   r  c                     t        |   |i | t               | j                  d   _        t               | j                  d   _        y )NrI   r_   )r   r   rU   r   r   rY   r^  s      rE   r   zChangeListForm.__init__8  s=    $)&),N,PL!)*J*LJ'rG   c                     | j                   | j                   j                  d      ryt        fd| j                         D              S )NqTc              3   f   K   | ](  }t        j                  |j                               * y wr   )rr  ru   r{   )r   r~   rw   s     rE   r   z-ChangeListForm.is_filtered.<locals>.<genexpr>B  s#     Q%4,-Qs   .1)r   ru   anyvisible_fields)r   rw   s    @rE   is_filteredzChangeListForm.is_filtered=  s?        %Q4;N;N;PQQQrG   c              #      K   | j                         D ]:  }| j                  j                  |j                        }|s+|j                  |f < y wr   )r  r   ru   r{   )r   r~   rT   s      rE   get_filter_itemszChangeListForm.get_filter_itemsD  sJ     ((* 	*E%%))%**5Ezz5))		*s
   ;AAc                 h    | j                         D ]  \  }}| d|i} |j                  di |}  |S )N__exactrX   )r  r   )r   r   r~   rT   querys        rE   run_filterszChangeListForm.run_filtersK  sI     113 	0LE5wg&.E&x//H	0 rG   )r   r   r   rR   BOOLEAN_CHOICESr   r   r   r  r~  r   r_   rI   rM  r   r  r  r  r   r   s   @rE   r  r  +  s    	QuX	ah	agO 	/@u/@/@/BCA%E%%uoNM u  %0H"""E2J!!!5/JIM
R*rG   r  c                        e Zd Z fdZ xZS )BasePermissionAdminFormc                     t        |   |i | | j                  j                  j	                         }|D ](  }|| j
                  vst        | j                  |d       * y )NF)r   r   rt   rz   get_all_permissionsbase_fieldssetattrrZ  )r   r   r   permission_fieldsr~   r   s        rE   r   z BasePermissionAdminForm.__init__S  s[    $)&) JJ,,@@B& 	5ED,,,ue4	5rG   )r   r   r   r   r   r   s   @rE   r   r   R  s    5 5rG   r   c                        e Zd ZdZ ej
                  ej                  j                          e	d       e
       d      Z fdZ G d d      Z xZS )PagePermissionInlineAdminForma5  
    Page permission inline admin form used in inline admin. Required, because
    user and group queryset must be changed. User can see only users on the same
    level or under him in chosen page tree, and users which were created by him,
    but aren't assigned to higher page level than current user.
    r   Tr   r   r   r   c                    t        	|   |i | t               }t        j                  j                         }t        ||      }d}d}t        d      r/|j                         dk  rd}d}nt        ||      t        k(  rd}d}|rxddlm} t        | j                  d   j                  |      r|rt!        t#        |j%                  dd	            
      | j                  d   j                  j&                  _        nNt+               | j                  d   _        || j                  d   _        || j                  d   j                  _        t1        ||      | j                  d   _        y )NTFRAW_ID_USERSi  r   )ForeignKeyRawIdWidgetr   rq   rJ   )id__ingroup)r   r   r8   r	   rN   r  r:   r4   countr;   r   django.contrib.admin.widgetsr  rA   r   r   r   listrQ   rellimit_choices_tor    r   r   r9   )
r   r   r   r   r   	sub_userslimit_choices
use_raw_idr  r   s
            rE   r   z&PagePermissionInlineAdminForm.__init__k  s?   $)&)!||''))$5	
 >* 3& !%!
*46/I
 !&!
 J $++f-446KL !FJ#I$9$9$T$9$JKGDKK'..22C *?)@DKK&+4DKK(.2DKK&&+(>tT(JG%rG   c                       e Zd Zg dZeZy)"PagePermissionInlineAdminForm.Meta)
r   r  can_add
can_change
can_deletecan_publishcan_change_advanced_settingscan_change_permissionscan_move_pagegrant_onNr   r   r   r   r%   rz   rX   rG   rE   r   r    s    
 rG   r   )r   r   r   r   r   r;  r#   rN   r<  rR   r   rg   r   r   r   r   s   @rE   r  r  \  sL     "5!!!!#i}	D/Kb rG   r  c                       e Zd Z ej                  ej                  j                          ed       e	       d      Z
 ej                   ed       e	       d      Z G d d      Zd Zy	)
ViewRestrictionInlineAdminFormr   Tr  can_view)r   r   r   c                       e Zd Zg dZeZy)#ViewRestrictionInlineAdminForm.Meta)r   r  r  r#  Nr   rX   rG   rE   r   r%    s    
 rG   r   c                      y)NTrX   r   s    rE   clean_can_viewz-ViewRestrictionInlineAdminForm.clean_can_view  s    rG   N)r   r   r   r   r;  r#   rN   r<  rR   r   rg   r   r#  r   r'  rX   rG   rE   r"  r"    se    !5!!!!#i}	D "u!!
m}H rG   r"  c                        e Zd Z G d d      Zy)GlobalPagePermissionAdminFormc                       e Zd Zg dZeZy)"GlobalPagePermissionAdminForm.Meta)r   r  r  r  r  r  r  r  r  r#  sitesN)r   r   r   r   r"   rz   rX   rG   rE   r   r+    s    
 %rG   r   N)r   r   r   r   rX   rG   rE   r)  r)    s    % %rG   r)  c                       e Zd ZdZdZ ej                   ed      dd      Z 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	      Z ej                   ed      d	      Z fd
Z fdZd Zd fd	Z xZS )GenericCmsPermissionFormz0Generic form for User & Group permissions in cmsNAddFTr   ChangeDelete)r   r   c                     |j                  d      }|j                  d      xs i }|r+|xs i }|j                  | j                  |             ||d<   t        |   |i | y )NrZ  r   )ru   r  populate_initialsr   r   )r   r   r   rZ  r   r   s        rE   r   z!GenericCmsPermissionForm.__init__  sc    ::j)**Y'-2mGNN411(;< 'F9$)&)rG   c                 <   t         |          }|j                  d      s|j                  d      rt        d      }t	        |      |j                  d      rt        d      }t	        |      |j                  d      rt        d      }t	        |      |j                  d      rt        d	      }t	        |      |j                  d
      sO|j                  d      rt        d      }t	        |      |j                  d      rt        d      }t	        |      y y )Ncan_change_pagecan_add_pagezdUsers can't create a page without permissions to change the created page. Edit permissions required.can_delete_pagez\Users can't delete a page without permissions to change the page. Edit permissions required.can_add_pagepermissionzaUsers can't set page permissions without permissions to change a page. Edit permissions required.can_delete_pagepermissionzdUsers can't delete page permissions without permissions to change a page. Edit permissions required.can_change_pagepermissionztUsers can't create page permissions without permissions to change the created permission. Edit permissions required.ziUsers can't delete page permissions without permissions to change permissions. Edit permissions required.)r   r  ru   rR   r   )r   rw   messager   s      rE   r  zGenericCmsPermissionForm.clean  s+   w} xx)*xx'M &g..xx)*r &g..xx01w &g..xx34C &g.. xx34xx01S &g..xx34H &g.. 5 5rG   c                 X   i }t        |      }t        t        t        fD ]  }|j                  j                         }t        j                  j                  |      }|j                  |      j                  dd      }dD ]%  }t        ||j                        }	|	|v |d| d| <   '  |S )z,Read out permissions from permission system.)rn   ro   TrJ   rj   rp   rR   )rF   r#   r'   r%   r   lowerr   rN   rs   r   rQ   r   rt   )
r   rC   initialsry   rz   r{   rn   r@   r|   ro   s
             rE   r3  z*GenericCmsPermissionForm.populate_initials$  s    5c:Hn5 	HE>>'')D&..<<UCL-44,4O[[\fmq[rK2 H23D08K0G4uAdV,-H		H rG   c                 t    t         |   d      }|j                          t        | j                  |       |S )NFrj  )r   rr   r   r   )r   rk  rZ  r   s      rE   rr   zGenericCmsPermissionForm.save2  s1    7<u<-**H5rG   r{  )r   r   r   r   _current_userr   r   rR   r6  r5  r7  can_add_pageusercan_change_pageusercan_delete_pageuserr8  r:  r9  r   r  r3  rr   r   r   s   @rE   r.  r.    s
   :M%5%%AeHudSL(e((q{UTXYO(e((q{UKO *u))%5I,%,,1X;O,%,,1X;O/U//ahO 2 2 28u U 2 2 28u U*-/^ rG   r.  c                        e Zd ZdZ ej
                  ej                  j                               Z	 G d d      Z
 fdZd Zd fd	Z xZS )	PageUserAddFormN)r   c                       e Zd ZdgZeZy)PageUserAddForm.Metar   Nr   r   r   r   r'   rz   rX   rG   rE   r   rG  >  s    rG   r   c                 h    t        |   |i | | j                         | j                  d   _        y )Nr   )r   r   get_subordinatesr   r   r^  s      rE   r   zPageUserAddForm.__init__B  s/    $)&)'+'<'<'>F$rG   c                 f    t        | j                  | j                        }|j                  d      S )NT)pageuser__isnull)r:   r@  _current_siter   )r   subordinatess     rE   rJ  z PageUserAddForm.get_subordinatesF  s.    ,T-?-?ASAST""D"99rG   c                    | j                   d   }t        | 	  d      }| j                  |_        |j
                  j                  D ]/  }t        ||j                        }t        ||j                  |       1 |r|j                          |S )Nr   Frj  )
r   r   rr   r@  r	  rt   r   rB   r{   r  )r   rk  r   rZ  r~   rT   r   s         rE   rr   zPageUserAddForm.saveJ  s      (7<u<-"00ZZ&& 	1E D%**-EHejj%0		1 MMOrG   r{  )r   r   r   r@  r   r;  r*   rN   r  r   r   r   rJ  rr   r   r   s   @rE   rE  rE  9  sE    M!5!!4<<+<+<+>?D ?: rG   rE  c                   B     e Zd ZdZ G d d      Z fdZd Zd Z xZS )PageUserChangeFormNc                       e Zd ZdZeZy)PageUserChangeForm.Meta__all__NrH  rX   rG   rE   r   rS  ]  s    rG   r   c                     t        |   |i | | j                  j                  sG| j	                         }|| j
                  d   _        | j                         | j
                  d   _        y y )Nr?   groups)r   r   r@  is_superuserget_available_permissionsr   r   get_available_groups)r   r   r   r@   r   s       rE   r   zPageUserChangeForm.__init__a  sg    $)&)!!.. 88:K7BDKK*+4 .2-F-F-HDKK!* /rG   c                     | j                   j                         }d |D        }t        j                  j	                  |      S )Nc              3   D   K   | ]  }|j                  d       d     yw)r   N)
rpartition)r   perms     rE   r   z?PageUserChangeForm.get_available_permissions.<locals>.<genexpr>p  s     MDOOC04Ms    )codename__in)r@  r  r   rN   r   )r   r@   permission_codess      rE   rX  z,PageUserChangeForm.get_available_permissionsn  s<    ((<<>MM!!((6F(GGrG   c                 J    | j                   j                  j                         S r   )r@  rV  r<  r   s    rE   rY  z'PageUserChangeForm.get_available_groupss  s    !!((,,..rG   )	r   r   r   r@  r   r   rX  rY  r   r   s   @rE   rQ  rQ  Z  s#    M IH
/rG   rQ  c                   4     e Zd Z G d d      Zd fd	Z xZS )PageUserGroupFormc                       e Zd ZeZdZy)PageUserGroupForm.Meta)r{   N)r   r   r   r(   rz   r   rX   rG   rE   r   re  x  s    rG   r   c                     | j                   j                  s| j                  | j                   _        t        |   |      S )Nrj  )rZ  rq   r@  r	  r   rr   )r   rk  r   s     rE   rr   zPageUserGroupForm.save|  s3    }}'+'9'9DMM$w|6|**rG   r{  )r   r   r   r   rr   r   r   s   @rE   rc  rc  w  s     + +rG   rc  c                   :   e Zd Z ej                  ej                  j                         d      Z ej                  d      Z
 ej                  d      Z ej                  ej                  j                         d      Z ej                  d      Zd Zd Zy)PluginAddValidationFormTr  r  Fc                     | j                   d   }	 t        j                  |       |S # t        $ r t	        d      |z  }t        |      w xY w)Nplugin_typezInvalid plugin type '%s')r   r/   
get_pluginKeyErrorr   r   )r   rj  r;  s      rE   clean_plugin_typez)PluginAddValidationForm.clean_plugin_type  sY    ''6	+"";/   	+89KGG!'**	+s	   ( #Ac                 b   ddl m} | j                  }| j                  r|S |d   }|d   }|d   }|j	                  d      }|t               vr)t        d      }| j                  d|       | j                  S |r|j                  |k7  r)t        d      }| j                  d|       | j                  S |j                  |j                  k7  r)t        d	      }| j                  d|       | j                  S ||j                  k  r8t        d
      }| j                  d|d|j                  iz         | j                  S |j                  }|r|j                         nd }		  |||d   ||	       | j                  S # t        $ r0}
| j                  d t        |
             Y d }
~
| j                  S d }
~
ww xY w)Nr   )has_reached_plugin_limitplugin_languageplugin_positionplaceholder_idplugin_parentz-Language must be set to a supported language!z0Parent plugin language must be same as language!z6Parent plugin placeholder must be same as placeholder!z1Plugin position must be greater than %(position)dr  rj  )r_   )cms.utils.pluginsro  r   errorsru   r5   r   r  r\   rr  rq   r  rg   r
  r   r   )r   ro  rw   r\   r  placeholderparent_pluginr;  rg   r_   r  s              rE   r  zPluginAddValidationForm.clean  s   >  ;;K)*)*+,1,..MNGNN,g6$$$%%1!"TU0':(((++{~~=!"Z[/9(((=111!"UV/JH^H^;_1_`(((*.4$$&D	3$[$}2ExZbc     " 	3NN45!122   	3s   E5 5	F.>F))F.N)r   r   r   r   r;  r)   rN   r<  rr  r=  rq  r   rp  r!   rs  rj  rm  r  rX   rG   rE   rh  rh    s    +U++$$((*N )e(($7O%eoot4O*E**M "%//40K)!rG   rh  c                       e Zd Z ej                  d      Z ej                  d      Z ej                  d      Zd Zd Z	y)RequestToolbarFormFr  c                    | j                   }|j                  d      }|j                  d      }t        |xs |      s|S |r|r|r|sd}t        j                  |      |j                  d      \  }}}	 t        j                  ||      }	 t        |t              r,|j                  j                  d      j                  |      }	nEt        |d      r|j                  j                  |      }	n|j                  j                  |      }	|	|d	<   |S # t        $ r d}t        j                  |      w xY w# |j                  $ r d}t        j                  |      w xY w)
Nobj_idobj_typez<Invalid object lookup. Both obj_id and obj_type are requiredr   )	app_label
model_namerg   r%  admin_managerattached_obj)r   ru   rr  r   r   r]  r   	get_modelLookupError
issubclassr$   r  select_relatedhasattrrN   DoesNotExist)
r   rw   r{  r|  r;  r  seprz   model_classgeneric_objs
             rE   r  zRequestToolbarForm.clean  sY     (#88J'F&h'K8&TG''00"--c2S%	1..35IK
	/+{3)77FFvNRRV\R]o6)77;;v;F)11555@
 $/D #  	1TG''00	1 '' 	1TG''00	1s   5D BD9 !D69'E c                 V    | j                   j                  d      }|rt        |       |S )Ncms_path)r   ru   r   )r   r   s     rE   clean_cms_pathz!RequestToolbarForm.clean_cms_path  s(      $$Z0!$'rG   N)
r   r   r   r   r   r{  r|  r  r  r  rX   rG   rE   ry  ry    s=    U__e,Fu.Hu.H"HrG   ry  )r  djangor   django.appsr   django.contrib.authr   r   django.contrib.auth.modelsr   "django.contrib.contenttypes.modelsr   django.contrib.sites.modelsr	   django.core.exceptionsr
   r   django.forms.utilsr   django.forms.widgetsr   django.utilsr   django.utils.encodingr   django.utils.functionalr   django.utils.translationr   r   r   rR   cmsr   cms.apphook_poolr   cms.cache.permissionsr   cms.constantsr   r   cms.exceptionsr   cms.extensionsr   cms.forms.fieldsr   cms.forms.validatorsr   r   cms.forms.widgetsr   r   r    
cms.modelsr!   r"   r#   r$   r%   r&   r'   r(   r)   cms.models.permissionmodelsr*   cms.operationsr+   r,   cms.operations.helpersr-   r.   cms.plugin_poolr/   cms.signals.apphookr0   cms.utils.compat.formsr1   cms.utils.compat.warningsr2   cms.utils.confr4   cms.utils.i18nr5   r6   cms.utils.pager7   cms.utils.permissionsr8   r9   r:   r;   cms.utils.urlutilsr<   menus.menu_poolr=   rF   rU   rY   re   r   Formr   widgetsr   r   	ModelFormr   r   r@  rJ  rL  r  r  r  r  r  r   r  r"  r)  r.  rE  rQ  rc  rh  ry  rX   rG   rE   <module>r     s      G 1 : , F ( , ! + 3 M M  ) 8 8 - ) / O 

 
 
 - H ( 3 1 A * L -  3 %" 	,78	 	&((( &(R2"%// 2"jC% CLBk BJ w( wt@5?? @F3-5:: 3-lQ< Qh*< *4$UZZ $N5eoo 5M$; M`%< 4%$; %$^u ^Beoo B/ /:+0 +@!ejj @!F. .rG   