o
    h                     @   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                   @      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/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/admin/views/workflows.pyr9   <       r9   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 )Nworkflow_enabled_models)superget_cell_context_datar6   selfinstanceparent_contextcontext	__class__r?   r@   rE   C   s   
z*WorkflowUsedByColumn.get_cell_context_data)r;   r<   r=   r>   rE   __classcell__r?   r?   rK   r@   rB   @   s    rB   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tasksextra_count)rD   rE   workflow_tasksall	num_taskscountrF   rK   r?   r@   rE   M   s   z)WorkflowTasksColumn.get_cell_context_data)r;   r<   r=   r>   rT   rE   rM   r?   r?   rK   r@   rN   I   s    rN   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trueYesfalseNoN)labelmethodchoiceswidgetempty_labelinitialrequestprefixc                   sN   |d ur| dd u r| jd }| }|jd |d< t j||||d d S )Nshow_disabledra   rb   )getbase_filterscopyextrarD   __init__)rG   dataquerysetrc   rd   filterrK   r?   r@   rj   ^   s   
zBaseWorkflowFilterSet.__init__c                 C   s   |dkr|S |j ddS )NrX   Tactive)rm   )rG   rl   namevaluer?   r?   r@   rW   f   s   z*BaseWorkflowFilterSet.filter_show_disabledNN)r;   r<   r=   django_filtersChoiceFilter_r   RadioSelectre   rj   rW   rM   r?   r?   rK   r@   rV   T   s    	rV   c                   @   s   e Zd ZG dd dZdS )WorkflowFilterSetc                   @      e Zd ZeZg ZdS )zWorkflowFilterSet.MetaN)r;   r<   r=   r0   modelfieldsr?   r?   r?   r@   Metam       r{   N)r;   r<   r=   r{   r?   r?   r?   r@   rw   l   s    rw   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 )Index	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 workflowrP   rp   Name25%)r\   url_namewidthsort_keyusagezUsed bywagtailadmin_workflows:usagez15%)r\   r   r   Tasks)r\      c                 C      | j jjddkS Nre   rX   filtersformcleaned_datarf   rG   r?   r?   r@   re         zIndex.show_disabledc                    s*   t   }|jtdd}|ddddS )Nworkflow_content_types)content_typesworkflow_pagesworkflow_pages__pagerR   workflow_tasks__task)rD   get_base_querysetannotater   prefetch_relatedrG   rl   rK   r?   r@   r      s   
zIndex.get_base_querysetc                    "   t  jdi |}|  |d< |S Nshowing_disabledr?   rD   get_context_datare   rG   kwargsrJ   rK   r?   r@   r         zIndex.get_context_data)r;   r<   r=   r5   permission_policyr0   ry   context_object_nametemplate_nameresults_template_nameadd_url_nameedit_url_nameindex_url_nameindex_results_url_nameru   
page_titleadd_item_labelheader_iconr9   rB   rN   columnsdefault_orderingsearch_fieldsrw   filterset_classpaginate_byre   r   r   rM   r?   r?   rK   r@   r}   r   sF    
r}   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.r   r   r   rP   Nc                 C      | j st | _ | j S Nedit_handlerr    r   r?   r?   r@   get_edit_handler      zCreate.get_edit_handlerc                 C      |    S r   r   get_form_classr   r?   r?   r@   r         zCreate.get_form_classc                 C   s.   | j jdkrt| j j| jddS t| jddS NPOSTpages)rH   rd   )rc   r]   r   r   objectr   r?   r?   r@   get_pages_formset   s
   zCreate.get_pages_formsetc                 C   *   | j jdkrt| j j| jdS t| jdS Nr   )workflowrc   r]   r   r   r   r   r?   r?   r@   get_content_type_form      zCreate.get_content_type_formc                    s|   t  jdi |}|d }| jj||j| jd}|  }||d< ||d< tt |d< | 	 |d< |j
|j
 |j
 |d< |S )	Nr   r   rH   rc   r   pages_formsethas_workflow_enabled_modelscontent_type_formmediar?   )rD   r   r   get_bound_panelrH   rc   r   boolr6   r   r   rG   r   rJ   r   bound_panelr   rK   r?   r@   r      s   
zCreate.get_context_datac              
   C   s   || _ t Y |  | _|  }|  }| rT| rT|  |  | 	| j}|d urGt
j| j|t
t| j| jjfdtdgd t|  W  d    S td W d    n1 scw   Y  | |S )NargsEditbuttonsT)r   r   atomicsave_instancer   r   r   is_validsaveget_success_messager   successrc   buttonr   r   idru   r   get_success_urlset_rollbackform_invalid)rG   r   r   r   success_messager?   r?   r@   
form_valid   s0   




