U
    {hw                     @   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 Z2d;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}|rF|| |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)requestZextra_contextcontext r)   c/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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)stringZpage_modelsZ
sub_stringZ
page_modelr)   r)   r*   page_models_from_string.   s    
r3   Tc           	      C   s   |sg }|s| j |krdS |r<t| j p(t|s<|tfks<dS |sL|  rLdS |dkr|}|D ]<}| j|jksv| |r| dS |dkr\|||   S q\|dkr| | 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_toZbulk_move_tor4   >   add_subpagecopy_toT)	Zspecific_classr.   r   is_rootpkZis_descendant_ofZpermissions_for_userZcan_move_toZcan_add_subpage)	pageuserdesired_classescan_choose_root	user_permtarget_pagesmatch_subclassZpages_to_moveZpage_to_mover)   r)   r*   can_choose_page<   s.    r@   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                   s   t  j|| || _d S N)super__init__rC   )selfrC   argskwargs	__class__r)   r*   rF   j   s    zPageChooserTable.__init__c                    s   t  |}| j|d< |S NrC   )rE   get_context_datarC   )rG   parent_contextr(   rJ   r)   r*   rM   n   s    
z!PageChooserTable.get_context_datac                 C   s>   g }|j r|d |js$|d |js4|d d|S )Nzparent-pageZunpublisheddisabled )is_parent_pager0   live
can_choosejoin)rG   r9   Z
classnamesr)   r)   r*   get_row_classnames   s    


z"PageChooserTable.get_row_classname)__name__
__module____qualname__	classnamerF   rM   rU   __classcell__r)   r)   rJ   r*   rA   g   s   rA   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                   s   t  j|| || _d S rD   )rE   rF   r\   )rG   r\   rH   rI   rJ   r)   r*   rF      s    zPageTitleColumn.__init__c                 C   s   |  S rD   )get_admin_display_titlerG   instancer)   r)   r*   	get_value   s    zPageTitleColumn.get_valuec                    s2   t  ||}||d< |do(|jdk|d< |S )Nr9   rC      )rE   get_cell_context_datar%   depthrG   r_   rN   r(   rJ   r)   r*   rb      s
    z%PageTitleColumn.get_cell_context_data)rV   rW   rX   cell_template_namerF   r`   rb   rZ   r)   r)   rJ   r*   r[      s   r[   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   s   |  S rD   )
get_parentr^   r)   r)   r*   r`      s    zParentPageColumn.get_valuec                    s    t  ||}|d|d< |S rL   )rE   rb   r%   rd   rJ   r)   r*   rb      s    z&ParentPageColumn.get_cell_context_data)rV   rW   rX   re   r`   rb   rZ   r)   r)   rJ   r*   rf      s   rf   c                   @   s   e Zd ZdZdd ZdS )PageStatusColumnz1wagtailadmin/chooser/tables/page_status_cell.htmlc                 C   s   |S rD   r)   r^   r)   r)   r*   r`      s    zPageStatusColumn.get_valueNrV   rW   rX   re   r`   r)   r)   r)   r*   rh      s   rh   c                   @   s   e Zd ZdZdd ZdS )PageNavigateToChildrenColumnz?wagtailadmin/chooser/tables/page_navigate_to_children_cell.htmlc                 C   s   |S rD   r)   r^   r)   r)   r*   r`      s    z&PageNavigateToChildrenColumn.get_valueNri   r)   r)   r)   r*   rj      s   rj   c                   @   s   e Zd ZdZdS )PageCheckboxSelectColumnz:wagtailadmin/chooser/tables/page_checkbox_select_cell.htmlN)rV   rW   rX   re   r)   r)   r)   r*   rk      s   rk   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rx|dtdtdddd |S )NtitleTitle)labelr\   updatedUpdated12%latest_revision_created_atro   widthaccessortypeTypepage_type_display_namestatusStatusro   ru   children z10%r   selectSelect1%r8   )	r[   _r\   r   r   rh   rj   insertrk   rG   colsr)   r)   r*   columns   s>       zBrowseView.columnsc                 C   s&   | j    }| jr"|d}|S )Nlocale)parent_pageZget_childrenZdefer_streamfieldsspecifici18n_enabledselect_related)rG   pagesr)   r)   r*   get_object_list   s    
zBrowseView.get_object_listc                 C   sL   t dD ]}||| j}q
| jtfkrH|j| j }|jdd}||B }|S )Nconstruct_page_chooser_querysetr   )Znumchild__gt)r   	get_hooksr'   r;   r   rw   filter)rG   r   hookZchoosable_pagesZ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k
rd   t
Y nX |rztt|d| _n4| jtfkrt | _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r|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 qn| jj)}
|dd  dd tj*| j+ddD }| jj!||
j!< t jjt,|- dj%|
j!dD ]6}t#d||j! gd}|'||d |(  d qR|
r|j|
d}t.|dd}z|/|jdd }W n t0k
r   t
Y nX |D ]2}t||j| j||||	d|_|1 |_d|_qt2| 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.pageZ
user_perms)idr<   c                 S   s   g | ]}|rt |qS r)   )int).0r8   r)   r)   r*   
<listcomp>  s      z"BrowseView.get.<locals>.<listcomp>ztarget_pages[]Zpk__inr?   T)r>   r?   pr   )language_codeZwagtailadmin_choose_pageZ	locale_idr8   ?)r   urlc                 S   s   i | ]}|d  |d qS )r   r8   r)   )r   itemr)   r)   r*   
<dictcomp>B  s    z"BrowseView.get.<locals>.<dictcomp>r8   Zwagtailadmin_choose_page_childrH   )r      Zper_page   rB   c                 S   s   g | ]}|  qS r)   )Zget_verbose_name)r   Zdesired_classr)   r)   r*   r     s   )r   r   tableZpagination_pagesearch_formpage_type_stringZpage_type_namesZpage_types_restrictedZshow_locale_controlslocale_optionsselected_localer\   z wagtailadmin/chooser/browse.htmlZbrowser   )stepr   Z	json_data)7getattrr   r   r$   r%   r\   r3   r;   r/   LookupErrorr
   r   r   r   Zget_first_root_nodeobjectsallrw   Zfirst_common_ancestorr   r   r   r   getlistr@   r:   rS   rQ   Zcan_descendcopypopr7   r   r8   Z
