U
    {hr                  	   @   s  d dl Z d dlmZmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ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'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZHmIZImJZJ d dlKmLZL d d lKmMZN d d!lOmPZPmQZQmRZR d d"lSmTZT d d#lUmVZV d d$lWmXZX d%d&lYmZZZm[Z[ d%d'l\m]Z]m^Z^m_Z_m`Z` d%d(lambZb G d)d* d*eFe_ebeZZcG d+d, d,e_e`ebe]e[e'ZdG d-d. d.ZeG d/d0 d0eeedZfG d1d2 d2e_e`ebe]e[e)ZgG d3d4 d4e_e`ebe]e[e(ZhG d5d6 d6ebe[e%ZiG d7d8 d8e[e%ZjG d9d: d:e^e[e%ZkG d;d< d<e[e%ZldS )=    N)label_for_fieldquoteunquote)ContentType)FieldDoesNotExistImproperlyConfiguredPermissionDenied)modelstransaction)Q)
LOOKUP_SEP)Cast)Http404HttpResponseRedirect)get_object_or_404redirect)reverse)cached_property)capfirst)gettext)gettext_lazy)TemplateView)BaseCreateViewBaseDeleteViewBaseUpdateView)UnpublishAction)messages)WagtailFilterSet)WagtailAdminModelForm)
SearchForm)get_edit_handler)	ComponentMediaContainer)display_class_registry)StatusSidePanel)ButtonsColumnMixinColumnTitleColumnUpdatedAtColumn)get_latest_strget_valid_next_url_from_request)SpreadsheetExportMixin)ButtonWithDropdownHeaderButtonListingButton)log)registry)DraftStateMixinLocaleReferenceIndex)ModelLogEntry)get_search_backend)class_is_indexed   )BaseListingViewWagtailAdminTemplateMixin)BeforeAfterHookMixinHookResponseMixinLocaleMixin
PanelMixin)PermissionCheckedMixinc                       sn  e Zd ZdZdZdZdZdZdZdZ	dZ
ddddgZdZdZdZd	ZdZd
e gZdZdZ fddZdd Zdd Zdd Zdd Zdd Zdd Z fddZ fddZdd Zd d! Ze fd"d#Z!e"fd$d%Z#e$d&d' Zd(d) Z%d*d+ Z&d,d- Z'd.d/ Z(d0d1 Z)e$d2d3 Z*d4d5 Z+d6d7 Z,e$d8d9 Z-d:d; Z.d<d= Z/e$d>d? Z0 fd@dAZ1 fdBdCZ2  Z3S )D	IndexViewNzwagtailadmin/generic/index.htmlz'wagtailadmin/generic/index_results.htmladdchangedeleteviewdefaultq__str__Fc                    s0   t  j|f|| | js$|  | _|   d S N)supersetupZfilterset_classget_filterset_classsetup_searchselfrequestargskwargs	__class__ j/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/views/generic/models.pyrI   V   s    
zIndexView.setupc                 C   sZ   |   | _|  | _|  | _d| _d | _| jrV| j rV| jj	| j
 | _t| j| _d S NF)get_is_searchableis_searchableget_search_url
search_urlget_search_formsearch_formis_searchingsearch_queryZis_validZcleaned_datasearch_kwargboolrM   rS   rS   rT   rK   _   s    


zIndexView.setup_searchc                 C   s.   | j d krdS | jd kr(t| j p&| jS | jS rU   )modelrW   r6   search_fieldsr`   rS   rS   rT   rV   j   s
    

zIndexView.get_is_searchablec                 C   s   | j s
d S | jS rG   )rW   index_url_namer`   rS   rS   rT   rX   q   s    zIndexView.get_search_urlc                 C   s:   | j d ks| jsd S | jr4| j| jjkr4t| jjS t S rG   )ra   rW   r^   rN   GETr   r`   rS   rS   rT   rZ   v   s
    zIndexView.get_search_formc                    sD    j r js jsd S G  fddd}t j j dtfd|iS )Nc                       s   e Zd Z jZ jpg ZdS )z+IndexView.get_filterset_class.<locals>.MetaN)__name__
__module____qualname__ra   list_filterfieldsrS   r`   rS   rT   Meta   s   rj   Z	FilterSet)ra   rh   localetypere   r   )rM   rj   rS   r`   rT   rJ      s    zIndexView.get_filterset_classc                 C   st   t |j}|rt|ts|S |jjtjj|jddt	t
dt
 ddddd d }|jt
|d	S )
NF)Zfor_concrete_modelpk)content_typeZ	object_idz
-timestamp-pk	timestampr7   )_updated_at)log_registryZget_log_model_for_modelra   
issubclassr4   objectsfilterr   Zget_for_modelr   r	   ZOuterRefZ	CharFieldorder_byvaluesZannotateZSubquery)rM   querysetZ	log_modelZ
latest_logrS   rS   rT   _annotate_queryset_updated_at   s&      
z'IndexView._annotate_queryset_updated_atc                    s   t dd | jD }|r"| |}| jdkrD|tdjddS | jdkrf|tdjddS t	 
|}|js|r|tdjddd}n
|d}|S d S )	Nc                 s   s   | ]}t |d ddkV  qdS )accessorNrq   )getattr).0columnrS   rS   rT   	<genexpr>   s   z+IndexView.order_queryset.<locals>.<genexpr>rq   T)Znulls_firstz-_updated_at)Z
nulls_lastro   )anycolumnsry   Zorderingrv   r	   FascdescrH   order_querysetordered)rM   rx   Zhas_updated_at_columnrQ   rS   rT   r      s$    


 
zIndexView.order_querysetc                    s   t   }| |}|S rG   )rH   get_querysetsearch_querysetrM   rx   rQ   rS   rT   r      s    

