o
    h'x                     @   s   d dl Z d dlmZ d dlmZmZ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 d dlmZ d dlmZ d dlmZm Z m!Z!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.m/Z/m0Z0 d:ddZ1dd Z2				d;ddZ3G dd de*Z4G dd de(Z5G dd  d e(Z6G d!d" d"e(Z7G d#d$ d$e(Z8G d%d& d&e(Z9G d'd( d(eZ:G d)d* d*eZ;G d+d, d,eZ<G d-d. d.eZ=d/Z>d0Z?d1Z@G d2d3 d3e=ZAG d4d5 d5e=ZBG d6d7 d7e=ZCG d8d9 d9e=ZDdS )<    N)defaultdict)parse_qsquote	urlencodeurlsplit)settings)InvalidPage	Paginator)Http404)get_object_or_404)TemplateResponse)NoReverseMatch)reverse)gettext_lazy)View)hooks)AnchorLinkChooserFormEmailLinkChooserFormExternalLinkChooserFormPhoneLinkChooserForm)
SearchForm)render_modal_workflow)Column
DateColumnTable)resolve_model_string)LocalePageSitec                 C   sJ   | j d| j d| j d| j d| j dd}|r#|| |S )Nparent_page_idallow_external_linkallow_email_linkallow_phone_linkallow_anchor_link)r   r    r!   r"   r#   )GETgetupdate)requestextra_contextcontext r*   [/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/views/chooser.pyshared_context   s   





r,   c                 C   s@   g }|  dD ]}t|}t|tstd|| qt|S )N,zModel is not a page)splitr   
issubclassr   
ValueErrorappendtuple)stringpage_models
sub_string
page_modelr*   r*   r+   page_models_from_string.   s   
r7   Tc           	      C   s   |sg }|s| j |vrdS |rt| j pt|s|tfksdS |s&|  r&dS |dv rM|}|D ]}| j|jks;| |r> dS |dkrL|||   S q.|dv rX| | S dS )zReturns boolean indicating of the user can choose page.
    will check if the root page can be selected and if user permissions
    should be checked.
    F)move_tobulk_move_tor8   >   copy_toadd_subpageT)	specific_classr/   r   is_rootpkis_descendant_ofpermissions_for_usercan_move_tocan_add_subpage)	pageuserdesired_classescan_choose_root	user_permtarget_pagesmatch_subclasspages_to_movepage_to_mover*   r*   r+   can_choose_page<   s.   
rL   c                       s:   e Zd ZdZdd fdd
Z fddZdd	 Z  ZS )
PageChooserTablezlisting chooserFshow_locale_labelsc                      t  j|i | || _d S N)super__init__rO   )selfrO   argskwargs	__class__r*   r+   rS   j      
zPageChooserTable.__init__c                    s   t  |}| j|d< |S NrO   )rR   get_context_datarO   )rT   parent_contextr)   rW   r*   r+   r[   n   s   
z!PageChooserTable.get_context_datac                 C   s>   g }|j r
|d |js|d |js|d d|S )Nzparent-pageunpublisheddisabled )is_parent_pager1   live
can_choosejoin)rT   rC   
classnamesr*   r*   r+   get_row_classnames   s   



z"PageChooserTable.get_row_classname)__name__
__module____qualname__	classnamerS   r[   re   __classcell__r*   r*   rW   r+   rM   g   s
    rM   c                       s:   e Zd ZdZdd fdd
Zdd Z fdd	Z  ZS )
PageTitleColumnz0wagtailadmin/chooser/tables/page_title_cell.htmlF)is_multiple_choicec                   rP   rQ   )rR   rS   rl   )rT   rl   rU   rV   rW   r*   r+   rS      rY   zPageTitleColumn.__init__c                 C      |  S rQ   )get_admin_display_titlerT   instancer*   r*   r+   	get_value      zPageTitleColumn.get_valuec                    s2   t  ||}||d< |do|jdk|d< |S )NrC   rO      )rR   get_cell_context_datar%   depthrT   rp   r\   r)   rW   r*   r+   rt      s
   z%PageTitleColumn.get_cell_context_data)rf   rg   rh   cell_template_namerS   rq   rt   rj   r*   r*   rW   r+   rk      s
    rk   c                       s(   e Zd ZdZdd Z fddZ  ZS )ParentPageColumnz1wagtailadmin/chooser/tables/parent_page_cell.htmlc                 C   rm   rQ   )
