o
    h                  	   @   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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l.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZFmGZG d dlHmIZI d dlHmJZK d dlLmMZMmNZNmOZO d d lPmQZQ d d!lRmSZS d d"lTmUZU d#d$lVmWZWmXZX d#d%lYmZZZm[Z[m\Z\m]Z] d#d&l^m_Z_ G d'd( d(eBe\e_eWZ`G d)d* d*e\e]e_eZeXe%ZaG d+d, d,ZbG d-d. d.ebeaZcG d/d0 d0e\e]e_eZeXe'ZdG d1d2 d2e\e]e_eZeXe&ZeG d3d4 d4e_eXe#ZfG d5d6 d6eXe#ZgG d7d8 d8e[eXe#ZhG d9d: d:eXe#ZidS );    N)label_for_fieldquoteunquote)ContentType)FieldDoesNotExistImproperlyConfiguredPermissionDenied)modelstransaction)
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)get_edit_handler)	ComponentMediaContainer)display_class_registry)StatusSidePanel)ButtonsColumnMixinColumnTitleColumnUpdatedAtColumn)get_latest_strget_valid_next_url_from_request)SpreadsheetExportMixin)ButtonButtonWithDropdownHeaderButtonListingButton)log)registry)DraftStateMixinLocaleReferenceIndex)ModelLogEntry)class_is_indexed)RemovedInWagtail70Warning   )BaseListingViewWagtailAdminTemplateMixin)BeforeAfterHookMixinHookResponseMixinLocaleMixin
PanelMixin)PermissionCheckedMixinc                       sB  e Zd ZdZdZdZdZdZdZdZ	dZ
g dZdZde gZdZdZdd Zed	d
 Zedd Zedd Zdd Z f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 d#d$ Z!ed%d& Z"d'd( Z#ed)d* Z$d+d, Z%d-d. Z&ed/d0 Z'ed1d2 Z( fd3d4Z) fd5d6Z*  Z+S )7	IndexViewNzwagtailadmin/generic/index.htmlz'wagtailadmin/generic/index_results.htmladdchangedeleteview__str__Fc                 C   s   t dt | jS )NzX`IndexView.get_search_url` is deprecated. Use `IndexView.get_index_results_url` instead.)warningswarnr5   index_url_nameself rJ   b/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/views/generic/models.pyget_search_urlQ   s
   zIndexView.get_search_urlc                 C      |   S N)rL   rH   rJ   rJ   rK   
search_url^      zIndexView.search_urlc                 C   s*   | j rt| j s| jsdS t| jp| jS )NF)modelr4   search_fieldsboolindex_results_urlrO   rH   rJ   rJ   rK   is_searchableb   s   zIndexView.is_searchablec                    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.filterset_class.<locals>.MetaN)__name__
__module____qualname__rQ   list_filterfieldsrJ   rH   rJ   rK   Metav   s    r[   	FilterSet)rQ   rY   localetyperV   r   )rI   r[   rJ   rH   rK   filterset_classl   s   zIndexView.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)for_concrete_modelpk)content_type	object_idz
-timestamp-pk	timestampr6   )_updated_at)log_registryget_log_model_for_modelrQ   
issubclassr3   objectsfilterr   get_for_modelr   r	   OuterRef	CharFieldorder_byvaluesannotateSubquery)rI   queryset	log_model
latest_logrJ   rJ   rK   _annotate_queryset_updated_at   s   
z'IndexView._annotate_queryset_updated_atc                    s   t dd | jD }|r| |}| jdkr"|tdjddS | jdkr3|tdjddS t	 
|}|jsR|rM|tdjddd}|S |d}|S )	Nc                 s   s     | ]}t |d ddkV  qdS )accessorNrf   )getattr).0columnrJ   rJ   rK   	<genexpr>   s
    
z+IndexView.order_queryset.<locals>.<genexpr>rf   T)nulls_firstz-_updated_at)
nulls_lastrd   )anycolumnsrv   orderingro   r	   Fascdescsuperorder_querysetordered)rI   rs   has_updated_at_column	__class__rJ   rK   r      s$   



zIndexView.order_querysetc                    s0   t |ts fdd}t|jt|fd|i}|S )Nc                    s
     |S rN   )get_list_buttons)rz   instanceargskwargsrH   rJ   rK   get_buttons      