zIndexView.get_querysetc                 C   s   | j s
|S t|jrx| jrxt| j}|j rH|j| j|| j| j	 dS t
j|j dtd |j| j|| j| j	 dS t }| jpg D ]}|tf |d | jiO }q||S )N)ri   Zorder_by_relevancez is defined as Indexable but does not specify any AutocompleteFields. Searches within the admin will only respond to complete words.)categoryZ__icontains)r\   r6   ra   search_backend_namer5   Zget_autocomplete_search_fieldsautocompleter]   rb   Zis_explicitly_orderedwarningswarnRuntimeWarningsearchr   ru   )rM   rx   Zsearch_backendqueryfieldrS   rS   rT   r      s2    


zIndexView.search_querysetc                    s0   t |ts, fdd}t|jt|fd|i}|S )Nc                    s
     |S rG   )get_list_buttons)r}   instancerO   rP   r`   rS   rT   get_buttons   s    z6IndexView._get_title_column_class.<locals>.get_buttonsr   )rs   r%   rl   re   )rM   column_classr   rS   r`   rT   _get_title_column_class   s    
z!IndexView._get_title_column_classc                    sH     |} fdd} js0|dtdt|dS  j||fd|i|S )Nc                    s     |  }r|S  | S rG   )get_edit_urlget_inspect_url)r   edit_urlr`   rS   rT   get_url   s    z,IndexView._get_title_column.<locals>.get_urlnameName)labelrz   r   r   )r   ra   r   str_get_custom_column)rM   
field_namer   rP   r   rS   r`   rT   _get_title_column   s"    
 zIndexView._get_title_columnc                 K   s   t | j|r|gn|t}|^ }}| j}d}|D ]}	|j|	}
|
j}|
j}q4t||dd\}}|rzt	d||d }t
|dd }|d kr|}|}|rd|}||ft||d|S )	N T)Zreturn_attrz&%(related_model_name)s %(field_label)s)Zrelated_model_nameZfield_labelZadmin_order_field.)r   sort_key)hasattrra   splitr   _meta	get_fieldverbose_namerelated_modelr   _r{   joinr   )rM   r   r   rP   lookupsZ	relationsr   Zmodel_classZforeign_field_namera   Zforeign_fieldr   attrr   rz   rS   rS   rT   r     s>    


zIndexView._get_custom_columnc                 C   sT   g }t | jD ]@\}}t|tr&|}n|dkr:| |}n
| |}|| q|S Nr   )	enumeratelist_display
isinstancer&   r   r   append)rM   r   ir   r}   rS   rS   rT   r   :  s    

zIndexView.columnsc                 C   s*   | j r&| dr&t| j t|jfdS d S NrA   rO   )edit_url_nameuser_has_permissionr   r   rm   rM   r   rS   rS   rT   r   H  s    zIndexView.get_edit_urlc                 C   s*   | j r&| dr&t| j t|jfdS d S )Nr@   r   )copy_url_namer   r   r   rm   r   rS   rS   rT   get_copy_urlL  s    zIndexView.get_copy_urlc                 C   s2   | j r.| ddddhr.t| j t|jfdS d S )Nr@   rA   rB   rC   r   )inspect_url_nameZuser_has_any_permissionr   r   rm   r   rS   rS   rT   r   P  s    

zIndexView.get_inspect_urlc                 C   s*   | j r&| dr&t| j t|jfdS d S NrB   r   )delete_url_namer   r   r   rm   r   rS   rS   rT   get_delete_urlV  s    zIndexView.get_delete_urlc                 C   s$   | j r | dr | t| j S d S )Nr@   )add_url_namer   _set_locale_query_paramr   r`   rS   rS   rT   get_add_urlZ  s    zIndexView.get_add_urlc                 C   s   |   S rG   r   r`   rS   rS   rT   add_url^  s    zIndexView.add_urlc                 C   s    | j s| jrt| jjjS | j S rG   )
page_titlera   r   r   verbose_name_pluralr`   rS   rS   rT   get_page_titleb  s    zIndexView.get_page_titlec                 C   s(   | j s| jS | jdt| j jjdg S )Nr   urlr   )ra   breadcrumbs_itemsr   r   r   r`   rS   rS   rT   get_breadcrumbs_itemsg  s
    zIndexView.get_breadcrumbs_itemsc                 C   s&   g }| j r"|t| j| j dd |S )Nplus)r   	icon_name)r   r   r-   add_item_label)rM   buttonsrS   rS   rT   header_buttonsn  s    zIndexView.header_buttonsc                 C   s   g }|  | }rB|ttd|ddtddt|i idd | | }r|ttd|d	dtd
dt|i idd | | }r|ttd|ddtddt|i idd | | }r|ttd|ddtddt|i idd |S )NEditedit
aria-labelzEdit '%(title)s'title
   )r   r   attrspriorityZCopycopyzCopy '%(title)s'   Inspectzinfo-circlezInspect '%(title)s'DeletebinzDelete '%(title)s'   )r   r   r.   r   r   r   r   r   )rM   r   r   r   Zcopy_urlZinspect_url