zCreate.form_valid)r;   r<   r=   r5   r   r0   ry   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   r?   r?   rK   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.r   r   wagtailadmin_workflows:disableDisabler   Enablezwagtailadmin_workflows:enablerP   NrO   c                 C   r   r   r   r   r?   r?   r@   r   
  r   zEdit.get_edit_handlerc                 C   r   r   r   r   r?   r?   r@   r     r   zEdit.get_form_classc                 C   s2   | j jdkrt| j j|  ddS t|  ddS r   )rc   r]   r   r   
get_objectr   r?   r?   r@   r     s
   zEdit.get_pages_formsetc                 C   r   r   r   r   r?   r?   r@   r     r   zEdit.get_content_type_formc                 C   sD   t jj|  d}t|| j|_t| jj	
dd}|j|}|S )N)workflowpage__workflowp   )r-   objectsrm   r   r   	MAX_PAGES	paginatorintrc   GETrf   page)rG   r   page_numberpaginated_pagesr?   r?   r@   get_paginated_pages   s
   zEdit.get_paginated_pagesc                    s   t  jdi |}|d }| jj||j| jd}|  }||d< |  |d< tt	 |d< | 
 |d< | jd u p@| j| jjdoD| jj|d< | jd u pT| j| jjd	oY| jj |d
< |j|j |d< | jjry|  }||d< |d  |j7  < |S )Nr   r   r   r   r   r   deletecan_disableadd
can_enabler   r   r?   )rD   r   r   r   rH   rc   r   r   r   r6   r   r   user_has_permissionuserr   ro   r   r   rK   r?   r@   r   (  s4   


zEdit.get_context_datac                 C      t | j| jjfdS Nr   r   enable_url_namer   pkr   r?   r?   r@   get_enable_urlE     zEdit.get_enable_urlc              
   C   s   || _ t b |  | _d}| jjr3|  }|  }| r,| r,|	  |	  nt
d d}|rb|  }|d urUtj| j|tt| j| jjfdtdgd t|  W  d    S W d    n1 slw   Y  | |S )NTFr   r   r   )r   r   r   r   r   ro   r   r   r   r   r   r   r   r   rc   r   r   r   r   ru   r   r   r   )rG   r   
successfulr   r   r   r?   r?   r@   r   I  s:   






zEdit.form_valid)"r;   r<   r=   r5   r   r0   ry   ru   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   rM   r?   r?   rK   r@   r      s6    
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.r   r   r   r   rP   c                 C      t | j| jd fdS Nr   r   r   r   r   r   r?   r?   r@   get_edit_url{     zDisable.get_edit_urlc                    sJ   t  jdi |}tjj| jtjd }|r#t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_messager?   )	rD   r   r1   r   rm   r   STATUS_IN_PROGRESSrU   r   rG   r   rJ   r  rK   r?   r@   r     s    zDisable.get_context_datac                 C      | j j| jjd d S N)r   r   
deactivaterc   r   r   r?   r?   r@   delete_action     zDisable.delete_action)r;   r<   r=   r5   r   r0   ry   ru   r   r   r   r   r   r  r   r   r  r  r   r  rM   r?   r?   rK   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>   r   viewchanger   r   r   z$wagtailadmin_workflows:usage_resultsr   rP   Usagec                    s:   |   | _t|jh dstt j|g|R i |S )N>   r   lockr  unlockpublishbulk_delete)r   r   r3   user_has_any_permissionr   r   rD   dispatch)rG   rc   r   r   rK   r?   r@   r"    s   
zWorkflowUsageView.dispatchc                 C   s   | j jS r   )r   rp   r   r?   r?   r@   get_page_subtitle     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 )Nr   urlr\   r   r    )r&  r\   sublabel)
get_page_titler#  breadcrumbs_itemsr   r   r0   _metaverbose_name_pluralr   r   )rG   titlesubtitler?   r?   r@   get_breadcrumbs_items  s   