z6IndexView._get_title_column_class.<locals>.get_buttonsr   )ri   r#   r^   rV   )rI   column_classr   rJ   rH   rK   _get_title_column_class   s   
z!IndexView._get_title_column_classc                    sH     |} fdd} js|dtdt|dS  j||fd|i|S )Nc                    s     |  }r	|S  | S rN   )get_edit_urlget_inspect_url)r   edit_urlrH   rJ   rK   get_url   s   
z,IndexView._get_title_column.<locals>.get_urlnameName)labelrw   r   r   )r   rQ   r   str_get_custom_column)rI   
field_namer   r   r   rJ   rH   rK   _get_title_column   s    
zIndexView._get_title_columnc                 K   s   t | j|r	|gn|t}|^ }}| j}d}|D ]}	|j|	}
|
j}|
j}qt||dd\}}|r=t	d||d }t
|dd }|d u rI|}|}|rRd|}||ft||d|S )	N T)return_attrz&%(related_model_name)s %(field_label)s)related_model_namefield_labeladmin_order_field.)r   sort_key)hasattrrQ   splitr   _meta	get_fieldverbose_namerelated_modelr   _rx   joinr   )rI   r   r   r   lookups	relationsfieldmodel_classforeign_field_namerQ   foreign_fieldr   attrr   rw   rJ   rJ   rK   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)rI   r   ir   rz   rJ   rJ   rK   r     s   

zIndexView.columnsc                 C   .   | j r| drt| j t|jfdS d S d S NrA   r   )edit_url_nameuser_has_permissionr   r   ra   rI   r   rJ   rJ   rK   r        zIndexView.get_edit_urlc                 C   r   Nr@   r   )copy_url_namer   r   r   ra   r   rJ   rJ   rK   get_copy_url  r   zIndexView.get_copy_urlc                 C   s2   | j r| h drt| j t|jfdS d S d S )N>   r@   rC   rA   rB   r   )inspect_url_nameuser_has_any_permissionr   r   ra   r   rJ   rJ   rK   r     s
   
zIndexView.get_inspect_urlc                 C   r   NrB   r   )delete_url_namer   r   r   ra   r   rJ   rJ   rK   get_delete_url  r   zIndexView.get_delete_urlc                 C   s(   | j r| dr| t| j S d S d S )Nr@   )add_url_namer   _set_locale_query_paramr   rH   rJ   rJ   rK   get_add_url#  s   zIndexView.get_add_urlc                 C   rM   rN   r   rH   rJ   rJ   rK   add_url'  rP   zIndexView.add_urlc                 C       | j s| jrt| jjjS | j S rN   )
page_titlerQ   r   r   verbose_name_pluralrH   rJ   rJ   rK   get_page_title+     zIndexView.get_page_titlec                 C   s&   g }| j r|t| j| j dd |S )Nplusurl	icon_name)r   r   r,   add_item_label)rI   buttonsrJ   rJ   rK   header_buttons0  s   zIndexView.header_buttonsc                 C   s   g }|  | }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 | | }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priorityCopycopyzCopy '%(title)s'   Inspectinfo-circlezInspect '%(title)s'DeletebinzDelete '%(title)s'   )r   r   r-   r   r   r   r   r   )rI   r   r   r   copy_urlinspect_url
delete_urlrJ   rJ   rK   get_list_more_buttons=  s`   
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   )rI   r   more_buttonsr   rJ   rJ   rK   r   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)rQ   r   r   r   r   rH   rJ   rJ   rK   r     s
   zIndexView.add_item_labelc                 C   s   | j r| j jjS d S rN   )rQ   r   r   rH   rJ   rJ   rK   r     s   
zIndexView.verbose_name_pluralc                    sz   t  j|i |}| d|d< |d r"| j |d< |d< | j|d< | jr2| js2| j|d< | j|d< | jo8| jj	|d< |S )	Nr@   can_addr   header_action_urlheader_action_labelrU   rO   
model_opts)
r   get_context_datar   r   r   rU   rT   rO   rQ   r   )rI   r   r   contextr   rJ   rK   r     s   


zIndexView.get_context_datac                    s4   | j r| |d | jjdS t j|fi |S )Nobject_listexport)	is_exportas_spreadsheetrequestGETgetr   render_to_response)rI   r   response_kwargsr   rJ   rK   r     s
   zIndexView.render_to_response),rV   rW   rX   rQ   template_nameresults_template_namer   r   r   r   r   any_permission_requiredr   r&   r   rY   show_other_searchesrL   r   rO   rU   r_   rv   r   r   r%   r   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__rJ   rJ   r   rK   r>   =   s\    


	
-


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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ed"d# Z fd$d%Zd&d' Z d(d) Z!d*d+ Z" fd,d-Z#d.d/ Z$d0d1 Z%d2d3 Z& fd4d5Z'  Z(S )6
CreateViewNz wagtailadmin/generic/create.htmlNewr@   z$%(model_name)s '%(object)s' created.z6The %(model_name)s could not be created due to errors.Createu   Creating…createc                    *   t  j|g|R i | | || _d S rN   r   setup
get_actionactionrI   r   r   r   r   rJ   rK   r	       zCreateView.setupc                 C   ,   |   D ]}|jd| r|  S qdS )Naction-r  get_available_actionsPOSTr   rI   r   r  rJ   rJ   rK   r
    
   zCreateView.get_actionc                 C      | j S rN   actionsrH   rJ   rJ   rK   r       z CreateView.get_available_actionsc                 C   r   rN   )page_subtitlerQ   r   r   r   rH   rJ   rJ   rK   get_page_subtitle  r   zCreateView.get_page_subtitlec                 C   s`   | j s| jS g }| jr|t| jt| j jjd |dtdd| 	 i d | j| S )Nr   r   r   zNew: %(model_name)sr   )