delete_urlrS   rS   rT   get_list_more_buttons{  sh       
 zIndexView.get_list_more_buttonsc              
   C   s>   |  |}g }|r:|t|ddtddt|i id |S )Nzdots-horizontalr   zMore options for '%(title)s'r   )r   r   r   )r   r   r,   r   r   )rM   r   Zmore_buttonsr   rS   rS   rT   r     s    
 

zIndexView.get_list_buttonsc                 C   s(   | j r ttdd| j jji S tdS )NzAdd %(model_name)s
model_nameAdd)ra   r   r   r   r   r`   rS   rS   rT   r     s
    zIndexView.add_item_labelc                    s   t  j||}| d|d< |d r@| j |d< |d< | j|d< | j|d< |  |d< | j|d< | j|d	< | j	|d
< | j
o| j
j|d< |S )Nr@   can_addr   Zheader_action_urlZheader_action_labelrW   rY   r[   r\   Zquery_string
model_opts)rH   get_context_datar   r   r   rW   rX   r[   r\   r]   ra   r   )rM   rO   rP   contextrQ   rS   rT   r     s    




zIndexView.get_context_datac                    s0   | j r | |d | jjdS t j|f|S )NZobject_listZexport)Z	is_exportZas_spreadsheetrN   rd   getrH   render_to_response)rM   r   Zresponse_kwargsrQ   rS   rT   r     s     zIndexView.render_to_response)4re   rf   rg   ra   template_nameZresults_template_namer   r   r   r   r   any_permission_requiredrb   r   rW   r^   r   r(   r   rh   Zshow_other_searchesrI   rK   rV   rX   rZ   rJ   ry   r   r   r   r   r'   r   r&   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__rS   rS   rQ   rT   r?   >   sb   
		 -


5
r?   c                       s  e Zd ZdZdZdZdZdZdZe	dZ
dZe	dZe	dZe	dZdgZ fd	d
Zdd Zdd Zdd Zdd Zdd Zedd Zdd Zdd Zdd Zdd Zdd  Z fd!d"Zd#d$ Zd%d& Zd'd( Z  fd)d*Z!d+d, Z"d-d. Z#d/d0 Z$ fd1d2Z%  Z&S )3
CreateViewNz wagtailadmin/generic/create.htmlZNewr@   z$%(model_name)s '%(object)s' created.z6The %(model_name)s could not be created due to errors.ZCreatecreatec                    s$   t  j|f|| | || _d S rG   rH   rI   
get_actionactionrL   rQ   rS   rT   rI     s    zCreateView.setupc                 C   s,   |   D ]}|jd| r|  S qdS )Naction-r   get_available_actionsPOSTr   rM   rN   r   rS   rS   rT   r     s    
zCreateView.get_actionc                 C   s   | j S rG   actionsr`   rS   rS   rT   r     s    z CreateView.get_available_actionsc                 C   s    | j s| jrt| jjjS | j S rG   )Zpage_subtitlera   r   r   r   r`   rS   rS   rT   get_page_subtitle  s    zCreateView.get_page_subtitlec                 C   sf   | j s| jS g }| jr6|t| jt| j jjd |dtddt| j jj	i d | j| S )Nr   r   zNew: %(model_name)sr   )
ra   r   rc   r   r   r   r   r   r   r   rM   itemsrS   rS   rT   r   	  s"    z CreateView.get_breadcrumbs_itemsc                 C   s   | j std| t| j S )NzzSubclasses of wagtail.admin.views.generic.models.CreateView must provide an add_url_name attribute or a get_add_url method)r   r   r   r   r`   rS   rS   rT   r     s
    zCreateView.get_add_urlc                 C   s   |   S rG   r   r`   rS   rS   rT   r   %  s    zCreateView.add_urlc                 C   s&   | j stdt| j t| jjfdS )Nz|Subclasses of wagtail.admin.views.generic.models.CreateView must provide an edit_url_name attribute or a get_edit_url methodr   r   r   r   r   objectrm   r`   rS   rS   rT   r   )  s
    zCreateView.get_edit_urlc                 C   s   | j std| t| j S )NzSubclasses of wagtail.admin.views.generic.models.CreateView must provide an index_url_name attribute or a get_success_url method)rc   r   r   r   r`   rS   rS   rT   get_success_url1  s
    zCreateView.get_success_urlc                 C   s.   | j d krd S t| j || jo$| jjjd S N)r   r   )success_messager   ra   r   r   r   rS   rS   rT   get_success_message9  s    
zCreateView.get_success_messagec                 C   s   t |  tdgS Nr   r   buttonr   r   r`   rS   rS   rT   get_success_buttonsD  s    zCreateView.get_success_buttonsc                 C   s,   | j d krd S t| j d| jo$| jjji S Nr   error_messager   ra   r   r   r`   rS   rS   rT   get_error_messageG  s    
zCreateView.get_error_messagec                    sT   t  jf |}|d| _|  }| j|d< | j|d< ||d< |d  |j7  < |S )Nform
action_urlsubmit_button_labelside_panelsmedia)rH   r   r   r  get_side_panelsr   r
  r  rM   rP   r   r  rQ   rS   rT   r   O  s    

zCreateView.get_context_datac                 C   s2   g }| j r*|t| jj| j| j | jd t|S )N)rk   translations)rk   r   r$   r  r   rN   r  r"   )rM   r  rS   rS   rT   r  Y  s    zCreateView.get_side_panelsc                    s$    fddt j j jjdD S )Nc                    s    g | ]}|   j|d qS )rk   r   )r   r   )r|   rk   r`   rS   rT   
<listcomp>g  s   z/CreateView.get_translations.<locals>.<listcomp>id)r2   rt   allexcluderk   r  r`   rS   r`   rT   get_translationsf  s    
zCreateView.get_translationsc                 C   s   | j r|  }| j |_ |S d S rG   )rk   ra   r   rS   rS   rT   get_initial_form_instanceo  s    z$CreateView.get_initial_form_instancec                    s>   |    }r|| _t  }|  }t|tr:| jj|d< |S NZfor_user)	r  r   rH   get_form_kwargsget_form_classrs   r   rN   user)rM   r   rP   
form_classrQ   rS   rT   r  u  s    