get_parentro   r*   r*   r+   rq      rr   zParentPageColumn.get_valuec                    s    t  ||}|d|d< |S rZ   )rR   rt   r%   rv   rW   r*   r+   rt      s   z&ParentPageColumn.get_cell_context_data)rf   rg   rh   rw   rq   rt   rj   r*   r*   rW   r+   rx      s    rx   c                   @      e Zd ZdZdd ZdS )PageStatusColumnz1wagtailadmin/chooser/tables/page_status_cell.htmlc                 C      |S rQ   r*   ro   r*   r*   r+   rq         zPageStatusColumn.get_valueNrf   rg   rh   rw   rq   r*   r*   r*   r+   r{      s    r{   c                   @   rz   )PageNavigateToChildrenColumnz?wagtailadmin/chooser/tables/page_navigate_to_children_cell.htmlc                 C   r|   rQ   r*   ro   r*   r*   r+   rq      r}   z&PageNavigateToChildrenColumn.get_valueNr~   r*   r*   r*   r+   r      s    r   c                   @   s   e Zd ZdZdS )PageCheckboxSelectColumnz:wagtailadmin/chooser/tables/page_checkbox_select_cell.htmlN)rf   rg   rh   rw   r*   r*   r*   r+   r      s    r   c                   @   s2   e Zd Zedd Zdd Zdd Zd
dd	ZdS )
BrowseViewc              	   C   s|   t dtd| jdtdtddddtd	td
dddtdtdddtddddg}| jr<|dtdtdddd |S )NtitleTitlelabelrl   updatedUpdated12%latest_revision_created_atr   widthaccessortypeTypepage_type_display_namestatusStatusr   r   children z10%r   selectSelect1%r>   )	rk   _rl   r   r   r{   r   insertr   rT   colsr*   r*   r+   columns   s8   zBrowseView.columnsc                 C   s&   | j    }| jr|d}|S )Nlocale)parent_pageget_childrendefer_streamfieldsspecifici18n_enabledselect_related)rT   pagesr*   r*   r+   get_object_list   s   
zBrowseView.get_object_listc                 C   sL   t dD ]}||| j}q| jtfkr$|j| j }|jdd}||B }|S )Nconstruct_page_chooser_querysetr   )numchild__gt)r   	get_hooksr'   rE   r   r   filter)rT   r   hookchoosable_pagesdescendable_pagesr*   r*   r+   filter_object_list   s   zBrowseView.filter_object_listNc                 C   s|  t tdd| _|jd| _|jdpd}|jdd}zt|| _W n tt	fy/   t
w |r:tt|d| _n| jtfkrFt | _ntj j| j }| | _| jj| _|  }| |}|jdd}tjjd	d
 |jdg D d}|jdd}	t| j|j| j||||	d| j_d| j_d| j_d }
g }| jrH|j }|dd  | j r|jdrtt |jd d}
|
j!}nt " j!}t#d}t jj|$ddj%|dD ]}|j&|d< |'||d |(  d qnM| jj)}
|dd  dd tj*| j+ddD }| jj!||
j!< t jjt,|- dj%|
j!dD ]}t#d||j! gd}|'||d |(  d q#|
rH|j|
d}t.|dd}z|/|jdd }W n
 t0yd   t
w |D ]}t||j| j||||	d|_|1 |_d|_qgt2| j3| jgt,| | jd!}t4|| j| jj!||t5 |d"d
 | jD |dk| j||