rQ   breadcrumbs_itemsrG   r   r   r   r   r   r   r  rI   itemsrJ   rJ   rK   get_breadcrumbs_items  s"   

z CreateView.get_breadcrumbs_itemsc                 C      | 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   rH   rJ   rJ   rK   r     
   zCreateView.get_add_urlc                 C   rM   rN   r   rH   rJ   rJ   rK   r     rP   zCreateView.add_urlc                 C   &   | 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   objectra   rH   rJ   rJ   rK   r     
   zCreateView.get_edit_urlc                 C   r   )NzSubclasses of wagtail.admin.views.generic.models.CreateView must provide an index_url_name attribute or a get_success_url method)rG   r   r   r   rH   rJ   rJ   rK   get_success_url  r!  zCreateView.get_success_urlc                 C   s.   | j d u rd S t| j || jo| jjjd S N)r$  r   )success_messager   rQ   r   r   r   rJ   rJ   rK   get_success_message  s   
zCreateView.get_success_messagec                 C      t |  tdgS Nr   r   buttonr   r   rH   rJ   rJ   rK   get_success_buttons     zCreateView.get_success_buttonsc                 C   ,   | j d u rd S t| j d| jo| jjji S Nr   error_messager   rQ   r   r   rH   rJ   rJ   rK   get_error_message     
zCreateView.get_error_messagec                 C      | j jS rN   formis_boundrH   rJ   rJ   rK   has_unsaved_changes  rP   zCreateView.has_unsaved_changesc                    sl   t  jdi |}|d| _|  }| j|d< | j|d< | j|d< ||d< |d  |j7  < | j	|d< |S )	Nr8  
action_urlsubmit_button_labelsubmit_button_active_labelside_panelsmediar:  rJ   )
r   r   r   r8  get_side_panelsr   r<  r=  r?  r:  rI   r   r   r>  r   rJ   rK   r     s   



zCreateView.get_context_datac                 C   s2   g }| j r|t| jj| j| j | jd t|S )N)r]   translations)r]   r   r"   r8  r   r   rB  r    )rI   r>  rJ   rJ   rK   r@  )  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 )r]   r   )r   r   )ry   r]   rH   rJ   rK   
<listcomp>7  s    z/CreateView.get_translations.<locals>.<listcomp>id)r1   rj   allexcluder]   rF  rH   rJ   rH   rK   get_translations6  s   
zCreateView.get_translationsc                 C   s   | j r|  }| j |_ |S d S rN   )r]   rQ   r   rJ   rJ   rK   get_initial_form_instance?  s
   z$CreateView.get_initial_form_instancec                    s>   |    }r	|| _t  }|  }t|tr| jj|d< |S Nfor_user)	rJ  r$  r   get_form_kwargsget_form_classri   r   r   user)rI   r   r   
form_classr   rJ   rK   rM  E  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  content_changed)r8  saver.   r   rJ   rJ   rK   save_instanceQ  s   
zCreateView.save_instancec                 C   s:   |  | j}|  }|d urtj| j||d t|  S Nr   )r)  r$  r.  r   successr   r   r&  rI   r(  success_buttonsrJ   rJ   rK   save_actionZ  s   zCreateView.save_actionc                 C   X   || _ t  |  | _W d    n1 sw   Y  |  }|  }|d ur*|S |S rN   r8  r
   atomicrT  r$  rZ  run_after_hookrI   r8  responsehook_responserJ   rJ   rK   
form_valide     
zCreateView.form_validc                    2   || _ |  }|d urt| j|| t |S rN   r8  r4  r   validation_errorr   r   form_invalidrI   r8  r3  r   rJ   rK   rg  r  
   zCreateView.form_invalid))rV   rW   rX   rQ   rP  rG   r   r   r   r   r   permission_requiredr(  r3  r<  r=  r  r	  r
  r  r  r  r   r   r   r   r&  r)  r.  r4  r:  r   r@  rI  rJ  rM  rT  rZ  rb  rg  r  rJ   rJ   r   rK   r    sP    

		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)ra   )r   rQ   r   r   r   pk_url_kwargrI   rs   rJ   rJ   rK   