z'WorkflowUsageView.get_breadcrumbs_itemsc                 C   r   r   )r   r   r   r   r   r?   r?   r@   get_index_url  r   zWorkflowUsageView.get_index_urlc                 C   r   r   )r   r   r   r   r   r?   r?   r@   get_index_results_url  r   z'WorkflowUsageView.get_index_results_urlc                 C   s   t t| j| jdS Nr   )r   r0   r   rf   pk_url_kwargr   r?   r?   r@   r     r  zWorkflowUsageView.get_objectc                 C   s4   t | jjdjdd}| j |@ }| |}|S )Nr  r   )	depth__gt)r3   !instances_user_has_permission_forrc   r   rm   r   	all_pagesannotate_queryset)rG   editable_pagesr   r?   r?   r@   r     s   
z#WorkflowUsageView.get_base_queryset)r;   r<   r=   r5   r   any_permission_requiredr4  r   r   r   r   ru   r   r"  r#  r/  r0  r1  r   r   rM   r?   r?   rK   r@   r    s     r  c                 C      t t|d}t| jdst|js&d|_|  t	| t
dd|ji  | jdd }|r<t||  hdr<t|S td|jS )	Nr3  r   Tz%Workflow '%(workflow_name)s' enabled.workflow_namenextr&  allowed_hostsr   )r   r0   r5   r   r   r   ro   r   r   r   ru   rp   r   rf   r   get_hostr   r   )rc   r   r   redirect_tor?   r?   r@   enable_workflow  s$   
rB  c                 C   s   t t|d}t| jdstt|dr0|r||jjj	kr0|j
  t| tdd| i  | jdd }|rFt||  hdrFt|S td|jS )	Nr3  r  workflowpagez,Workflow removed from Page '%(page_title)s'.r   r=  r>  wagtailadmin_explore)r   r-   r5   r   r   r   hasattrrC  r   r   r   r   r   ru   get_admin_display_titler   rf   r   r@  r   r   )rc   page_pkworkflow_pkr   rA  r?   r?   r@   remove_workflow  s$   



rI  c                   @   r8   )TaskTitleColumnz4wagtailadmin/workflows/includes/task_title_cell.htmlNr:   r?   r?   r?   r@   rJ  
  rA   rJ  c                   @   r8   )TaskUsageColumnz4wagtailadmin/workflows/includes/task_usage_cell.htmlNr:   r?   r?   r?   r@   rK    rA   rK  c                       s4   e Zd Zdddd fddZG dd dZ  ZS )TaskFilterSetNrb   c                   sl   t  j||||d t }dd tjj|  D  t|dkr4tt	dt
j fdddd	| jd< d S d S )
Nrb   c                 S   s   g | ]}|j qS r?   r3  ).0ctr?   r?   r@   
<listcomp>  s    z*TaskFilterSet.__init__.<locals>.<listcomp>r   Typec                    s   t jj dS )N)pk__in)r   r   rm   )rc   ct_idsr?   r@   <lambda>  s    z(TaskFilterSet.__init__.<locals>.<lambda>content_type)r\   r_   rl   
field_name)rD   rj   r7   r   r   get_for_modelsvalueslenr   ru   r   CheckboxSelectMultipler   )rG   rk   rl   rc   rd   
task_typesrK   rR  r@   rj     s   
zTaskFilterSet.__init__c                   @   rx   )zTaskFilterSet.MetaN)r;   r<   r=   r.   ry   rz   r?   r?   r?   r@   r{   !  r|   r{   rr   )r;   r<   r=   rj   r{   rM   r?   r?   rK   r@   rL    s    rL  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 )	TaskIndexrP   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	thumbtackrp   r   )r\   r   r   typerP  get_verbose_namer   )r\   accessorr   r   zUsed on_active_workflows2   c                 C   r   r   r   r   r?   r?   r@   re   D  r   zTaskIndex.show_disabledc                    s.   t    tdtjjdddddS )NrR   T)workflow__activer   re  )rl   to_attr)	rD   get_querysetspecificr   r   r2   r   rm   select_relatedr   rK   r?   r@   ri  G  s   zTaskIndex.get_querysetc                    r   r   r   r   rK   r?   r@   r   W  r   zTaskIndex.get_context_data)r;   r<   r=   r4   r   r.   ry   r   r   r   r   r   r   r   ru   r   r   r   rJ  r#   rK  r   r   r   rL  r   r   re   ri  r   rM   r?   r?   rK   r@   r\  &  s>    r\  c                 C   sr   t | jds	tdd t D }|jdd d t|dkr-|d \}}}}td	||S t| d
|dt	ddS )Nr   c                 S   (   g | ]}|  |jj|jj| fqS r?   rc  r+  	app_label
model_nameget_descriptionrM  ry   r?   r?   r@   rO  a      z$select_task_type.<locals>.<listcomp>c                 S      | d   S Nr   lower	task_typer?   r?   r@   rT  k      z"select_task_type.<locals>.<lambda>keyr   r   wagtailadmin_workflows:add_taskz,wagtailadmin/workflows/select_task_type.htmlra  r   )r[  iconr-  )
r4   r   r   r   r7   sortrY  r   r   ru   )rc   r[  verbose_namern  ro  descriptionr?   r?   r@   select_task_type]  s"   
r  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.r|  r^  r_  ra  c              	   C   sZ   zt j| jd | jd }W n t jtfy   tw | }t|t	r)|t	u r+t|S )Nrn  ro  )
r   r   get_by_natural_keyr   DoesNotExistAttributeErrorr
   model_class
