a
    Dg                     @   s  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mZ d dlmZ d d	lmZ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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l0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZKmLZLmMZMmNZNmOZO d d lPmQZQmRZRmSZS d d!lTmUZU d d"lVmWZW e,eRZXG d#d$ d$e;ZYG d%d& d&e;ZZG d'd( d(e9Z[G d)d* d*e/Z\G d+d, d,e\Z]G d-d. d.e@Z^G d/d0 d0e=Z_G d1d2 d2e?Z`G d3d4 d4e>ZaG d5d6 d6eFeDeBZbe&d7d8 Zce&dYd9d:ZdG d;d< d<e;ZeG d=d> d>e:ZfG d?d@ d@e\ZgG dAdB dBe@ZhdCdD ZiG dEdF dFe=ZjG dGdH dHe?ZkG dIdJ dJe>Zle&dKdL ZmdMdN ZnG dOdP dPe(ZoG dQdR dReoZpG dSdT dTeoZqG dUdV dVeoZrdWdX ZsdS )Z    N)forms)ContentType)PermissionDenied)	Paginator)transaction)CountPrefetch)Lower)Http404HttpResponseBadRequest)get_object_or_404redirectrender)render_to_string)reverse)cached_property)url_has_allowed_host_and_scheme)capfirst)gettext_lazy)ngettext)require_POST)TemplateView)messages)PermissionPolicyChecker)MultipleContentTypeFilterWagtailFilterSet)TaskChooserSearchFormWorkflowContentTypeFormWorkflowPagesFormSetget_task_form_classget_workflow_edit_handler)render_modal_workflow)