zCreateView.get_form_kwargsc                 C   s   | j  }t|ddd |S )z
        Called after the form is successfully validated - saves the object to the db
        and returns the new object. Override this to implement custom save logic.
        zwagtail.createTr   r   Zcontent_changed)r  saver/   r   rS   rS   rT   save_instance  s    
zCreateView.save_instancec                 C   s:   |  | j}|  }|d k	r.tj| j||d t|  S Nr   )r   r   r  r   successrN   r   r   rM   r   success_buttonsrS   rS   rT   save_action  s    zCreateView.save_actionc              	   C   sD   || _ t  |  | _W 5 Q R X |  }|  }|d k	r@|S |S rG   r  r
   atomicr  r   r%  run_after_hookrM   r  responsehook_responserS   rS   rT   
form_valid  s    
zCreateView.form_validc                    s2   || _ |  }|d k	r&t| j|| t |S rG   r  r  r   Zvalidation_errorrN   rH   form_invalidrM   r  r  rQ   rS   rT   r.    s
    zCreateView.form_invalid)'re   rf   rg   ra   r  rc   r   r   r   r   r   permission_requiredr   r  r
  r   rI   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r  r  r  r  r%  r,  r.  r   rS   rS   rQ   rT   r     sH   

		r   c                   @   s   e Zd ZdddZdd ZdS )CopyViewMixinNc                 C   s   t | jtt| j| j dS N)rm   )r   ra   r   r   rP   pk_url_kwargr   rS   rS   rT   
get_object  s     zCopyViewMixin.get_objectc                 C   s   |   S rG   )r4  r`   rS   rS   rT   r    s    z'CopyViewMixin.get_initial_form_instance)N)re   rf   rg   r4  r  rS   rS   rS   rT   r1    s   
r1  c                   @   s   e Zd ZdS )CopyViewN)re   rf   rg   rS   rS   rS   rT   r5    s   r5  c                       s4  e Zd ZdZdZdZdZdZdZdZ	e
dZdZdZdZe
dZe
dZe
dZe
dZd	gZ fd
dZdd Zdd Zd8 fdd	Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z! fd&d'Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z( fd4d5Z) fd6d7Z*  Z+S )9EditViewNZEditingzwagtailadmin/generic/edit.htmlrA   r   z$%(model_name)s '%(object)s' updated.z4The %(model_name)s could not be saved due to errors.ZSaver   c                    s$   t  j|f|| | || _d S rG   r   rL   rQ   rS   rT   rI     s    zEditView.setupc                 C   s,   |   D ]}|jd| r|  S qdS )Nr   r   r   r   rS   rS   rT   r     s    
zEditView.get_actionc                 C   s   | j S rG   r   r`   rS   rS   rT   r     s    zEditView.get_available_actionsc                    sF   | j | jkr| jd | j| j < tt| j| j  | j| j < t |S r   )r3  rP   rO   r   r   rH   r4  r   rQ   rS   rT   r4    s    zEditView.get_objectc                 C   s
   t | jS rG   r)   r   r`   rS   rS   rT   r     s    zEditView.get_page_subtitlec                 C   sT   | j s| jS g }| jr6|t| jt| j jjd |d|  d | j| S )Nr   r   )	ra   r   rc   r   r   r   r   r   r   r   rS   rS   rT   r     s    zEditView.get_breadcrumbs_itemsc                 C   sL   g }|   }|  }|s|rD|t| j| j| j| j|||  d t	|S )N)rk   r  	usage_urlhistory_urlZlast_updated_info)
get_usage_urlget_history_urlr   r$   r   rN   rk   r  get_last_updated_infor"   )rM   r  r8  r9  rS   rS   rT   r    s     zEditView.get_side_panelsc                 C   s   t | jd S )Nr  )rr   Zget_logs_for_instancer   select_relatedfirstr`   rS   rS   rT   r<    s    zEditView.get_last_updated_infoc                 C   s&   | j stdt| j t| jjfdS )NzzSubclasses of wagtail.admin.views.generic.models.EditView must provide an edit_url_name attribute or a get_edit_url methodr   r   r`   rS   rS   rT   r     s
    zEditView.get_edit_urlc                 C   s"   | j rt| j t| jjfdS d S Nr   )r   r   r   r   rm   r`   rS   rS   rT   r     s    zEditView.get_delete_urlc                 C   s"   | j rt| j t| jjfdS d S r?  history_url_namer   r   r   rm   r`   rS   rS   rT   r;    s    zEditView.get_history_urlc                 C   s"   | j rt| j t| jjgdS d S r?  usage_url_namer   r   r   rm   r`   rS   rS   rT   r:    s    zEditView.get_usage_urlc                 C   s   | j stdt| j S )Nz~Subclasses of wagtail.admin.views.generic.models.EditView must provide an index_url_name attribute or a get_success_url methodrc   r   r   r`   rS   rS   rT   r   "  s
    zEditView.get_success_urlc                    s(    j s
g S  fdd j dD S )Nc                    s*   g | ]"}|j t jt|jgd dqS )r   r  )rk   r   r   r   rm   )r|   translationr`   rS   rT   r  -  s   z-EditView.get_translations.<locals>.<listcomp>rk   )r   r   r  r=  r`   rS   r`   rT   r  *  s
    