get_object{  s   zCopyViewMixin.get_objectc                 C   rM   rN   )ro  rH   rJ   rJ   rK   rJ    s   z'CopyViewMixin.get_initial_form_instancerN   )rV   rW   rX   ro  rJ  rJ   rJ   rJ   rK   rk  z  s    
rk  c                   @   s   e Zd ZdS )CopyViewN)rV   rW   rX   rJ   rJ   rJ   rK   rp    s    rp  c                       s  e Zd Zd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ed	Zd
gZ fddZedd Zdd Zdd ZdE fdd	Zdd Zdd Zdd Zdd Z edd Z!e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/d0 Z* fd1d2Z+d3d4 Z,d5d6 Z-d7d8 Z.d9d: Z/d;d< Z0d=d> Z1 fd?d@Z2edAdB Z3 fdCdDZ4  Z5S )FEditViewNEditingzwagtailadmin/generic/edit.htmlrA   r   z$%(model_name)s '%(object)s' updated.z4The %(model_name)s could not be saved due to errors.Saveu	   Saving…r   c                    r  rN   r  r  r   rJ   rK   r	    r  zEditView.setupc                 C   s:   z| j | j }W n ty   | jd }Y nw tt|S r   )r   rm  KeyErrorr   r   r   )rI   	quoted_pkrJ   rJ   rK   	object_pk  s   zEditView.object_pkc                 C   r  )Nr  r   r  r  rJ   rJ   rK   r
    r  zEditView.get_actionc                 C   r  rN   r  rH   rJ   rJ   rK   r    r  zEditView.get_available_actionsc                    s   | j | j| j< t |S rN   )rv  r   rm  r   ro  rn  r   rJ   rK   ro    s   zEditView.get_objectc                 C   
   t | jS rN   r'   r$  rH   rJ   rJ   rK   r    r   zEditView.get_page_subtitlec                 C   sT   | j s| jS g }| jr|t| jt| j jjd |d|  d | j| S )Nr  r   )	rQ   r  rG   r   r   r   r   r   r  r  rJ   rJ   rK   r    s   
zEditView.get_breadcrumbs_itemsc                 C   sL   g }|   }|  }|s|r"|t| j| j| j| j|||  d t	|S )N)r]   rB  	usage_urlhistory_urllast_updated_info)
get_usage_urlget_history_urlr   r"   r$  r   r]   rB  get_last_updated_infor    )rI   r>  ry  rz  rJ   rJ   rK   r@    s    zEditView.get_side_panelsc                 C   s   t | jd S )NrO  )rg   get_logs_for_instancer$  select_relatedfirstrH   rJ   rJ   rK   r~    s   
zEditView.get_last_updated_infoc                 C   s   |  d| jS )NrB   ) user_has_permission_for_instancer$  rH   rJ   rJ   rK   
can_delete  s   zEditView.can_deletec                 C   s~   g }|    }r|ttd|ddd | jr*|   }r*|t| j|ddd |   }r=|ttd|dd	d |S )
Nr   r   r   r   r   r   r   r   r   r   r   )r   r   r*   r   r  r   delete_item_labelr   )rI   r   r   r   r   rJ   rJ   rK   header_more_buttons  s:   zEditView.header_more_buttonsc                 C   r"  )NzzSubclasses of wagtail.admin.views.generic.models.EditView must provide an edit_url_name attribute or a get_edit_url methodr   r#  rH   rJ   rJ   rK   r     r%  zEditView.get_edit_urlc                 C   0   | j r| drt| j t| jjfdS d S d S r   )r   r   r   r   r$  ra   rH   rJ   rJ   rK   r        zEditView.get_copy_urlc                 C   "   | j rt| j t| jjfdS d S Nr   )r   r   r   r$  ra   rH   rJ   rJ   rK   r        zEditView.get_delete_urlc                 C   r  r  history_url_namer   r   r$  ra   rH   rJ   rJ   rK   r}    r  zEditView.get_history_urlc                 C   r  r  )r   r   r   r$  ra   rH   rJ   rJ   rK   r   #  r  zEditView.get_inspect_urlc                 C   s"   | j rt| j t| jjgdS d S r  usage_url_namer   r   r$  ra   rH   rJ   rJ   rK   r|  '  r  zEditView.get_usage_urlc                 C      | 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rG   r   r   rH   rJ   rJ   rK   r&  +  
   
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   rC  )r]   r   r   r   ra   )ry   translationrH   rJ   rK   rD  6  s    z-EditView.get_translations.<locals>.<listcomp>r]   )r   r$  rI  r  rH   rJ   rH   rK   rI  3  s
   