BaseColumnColumnTitleColumn)
CreateView
DeleteViewEditView	IndexView)BaseListingView)PermissionCheckedMixin)PageListingMixin)resolve_model_string)PageTask	TaskStateWorkflowWorkflowStateWorkflowTask)page_permission_policytask_permission_policyworkflow_permission_policy)get_workflow_enabled_models)get_task_typesc                   @   s   e Zd ZdZdS )WorkflowTitleColumnz8wagtailadmin/workflows/includes/workflow_title_cell.htmlN__name__
__module____qualname__cell_template_name r>   r>   \/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/views/workflows.pyr8   <   s   r8   c                       s    e Zd ZdZ fddZ  ZS )WorkflowUsedByColumnz:wagtailadmin/workflows/includes/workflow_used_by_cell.htmlc                    s   t  ||}t |d< |S )NZworkflow_enabled_models)superget_cell_context_datar6   selfinstanceZparent_contextcontext	__class__r>   r?   rB   C   s    
z*WorkflowUsedByColumn.get_cell_context_data)r:   r;   r<   r=   rB   __classcell__r>   r>   rG   r?   r@   @   s   r@   c                       s$   e Zd ZdZdZ fddZ  ZS )WorkflowTasksColumnz8wagtailadmin/workflows/includes/workflow_tasks_cell.html   c                    s>   t  ||}|j d | j |d< |j | j |d< |S )NtasksZextra_count)rA   rB   workflow_tasksall	num_taskscountrC   rG   r>   r?   rB   M   s    z)WorkflowTasksColumn.get_cell_context_data)r:   r;   r<   r=   rO   rB   rI   r>   r>   rG   r?   rJ   I   s   rJ   c                       s^   e Zd ZejedddedfdedffejdddZdddd	 fd
dZ	dd Z
  ZS )BaseWorkflowFilterSetzShow disabledfilter_show_disabledtrueZYesfalseZNoN)labelmethodchoiceswidgetZempty_labelinitialrequestprefixc                   sN   |d ur6| dd u r6| jd }| }|jd |d< t j||||d d S )Nshow_disabledrY   rZ   )getZbase_filterscopyextrarA   __init__)rD   dataquerysetr[   r\   filterrG   r>   r?   ra   ^   s    
zBaseWorkflowFilterSet.__init__c                 C   s   |dkr|S |j ddS )NrS   Tactive)rd   )rD   rc   namevaluer>   r>   r?   rR   f   s    z*BaseWorkflowFilterSet.filter_show_disabled)NN)r:   r;   r<   django_filtersZChoiceFilter_r   ZRadioSelectr]   ra   rR   rI   r>   r>   rG   r?   rQ   T   s   	rQ   c                   @   s   e Zd ZG dd dZdS )WorkflowFilterSetc                   @   s   e Zd ZeZg ZdS )zWorkflowFilterSet.MetaN)r:   r;   r<   r0   modelfieldsr>   r>   r>   r?   Metam   s   rn   N)r:   r;   r<   rn   r>   r>   r>   r?   rk   l   s   rk   c                       s   e Zd ZeZeZdZdZdZ	dZ
dZdZdZedZed	Zd
Zededddddededddded
eddgZdZdgZeZdZdd Z fddZ fddZ  ZS )IndexZ	workflowsz!wagtailadmin/workflows/index.htmlz)wagtailadmin/workflows/index_results.htmlwagtailadmin_workflows:addwagtailadmin_workflows:editwagtailadmin_workflows:indexz$wagtailadmin_workflows:index_results	WorkflowszAdd a workflowrL   rg   Name25%)rU   url_namewidthsort_keyusagezUsed bywagtailadmin_workflows:usagez15%)rU   rv   rw   ZTasks)rU      c                 C   s   | j jjddkS Nr]   rS   filtersformcleaned_datar^   rD   r>   r>   r?   r]      s    zIndex.show_disabledc                    s*   t   }|jtdd}|ddddS )NZworkflow_content_types)Zcontent_typesZworkflow_pagesZworkflow_pages__pagerM   Zworkflow_tasks__task)rA   get_base_querysetZannotater   prefetch_relatedrD   rc   rG   r>   r?   r      s    
zIndex.get_base_querysetc                    s"   t  jf i |}|  |d< |S NZshowing_disabledrA   get_context_datar]   rD   kwargsrF   rG   r>   r?   r      s    zIndex.get_context_data)r:   r;   r<   r5   permission_policyr0   rl   context_object_nametemplate_nameresults_template_nameadd_url_nameedit_url_nameindex_url_nameindex_results_url_namerj   
page_titleadd_item_labelheader_iconr8   r@   rJ   columnsdefault_orderingsearch_fieldsrk   filterset_classpaginate_byr]   r   r   rI   r>   r>   rG   r?   ro   r   sD   
ro   c                       st   e Zd ZeZeZedZdZ	edZ
dZdZdZdZdZd	d
 Zdd Zdd Zdd Z fddZdd Z  ZS )CreatezNew workflowz"wagtailadmin/workflows/create.htmlzWorkflow '%(object)s' created.rp   rq   rr   rL   Nc                 C   s   | j st | _ | j S Nedit_handlerr    r   r>   r>   r?   get_edit_handler   s    zCreate.get_edit_handlerc                 C   s   |    S r   r   get_form_classr   r>   r>   r?   r      s    zCreate.get_form_classc                 C   s2   | j jdkr t| j j| jddS t| jddS d S NPOSTpages)rE   r\   )r[   rV   r   r   objectr   r>   r>   r?   get_pages_formset   s
    zCreate.get_pages_formsetc                 C   s.   | j jdkrt| j j| jdS t| jdS d S Nr   )workflowr[   rV   r   r   r   r   r>   r>   r?   get_content_type_form   s    zCreate.get_content_type_formc                    s|   t  jf i |}|d }| jj||j| jd}|  }||d< ||d< tt |d< | 	 |d< |j
|j
 |j
 |d< |S )Nr   r   rE   r[   r   pages_formsethas_workflow_enabled_modelscontent_type_formmedia)rA   r   r   get_bound_panelrE   r[   r   boolr6   r   r   rD   r   rF   r   Zbound_panelr   rG   r>   r?   r      s    
zCreate.get_context_datac              
   C   s   || _ t  |  | _|  }|  }| r| r|  |  | 	| j}|d urt
j| j|t
t| j| jjfdtdgd t|  W  d    S td W d    n1 s0    Y  | |S )NargsEditZbuttonsT)r   r   atomicsave_instancer   r   r   is_validsaveget_success_messager   successr[   buttonr   r   idrj   r   get_success_urlset_rollbackform_invalid)rD   r   r   r   success_messager>   r>   r?   
form_valid   s,    