zEditView.get_translationsc                    s,   t   }|  }t|tr(| jj|d< |S r  )rH   r  r  rs   r   rN   r  )rM   rP   r  rQ   rS   rT   r  5  s
    

zEditView.get_form_kwargsc                 C   s*   | j  }| j  | _t|d| jd |S )z
        Called after the form is successfully validated - saves the object to the db.
        Override this to implement custom save logic.
        zwagtail.editr  )r  r  has_changedZhas_content_changesr/   r   rS   rS   rT   r  <  s    
zEditView.save_instancec                 C   s6   |   }|  }|d k	r*tj| j||d t|  S r   )r   r  r   r"  rN   r   r   r#  rS   rS   rT   r%  M  s    zEditView.save_actionc                 C   s0   | j d krd S t| j | j| jo&| jjjd S r   )r   r   r   ra   r   r   r`   rS   rS   rT   r   X  s    
zEditView.get_success_messagec                 C   s   t |  tdgS r   r  r`   rS   rS   rT   r  c  s    zEditView.get_success_buttonsc                 C   s,   | j d krd S t| j d| jo$| jjji S r  r  r`   rS   rS   rT   r  f  s    
zEditView.get_error_messagec              	   C   sD   || _ t  |  | _W 5 Q R X |  }|  }|d k	r@|S |S rG   r&  r)  rS   rS   rT   r,  n  s    
zEditView.form_validc                    s2   || _ |  }|d k	r&t| j|| t |S rG   r-  r/  rQ   rS   rT   r.  {  s
    zEditView.form_invalidc                    s   t  jf |}|d| _|  }|  |d< |  |d< ||d< |d  |j7  < | j|d< | 	d| j
|d< |d r|  |d	< | j|d
< |S )Nr  r	  r9  r  r  r
  rB   Z
can_deleter   delete_item_label)rH   r   r   r  r  r   r;  r  r
  Z user_has_permission_for_instancer   r   rG  r  rQ   rS   rT   r     s     
 
zEditView.get_context_data)N),re   rf   rg   ra   r  rc   r   r   rA  rC  r   r   context_object_namer   r0  rG  r   r  r
  r   rI   r   r   r4  r   r   r  r<  r   r   r;  r:  r   r  r  r  r%  r   r  r  r,  r.  r   r   rS   rS   rQ   rT   r6    sN   r6  c                       s   e Zd ZdZdZdZdZdZdZdZ	dZ
edZedZ fddZd  fdd		Zd
d Zdd Zdd Zdd Zdd Zdd Zedd Zdd Zdd Zdd Z fddZ  ZS )!
DeleteViewNz(wagtailadmin/generic/confirm_delete.htmlrB   r   z$%(model_name)s '%(object)s' deleted.c                    s6   t  j|f|| |  | _|  | _|  | _d S rG   )rH   rI   r4  r   r:  r8  	get_usageusagerL   rQ   rS   rT   rI     s    

zDeleteView.setupc                    sX   t | dd r| jS | j| jkr0| jd | j| j< tt| j| j | j| j< t |S )Nr   r   )	r{   r   r3  rP   rO   r   r   rH   r4  r   rQ   rS   rT   r4    s    zDeleteView.get_objectc                 C   s   | j s
d S t| jS rG   )r8  r3   get_grouped_references_tor   r`   rS   rS   rT   rJ    s    zDeleteView.get_usagec                 C   s*   t | j}|r|S | js tdt| jS )NzSubclasses of wagtail.admin.views.generic.models.DeleteView must provide an index_url_name attribute or a get_success_url method)r*   rN   rc   r   r   rM   next_urlrS   rS   rT   r     s    
zDeleteView.get_success_urlc                 C   s
   t | jS rG   r   r   r`   rS   rS   rT   r     s    zDeleteView.get_page_subtitlec                 C   s   g S rG   rS   r`   rS   rS   rT   r     s    z DeleteView.get_breadcrumbs_itemsc                 C   s&   | j stdt| j t| jjfdS )NzSubclasses of wagtail.admin.views.generic.models.DeleteView must provide a delete_url_name attribute or a get_delete_url methodr   )r   r   r   r   r   rm   r`   rS   rS   rT   r     s
    zDeleteView.get_delete_urlc                 C   s&   | j r"t| j t| jjfdd S d S )Nr   z?describe_on_delete=1rB  r`   rS   rS   rT   r:    s
    zDeleteView.get_usage_urlc                 C   s   t dd| jjji S )Nz4Are you sure you want to delete this %(model_name)s?r   )r   r   r   r   r`   rS   rS   rT   confirmation_message  s     zDeleteView.confirmation_messagec                 C   s.   | j d krd S t| j t| jjj| jd S )N)r   r   )r   r   r   r   r   r`   rS   rS   rT   r     s    