zEditView.get_translationsc                    s,   t   }|  }t|tr| jj|d< |S rK  )r   rM  rN  ri   r   r   rO  )rI   r   rP  r   rJ   rK   rM  >  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.editrQ  )r8  rS  has_changedhas_content_changesr.   r   rJ   rJ   rK   rT  E  s   
zEditView.save_instancec                 C   s6   |   }|  }|d urtj| j||d t|  S rU  )r)  r.  r   rW  r   r   r&  rX  rJ   rJ   rK   rZ  V  s   zEditView.save_actionc                 C   s0   | j d u rd S t| j | j| jo| jjjd S r'  )r(  r   r$  rQ   r   r   rH   rJ   rJ   rK   r)  a  s   
zEditView.get_success_messagec                 C   r*  r+  r,  rH   rJ   rJ   rK   r.  l  r/  zEditView.get_success_buttonsc                 C   r0  r1  r2  rH   rJ   rJ   rK   r4  o  r5  zEditView.get_error_messagec                 C   r[  rN   r\  r_  rJ   rJ   rK   rb  w  rc  zEditView.form_validc                    rd  rN   re  rh  r   rJ   rK   rg    ri  zEditView.form_invalidc                 C   r6  rN   r7  rH   rJ   rJ   rK   r:    rP   zEditView.has_unsaved_changesc                    s   t  jdi |}|d| _|  }|  |d< |  |d< ||d< |d  |j7  < | j|d< | j	|d< | j
|d< | j|d	< |d	 rO|  |d
< | j|d< |S )Nr8  r;  rz  r>  r?  r<  r=  r:  r  r   r  rJ   )r   r   r   r8  r@  r   r}  r?  r<  r=  r:  r  r   r  rA  r   rJ   rK   r     s   




zEditView.get_context_datarN   )6rV   rW   rX   rQ   rP  rG   r   r   r   r  r   r  r   r   context_object_namer   rj  r  r(  r3  r<  r=  r  r	  r   rv  r
  r  ro  r  r  r@  r~  r  r  r   r   r   r}  r   r|  r&  rI  rM  rT  rZ  r)  r.  r4  rb  rg  r:  r   r  rJ   rJ   r   rK   rq    sj    
	


rq  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                    s<   t  j|g|R i | |  | _|  | _|  | _d S rN   )r   r	  ro  r$  r|  ry  	get_usageusager  r   rJ   rK   r	    s   

zDeleteView.setupc                    s`   t | dd r	| jS z| j| j }W n ty   | jd }Y nw tt|| j| j< t 	|S )Nr$  r   )
rx   r$  r   rm  rt  r   r   r   r   ro  )rI   rs   ru  r   rJ   rK   ro    s   zDeleteView.get_objectc                 C   s   | j sd S t| jS rN   )ry  r2   get_grouped_references_tor$  rH   rJ   rJ   rK   r    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(   r   rG   r   r   rI   next_urlrJ   rJ   rK   r&    s   

zDeleteView.get_success_urlc                 C   rw  rN   r   r$  rH   rJ   rJ   rK   r    r   zDeleteView.get_page_subtitlec                 C      g S rN   rJ   rH   rJ   rJ   rK   r       z DeleteView.get_breadcrumbs_itemsc                 C   r"  )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$  ra   rH   rJ   rJ   rK   r     r%  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=1r  rH   rJ   rJ   rK   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   rH   rJ   rJ   rK   confirmation_message  s   
zDeleteView.confirmation_messagec                 C   s.   | j d u rd S t| j t| jjj| jd S )N)r   r$  )r(  r   r$  r   r   rH   rJ   rJ   rK   r)    s   
zDeleteView.get_success_messagec                 C   sF   t   t| jdd | j  W d    d S 1 sw   Y  d S )Nzwagtail.delete)r   r  )r
   r]  r.   r$  rB   rH   rJ   rJ   rK   delete_action  s   
"zDeleteView.delete_actionc                 C   sP   | j r	| j jr	t|  }|   t| j|   | 	 }|d ur$|S t
|S rN   )r  is_protectedr   r&  r  r   rW  r   r)  r^  r   )rI   r8  success_urlra  rJ   rJ   rK   rb    s   zDeleteView.form_validc                    sX   t  jdi |}| jj|d< |  |d< | jr*| j|d< | j |d< | jj|d< |S )Nr   nextry  usage_countr  rJ   )	r   r   r$  r   r&  ry  r  countr  rI   r   r   r   rJ   rK   r     s   
zDeleteView.get_context_datarN   )rV   rW   rX   rQ   rG   r   r   r  r   r  rj  r   r   r(  r	  ro  r  r&  r  r  r   r|  propertyr  r)  r  rb  r   r  rJ   rJ   r   rK   r    s2    
r  c                       s   e Zd Zg d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e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?   z!wagtailadmin/generic/inspect.htmlr   Nra   c                    s@   t  j|g|R i | | j| j | _|  | _|  | _d S rN   )	r   r	  r   rm  ra   
get_fieldsrZ   ro  r$  r  r   rJ   rK   r	  )  s   
zInspectView.setupc                 C      t | jtt| jdS rl  r   rQ   r   r   ra   rn  rJ   rJ   rK   ro  /     zInspectView.get_objectc                 C   rw  rN   rx  rH   rJ   rJ   rK   r  2  r   zInspectView.get_page_subtitlec                 C   sn   g }| j r|t| j t| jjjd |  }|  }|r'|||d |d| 	 |d | j
| S Nr  r   )r   r   sublabel)rG   r   r   r   rQ   r   r   r   r  r   r  )rI   r  r   
object_strrJ   rJ   rK   r  5  s$   
z!InspectView.get_breadcrumbs_itemsc                 C   sT   g }|    }r|ttd|ddd |   }r(|ttd|ddd |S )Nr   r   r   r  r   r   r   )r   r   r*   r   r   )rI   r   r   r   rJ   rJ   rK   r  K  s   zInspectView.header_more_buttonsc                    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 rJ   )concreteis_relationauto_createdr   r   ry   frJ   rJ   rK   rD  Y  s    z*InspectView.get_fields.<locals>.<listcomp>c                    s   g | ]	}| j vr|qS rJ   )fields_excluder  rH   rJ   rK   rD  `  s    )rZ   rQ   r   r  )rI   rZ   rJ   rH   rK   r  X  s
   