(zCreate.form_valid)r:   r;   r<   r5   r   r0   rl   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r>   r>   rG   r?   r      s    r   c                       s   e Zd ZeZeZedZdZ	edZ
dZdZdZedZdZed	Zd
ZdZg ZdZdZdd Zdd Zdd Zdd Zdd Z fddZedd Ze dd Z   Z!S )r   zEditing workflowz wagtailadmin/workflows/edit.htmlzWorkflow '%(object)s' updated.rp   rq   wagtailadmin_workflows:disableDisablerr   Enablezwagtailadmin_workflows:enablerL   NrK   c                 C   s   | j st | _ | j S r   r   r   r>   r>   r?   r   
  s    zEdit.get_edit_handlerc                 C   s   |    S r   r   r   r>   r>   r?   r     s    zEdit.get_form_classc                 C   s6   | j jdkr"t| j j|  ddS t|  ddS d S r   )r[   rV   r   r   
get_objectr   r>   r>   r?   r     s
    zEdit.get_pages_formsetc                 C   s.   | j jdkrt| j j| jdS t| jdS d S r   r   r   r>   r>   r?   r     s    zEdit.get_content_type_formc                 C   sD   t jj|  d}t|| j|_t| jj	
dd}|j|}|S )N)Zworkflowpage__workflowp   )r-   objectsrd   r   r   	MAX_PAGES	paginatorintr[   GETr^   page)rD   r   Zpage_numberZpaginated_pagesr>   r>   r?   get_paginated_pages   s
    zEdit.get_paginated_pagesc                    s   t  jf i |}|d }| jj||j| jd}|  }||d< |  |d< tt	 |d< | 
 |d< | jd u s| j| jjdo| jj|d< | jd u s| j| jjd	o| jj |d
< |j|j |d< | jjr|  }||d< |d  |j7  < |S )Nr   r   r   r   r   r   deletecan_disableadd
can_enabler   r   )rA   r   r   r   rE   r[   r   r   r   r6   r   r   user_has_permissionuserr   rf   r   r   rG   r>   r?   r   (  s4    


zEdit.get_context_datac                 C   s   t | j| jjfdS Nr   r   enable_url_namer   pkr   r>   r>   r?   get_enable_urlE  s    zEdit.get_enable_urlc              
   C   s   || _ t  |  | _d}| jjrf|  }|  }| rX| rX|	  |	  nt
d d}|r|  }|d urtj| j|tt| j| jjfdtdgd t|  W  d    S W d    n1 s0    Y  | |S )NTFr   r   r   )r   r   r   r   r   rf   r   r   r   r   r   r   r   r   r[   r   r   r   r   rj   r   r   r   )rD   r   Z
successfulr   r   r   r>   r>   r?   r   I  s4    