issubclassr.   )rG   rU  ry   r?   r?   r@   ry     s   zCreateTask.modelc                 C   s
   t | jS r   r   ry   r   r?   r?   r@   r     s   
zCreateTask.get_form_classc                 C   s$   t | j| jd| jdddS )Nrn  ro  )rn  ro  )r   )r   r   r   rf   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)sro  )
r   r   r   r.   r+  r,  ru   ry   r  r*  rG   itemsr?   r?   r@   r/    s   

z CreateTask.get_breadcrumbs_items)r;   r<   r=   r4   r   ry   ru   r   r   r   r   r   r   r   r   r   r  r/  r?   r?   r?   r@   r  ~  s    
	r  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_taskra  c                 C   s   t |  S r   )rb  r   r   r?   r?   r@   ry     s   zEditTask.modelc                 C   s   t dd|  jji S )NzEditing %(task_type)srx  )ru   r   rU  rp   r   r?   r?   r@   r     s   zEditTask.page_titlec                 C   s   | j d u r
tj S d S r   )rl   r.   r   rS   r   r?   r?   r@   ri    s   

zEditTask.get_querysetc                    s   t   jS r   )rD   r   rj  r   rK   r?   r@   r     r   zEditTask.get_objectc                 C   s   t | jddS )NT)for_editr  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di |}| jd u p| j| jjdo| jj|d< | jd u p*| j| jjdo/| jj |d< |S )Nr   r   r   r   r?   )rD   r   r   r   rc   r   r   ro   r   rK   r?   r@   r     s   

zEditTask.get_context_datac                 C   r   r   r   r   r?   r?   r@   r    r  zEditTask.get_enable_urlr   )r;   r<   r=   r4   r   ry   ru   r   r   r   r   r   r  r   r  r  r   r   r  r   ri  r   r   r/  r   r  r  rM   r?   r?   rK   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 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.r|  r^  r  r_  ra  c                    sN   t  jdi |}tjjtj|  jd }|r%t	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  r?   )
rD   r   r/   r   rm   r  r   r   rU   r   r  rK   r?   r@   r     s    zDisableTask.get_context_datac                 C   r	  r
  r  r   r?   r?   r@   r    r  zDisableTask.get_edit_urlc                 C   r  r  r  r   r?   r?   r@   r    r  zDisableTask.delete_action)r;   r<   r=   r4   r   r.   ry   ru   r   r   r   r   r   r  r   r   r   r  r  r  rM   r?   r?   rK   r@   r    s    
r  c                 C   r;  )	Nr3  r   TzTask '%(task_name)s' enabled.	task_namer=  r>  r^  )r   r.   r4   r   r   r   ro   r   r   r   ru   rp   r   rf   r   r@  r   r   )rc   r   r  rA  r?   r?   r@   enable_task  s   
r  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   rp   edit_urlNtask_chosen)stepresult	json_data)r   rp   r   r!   )rc   r  result_datar?   r?   r@   get_task_chosen_response7  s   r  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   rY  
can_createrD   r"  rG   rc   rK   r?   r@   r"  J  s
   zBaseTaskChooserView.dispatchc                 C   sT   | j r&t| jdkr| jd S d| jjv r(t| jjd }|| jvr$t|S d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)r  rY  r  rc   r   r,   r
   )rG   r  r?   r?   r@   get_create_modelR  s   

z$BaseTaskChooserView.get_create_modelc                 C   s   |   | _| jrt| jS dS )z_
        To be called after dispatch(); returns the form class for creating a new task
        N)r  r  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rd   N)r  )rG   create_form_classr?   r?   r@   get_create_formm  s   
z#BaseTaskChooserView.get_create_formc                 C   $   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   rl  r?   rm  rq  r?   r?   r@   rO  y  rr  z=BaseTaskChooserView.get_task_type_options.<locals>.<listcomp>c                 S   rs  rt  ru  rw  r?   r?   r@   rT    ry  z;BaseTaskChooserView.get_task_type_options.<locals>.<lambda>rz  r  r~  )rG   r[  r?   r?   r@   get_task_type_optionsu  s
   