zInspectView.get_fieldsc                 C   s   t t|| jdS )N)rQ   )r   r   rQ   )rI   r   r   rJ   rJ   rK   get_field_labelc     zInspectView.get_field_labelc                 C   s   t | jd| d }|d urt|r| S |S t | j|}t|tjr&| }t|tjr8ddd |D p7dS t	
|}|rC||S |S )Nzget_%s_displayz, c                 s   s    | ]}t |V  qd S rN   )r   )ry   objrJ   rJ   rK   r{   w  s    z6InspectView.get_field_display_value.<locals>.<genexpr>-)rx   r$  callabler   r	   ManagerrG  QuerySetr   r!   r   )rI   r   r   
value_funcvaluedisplay_classrJ   rJ   rK   get_field_display_valuef  s   
z#InspectView.get_field_display_valuec                 C   sd   z	| j j|}W n ty   d }Y nw | ||| ||d d}t|d tr0|d |d< |S )N)r   r  	componentr  r  )rQ   r   r   r   r  r  r   r   )rI   r   r   r   rJ   rJ   rK   get_context_for_field  s   

z!InspectView.get_context_for_fieldc                    s    fdd j D S )Nc                    s   g | ]}  |qS rJ   )r  )ry   r   rH   rJ   rK   rD    s    z2InspectView.get_fields_context.<locals>.<listcomp>)rZ   rH   rJ   rH   rK   get_fields_context  s   zInspectView.get_fields_contextc                 C   r  r   )r   r   r   r   r$  ra   rH   rJ   rJ   rK   r     r  zInspectView.get_edit_urlc                 C   r  r   )r   r   r   r   r$  ra   rH   rJ   rJ   rK   r     r  zInspectView.get_delete_urlc                    s,   t  jdi |}| j|d< |  |d< |S )Nr$  rZ   rJ   )r   r   r$  r  r  r   rJ   rK   r     s   
zInspectView.get_context_datarN   )rV   rW   rX   r   r   r   r   rQ   rG   r   r   rZ   r  rm  r	  ro  r  r  r   r  r  r  r  r  r  r   r   r   r  rJ   rJ   r   rK   r    s2    

r  c                       s   e Zd ZdZdZdZdZedZedZ	edZ
dZdZdZdd Ze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 fddZ  ZS ) RevisionsCompareViewNr   HistoryComparez+wagtailadmin/generic/revisions/compare.htmlTc                 C   s   g }|    }r| jr||t| jjjd |   }r(|||  d |   }r7||| j	d |d| 
 |  d | j| S r  )get_index_urlrQ   r   r   r   r   r   r  r}  history_labelr   r  )rI   r  	index_urlr   rz  rJ   rJ   rK   r    s$   
z*RevisionsCompareView.get_breadcrumbs_itemsc                 C   s*   g }|    }r|t| j|dd |S )Nr   r   )r   r   r,   
edit_label)rI   r   r   rJ   rJ   rK   r     s   z#RevisionsCompareView.header_buttonsc                    s:   t  j|g|R i | || _|| _|| _|  | _d S rN   )r   r	  ra   revision_id_arevision_id_bro  r$  )rI   r   ra   r  r  r   r   r   rJ   rK   r	    s
   zRevisionsCompareView.setupc                 C   r  rl  r  rn  rJ   rJ   rK   ro    r  zRevisionsCompareView.get_objectc                 C   s   | j r| j S t| jS rN   )edit_handlerr   rQ   rH   rJ   rJ   rK   r     s   