8zEdit.form_valid)"r:   r;   r<   r5   r   r0   rl   rj   r   r   r   r   r   delete_url_namedelete_item_labelr   enable_item_labelr   r   header_more_buttonsr   r   r   r   r   r   r   r   propertyr   r   r   r   rI   r>   r>   rG   r?   r      s4   
r   c                       s`   e Zd ZeZeZedZdZ	edZ
dZdZdZdZdZed	d
 Z fddZdd Z  ZS )r   zDisable workflowz+wagtailadmin/workflows/confirm_disable.htmlzWorkflow '%(object)s' disabled.rp   rq   r   rr   rL   c                 C   s   t | j| jd fdS Nr   r   r   r   r   r   r>   r>   r?   get_edit_url{  s    zDisable.get_edit_urlc                    sJ   t  jf i |}tjj| jtjd }|rFtdd|d|i |d< |S )N)r   statuszThis workflow is in progress on %(states_in_progress)d page/snippet. Disabling this workflow will cancel moderation on this page/snippet.zThis workflow is in progress on %(states_in_progress)d pages/snippets. Disabling this workflow will cancel moderation on these pages/snippets.states_in_progresswarning_message)	rA   r   r1   r   rd   r   STATUS_IN_PROGRESSrP   r   rD   r   rF   r   rG   r>   r?   r     s    
zDisable.get_context_datac                 C   s   | j j| jjd d S N)r   r   Z
deactivater[   r   r   r>   r>   r?   delete_action  s    zDisable.delete_action)r:   r;   r<   r5   r   r0   rl   rj   r   r   r   r   r   r   r   r   r   r   r   r   rI   r>   r>   rG   r?   r   o  s   
r   c                       st   e Zd ZeZh dZdZdZdZdZ	dZ
edZ fdd	Zd
d Zdd Zdd Zdd Zdd Zdd Z  ZS )WorkflowUsageView>   changeviewr   r   r   rz   z$wagtailadmin_workflows:usage_resultsr{   rL   Usagec                    s:   |   | _t|jh ds tt j|g|R i |S )N>   lockpublishZunlockr   r   Zbulk_delete)r   r   r3   Zuser_has_any_permissionr   r   rA   dispatch)rD   r[   r   r   rG   r>   r?   r     s    
zWorkflowUsageView.dispatchc                 C   s   | j jS r   )r   rg   r   r>   r>   r?   get_page_subtitle  s    z#WorkflowUsageView.get_page_subtitlec                 C   sN   |   }|  }| jtdttjjdtd| jj	fd|dd||dg S )Nrr   urlrU   rq   r    )r   rU   Zsublabel)
Zget_page_titler   breadcrumbs_itemsr   r   r0   _metaverbose_name_pluralr   r   )rD   titleZsubtitler>   r>   r?   get_breadcrumbs_items  s    

z'WorkflowUsageView.get_breadcrumbs_itemsc                 C   s   t | j| jjfdS r   )r   r   r   r   r   r>   r>   r?   get_index_url  s    zWorkflowUsageView.get_index_urlc                 C   s   t | j| jjfdS r   )r   r   r   r   r   r>   r>   r?   get_index_results_url  s    z'WorkflowUsageView.get_index_results_urlc                 C   s   t t| j| jdS Nr   )r   r0   r   r^   pk_url_kwargr   r>   r>   r?   r     s    zWorkflowUsageView.get_objectc                 C   s4   t | jjdjdd}| j |@ }| |}|S )Nr   r   )Z	depth__gt)r3   Z!instances_user_has_permission_forr[   r   rd   r   Z	all_pagesZannotate_queryset)rD   Zeditable_pagesr   r>   r>   r?   r     s    
z#WorkflowUsageView.get_base_queryset)r:   r;   r<   r5   r   Zany_permission_requiredr   r   r   r   r   rj   r   r   r   r   r   r   r   r   rI   r>   r>   rG   r?   r     s   r   c                 C   s   t t|d}t| jdst|jsLd|_|  t	| t
dd|ji  | jdd }|rxt||  hdrxt|S td|jS d S )	Nr   r   Tz%Workflow '%(workflow_name)s' enabled.Zworkflow_namenextr   Zallowed_hostsrq   )r   r0   r5   r   r   r   rf   r   r   r   rj   rg   r   r^   r   get_hostr   r   )r[   r   r   redirect_tor>   r>   r?   enable_workflow  s$    
r  c                 C   s   t t|d}t| jdstt|dr`|r:||jjj	kr`|j
  t| tdd| i  | jdd }|rt||  hdrt|S td|jS d S )	Nr   r   workflowpagez,Workflow removed from Page '%(page_title)s'.r   r   r  Zwagtailadmin_explore)r   r-   r5   r   r   r   hasattrr  r   r   r   r   r   rj   Zget_admin_display_titler   r^   r   r  r   r   )r[   Zpage_pkZworkflow_pkr   r  r>   r>   r?   remove_workflow  s$    



r  c                   @   s   e Zd ZdZdS )TaskTitleColumnz4wagtailadmin/workflows/includes/task_title_cell.htmlNr9   r>   r>   r>   r?   r  
  s   r  c                   @   s   e Zd ZdZdS )TaskUsageColumnz4wagtailadmin/workflows/includes/task_usage_cell.htmlNr9   r>   r>   r>   r?   r	    s   r	  c                       s4   e Zd Zdddd fddZG dd dZ  ZS )TaskFilterSetNrZ   c                   sh   t  j||||d t }dd tjj|  D  t|dkrdtt	dt
j fdddd	| jd< d S )
NrZ   c                 S   s   g | ]
}|j qS r>   r   ).0ctr>   r>   r?   
<listcomp>  s   z*TaskFilterSet.__init__.<locals>.<listcomp>r   Typec                    s   t jj dS )N)Zpk__in)r   r   rd   )r[   Zct_idsr>   r?   <lambda>      z(TaskFilterSet.__init__.<locals>.<lambda>content_type)rU   rX   rc   
field_name)rA   ra   r7   r   r   Zget_for_modelsvalueslenr   rj   r   ZCheckboxSelectMultipler~   )rD   rb   rc   r[   r\   
task_typesrG   r  r?   ra     s    
zTaskFilterSet.__init__c                   @   s   e Zd ZeZg ZdS )zTaskFilterSet.MetaN)r:   r;   r<   r.   rl   rm   r>   r>   r>   r?   rn   !  s   rn   )NN)r:   r;   r<   ra   rn   rI   r>   r>   rG   r?   r
    s   r
  c                       s   e Zd ZeZeZdZdZdZ	dZ
dZdZdZedZed	Zd
ZededdddededdddededdddgZdZdgZeZdZdd Z fddZ fddZ  ZS )	TaskIndexrL   z&wagtailadmin/workflows/task_index.htmlz.wagtailadmin/workflows/task_index_results.html'wagtailadmin_workflows:select_task_type wagtailadmin_workflows:edit_task!wagtailadmin_workflows:task_indexz)wagtailadmin_workflows:task_index_resultszWorkflow tasksNew workflow task	thumbtackrg   rt   )rU   rv   rx   typer  get_verbose_nameru   )rU   accessorrw   ry   zUsed on_active_workflows2   c                 C   s   | j jjddkS r|   r}   r   r>   r>   r?   r]   D  s    zTaskIndex.show_disabledc                    s.   t    tdtjjdddddS )NrM   T)Zworkflow__activer   r   )rc   Zto_attr)	rA   get_querysetspecificr   r   r2   r   rd   Zselect_relatedr   rG   r>   r?   r"  G  s    zTaskIndex.get_querysetc                    s"   t  jf i |}|  |d< |S r   r   r   rG   r>   r?   r   W  s    zTaskIndex.get_context_data)r:   r;   r<   r4   r   r.   rl   r   r   r   r   r   r   r   rj   r   r   r   r  r#   r	  r   r   r   r
  r   r   r]   r"  r   rI   r>   r>   rG   r?   r  &  s<   r  c                 C   sr   t | jdstdd t D }|jdd d t|dkrZ|d \}}}}td	||S t| d
|dt	ddS )Nr   c                 S   s(   g | ] }|  |jj|jj| fqS r>   r  r   	app_label
model_nameget_descriptionr  rl   r>   r>   r?   r  a  s   z$select_task_type.<locals>.<listcomp>c                 S   s   | d   S Nr   lower	task_typer>   r>   r?   r  k  r  z"select_task_type.<locals>.<lambda>keyr   r   wagtailadmin_workflows:add_taskz,wagtailadmin/workflows/select_task_type.htmlr  rs   )r  Ziconr   )
r4   r   r   r   r7   sortr  r   r   rj   )r[   r  verbose_namer%  r&  descriptionr>   r>   r?   select_task_type]  s"    
r4  c                   @   s\   e Zd ZeZdZedZdZedZ	dZ
dZdZdZed	d
 Zdd Zdd Zdd ZdS )
CreateTaskNr  z'wagtailadmin/workflows/create_task.htmlzTask '%(object)s' created.r0  r  r  r  c              	   C   s^   zt j| jd | jd }W n t jtfy:   tY n0 | }t|t	rV|t	u rZt|S )Nr%  r&  )
r   r   Zget_by_natural_keyr   ZDoesNotExistAttributeErrorr
   Zmodel_class
issubclassr.   )rD   r  rl   r>   r>   r?   rl     s    
zCreateTask.modelc                 C   s
   t | jS r   r   rl   r   r>   r>   r?   r     s    zCreateTask.get_form_classc                 C   s$   t | j| jd| jdddS )Nr%  r&  )r%  r&  )r   )r   r   r   r^   r   r>   r>   r?   get_add_url  s    

zCreateTask.get_add_urlc                 C   sB   t | jttjjddtddt| jjji dg}| j	| S )Nr   r   zNew: %(model_name)sr&  )
r   r   r   r.   r   r   rj   rl   r2  r   rD   itemsr>   r>   r?   r     s    
z CreateTask.get_breadcrumbs_items)r:   r;   r<   r4   r   rl   rj   r   r   r   r   r   r   r   r   r   r9  r   r>   r>   r>   r?   r5  ~  s   
	r5  c                       s   e Zd ZeZdZedZdZedZ	dZ
dZdZdZed	Zed
ZdZdZg Zedd Zedd Zdd Zd fdd	Zdd Zdd Z fddZedd Z  ZS )EditTaskNzEditing workflow taskz%wagtailadmin/workflows/edit_task.htmlzTask '%(object)s' updated.r  r  #wagtailadmin_workflows:disable_taskr  r   r   z"wagtailadmin_workflows:enable_taskr  c                 C   s   t |  S r   )r  r   r   r>   r>   r?   rl     s    zEditTask.modelc                 C   s   t dd|  jji S )NzEditing %(task_type)sr-  )rj   r   r  rg   r   r>   r>   r?   r     s    zEditTask.page_titlec                 C   s   | j d u rtj S d S r   )rc   r.   r   rN   r   r>   r>   r?   r"    s    
zEditTask.get_querysetc                    s   t   jS r   )rA   r   r#  r   rG   r>   r?   r     s    zEditTask.get_objectc                 C   s   t | jddS )NT)Zfor_editr8  r   r>   r>   r?   r     s    zEditTask.get_form_classc                 C   s2   t | jttjjddt| jdg}| j| S )Nr   r   )	r   r   r   r.   r   r   strr   r   r:  r>   r>   r?   r     s    
zEditTask.get_breadcrumbs_itemsc                    sh   t  jf i |}| jd u s.| j| jjdo4| jj|d< | jd u sV| j| jjdo^| jj |d< |S )Nr   r   r   r   )rA   r   r   r   r[   r   r   rf   r   rG   r>   r?   r     s    

zEditTask.get_context_datac                 C   s   t | j| jjfdS r   r   r   r>   r>   r?   r     s    zEditTask.get_enable_url)N)r:   r;   r<   r4   r   rl   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r"  r   r   r   r   r   r   rI   r>   r>   rG   r?   r<    s2   

r<  c                       s`   e Zd ZeZeZedZdZ	edZ
dZdZdZdZdZ fd	d
Zedd Zdd Z  ZS )DisableTaskzDisable taskz0wagtailadmin/workflows/confirm_disable_task.htmlzTask '%(object)s' disabled.r0  r  r=  r  r  c                    sN   t  jf i |}tjjtj|  jd }|rJt	dd|d|i |d< |S )N)r   taskzThis task is in progress on %(states_in_progress)d page/snippet. Disabling this task will cause it to be skipped in the moderation workflow and not be listed for selection when editing a workflow.zThis task is in progress on %(states_in_progress)d pages/snippets. Disabling this task will cause it to be skipped in the moderation workflow and not be listed for selection when editing a workflow.r   r   )
rA   r   r/   r   rd   r   r   r   rP   r   r   rG   r>   r?   r     s    
zDisableTask.get_context_datac                 C   s   t | j| jd fdS r   r   r   r>   r>   r?   r     s    zDisableTask.get_edit_urlc                 C   s   | j j| jjd d S r   r   r   r>   r>   r?   r     s    zDisableTask.delete_action)r:   r;   r<   r4   r   r.   rl   rj   r   r   r   r   r   r   r   r   r   r   r   r   rI   r>   r>   rG   r?   r?    s   
r?  c                 C   s   t t|d}t| jdst|jsLd|_|  t	| t
dd|ji  | jdd }|rxt||  hdrxt|S td|jS d S )	Nr   r   TzTask '%(task_name)s' enabled.Z	task_namer   r  r  )r   r.   r4   r   r   r   rf   r   r   r   rj   rg   r   r^   r   r  r   r   )r[   r   r@  r  r>   r>   r?   enable_task  s    
rA  c                 C   s4   |j |jtd|j gdd}t| dddd|ddS )z_
    helper function: given a task, return the response indicating that it has been chosen
    r  r   )r   rg   Zedit_urlNtask_chosen)stepresultZ	json_data)r   rg   r   r!   )r[   r@  Zresult_datar>   r>   r?   get_task_chosen_response7  s    rF  c                       s\   e 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	dd Z
dd Z  ZS )BaseTaskChooserViewc                    s2   t  | _t|jdo"t| jdk| _t |S )Nr   r   )	r7   task_modelsr4   r   r   r  
can_createrA   r   rD   r[   rG   r>   r?   r   J  s
    zBaseTaskChooserView.dispatchc                 C   sP   | j rLt| jdkr| jd S d| jjv rLt| jjd }|| jvrHt|S dS )z
        To be called after dispatch(); returns the model to use for a new task if one is known
        (either from being the only available task mode, or from being specified in the URL as create_model)
        r   r   create_modelN)rI  r  rH  r[   r   r,   r
   )rD   rK  r>   r>   r?   get_create_modelR  s    