| jd#}t6|d$d |d%|d& d'd(S ))NWAGTAIL_I18N_ENABLEDFmultiple	page_typewagtailcore.page
user_perms)idrF   c                 S   s   g | ]}|rt |qS r*   )int).0r>   r*   r*   r+   
<listcomp>  s    z"BrowseView.get.<locals>.<listcomp>ztarget_pages[]pk__inrI   T)rH   rI   pr   )language_codewagtailadmin_choose_page	locale_idr>   ?)r   urlc                 S   s   i | ]	}|d  |d qS )r   r>   r*   )r   itemr*   r*   r+   
<dictcomp>B  s    z"BrowseView.get.<locals>.<dictcomp>r>   wagtailadmin_choose_page_childrU   )r      per_page   rN   c                 S   s   g | ]}|  qS r*   )get_verbose_name)r   desired_classr*   r*   r+   r     s    )r   r   tablepagination_pagesearch_formpage_type_stringpage_type_namespage_types_restrictedshow_locale_controlslocale_optionsselected_localerl   z wagtailadmin/chooser/browse.htmlbrowser   )stepr   	json_data)7getattrr   r   r$   r%   rl   r7   rE   r0   LookupErrorr
   r   r   r   get_first_root_nodeobjectsallr   first_common_ancestorr   r   r   r   getlistrL   rD   rb   r`   can_descendcopypopr=   r   r>   
get_activer   values_listexcluder   r1   r   r   translation_ofvalueslistkeysr	   rC   r   get_children_countrM   r   r,   r   r   )rT   r'   r   r   rG   all_desired_pagesr   rF   rH   rI   r   r   
new_paramsactive_locale_id
choose_urlr   locales_and_parent_pageschoose_child_url	paginatorrC   r   r)   r*   r*   r+   r%      s  



	









	
zBrowseView.getrQ   )rf   rg   rh   propertyr   r   r   r%   r*   r*   r*   r+   r      s    
r   c                   @   s    e Zd Zedd Zdd ZdS )
SearchViewc              	   C   s~   t dtd| jdtdtddtdtdd	d
dtdtdd	ddtdtdd	dg}| jr=|dtdtdddd |S )Nr   r   r   parentParent)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   )	rk   r   rl   rx   r   r   r{   r   r   r   r*   r*   r+   r     s8   zSearchView.columnsc           
   
   C   s:  t tdd| _|jd| _|jdpd}zt|}W n ttfy'   t	w t
j }| jr5|d}tdD ]}|||}q:t|j}| rh|jd rh|jd	d
}|j| }| }||jd }n| }t|dd}||jd}|D ]}d|_d|_q}t| j|| jd}	t|dt|||	||dS )Nr   Fr   r   r   r   r   qr   )ru   r   r   r   TrN   z)wagtailadmin/chooser/_search_results.html)
searchformr   r   r   ) r   r   r   r$   r%   rl   r7   r0   r   r
   r   r   r   r   r   r   r   is_validcleaned_datar   r   r   autocompletenoner	   get_pagerb   r`   rM   r   r   r,   )
rT   r'   r   rE   r   r   r   r   rC   r   r*   r*   r+   r%     sT   



zSearchView.getN)rf   rg   rh   r   r   r%   r*   r*   r*   r+   r     s    
r   c                   @   s    e Zd ZdZdd Zdd ZdS )ChosenMultipleViewz
    A view that takes a list of 'id' URL parameters and returns a modal workflow response indicating
    that those objects have been chosen
    c                 C      t | jd d d d|ddS )Npage_chosenr   resultr   r   r'   rT   r   r*   r*   r+   render_chosen_response     z)ChosenMultipleView.render_chosen_responsec                 C   s6   |j d}tjj|d }dd |D }| |S )Nr   r   c              	   S   s6   g | ]}|j | j | td |j fd|jdqS )wagtailadmin_pages:editr   r   parentId