z%RevisionsCompareView.get_edit_handlerc                 C   rw  rN   r  rH   rJ   rJ   rK   r    r   z&RevisionsCompareView.get_page_subtitlec                 C   s   | j rt| j S d S rN   )rG   r   rH   rJ   rJ   rK   r    s   
z"RevisionsCompareView.get_index_urlc                 C   r  r  r  rH   rJ   rJ   rK   r}    r  z$RevisionsCompareView.get_history_urlc                 C   r  r  )r   r   r   r$  ra   rH   rJ   rJ   rK   r     r  z!RevisionsCompareView.get_edit_urlc                 C   s   |dkr| j }td}||fS |dkr"| j jdd }td}n"|dkr5| j jdd }td}nt| j j|d	}|rDt|j}|sHt	|
 }||fS )
NliveLiveearliest
created_atrF  EarliestlatestLatestrE  )r$  r   	revisionsro   r  lastr   r   r  r   	as_object)rI   revision_idrevisionrevision_headingrJ   rJ   rK   _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   r   r8  )r   get_bound_panelr$  r   get_comparisonr  )rI   
revision_a
revision_b
comparisonresultcompdiffrJ   rJ   rK   _get_comparison  s   

z$RevisionsCompareView._get_comparisonc              	      s\   t  jdi |}| | j\}}| | j\}}| ||}|| j|||||d |S )N)r$  r  revision_a_headingr  revision_b_headingr  rJ   )r   r   r  r  r  r  updater$  )rI   r   r   r  r  r  r  r  r   rJ   rK   r     s$   z%RevisionsCompareView.get_context_datarN   )rV   rW   rX   r  rG   r   r  r   r  r  r   r   _show_breadcrumbsrQ   r  r   r   r	  ro  r   r  r  r}  r   r  r  r   r  rJ   rJ   r   rK   r    s0    

r  c                       s   e Zd ZdZdZdZdZdZe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dd  Z fd!d"Z  ZS )$UnpublishViewN	Unpublishz'%(object)s' unpublished.z+wagtailadmin/generic/confirm_unpublish.htmlc                    s.   t  j|g|R i | || _|  | _d S rN   )r   r	  ra   ro  r$  )rI   r   ra   r   r   r   rJ   rK   r	  3  s   zUnpublishView.setupc                    s$   |   | _t j|g|R i |S rN   )get_objects_to_unpublishobjects_to_unpublishr   dispatchr  r   rJ   rK   r  8  s   
zUnpublishView.dispatchc                 C   .   | j r	t| j tstt| j tt| jdS rl  rQ   ri   r0   r   r   r   r   ra   rn  rJ   rJ   rK   ro  <     zUnpublishView.get_objectc                 C   s   t | jS rN   )r2   r  r$  rH   rJ   rJ   rK   r  A  s   zUnpublishView.get_usagec                 C   r  rN   rJ   rH   rJ   rJ   rK   r  D  r  z#UnpublishView.get_breadcrumbs_itemsc                 C   s   | j gS rN   )r$  rH   rJ   rJ   rK   r  G  rP   z&UnpublishView.get_objects_to_unpublishc                 C   rw  rN   rx  rH   rJ   rJ   rK   r  K  r   zUnpublishView.get_page_subtitlec                 C   s"   | j d u rd S | j dt| ji S )Nr$  )r(  r   r$  rH   rJ   rJ   rK   r)  N  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$  ra   r   rH   rJ   rJ   rK   r.  S  s   z!UnpublishView.get_success_buttonsc                 C   r  )NzSubclasses of wagtail.admin.views.generic.models.UnpublishView must provide an index_url_name attribute or a get_next_url methodr  rH   rJ   rJ   rK   get_next_url\  r  zUnpublishView.get_next_urlc                 C   r"  )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$  ra   rH   rJ   rJ   rK   get_unpublish_urld  r%  zUnpublishView.get_unpublish_urlc                 C   r  r  r  rH   rJ   rJ   rK   r|  l  s   zUnpublishView.get_usage_urlc                 C   sh   |  d| j| j}|d ur|S | jD ]}t|| jjd}|jdd q|  d| j| j}|d ur2|S d S )Nbefore_unpublish)rO  T)skip_permission_checksafter_unpublish)run_hookr   r$  r  r   rO  execute)rI   ra  r$  r  rJ   rJ   rK   	unpublishq  s   
zUnpublishView.unpublishc                 O   sD   |   }|r|S |  }|  }|d urtj|||d t|  S rU  )r  r)  r.  r   rW  r   r  )rI   r   r   r   ra  r(  rY  rJ   rJ   rK   post~  s   zUnpublishView.postc                    sl   t  jdi |}| jj|d< | j|d< |  |d< |  |d< |  |d< |d r4|  }| |d< |S )Nr   r$  unpublish_urlr  ry  r  rJ   )	r   r   r$  r   r  r  r|  r  r  )rI   r   r   r  r   rJ   rK   r     s   
zUnpublishView.get_context_datarN   )rV   rW   rX   rQ   rG   r   r  r  r   r   r(  r   r	  r  ro  r  r  r  r  r)  r.  r  r  r|  r  r  r   r  rJ   rJ   r   rK   r  )  s0    
	r  c                       s   e Zd ZdZdZdZdZedZdZ	e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 fddZdd Z  ZS )RevisionsUnscheduleViewNz4Version %(revision_id)s of "%(object)s" unscheduled.z5wagtailadmin/shared/revisions/confirm_unschedule.html
