o
    hS                     @   s  d dl mZ 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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!Z8G d d! d!e"e#eZ9dS )"    )defaultdict)	timedeltaN)quote)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   v r|qS )r    ).0actionactionsr!   c/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/views/generic/history.py
<listcomp>+   s    z*get_actions_for_filter.<locals>.<listcomp>)setget_actionslog_registry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)labelwidgetUserDatec                    sh   t  j|i | |  }|s| jd= n|| jd jd< |  }| s*| jd= d S || jd jd< d S )Nr#   choicesuserr,   )super__init__get_action_choicesfiltersextraget_users_querysetexists)selfargskwargsr%   users	__class__r!   r&   r7   =   s   
zHistoryFilterSet.__init__c                 C   
   t | jS N)r-   r,   r=   r!   r!   r&   r8   K      
z#HistoryFilterSet.get_action_choicesc                 C   s
   | j  S rD   )r,   	get_usersrE   r!   r!   r&   r;   N   rF   z#HistoryFilterSet.get_users_queryset)__name__
__module____qualname__django_filtersMultipleChoiceFilterr   r   r#   r   r5   DateFromToRangeFilterr   	timestampr7   r8   r;   __classcell__r!   r!   rA   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|i | || _|| _|| _t|t| _t|t| _	d S rD   )
r6   r7   object	url_namesuser_can_unschedule
isinstancer   revision_enabledr   draftstate_enabled)r=   rQ   rR   rS   r>   r?   rA   r!   r&   r7   S   s   zActionColumn.__init__c                    s   | j rdS t jS )Nz-wagtailadmin/generic/history/action_cell.html)rU   r6   cell_template_namerE   rA   r!   r&   rW   [   s   zActionColumn.cell_template_namec                 C   sF   | j r!|jdkr|j| jjkrtdS |jr!|j| jjkr!tdS d S )Nwagtail.publishzLive versionzCurrent draft)rV   r#   revision_idrQ   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re| j	d }rdt
|t| jjfd}|tdd}|| n!| j	d }rt
|t| jj|jfd}|td	d}|| | j	d
 }r|jrt
|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rt
|t| jj|jfd}|tdd}|| |S )NrX   revisions_viewr>   Previewurlr0   editEditrevisions_revertzReview this versionrevisions_comparezCompare with previous versionlatestzCompare with current versionrevisions_unschedulezCancel scheduled publish)rU   rY   r[   r#   rT   rQ   r   is_previewablerR   getr   r   pkr
   appendr\   previous_revision_idrevisionapproved_go_live_atrS   )r=   r]   r^   r%   url_namerd   r#   r!   r!   r&   r)   o   st   








zActionColumn.get_actionsc                    s2   t  ||}| |||d< | |||d< |S )Nstatusr%   )r6   get_cell_context_datar_   r)   r=   r]   r^   contextrA   r!   r&   rt      s   z"ActionColumn.get_cell_context_data)
rH   rI   rJ   r7   r   rW   r_   r)   rt   rO   r!   r!   rA   r&   rP   R   s    CrP   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 )Nblank_display_name)r6   r7   )r=   namer?   rA   r!   r&   r7      s   zLogEntryUserColumn.__init__c                    s$   t  ||}|d s|j|d< |S )Ndisplay_name)r6   rt   user_display_nameru   rA   r!   r&   rt      s   
z(LogEntryUserColumn.get_cell_context_data)rH   rI   rJ   r7   rt   rO   r!   r!   rA   r&   rw      s    rw   c                       s   e Zd Zg dZe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edd Zdd fdd 
Zd!d" Zd#d$ Z  fd%d&Z!  Z"S )'HistoryView)addchangedeleteHistoryhistory   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/   )re   r`   rg   rh   rj   )r0   rQ   rR   rS   r5   r2   z25%)r0   widthrN   r3   z15%)rP   r   rQ   edit_url_namerevisions_view_url_namerevisions_revert_url_namerevisions_compare_url_namerevisions_unschedule_url_namerS   rw   r   rE   r!   r!   r&   columns   s   zHistoryView.columnsc                    s$   t   }t|jtr|dS |S )Nlatest_revision)r6   get_base_object_queryset
issubclassmodelr   select_relatedr=   r,   rA   r!   r&   r      s   

z$HistoryView.get_base_object_querysetc                 C   rC   rD   r   rQ   rE   r!   r!   r&   get_page_subtitle   rF   zHistoryView.get_page_subtitlec                 C   sr   g }| j r|t| j t| jjjd | | j}| 	 }|r)|||d |dt
d|d | j| S )Nrc    r   rd   r0   sublabel)index_url_namern   r   r	   r   _metaverbose_name_pluralget_edit_urlrQ   r   r
   breadcrumbs_items)r=   items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 )Nrf   re   )r0   rd   	icon_name)r   r
   r   rQ   rE   r!   r!   r&   header_buttons  s   