adminTitleeditUrlr   )r>   ry   rn   r   r   )r   rC   r*   r*   r+   r     s    z*ChosenMultipleView.get.<locals>.<listcomp>)r$   r   r   r   r   r   r  )rT   r'   pksr   r   r*   r*   r+   r%      s   

zChosenMultipleView.getN)rf   rg   rh   __doc__r  r%   r*   r*   r*   r+   r     s    	r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )BaseLinkFormViewc                 C   s&   | j | jjddd| jjddiS )Nlink_urlr   	link_text)link_url_field_namer'   r$   r%   rT   r*   r*   r+   get_initial_data  s   z!BaseLinkFormView.get_initial_datac                 C   r|   rQ   r*   rT   valuer*   r*   r+   get_url_from_field_value  r}   z)BaseLinkFormView.get_url_from_field_valuec                 C   s8   | j j| j }| || j jd  p|d| j jv dS )Nr  r   r   prefer_this_title_as_link_text)formr   r  r  stripchanged_data)rT   url_field_valuer*   r*   r+   get_result_data  s
   
z BaseLinkFormView.get_result_datac                 C   s   | j |  | jd| _|  S Ninitialprefix)
form_classr  form_prefixr  render_form_response)rT   r'   r*   r*   r+   r%   '  s   
zBaseLinkFormView.getc                 C   >   | j |j|  | jd| _| j r|  }| |S |  S r  	r  POSTr  r   r  r   r  r  r!  rT   r'   r   r*   r*   r+   post-     

zBaseLinkFormView.postc                 C   s*   t | j| jd t| jd| jid| jidS )Nr  r   r   )r   r'   template_namer,   r  	step_namer  r*   r*   r+   r!  8  s   z%BaseLinkFormView.render_form_responsec                 C   r   )Nexternal_link_chosenr   r   r   r  r*   r*   r+   r  F  r  z'BaseLinkFormView.render_chosen_responseN)
rf   rg   rh   r  r  r  r%   r&  r!  r  r*   r*   r*   r+   r    s    r  r   exactconfirmc                   @   (   e Zd ZdZeZdZdZdZdd Z	dS )ExternalLinkViewzexternal-link-chooserz'wagtailadmin/chooser/external_link.htmlexternal_linkr   c                 C   s  | j |j|  | jd| _| j r[|  }|d }ttdt	
 }|t	ttfvr/| |S td|d }t|dd }|d u rEt }ztddd	}W n tyX   d }Y nw |d
oct|dk}tt}	|r|D ]#\}
}}}|	|
 | |r||r|	|
 |t|d d   qln8|D ]5\}
}}}||sq|	|
 |t|d   |r||| r|	|
 |t|t| d d   q|	 D ]\}
}tjdj|
d}|jj}|D ]s}z||dd |d
D }W n	 t y   Y qw |j!j}|j"|# j"|j$td|j"fd	|j%d}|r |j&|dd n|j'|d}||kr9|tkr9| |    S |tkr?qt(|dd |||j$dd||dd    S q| |S | ) S )Nr  r   %WAGTAILADMIN_EXTERNAL_LINK_CONVERSIONz\?|#r   _wagtail_cached_site_root_pathswagtail_serve)r   r   /r   	root_pager   c                 S   s   g | ]}|r|qS r*   r*   )r   	componentr*   r*   r+   r     s    z)ExternalLinkView.post.<locals>.<listcomp>r  r  )r'   z6wagtailadmin/chooser/confirm_external_to_internal.html)submitted_urlinternal_urlrC   confirm_external_to_internal)r   externalinternalr   )*r  r$  r  r   r  r   r  r   r   LINK_CONVERSION_ALLlowerLINK_CONVERSION_EXACTLINK_CONVERSION_CONFIRMr  rer.   r   get_site_root_pathsr   r   
startswithlenr   r   r1   itemsr   r   r%   r4  r   router
   rC   r>   ry   draft_titler   get_url_partsget_full_urlr   r!  )rT   r'   r   r7  link_conversionurl_without_querysites