get_activer   Zvalues_listexcluder   r0   r   r   Ztranslation_ofvalueslistkeysr	   r9   r   Zget_children_countrA   r   r+   r   r   )rG   r'   r   r   r=   Zall_desired_pagesr   r<   r>   r?   r   r   
new_paramsZactive_locale_idZ
choose_urlr   Zlocales_and_parent_pagesZchoose_child_url	paginatorr9   r   r(   r)   r)   r*   r%      s   




	
 



 



	

zBrowseView.get)N)rV   rW   rX   propertyr   r   r   r%   r)   r)   r)   r*   rl      s
   
rl   c                   @   s    e Zd Zedd Zdd ZdS )
SearchViewc              	   C   sz   t dtd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rv|dtdtdddd
 |S )Nrm   rn   )ro   parentZParentrp   rq   rr   rs   rt   rw   rx   ry   rz   r{   r|   r   r   r   r   r8   )	r[   r   rf   r   r   rh   r\   r   rk   r   r)   r)   r*   r     s6       zSearchView.columnsc           
   
   C   sB  t tdd| _|jd| _|jdp*d}zt|}W n ttfk
rT   t	Y nX t
j }| jrp|d}tdD ]}|||}qzt|j}| r|jd r|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   )rc   r   r   r   TrB   z)wagtailadmin/chooser/_search_results.html)Z
searchformr   r   r   ) r   r   r   r$   r%   r\   r3   r/   r   r
   r   r   r   r   r   r   r   is_validcleaned_datar   rw   r   autocompletenoner	   Zget_pagerS   rQ   rA   r   r   r+   )
rG   r'   r   r;   r   r   r   r   r9   r   r)   r)   r*   r%     sR    





zSearchView.getN)rV   rW   rX   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   s   t | jd d d d|ddS )NZpage_chosenr   resultr   r   r'   rG   r   r)   r)   r*   render_chosen_response  s    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   ZparentIdZ
adminTitleZeditUrlr   )r8   rg   r]   r   r   )r   r9   r)   r)   r*   r     s   z*ChosenMultipleView.get.<locals>.<listcomp>)r$   r   r   r   r   r   r   )rG   r'   Zpksr   r   r)   r)   r*   r%     s    
zChosenMultipleView.getN)rV   rW   rX   __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%   rG   r)   r)   r*   get_initial_data  s
      z!BaseLinkFormView.get_initial_datac                 C   s   |S rD   r)   rG   valuer)   r)   r*   get_url_from_field_value  s    z)BaseLinkFormView.get_url_from_field_valuec                 C   s8   | j j| j }| || j jd  p(|d| j jkdS )Nr   r   rm   Zprefer_this_title_as_link_text)formr   r   r   stripchanged_data)rG   Z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)rG   r'   r)   r)   r*   r%   #  s
     zBaseLinkFormView.getc                 C   sB   | j |j|  | jd| _| j r6|  }| |S |  S d S r   	r   POSTr   r   r   r   r   r   r   rG   r'   r   r)   r)   r*   post)  s      

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   4  s     z%BaseLinkFormView.render_form_responsec                 C   s   t | jd d d d|ddS )NZexternal_link_chosenr   r   r   r   r)   r)   r*   r   B  s    z'BaseLinkFormView.render_chosen_responseN)
rV   rW   rX   r   r   r   r%   r   r   r   r)   r)   r)   r*   r     s   r   r   exactZconfirmc                   @   s(   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.htmlZexternal_linkr   c                 C   s  | j |j|  | jd| _| j r|  }|d }ttdt	
 }|t	ttfkr^| |S td|d }t|dd }|d krt }ztddd	}W n tk