z$BaseTaskChooserView.get_create_modelc                 C   s"   |   | _| jrt| jS dS dS )z_
        To be called after dispatch(); returns the form class for creating a new task
        N)rL  rK  r   r   r>   r>   r?   get_create_form_classc  s    

z)BaseTaskChooserView.get_create_form_classc                 C   s   |   }|r|ddS dS )zf
        To be called after dispatch(); returns a blank create form, or None if not available
        create-taskr\   N)rM  )rD   create_form_classr>   r>   r?   get_create_formm  s    z#BaseTaskChooserView.get_create_formc                 C   s$   dd | j D }|jdd d |S )zl
        To be called after dispatch(); returns the task types list for the "select task type" view
        c                 S   s(   g | ] }|  |jj|jj| fqS r>   r$  r(  r>   r>   r?   r  y  s   z=BaseTaskChooserView.get_task_type_options.<locals>.<listcomp>c                 S   s   | d   S r)  r*  r,  r>   r>   r?   r    r  z;BaseTaskChooserView.get_task_type_options.<locals>.<lambda>r.  rH  r1  )rD   r  r>   r>   r?   get_task_type_optionsu  s
    
z)BaseTaskChooserView.get_task_type_optionsc                 C   s$   dd | j D }|jdd d |S )zx
        To be called after dispatch(); returns the list of task type choices for filter on "existing task" tab
        c                 S   s   g | ]}||  fqS r>   )r  r(  r>   r>   r?   r    s   zDBaseTaskChooserView.get_task_type_filter_choices.<locals>.<listcomp>c                 S   s   | d   S )Nr   r*  r,  r>   r>   r?   r    r  zBBaseTaskChooserView.get_task_type_filter_choices.<locals>.<lambda>r.  rR  )rD   task_type_choicesr>   r>   r?   get_task_type_filter_choices  s
    z0BaseTaskChooserView.get_task_type_filter_choicesc                 C   s   i S r   r>   r   r>   r>   r?   get_form_js_context  s    z'BaseTaskChooserView.get_form_js_contextc                 C   s   t | jj|  d}|jjjddtd }}d}|	 rT|j