z)BaseTaskChooserView.get_task_type_optionsc                 C   r  )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?   )rc  rq  r?   r?   r@   rO    s    zDBaseTaskChooserView.get_task_type_filter_choices.<locals>.<listcomp>c                 S   rs  )Nr   ru  rw  r?   r?   r@   rT    ry  zBBaseTaskChooserView.get_task_type_filter_choices.<locals>.<lambda>rz  r  )rG   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}|	 r*|j
d }|j|d}t|dd	}|| jjd
}||||| jdS )N)r  Trn   rp   r'  q)name__icontains
   )per_pager   )search_formrP   	all_tasksquery_stringr  )r   rc   r   r  
task_modelr   rm   order_byr	   is_searchingr   r   get_pagerf   r  )rG   r  rP   r  r  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_formadd_urlr[  )r  r  r   rc   r   	urlencoder  r   r?   r?   r@   get_create_tab_context_data  s   
z/BaseTaskChooserView.get_create_tab_context_data)r;   r<   r=   r"  r  r  r  r  r  r  r  r  rM   r?   r?   rK   r@   r  I  s    

r  c                       s,   e Zd Z fddZdd Zdd Z  ZS )TaskChooserViewc                       |   | _t |S r   r  r  rD   rf   r  rK   r?   r@   rf        
zTaskChooserView.getc                 K   s*   d| j i}||   ||   |S )Nr  )r  updater  r  r   r?   r?   r@   r     s
   z TaskChooserView.get_context_datac                 C   s$   |   }d|d< t| jdd ||dS )Nchooserr  z0wagtailadmin/workflows/task_chooser/chooser.htmlr  )r  r!   rc   )rG   rJ   
js_contextr?   r?   r@   render_to_response  s   z"TaskChooserView.render_to_response)r;   r<   r=   rf   r   r  rM   r?   r?   rK   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                    r  r   r  r  rK   r?   r@   rf     r  zTaskChooserCreateView.getc                 C   sV   |   }|s	t S ||j|jdd| _| j r"| j }t||S |  }| 	|S )Nr  r  )
r  r   r   FILESr  r   r   r  r   r  )rG   rc   r  r  rJ   r?   r?   r@   post  s   




zTaskChooserCreateView.postc                 K      |   S r   )r  rG   r   r?   r?   r@   r     r$  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.htmlreshow_create_tabr  htmlFragmentr  )r   rc   r  r!   )rG   rJ   tab_htmlr  r?   r?   r@   r    s   z(TaskChooserCreateView.render_to_response)r;   r<   r=   rf   r  r   r  rM   r?   r?   rK   r@   r    s
    r  c                   @   s   e Zd ZdZdd ZdS )TaskChooserResultsViewz9wagtailadmin/workflows/task_chooser/includes/results.htmlc                 K   r  r   )r  r  r?   r?   r@   r     r$  z'TaskChooserResultsView.get_context_dataN)r;   r<   r=   r   r   r?   r?   r?   r@   r     s    r  c                 C   s   t t|d}t| |S r2  )r   r.   r  )rc   task_idr  r?   r?   r@   r    s   
r  r   )trs   djangor   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   django.core.paginatorr   	django.dbr   django.db.modelsr   r   django.db.models.functionsr	   django.httpr
   r   django.shortcutsr   r   r   django.template.loaderr   django.urlsr   django.utils.functionalr   django.utils.httpr   django.utils.textr   django.utils.translationr   ru   r   django.views.decorators.httpr   django.views.genericr   wagtail.adminr   wagtail.admin.authr   wagtail.admin.filtersr   r   wagtail.admin.forms.workflowsr   r   r   r   r    wagtail.admin.modal_workflowr!   wagtail.admin.ui.tablesr"   r#   r$   wagtail.admin.views.genericr%   r&   r'   r(    wagtail.admin.views.generic.baser)   'wagtail.admin.views.generic.permissionsr*   !wagtail.admin.views.pages.listingr+   wagtail.coreutilsr,   wagtail.modelsr-   r.   r/   r0   r1   r2   wagtail.permissionsr3   r4   r5   wagtail.snippets.modelsr6   wagtail.workflowsr7   task_permission_checkerr9   rB   rN   rV   rw   r}   r   r   r   r  rB  rI  rJ  rK  rL  r\  r  r  r  r  r  r  r  r  r  r  r  r?   r?   r?   r@   <module>   s     	5Qw#<
7!9B#
u(