r   d }Y nX |d
ot|dk}tt}	|r&|D ]F\}
}}}|	|
 | |r||r|	|
 |t|d d   qnz|D ]t\}
}}}||sFq*|	|
 |t|d   |r*||| r*|	|
 |t|t| d d   q*|	 D ]$\}
}tjdj|
d}|jj}|D ]}z ||dd |d
D }W n t k
r   Y qY nX |j!j}|j"|# j"|j$td|j"fd	|j%d}|rZ|j&|dd n
|j'|d}||kr|tkr| |    S |tkrqn,t(|dd |||j$dd||dd    S qҐq| |S | ) S d S )Nr   r   Z%WAGTAILADMIN_EXTERNAL_LINK_CONVERSIONz\?|#r   Z_wagtail_cached_site_root_pathsZ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_urlZinternal_urlr9   Zconfirm_external_to_internal)r   ZexternalZinternalr   )*r   r   r   r   r   r   r   r   r   LINK_CONVERSION_ALLlowerLINK_CONVERSION_EXACTLINK_CONVERSION_CONFIRMr   rer-   r   Zget_site_root_pathsr   r   
startswithlenr   r   r0   itemsr   r   r%   r   r   router
   r9   r8   rg   Zdraft_titler   Zget_url_partsget_full_urlr   r   )rG   r'   r   r   Zlink_conversionZurl_without_querysitesZ
serve_pathZmatch_relative_pathsZpossible_sitesr8   pathr   r   Zpossible_urlssiter   r   Zmatched_pageZinternal_dataZ
normal_urlr)   r)   r*   r   X  s    

 



zExternalLinkView.postN)
rV   rW   rX   r   r   r   r   r   r   r   r)   r)   r)   r*   r   Q  s   r   c                   @   s(   e Zd ZdZeZdZdZdZdd Z	dS )AnchorLinkViewzanchor-link-chooserz%wagtailadmin/chooser/anchor_link.htmlZanchor_linkr   c                 C   s   d| S )N#r)   r   r)   r)   r*   r     s    z'AnchorLinkView.get_url_from_field_valueN)
rV   rW   rX   r   r   r   r   r   r   r   r)   r)   r)   r*   r     s   r   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.htmlZ
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%   )rG   Zparsed_emailr)   r)   r*   r     s    zEmailLinkView.get_initial_datac                 C   s   d| S )Nmailto:r)   r   r)   r)   r*   r     s    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  }|rT|d	| 7 }|| j jd
  pp| j jd d
| j jkdS )Nr   r  )r   r  c                 S   s&   i | ]\}}|d k	r|dkr||qS )Nr~   r)   )r   kvr)   r)   r*   r     s
        z1EmailLinkView.get_result_data.<locals>.<dictcomp>)	quote_viar  r   r   r   r   )r   r   r   r   r   r   r   )rG   paramsZencoded_paramsr   r)   r)   r*   r     s    



zEmailLinkView.get_result_datac                 C   sB   | j |j|  | jd| _| j r6|  }| |S |  S d S r   r   r   r)   r)   r*   r     s      

zEmailLinkView.postc                 C   s\   i }t |}|j|d< t|j}d|kr4|d d nd|d< d|krP|d d nd|d< |S )Nr   r   r   r~   r  )r   r   r   query)rG   mailtor   Zmail_resultr  r)   r)   r*   r  (  s    

zEmailLinkView.parse_email_linkN)rV   rW   rX   r   r   r   r   r   r   r   r   r   r   r  r)   r)   r)   r*   r     s   	r   c                   @   s(   e Zd ZdZeZdZdZdZdd Z	dS )PhoneLinkViewzphone-link-chooserz$wagtailadmin/chooser/phone_link.htmlZ
phone_linkZphone_numberc                 C   s   t dd|}d| S )Nz\sr~   ztel:)r   subr   r)   r)   r*   r   =  s    z&PhoneLinkView.get_url_from_field_valueN)
rV   rW   rX   r   r   r   r   r   r   r   r)   r)   r)   r*   r
  6  s   r
  )N)TNNT)Er   collectionsr   urllib.parser   r   r   r   Zdjango.confr   Zdjango.core.paginatorr   r	   Zdjango.httpr
   Zdjango.shortcutsr   Zdjango.template.responser   Zdjango.urlsr   Zdjango.urls.baser   Zdjango.utils.translationr   r   Zdjango.views.generic.baser   Zwagtailr   Zwagtail.admin.forms.choosersr   r   r   r   Zwagtail.admin.forms.searchr   Zwagtail.admin.modal_workflowr   Zwagtail.admin.ui.tablesr   r   r   Zwagtail.coreutilsr   Zwagtail.modelsr   r   r   r+   r3   r@   rA   r[   rf   rh   rj   rk   rl   r   r   r   r   r   r   r   r   r   r
  r)   r)   r)   r*   <module>   sX   
    
+	 eV@ D