zDeleteView.get_success_messagec              	   C   s0   t   t| jdd | j  W 5 Q R X d S )Nzwagtail.delete)r   r   )r
   r'  r/   r   rB   r`   rS   rS   rT   delete_action  s    
zDeleteView.delete_actionc                 C   sP   | j r| j jrt|  }|   t| j|   | 	 }|d k	rH|S t
|S rG   )rK  is_protectedr   r   rQ  r   r"  rN   r   r(  r   )rM   r  Zsuccess_urlr+  rS   rS   rT   r,    s    zDeleteView.form_validc                    sT   t  jf |}| jj|d< |  |d< | jrP| j|d< | j |d< | jj|d< |S )Nr   nextr8  usage_countrR  )	rH   r   r   r   r   r8  rK  countrR  rM   rP   r   rQ   rS   rT   r     s    
zDeleteView.get_context_data)N)re   rf   rg   ra   rc   r   r   rC  r   rH  r0  r   r   r   rI   r4  rJ  r   r   r   r   r:  propertyrP  r   rQ  r,  r   r   rS   rS   rQ   rT   rI    s0   	
rI  c                       s   e Zd ZddddgZdZedZdZdZdZ	dZ
g Zg ZdZ fd	d
Zd!ddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z fdd Z  ZS )"InspectViewr@   rA   rB   rC   z!wagtailadmin/generic/inspect.htmlZ
InspectingNrm   c                    s:   t  j|f|| | j| j | _|  | _|  | _d S rG   )	rH   rI   rP   r3  rm   
get_fieldsri   r4  r   rL   rQ   rS   rT   rI     s    
zInspectView.setupc                 C   s   t | jtt| jdS r2  r   ra   r   r   rm   r   rS   rS   rT   r4    s    zInspectView.get_objectc                 C   s
   t | jS rG   r7  r`   rS   rS   rT   r     s    zInspectView.get_page_subtitlec                 C   sn   g }| j r*|t| j t| jjjd |  }|  }|rN|||d |dt	d|d | j
| S )Nr   r   r   )r   r   Zsublabel)rc   r   r   r   ra   r   r   r   r   r   r   )rM   r   r   Z
object_strrS   rS   rT   r   "  s$    z!InspectView.get_breadcrumbs_itemsc                    s2    j pdd  jj D } fdd|D }|S )Nc                 S   s*   g | ]"}|j r|jr |js|jr|jqS rS   )ZconcreteZis_relationZauto_createdr   r   r|   frS   rS   rT   r  9  s     z*InspectView.get_fields.<locals>.<listcomp>c                    s   g | ]}| j kr|qS rS   )fields_excluder[  r`   rS   rT   r  @  s     
 )ri   ra   r   rY  )rM   ri   rS   r`   rT   rY  8  s
    
zInspectView.get_fieldsc                 C   s   t t|| jdS )N)ra   )r   r   ra   )rM   r   r   rS   rS   rT   get_field_labelC  s    zInspectView.get_field_labelc                 C   s   t | jd| d }|d k	r,t|r(| S |S t | j|}t|tjrL| }t|tjrpddd |D pndS t	
|}|r||S |S )Nzget_%s_displayz, c                 s   s   | ]}t |V  qd S rG   )r   )r|   objrS   rS   rT   r~   W  s     z6InspectView.get_field_display_value.<locals>.<genexpr>-)r{   r   callabler   r	   Managerr  ZQuerySetr   r#   r   )rM   r   r   Z
value_funcvalueZdisplay_classrS   rS   rT   get_field_display_valueF  s    
z#InspectView.get_field_display_valuec                 C   sf   z| j j|}W n tk
r*   d }Y nX | ||| ||d d}t|d trb|d |d< |S )N)r   rc  	componentrc  re  )ra   r   r   r   r^  rd  r   r!   )rM   r   r   r   rS   rS   rT   get_context_for_field`  s    


z!InspectView.get_context_for_fieldc                    s    fdd j D S )Nc                    s   g | ]}  |qS rS   )rf  )r|   r   r`   rS   rT   r  o  s     z2InspectView.get_fields_context.<locals>.<listcomp>)ri   r`   rS   r`   rT   get_fields_contextn  s    zInspectView.get_fields_contextc                 C   s,   | j r(| dr(t| j t| jjfdS d S r   )r   r   r   r   r   rm   r`   rS   rS   rT   r   q  s    zInspectView.get_edit_urlc                 C   s,   | j r(| dr(t| j t| jjfdS d S r   )r   r   r   r   r   rm   r`   rS   rS   rT   r   u  s    zInspectView.get_delete_urlc                    s@   t  jf |}| j|d< |  |d< |  |d< |  |d< |S )Nr   ri   r   r   )rH   r   r   rg  r   r   rV  rQ   rS   rT   r   y  s    
zInspectView.get_context_data)N)re   rf   rg   r   r   r   r   ra   rc   r   r   ri   r]  r3  rI   r4  r   r   rY  r^  rd  rf  rg  r   r   r   r   rS   rS   rQ   rT   rX  
  s,   
rX  c                       s   e Zd ZdZdZdZedZedZdZ	dZ
 fddZdddZd	d
 Zdd Zdd Zdd Zdd Zdd Z fddZ  ZS )RevisionsCompareViewNr   ZHistoryz+wagtailadmin/generic/revisions/compare.htmlc                    s4   t  j|f|| || _|| _|| _|  | _d S rG   )rH   rI   rm   revision_id_arevision_id_br4  r   )rM   rN   rm   ri  rj  rO   rP   rQ   rS   rT   rI     s
    zRevisionsCompareView.setupc                 C   s   t | jtt| jdS r2  rZ  r   rS   rS   rT   r4    s    zRevisionsCompareView.get_objectc                 C   s   | j r| j S t| jS rG   )edit_handlerr    ra   r`   rS   rS   rT   r      s    z%RevisionsCompareView.get_edit_handlerc                 C   s
   t | jS rG   rO  r`   rS   rS   rT   r     s    z&RevisionsCompareView.get_page_subtitlec                 C   s"   | j rt| j t| jjfdS d S r?  r@  r`   rS   rS   rT   r;    s    z$RevisionsCompareView.get_history_urlc                 C   s"   | j rt| j t| jjfdS d S r?  )r   r   r   r   rm   r`   rS   rS   rT   r     s    z!RevisionsCompareView.get_edit_urlc                 C   s   |dkr| j }td}||fS |dkrD| j jdd }td}nD|dkrj| j jdd }td}nt| j j|d	}|rt|j}|st	|
 }||fS )