d }|j|d}t|dd	}|| jjd
}||||| jdS )N)rT  Tre   rg   r   q)Zname__icontains
   )Zper_pager   )search_formrL   	all_tasksZquery_stringrI  )r   r[   r   rU  Z
task_modelr   rd   Zorder_byr	   Zis_searchingr   r   Zget_pager^   rI  )rD   rY  rL   rZ  rW  r   r>   r>   r?   get_task_listing_context_data  s$    
z1BaseTaskChooserView.get_task_listing_context_datac                 C   s0   | j | jr"tdd | jj  nd |  dS )Nz*wagtailadmin_workflows:task_chooser_create?)create_formZadd_urlr  )r]  rK  r   r[   r   	urlencoderS  r   r>   r>   r?   get_create_tab_context_data  s    
z/BaseTaskChooserView.get_create_tab_context_data)r:   r;   r<   r   rL  rM  rQ  rS  rU  rV  r[  r_  rI   r>   r>   rG   r?   rG  I  s   

rG  c                       s,   e Zd Z fddZdd Zdd Z  ZS )TaskChooserViewc                    s   |   | _t |S r   rQ  r]  rA   r^   rJ  rG   r>   r?   r^     s    
zTaskChooserView.getc                 K   s*   d| j i}||   ||   |S )NrI  )rI  updater[  r_  r   r>   r>   r?   r     s
    z TaskChooserView.get_context_datac                 C   s$   |   }d|d< t| jdd ||dS )NZchooserrC  z0wagtailadmin/workflows/task_chooser/chooser.htmlrE  )rV  r!   r[   )rD   rF   