zHistoryView.header_buttonsc                 C       | j rt| j t|jfdS d S Nra   )r   r   r   rm   r=   r]   r!   r!   r&   r        zHistoryView.get_edit_urlc                 C   r   r   )history_url_namer   r   rm   r   r!   r!   r&   get_history_url  r   zHistoryView.get_history_urlc                 C   r   r   )history_results_url_namer   r   rm   r   r!   r!   r&   get_history_results_url  r   z#HistoryView.get_history_results_urlc                 C      |  | jS rD   )r   rQ   rE   r!   r!   r&   get_index_url#     zHistoryView.get_index_urlc                 C   r   rD   )r   rQ   rE   r!   r!   r&   get_index_results_url&  r   z!HistoryView.get_index_results_urlc                 C   s
   |  dS )Npublish)user_has_permissionrE   r!   r!   r&   rS   )  rF   zHistoryView.user_can_unschedulec                 C   s   t jjS rD   )r   r   r   rE   r!   r!   r&   r   ,  s   zHistoryView.verbose_name_plural)object_listc                   s$   t  j|d|i|}| j|d< |S )Nr   rQ   )r6   get_context_datarQ   )r=   r   r>   r?   rv   rA   r!   r&   r   0  s   
zHistoryView.get_context_datac                 C   s   t | j}| |S rD   )r*   get_logs_for_instancerQ   _annotate_querysetr   r!   r!   r&   get_base_queryset5  s   
zHistoryView.get_base_querysetc                 C   s4   | dd}t| jtr| djtj d}|S )Nr5   user__wagtail_userprofilerp   )ro   )r   rT   rQ   r   annotater   objectsprevious_revision_id_subqueryr   r!   r!   r&   r   9  s   
zHistoryView._annotate_querysetc                    s   t   }|  |d< |S )Nr,   )r6   get_filterset_kwargsr   )r=   r?   rA   r!   r&   r   A  s   
z HistoryView.get_filterset_kwargs)#rH   rI   rJ   any_permission_requiredr   
page_titleheader_iconpaginate_byr.   filterset_classr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   rO   r!   r!   rA   r&   r|      s@    

	
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d Zed	d
 Zedd Zdd Zdd Zdd Z fddZ  ZS )WorkflowHistoryViewz1wagtailadmin/shared/workflow_history/listing.htmlz9wagtailadmin/shared/workflow_history/listing_results.htmlr   NWorkflow historyworkflow_statesc                 C      | j rt| j S d S rD   r   r   rE   r!   r!   r&   	index_urlS     
zWorkflowHistoryView.index_urlc                 C   "   | j rt| j t| jjfdS d S r   r   r   r   rQ   rm   rE   r!   r!   r&   r   X     zWorkflowHistoryView.edit_urlc                 C   (   g }| j r|ttd| j dd |S )Nrf   re   rd   r   r   rn   r   r
   r=   buttonsr!   r!   r&   r   ]  s   z"WorkflowHistoryView.header_buttonsc                 C   rC   rD   r   rE   r!   r!   r&   r   f  rF   z%WorkflowHistoryView.get_page_subtitlec                 C   sf   g }| j r|| j t| jjjd | jr!|| j|  d |d|  |  d | j	| S )Nrc   r   r   )
r   rn   r	   r   r   r   r   r   get_page_titler   r=   r   r!   r!   r&   r   i  s(   
z)WorkflowHistoryView.get_breadcrumbs_itemsc                 C   s   t j| jdddS )Nworkflowrequested_byz-created_at)r    r   for_instancerQ   r   order_byrE   r!   r!   r&   r     s   z%WorkflowHistoryView.get_base_querysetc                    s0   t  jdi |}|| j| j| jjd |S )N)rQ    workflow_history_detail_url_name
model_optsr!   )r6   r   updaterQ   r   r   r=   r?   rv   rA   r!   r&   r     s   z$WorkflowHistoryView.get_context_data)rH   rI   rJ   template_nameresults_template_namer   r   r   r   r   r   context_object_namer   r   r   r   r   r   r   r   rO   r!   r!   rA   r&   r   I  s&    


r   c                       s   e Zd Zd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dd Zdd Zed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.htmlNworkflow_state_idzWorkflow progresszlist-ulzdoc-empty-inversec                 C   r   rD   r   rE   r!   r!   r&   r     r   z#WorkflowHistoryDetailView.index_urlc                 C   r   r   r   rE   r!   r!   r&   r     r   z"WorkflowHistoryDetailView.edit_urlc                 C   r   r   )workflow_history_url_namer   r   rQ   rm   rE   r!   r!   r&   workflow_history_url  s
   z.WorkflowHistoryDetailView.workflow_history_urlc                 C   s   g }| j r|| j t| jjjd | jr!|| j|  d | jr/|| jt	dd |d| 
 |  d | j| S )Nrc   r   r   r   )r   rn   r	   r   r   r   r   r   r   r
   r   r   r   r!   r!   r&   r     s4   