NliveLiveZearliest
created_atr  ZEarliestZlatestZLatestr  )r   r   	revisionsrv   r>  lastr   r   rn  r   Z	as_object)rM   revision_idrevisionZrevision_headingrS   rS   rT   _get_revision_and_heading  s"    


z.RevisionsCompareView._get_revision_and_headingc                 C   sJ   |   j| j| jd d }g }|D ] }|||}| r$||g7 }q$|S )N)r   rN   r  )r    Zget_bound_panelr   rN   Zget_comparisonrF  )rM   
revision_a
revision_b
comparisonresultcompdiffrS   rS   rT   _get_comparison  s      
z$RevisionsCompareView._get_comparisonc                    sl   t  jf |}| | j\}}| | j\}}| ||}|| j| j| j	| 
 |  |||||d
 |S )N)
r   history_label
edit_labelr9  r   rt  revision_a_headingru  revision_b_headingrv  )rH   r   rs  ri  rj  rz  updater   r{  r|  r;  r   )rM   rP   r   rt  r}  ru  r~  rv  rQ   rS   rT   r     s,    z%RevisionsCompareView.get_context_data)N)re   rf   rg   rk  r   rA  r   r|  r{  r   ra   rI   r4  r    r   r;  r   rs  rz  r   r   rS   rS   rQ   rT   rh    s    
rh  c                       s   e Zd ZdZdZdZdZdZedZ	dZ
 fddZ fddZd dd	Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z fddZ  ZS )!UnpublishViewNz'%(object)s' unpublished.z+wagtailadmin/generic/confirm_unpublish.htmlc                    s(   t  j|f|| || _|  | _d S rG   )rH   rI   rm   r4  r   )rM   rN   rm   rO   rP   rQ   rS   rT   rI     s    zUnpublishView.setupc                    s   |   | _t j|f||S rG   )get_objects_to_unpublishobjects_to_unpublishrH   dispatchrL   rQ   rS   rT   r    s    
zUnpublishView.dispatchc                 C   s.   | j rt| j tstt| j tt| jdS r2  ra   rs   r1   r   r   r   r   rm   r   rS   rS   rT   r4    s    zUnpublishView.get_objectc                 C   s   t | jS rG   )r3   rL  r   r`   rS   rS   rT   rJ     s    zUnpublishView.get_usagec                 C   s   | j gS rG   )r   r`   rS   rS   rT   r    s    z&UnpublishView.get_objects_to_unpublishc                 C   s
   t | jS rG   rO  r`   rS   rS   rT   get_object_display_title  s    z&UnpublishView.get_object_display_titlec                 C   s"   | j d krd S | j dt| ji S )Nr   )r   r   r   r`   rS   rS   rT   r   
  s    
z!UnpublishView.get_success_messagec                 C   s0   | j r,tt| j t| jjfdtdgS d S Nr   r   )r   r   r  r   r   r   rm   r   r`   rS   rS   rT   r    s    z!UnpublishView.get_success_buttonsc                 C   s   | j stdt| j S )NzSubclasses of wagtail.admin.views.generic.models.UnpublishView must provide an index_url_name attribute or a get_next_url methodrD  r`   rS   rS   rT   get_next_url  s
    zUnpublishView.get_next_urlc                 C   s&   | j stdt| j t| jjfdS )NzSubclasses of wagtail.admin.views.generic.models.UnpublishView must provide an unpublish_url_name attribute or a get_unpublish_url methodr   )unpublish_url_namer   r   r   r   rm   r`   rS   rS   rT   get_unpublish_url   s
    zUnpublishView.get_unpublish_urlc                 C   s"   | j rt| j t| jjfdS d S r?  rB  r`   rS   rS   rT   r:  (  s    zUnpublishView.get_usage_urlc                 C   sh   |  d| j| j}|d k	r|S | jD ] }t|| jjd}|jdd q$|  d| j| j}|d k	rd|S d S )NZbefore_unpublish)r  T)Zskip_permission_checksZafter_unpublish)Zrun_hookrN   r   r  r   r  execute)rM   r+  r   r   rS   rS   rT   	unpublish-  s    