js_contextr>   r>   r?   render_to_response  s    z"TaskChooserView.render_to_response)r:   r;   r<   r^   r   rd  rI   r>   r>   rG   r?   r`    s   r`  c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	TaskChooserCreateViewc                    s   |   | _t |S r   ra  rJ  rG   r>   r?   r^     s    
zTaskChooserCreateView.getc                 C   sZ   |   }|st S ||j|jdd| _| j rD| j }t||S |  }| 	|S d S )NrN  rO  )
rM  r   r   ZFILESr]  r   r   rF  r   rd  )rD   r[   rP  r@  rF   r>   r>   r?   post  s    



zTaskChooserCreateView.postc                 K   s   |   S r   )r_  rD   r   r>   r>   r?   r     s    z&TaskChooserCreateView.get_context_datac                 C   s:   t d|| j}|  }d|d< ||d< t| jd d d |dS )Nz<wagtailadmin/workflows/task_chooser/includes/create_tab.htmlZreshow_create_tabrC  ZhtmlFragmentrE  )r   r[   rV  r!   )rD   rF   Ztab_htmlrc  r>   r>   r?   rd    s    z(TaskChooserCreateView.render_to_response)r:   r;   r<   r^   rf  r   rd  rI   r>   r>   rG   r?   re    s   re  c                   @   s   e Zd ZdZdd ZdS )TaskChooserResultsViewz9wagtailadmin/workflows/task_chooser/includes/results.htmlc                 K   s   |   S r   )r[  rg  r>   r>   r?   r     s    z'TaskChooserResultsView.get_context_dataN)r:   r;   r<   r   r   r>   r>   r>   r?   rh     s   rh  c                 C   s   t t|d}t| |S r   )r   r.   rF  )r[   Ztask_idr@  r>   r>   r?   rB    s    rB  )N)tri   Zdjangor   Z"django.contrib.contenttypes.modelsr   Zdjango.core.exceptionsr   Zdjango.core.paginatorr   Z	django.dbr   Zdjango.db.modelsr   r   Zdjango.db.models.functionsr	   Zdjango.httpr
   r   Zdjango.shortcutsr   r   r   Zdjango.template.loaderr   Zdjango.urlsr   Zdjango.utils.functionalr   Zdjango.utils.httpr   Zdjango.utils.textr   Zdjango.utils.translationr   rj   r   Zdjango.views.decorators.httpr   Zdjango.views.genericr   Zwagtail.adminr   Zwagtail.admin.authr   Zwagtail.admin.filtersr   r   Zwagtail.admin.forms.workflowsr   r   r   r   r    Zwagtail.admin.modal_workflowr!   Zwagtail.admin.ui.tablesr"   r#   r$   Zwagtail.admin.views.genericr%   r&   r'   r(   Z wagtail.admin.views.generic.baser)   Z'wagtail.admin.views.generic.permissionsr*   Z!wagtail.admin.views.pages.listingr+   Zwagtail.coreutilsr,   Zwagtail.modelsr-   r.   r/   r0   r1   r2   Zwagtail.permissionsr3   r4   r5   Zwagtail.snippets.modelsr6   Zwagtail.workflowsr7   Ztask_permission_checkerr8   r@   rJ   rQ   rk   ro   r   r   r   r   r  r  r  r	  r
  r  r4  r5  r<  r?  rA  rF  rG  r`  re  rh  rB  r>   r>   r>   r?   <module>   s    	5Qw#<
7!9B#
u(