U
    {hE                     @   s  d dl mZ d dl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 d dlmZ d dlmZmZm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% d dl&m'Z' d dl(m)Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 dd Z3G dd deZ4G dd deZ5G dd deZ6G dd de%e"e!Z7G dd de"e#eZ8G d d! d!e"e#eZ9dS )"    )	timedeltaN)quote)	Paginator)CheckboxSelectMultiple)get_object_or_404)reverse)cached_property)capfirst)gettextgettext_lazy)TemplateView)DateRangePickerWidgetMultipleUserFilterWagtailFilterSet)Column
DateColumn
UserColumn)get_latest_str)BaseListingViewBaseObjectMixinWagtailAdminTemplateMixin)PermissionCheckedMixin)HeaderButton)registry)BaseLogEntryDraftStateMixinPreviewableMixinRevisionRevisionMixin	TaskStateWorkflowStatec                    s"   t |    fddt D S )Nc                    s   g | ]}|d   kr|qS )r    ).0actionactionsr!   k/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/views/generic/history.py
<listcomp>+   s      z*get_actions_for_filter.<locals>.<listcomp>)setget_actionslog_registryZget_choices)querysetr!   r$   r&   get_actions_for_filter(   s    r,   c                       s`   e Zd ZejededZeededZ	ej
ededZ fddZdd Zd	d
 Z  ZS )HistoryFilterSetAction)labelZwidgetUserDatec                    sb   t  j|| |  }|s$| jd= n|| jd jd< |  }| sN| jd= n|| jd jd< d S )Nr#   choicesuserr+   )super__init__get_action_choicesfiltersextraget_users_querysetexists)selfargskwargsr%   Zusers	__class__r!   r&   r5   =   s    

zHistoryFilterSet.__init__c                 C   s
   t | jS N)r,   r+   r;   r!   r!   r&   r6   K   s    z#HistoryFilterSet.get_action_choicesc                 C   s
   | j  S r@   )r+   Z	get_usersrA   r!   r!   r&   r9   N   s    z#HistoryFilterSet.get_users_queryset)__name__
__module____qualname__django_filtersZMultipleChoiceFilterr   r   r#   r   r3   ZDateFromToRangeFilterr   	timestampr5   r6   r9   __classcell__r!   r!   r>   r&   r-   .   s    r-   c                       sH   e Zd Z fddZe fddZdd Zdd Z fd	d
Z  Z	S )ActionColumnc                   s<   t  j|| || _|| _|| _t|t| _t|t| _	d S r@   )
r4   r5   object	url_namesuser_can_unschedule
isinstancer   revision_enabledr   draftstate_enabled)r;   rI   rJ   rK   r<   r=   r>   r!   r&   r5   S   s    zActionColumn.__init__c                    s   | j r
dS t jS )Nz-wagtailadmin/generic/history/action_cell.html)rM   r4   cell_template_namerA   r>   r!   r&   rO   [   s    zActionColumn.cell_template_namec                 C   sF   | j rB|jdkr&|j| jjkr&tdS |jrB|j| jjkrBtdS d S )Nwagtail.publishzLive versionzCurrent draft)rN   r#   revision_idrI   Zlive_revision_idr
   content_changedlatest_revision_id)r;   instanceparent_contextr!   r!   r&   
get_statusa   s    zActionColumn.get_statusc                 C   s  g }| j r |jr |jr |jdkr$|S t| jtr|| j r|| j	d }r|t
|t| jj|jfd}|tdd}|| |j| jjkr| j	d }rt
|t| jjfd}|tdd}|| nD| j	d }rt
|t| jj|jfd}|td	d}|| | j	d
 }r|jr^t
|t| jj|j|jfd}|tdd}|| |j| jjkrt
|t| jj|jdfd}|tdd}|| | j	d }r |jr |jjr | jr t
|t| jj|jfd}|tdd}|| |S )NrP   revisions_viewr<   ZPreviewurlr/   editEditrevisions_revertzReview this versionrevisions_comparezCompare with previous versionZlatestzCompare with current versionrevisions_unschedulezCancel scheduled publish)rM   rQ   rR   r#   rL   rI   r   Zis_previewablerJ   getr   r   pkr
   appendrS   previous_revision_idrevisionZapproved_go_live_atrK   )r;   rT   rU   r%   Zurl_namerZ   r#   r!   r!   r&   r)   o   st    






zActionColumn.get_actionsc                    s2   t  ||}| |||d< | |||d< |S )Nstatusr%   )r4   get_cell_context_datarV   r)   r;   rT   rU   contextr>   r!   r&   rf      s    z"ActionColumn.get_cell_context_data)
rB   rC   rD   r5   r   rO   rV   r)   rf   rG   r!   r!   r>   r&   rH   R   s   CrH   c                       s(   e Zd Z fddZ fddZ  ZS )LogEntryUserColumnc                    s   t  j|fdd i| d S )NZblank_display_name)r4   r5   )r;   namer=   r>   r!   r&   r5      s    zLogEntryUserColumn.__init__c                    s$   t  ||}|d s |j|d< |S )Ndisplay_name)r4   rf   Zuser_display_namerg   r>   r!   r&   rf      s    
z(LogEntryUserColumn.get_cell_context_data)rB   rC   rD   r5   rf   rG   r!   r!   r>   r&   ri      s   ri   c                       s   e Zd ZdddgZedZdZdZdZdZ	e
Zd	Zd	Zd	Zd	Zd	Zd	Zd	Zed
d Z f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  fd!d"
Zd#d$ Z d%d& Z! fd'd(Z"  Z#S ))HistoryViewaddZchangedeleteHistoryz)wagtailadmin/generic/history_results.htmlhistoryF   Nc              
   C   sT   t dtd| j| j| j| j| j| jd|  dt	dtdddt
d	td
ddgS )Nmessager.   )r[   rW   r]   r^   r_   )r/   rI   rJ   rK   r3   r0   z25%)r/   widthrF   r1   z15%)rH   r   rI   edit_url_namerevisions_view_url_namerevisions_revert_url_namerevisions_compare_url_namerevisions_unschedule_url_namerK   ri   r   rA   r!   r!   r&   columns   s    zHistoryView.columnsc                    s$   t   }t|jtr |dS |S )NZlatest_revision)r4   get_base_object_queryset
issubclassmodelr   select_relatedr;   r+   r>   r!   r&   rz      s    

z$HistoryView.get_base_object_querysetc                 C   s
   t | jS r@   )r   rI   rA   r!   r!   r&   get_page_subtitle   s    zHistoryView.get_page_subtitlec                 C   sr   g }| j r*|t| j t| jjjd | | j}| 	 }|rR|||d |dt
d|d | j| S )NrY    ro   )rZ   r/   Zsublabel)Zindex_url_namerb   r   r	   r|   _metaZverbose_name_pluralget_edit_urlrI   r   r
   Zbreadcrumbs_items)r;   itemsZedit_urlobj_namer!   r!   r&   get_breadcrumbs_items   s,    z!HistoryView.get_breadcrumbs_itemsc                 C   s   t td| | jddgS )Nr\   r[   )r/   rZ   Z	icon_name)r   r
   r   rI   rA   r!   r!   r&   header_buttons  s    
zHistoryView.header_buttonsc                 C   s    | j rt| j t|jfdS d S NrX   )rt   r   r   ra   r;   rT   r!   r!   r&   r     s    zHistoryView.get_edit_urlc                 C   s    | j rt| j t|jfdS d S r   )history_url_namer   r   ra   r   r!   r!   r&   get_history_url  s    zHistoryView.get_history_urlc                 C   s    | j rt| j t|jfdS d S r   )history_results_url_namer   r   ra   r   r!   r!   r&   get_history_results_url!  s    z#HistoryView.get_history_results_urlc                 C   s   |  | jS r@   )r   rI   rA   r!   r!   r&   get_index_url%  s    zHistoryView.get_index_urlc                 C   s   |  | jS r@   )r   rI   rA   r!   r!   r&   get_index_results_url(  s    z!HistoryView.get_index_results_urlc                 C   s
   |  dS )Npublish)Zuser_has_permissionrA   r!   r!   r&   rK   +  s    zHistoryView.user_can_unschedule)object_listc                   s.   t  j|d|i|}| j|d< tj|d< |S )Nr   rI   
model_opts)r4   get_context_datarI   r   r   )r;   r   r<   r=   rh   r>   r!   r&   r   .  s    

zHistoryView.get_context_datac                 C   s   t | j}| |S r@   )r*   Zget_logs_for_instancerI   _annotate_querysetr~   r!   r!   r&   get_base_queryset4  s    zHistoryView.get_base_querysetc                 C   s4   | dd}t| jtr0| djtj d}|S )Nr3   Zuser__wagtail_userprofilerd   )rc   )r}   rL   rI   r   Zannotater   objectsZprevious_revision_id_subqueryr~   r!   r!   r&   r   8  s    
zHistoryView._annotate_querysetc                    s   t   }|  |d< |S )Nr+   )r4   get_filterset_kwargsr   )r;   r=   r>   r!   r&   r   @  s    
z HistoryView.get_filterset_kwargs)$rB   rC   rD   Zany_permission_requiredr   
page_titleZresults_template_nameheader_iconZis_searchableZpaginate_byr-   Zfilterset_classr   r   rt   ru   rv   rw   rx   r   ry   rz   r   r   r   r   r   r   r   r   rK   r   r   r   r   rG   r!   r!   r>   r&   rl      s>   


	rl   c                       s8   e Zd ZdZdZdZdZedd Z fddZ	  Z
S )WorkflowHistoryViewz/wagtailadmin/shared/workflow_history/index.htmlpNc                 C   s   t j| jdS )N-created_at)r    r   for_instancerI   order_byrA   r!   r!   r&   workflow_statesN  s    z#WorkflowHistoryView.workflow_statesc                    sV   t  jf |}t| jdd}|| jj| j}|	| j
|| j| j| j
jd |S )Nrq   )Zper_page)rI   r   workflow_history_url_name workflow_history_detail_url_namer   )r4   r   r   r   Zget_pagerequestGETr`   
page_kwargupdaterI   r   r   r   )r;   r=   rh   Z	paginatorr   r>   r!   r&   r   R  s    	z$WorkflowHistoryView.get_context_data)rB   rC   rD   template_namer   r   r   r   r   r   rG   r!   r!   r>   r&   r   H  s   
r   c                       st   e Zd ZdZdZdZedZdZdZ	e
dd Ze
d	d
 Ze