z/WorkflowHistoryDetailView.get_breadcrumbs_itemsc                 C   rC   rD   r   rE   r!   r!   r&   r     rF   z+WorkflowHistoryDetailView.get_page_subtitlec                 C   r   )NzEdit / Reviewre   r   r   r   r!   r!   r&   r     s   z(WorkflowHistoryDetailView.header_buttonsc                 C   s*   t tj| jj| j| j dddS )N)idr   !requested_by__wagtail_userprofile)	r   r    r   r   rQ   filterr?   workflow_state_url_kwargr   rE   r!   r!   r&   workflow_state  s   z(WorkflowHistoryDetailView.workflow_statec                 C   s8   t j| jdjtjj| jdjdddd	dS )a=  
        Get QuerySet of all revisions that caused a task state change during this
        workflow state. It's possible that a task is rejected and then resubmitted,
        so some tasks may be repeated. All tasks that have been completed no matter
        what revision needs to be displayed on this page.
        r5   r   rY   T)flat)id__in
created_at)
r   r   r   rQ   r   r   r   r   values_listr   rE   r!   r!   r&   	revisions  s   	z#WorkflowHistoryDetailView.revisionsc                 C   s   | j jj S rD   )r   r   tasksallrE   r!   r!   r&   r     s   zWorkflowHistoryDetailView.tasksc                    sv   t jj jdd  jD ddd }tt|D ]
}|j	 
| qfdd jD } fdd|D }|S )z2Get QuerySet of tasks completed for each revision.c                 S   s   g | ]}|j qS r!   rm   r"   rp   r!   r!   r&   r'   
  s    zEWorkflowHistoryDetailView.task_states_by_revision.<locals>.<listcomp>)r   revision_id__intaskfinished_byc                    s$   g | ]}|d d  |j  D fqS )c                 S   s   i | ]}|j |qS r!   )r   )r"   
task_stater!   r!   r&   
<dictcomp>  s    zPWorkflowHistoryDetailView.task_states_by_revision.<locals>.<listcomp>.<dictcomp>r   r   )task_states_by_revision_idr!   r&   r'     s    c                    s(   g | ]\} | fd dj D fqS )c                    s   g | ]}  |d qS rD   )rl   )r"   r   task_states_by_taskr!   r&   r'   !  s    zPWorkflowHistoryDetailView.task_states_by_revision.<locals>.<listcomp>.<listcomp>)r   r   rE   r   r&   r'      s    )r   r   r   r   r   prefetch_relatedspecificr   listrY   rn   )r=   task_statesr   task_states_by_revision_tasktask_states_by_revisionr!   )r=   r   r&   r     s"   

z1WorkflowHistoryDetailView.task_states_by_revisionc                 C   s   t jj| jdddjddjt jd}| jjd| jdg}| jjt	j
t	jfvrB|d	 }|rB||jtd
d d| jd | jD ]}||jd|d qE|D ]}||jd|d qT|jdd d |  |S )zGenerate timeline.r   r   r   T)finished_at__isnull)rs   workflow_started)timer#   r   finished_at   )millisecondsworkflow_completededited)r   r#   rp   task_completed)r   r#   r   c                 S   s   | d S )Nr   r!   )tr!   r!   r&   <lambda>Y  s    z4WorkflowHistoryDetailView.timeline.<locals>.<lambda>)key)r   r   r   r   r   excludeSTATUS_CANCELLEDr   rs   r    STATUS_IN_PROGRESSSTATUS_NEEDS_CHANGESr   lastrn   r   r   r   sortr   )r=   completed_task_statestimeline	last_taskrp   r   r!   r!   r&   r  '  sR   	
z"WorkflowHistoryDetailView.timelinec              	      s:   t  jdi |}|| j| j| j| j| j| jd |S )N)rQ   r   r   r   r  r   r!   )	r6   r   r   rQ   r   r   r   r  r   r   rA   r!   r&   r   ^  s   
z*WorkflowHistoryDetailView.get_context_data)rH   rI   rJ   r   r   r   r   r   r   r   r   object_iconr   r   r   r   r   r   r   r   r   r   r   r  r   rO   r!   r!   rA   r&   r     s<    


 




#
6r   ):collectionsr   datetimer   rK   django.contrib.admin.utilsr   django.formsr   django.shortcutsr   django.urlsr   django.utils.functionalr   django.utils.textr	   django.utils.translationr
   r   django.views.genericr   wagtail.admin.filtersr   r   r   wagtail.admin.ui.tablesr   r   r   wagtail.admin.utilsr    wagtail.admin.views.generic.baser   r   r   'wagtail.admin.views.generic.permissionsr   wagtail.admin.widgets.buttonr   wagtail.log_actionsr   r*   wagtail.modelsr   r   r   r   r   r   r    r-   r.   rP   rw   r|   r   r   r!   r!   r!   r&   <module>   s:    $$g 
N