serve_pathmatch_relative_pathspossible_sitesr>   pathr   r   possible_urlssiter4  rE  matched_pageinternal_data
normal_urlr*   r*   r+   r&  \  s   







=zExternalLinkView.postN)
rf   rg   rh   r   r   r  r(  r)  r  r&  r*   r*   r*   r+   r.  U      r.  c                   @   r-  )AnchorLinkViewzanchor-link-chooserz%wagtailadmin/chooser/anchor_link.htmlanchor_linkr   c                 C      d| S )N#r*   r  r*   r*   r+   r    rr   z'AnchorLinkView.get_url_from_field_valueN)
rf   rg   rh   r   r   r  r(  r)  r  r  r*   r*   r*   r+   rV    rU  rV  c                   @   sH   e Zd ZdZeZdZdZdZdd Z	dd Z
d	d
 Zdd Zdd ZdS )EmailLinkViewzemail-link-chooserz$wagtailadmin/chooser/email_link.html
email_linkemail_addressc                 C   s<   |  | jjdd}|d | jjdd|d |d dS )Nr  r   emailr  subjectbody)r\  r  r^  r_  )parse_email_linkr'   r$   r%   )rT   parsed_emailr*   r*   r+   r    s   zEmailLinkView.get_initial_datac                 C   rX  )Nmailto:r*   r  r*   r*   r+   r    rr   z&EmailLinkView.get_url_from_field_valuec                 C   s   | j jd | j jd d}tdd | D td}d| j jd  }|r*|d	| 7 }|| j jd
  p8| j jd d
| j jv dS )Nr^  r_  )r^  r_  c                 S   s&   i | ]\}}|d ur|dkr||qS )Nr   r*   )r   kvr*   r*   r+   r     s   & z1EmailLinkView.get_result_data.<locals>.<dictcomp>)	quote_viarb  r\  r   r  r  )r  r   r   rD  r   r  r  )rT   paramsencoded_paramsr   r*   r*   r+   r  	  s   



zEmailLinkView.get_result_datac                 C   r"  r  r#  r%  r*   r*   r+   r&  !  r'  zEmailLinkView.postc                 C   s\   i }t |}|j|d< t|j}d|v r|d d nd|d< d|v r(|d d nd|d< |S )Nr]  r^  r   r   r_  )r   rO  r   query)rT   mailtor   mail_resultrh  r*   r*   r+   r`  ,  s   

zEmailLinkView.parse_email_linkN)rf   rg   rh   r   r   r  r(  r)  r  r  r  r  r&  r`  r*   r*   r*   r+   rZ    s    	rZ  c                   @   r-  )PhoneLinkViewzphone-link-chooserz$wagtailadmin/chooser/phone_link.html
phone_linkphone_numberc                 C   s   t dd|}d| S )Nz\sr   ztel:)r@  subr  r*   r*   r+   r  A  s   z&PhoneLinkView.get_url_from_field_valueN)
rf   rg   rh   r   r   r  r(  r)  r  r  r*   r*   r*   r+   rk  :  rU  rk  rQ   )TNNT)Er@  collectionsr   urllib.parser   r   r   r   django.confr   django.core.paginatorr   r	   django.httpr
   django.shortcutsr   django.template.responser   django.urlsr   django.urls.baser   django.utils.translationr   r   django.views.generic.baser   wagtailr   wagtail.admin.forms.choosersr   r   r   r   wagtail.admin.forms.searchr   wagtail.admin.modal_workflowr   wagtail.admin.ui.tablesr   r   r   wagtail.coreutilsr   wagtail.modelsr   r   r   r,   r7   rL   rM   rk   rx   r{   r   r   r   r   r   r  r<  r>  r?  r.  rV  rZ  rk  r*   r*   r*   r+   <module>   sZ    

+	 eZ@ D