zUnpublishView.unpublishc                 O   sD   |   }|r|S |  }|  }|d k	r8tj|||d t|  S r   )r  r   r  r   r"  r   r  )rM   rN   rO   rP   r+  r   r$  rS   rS   rT   post:  s    zUnpublishView.postc                    st   t  jf |}| jj|d< | j|d< |  |d< |  |d< |  |d< |  |d< |d rp|  }|	 |d< |S )Nr   r   object_display_titleZunpublish_urlrN  r8  rT  )
rH   r   r   r   r  r  r  r:  rJ  rU  )rM   rP   r   rK  rQ   rS   rT   r   F  s    
zUnpublishView.get_context_data)N)re   rf   rg   ra   rc   r   r  rC  r   r   r   rI   r  r4  rJ  r  r  r   r  r  r  r:  r  r  r   r   rS   rS   rQ   rT   r    s*   
	r  c                       s   e Zd ZdZdZdZdZedZdZ	 fddZ
dddZdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Z fddZdd Z  ZS )RevisionsUnscheduleViewNz4Version %(revision_id)s of "%(object)s" unscheduled.z5wagtailadmin/shared/revisions/confirm_unschedule.htmlc                    s8   t  j|f|| || _|| _|  | _|  | _d S rG   )rH   rI   rm   rq  r4  r   get_revisionrr  )rM   rN   rm   rq  rO   rP   rQ   rS   rT   rI   ^  s
    
zRevisionsUnscheduleView.setupc                 C   s.   | j rt| j tstt| j tt| jdS r2  r  r   rS   rS   rT   r4  e  s    z"RevisionsUnscheduleView.get_objectc                 C   s   t | jj| jdS )Nr  )r   r   ro  rq  r`   rS   rS   rT   r  j  s    z$RevisionsUnscheduleView.get_revisionc                 C   s   t | jt| jj| jjfdS r?  )r   revisions_unschedule_url_namer   r   rm   rr  r  r`   rS   rS   rT   get_revisions_unschedule_urlm  s    z4RevisionsUnscheduleView.get_revisions_unschedule_urlc                 C   s
   t | jS rG   rO  r`   rS   rS   rT   r  s  s    z0RevisionsUnscheduleView.get_object_display_titlec                 C   s&   | j d krd S | j | jj|  d S )Nrq  r   )r   rr  r  r  r`   rS   rS   rT   r   v  s    
z+RevisionsUnscheduleView.get_success_messagec                 C   s&   t t| jt| jjfdtdgS r  )r   r  r   r   r   r   rm   r   r`   rS   rS   rT   r  ~  s
     z+RevisionsUnscheduleView.get_success_buttonsc                 C   s8   t | j}|r|S | js tdt| jt| jjfdS )NzSubclasses of wagtail.admin.views.generic.models.RevisionsUnscheduleView  must provide a history_url_name attribute or a get_next_url methodr   )r*   rN   rA  r   r   r   r   rm   rM  rS   rS   rT   r    s    
z$RevisionsUnscheduleView.get_next_urlc                 C   s   t d| jj|  d S )Nz(revision %(revision_id)s of "%(object)s"r  )r   rr  r  r  r`   rS   rS   rT   r     s    z)RevisionsUnscheduleView.get_page_subtitlec              	      s>   t  jf |}|| j| j|  |  |  |  d |S )N)r   rr  subtitler  Zrevisions_unschedule_urlrN  )	rH   r   r  r   rr  r   r  r  r  rV  rQ   rS   rT   r     s    
z(RevisionsUnscheduleView.get_context_datac                 O   sL   d | j _| j j|jdgd |  }|  }|r@tj|||d t| 	 S )Napproved_go_live_at)r  Zupdate_fieldsr!  )
rr  r  r  r  r   r  r   r"  r   r  )rM   rN   rO   rP   r   r$  rS   rS   rT   r    s    zRevisionsUnscheduleView.post)N)re   rf   rg   ra   r   rA  r  r   r   r   rI   r4  r  r  r  r   r  r  r   r   r  r   rS   rS   rQ   rT   r  T  s&   
r  )mr   Zdjango.contrib.admin.utilsr   r   r   Z"django.contrib.contenttypes.modelsr   Zdjango.core.exceptionsr   r   r   Z	django.dbr	   r
   Zdjango.db.modelsr   Zdjango.db.models.constantsr   Zdjango.db.models.functionsr   Zdjango.httpr   r   Zdjango.shortcutsr   r   Zdjango.urlsr   Zdjango.utils.functionalr   Zdjango.utils.textr   Zdjango.utils.translationr   r   r   Zdjango.views.genericr   Zdjango.views.generic.editr   r   r   Zwagtail.actions.unpublishr   Zwagtail.adminr   Zwagtail.admin.filtersr   Zwagtail.admin.forms.modelsr   Zwagtail.admin.forms.searchr   Zwagtail.admin.panelsr    Zwagtail.admin.ui.componentsr!   r"   Zwagtail.admin.ui.fieldsr#   Zwagtail.admin.ui.side_panelsr$   Zwagtail.admin.ui.tablesr%   r&   r'   r(   Zwagtail.admin.utilsr)   r*   Zwagtail.admin.views.mixinsr+   Zwagtail.admin.widgets.buttonr,   r-   r.   Zwagtail.log_actionsr/   r0   rr   Zwagtail.modelsr1   r2   r3   Zwagtail.models.audit_logr4   Zwagtail.search.backendsr5   Zwagtail.search.indexr6   baser8   r9   Zmixinsr:   r;   r<   r=   Zpermissionsr>   r?   r   r1  r5  r6  rI  rX  rh  r  r  rS   rS   rS   rT   <module>   s   
   %
 K

 ]
vxgk