dd Ze
dd Ze
dd Z fddZ  ZS )WorkflowHistoryDetailViewz0wagtailadmin/shared/workflow_history/detail.htmlZworkflow_state_idNzWorkflow progresszlist-ulzdoc-empty-inversec                 C   s"   t tj| jj| j| j dS )N)id)r   r    r   r   rI   filterr=   workflow_state_url_kwargrA   r!   r!   r&   workflow_staten  s
    
z(WorkflowHistoryDetailView.workflow_statec                 C   s2   t j| jjtjj| jdjdddddS )a:  
        Get QuerySet of all revisions that have existed during this workflow state.
        It's possible that the object is edited while the workflow is running,
        so some tasks may be repeated. All tasks that have been completed no matter
        what revision needs to be displayed on this page.
        r   rQ   T)Zflat)Zid__inr   )	r   r   r   rI   r   r   r   Zvalues_listr   rA   r!   r!   r&   	revisionsv  s    	 z#WorkflowHistoryDetailView.revisionsc                 C   s   | j jj S r@   )r   ZworkflowtasksallrA   r!   r!   r&   r     s    zWorkflowHistoryDetailView.tasksc                    s*    fdd j D } fdd|D }|S )z2Get QuerySet of tasks completed for each revision.c                    s0   g | ](}|d d t jj j|d D fqS )c                 S   s   i | ]}|j |qS r!   )task)r"   