Unschedulec                    s>   t  j|g|R i | || _|| _|  | _|  | _d S rN   )r   r	  ra   r  ro  r$  get_revisionr  )rI   r   ra   r  r   r   r   rJ   rK   r	    s
   
zRevisionsUnscheduleView.setupc                 C   r  rl  r  rn  rJ   rJ   rK   ro    r  z"RevisionsUnscheduleView.get_objectc                 C   r  rN   rJ   rH   rJ   rJ   rK   r    r  z-RevisionsUnscheduleView.get_breadcrumbs_itemsc                 C   s   t | jj| jdS )NrE  )r   r$  r  r  rH   rJ   rJ   rK   r     r  z$RevisionsUnscheduleView.get_revisionc                 C   s   t | jt| jj| jjfdS r  )r   revisions_unschedule_url_namer   r$  ra   r  rF  rH   rJ   rJ   rK   get_revisions_unschedule_url  s   z4RevisionsUnscheduleView.get_revisions_unschedule_urlc                 C   rw  rN   rx  rH   rJ   rJ   rK   get_object_display_title  r   z0RevisionsUnscheduleView.get_object_display_titlec                 C   s&   | j d u rd S | j | jj|  d S )Nr  r$  )r(  r  rF  r  rH   rJ   rJ   rK   r)    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$  ra   r   rH   rJ   rJ   rK   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(   r   r  r   r   r   r$  ra   r  rJ   rJ   rK   r    s   
z$RevisionsUnscheduleView.get_next_urlc                 C   s   t td| jj|  d S )Nz(revision %(revision_id)s of "%(object)s"r  )r   r   r  rF  r  rH   rJ   rJ   rK   r    s   z)RevisionsUnscheduleView.get_page_subtitlec                    s6   t  jdi |}|| j| j|  |  d |S )N)r$  r  revisions_unschedule_urlr  rJ   )r   r   r  r$  r  r  r  r  r   rJ   rK   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)rO  update_fieldsrV  )
r  r  rS  rO  r)  r.  r   rW  r   r  )rI   r   r   r   r(  rY  rJ   rJ   rK   r    s   zRevisionsUnscheduleView.postrN   )rV   rW   rX   rQ   r   r  r  r   r(  r   r   r	  ro  r  r   r  r  r)  r.  r  r  r   r  r  rJ   rJ   r   rK   r    s,    
	r  )jrE   django.contrib.admin.utilsr   r   r   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   r   r   	django.dbr	   r
   django.db.models.constantsr   django.db.models.functionsr   django.httpr   r   django.shortcutsr   r   django.urlsr   django.utils.functionalr   django.utils.textr   django.utils.translationr   r   r   django.views.genericr   django.views.generic.editr   r   r   wagtail.actions.unpublishr   wagtail.adminr   wagtail.admin.filtersr   wagtail.admin.forms.modelsr   wagtail.admin.panelsr   wagtail.admin.ui.componentsr   r    wagtail.admin.ui.fieldsr!   wagtail.admin.ui.side_panelsr"   wagtail.admin.ui.tablesr#   r$   r%   r&   wagtail.admin.utilsr'   r(   wagtail.admin.views.mixinsr)   wagtail.admin.widgets.buttonr*   r+   r,   r-   wagtail.log_actionsr.   r/   rg   wagtail.modelsr0   r1   r2   wagtail.models.audit_logr3   wagtail.search.indexr4   wagtail.utils.deprecationr5   baser7   r8   mixinsr9   r:   r;   r<   permissionsr=   r>   r  rk  rp  rq  r  r  r  r  r  rJ   rJ   rJ   rK   <module>   s    
  
n R

  
|  
n