task_stater!   r!   r&   
<dictcomp>  s    zPWorkflowHistoryDetailView.task_states_by_revision.<locals>.<listcomp>.<dictcomp>)r   rd   )r   r   r   r   Zspecificr"   rd   rA   r!   r&   r'     s   
 zEWorkflowHistoryDetailView.task_states_by_revision.<locals>.<listcomp>c                    s(   g | ] \} | fd dj D fqS )c                    s   g | ]}  |d qS r@   )r`   )r"   r   Ztask_states_by_taskr!   r&   r'     s     zPWorkflowHistoryDetailView.task_states_by_revision.<locals>.<listcomp>.<listcomp>)r   r   rA   r   r&   r'     s   )r   )r;   Ztask_states_by_revision_tasktask_states_by_revisionr!   rA   r&   r     s    


z1WorkflowHistoryDetailView.task_states_by_revisionc                 C   s   t jj| jdjddjt jd}| jjd| jdg}| jjtj	tj
fkr||d }|r|||jtdd	 d
| jd | jD ]}||jd|d q|D ]}||jd|d q|jdd d |  |S )zGenerate timeline.r   T)Zfinished_at__isnull)re   Zworkflow_started)timer#   r   finished_at   )ZmillisecondsZworkflow_completedZedited)r   r#   rd   Ztask_completed)r   r#   r   c                 S   s   | d S )Nr   r!   )tr!   r!   r&   <lambda>      z4WorkflowHistoryDetailView.timeline.<locals>.<lambda>)key)r   r   r   r   excludeZSTATUS_CANCELLEDZ
created_atre   r    ZSTATUS_IN_PROGRESSZSTATUS_NEEDS_CHANGESr   lastrb   r   r   r   sortr   )r;   Zcompleted_task_statestimelineZ	last_taskrd   r   r!   r!   r&   r     sP    
z"WorkflowHistoryDetailView.timelinec              
      s:   t  jf |}|| j| j| j| j| j| j| j	d |S )N)rI   object_iconr   r   r   r   r   )
r4   r   r   rI   r   r   r   r   r   r   )r;   r=   rh   r>   r!   r&   r     s    z*WorkflowHistoryDetailView.get_context_data)rB   rC   rD   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   r!   r!   r>   r&   r   d  s"   




5r   ):datetimer   rE   Zdjango.contrib.admin.utilsr   Zdjango.core.paginatorr   Zdjango.formsr   Zdjango.shortcutsr   Zdjango.urlsr   Zdjango.utils.functionalr   Zdjango.utils.textr	   Zdjango.utils.translationr
   r   Zdjango.views.genericr   Zwagtail.admin.filtersr   r   r   Zwagtail.admin.ui.tablesr   r   r   Zwagtail.admin.utilsr   Z wagtail.admin.views.generic.baser   r   r   Z'wagtail.admin.views.generic.permissionsr   Zwagtail.admin.widgets.buttonr   Zwagtail.log_actionsr   r*   Zwagtail.modelsr   r   r   r   r   r   r    r,   r-   rH   ri   rl   r   r   r!   r!   r!   r&   <module>   s<   $$g 
  