U
    {h$                     @   s   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 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 G dd deeZG dd deZG dd deZG dd deeZ G dd deeZ!dS )    )settings)quote)PermissionDenied)get_object_or_404redirect)reverse)gettext)View)messagesrender_modal_workflow)get_latest_strget_valid_next_url_from_request)BaseObjectMixin)Task	TaskStateWorkflowStatec                       s   e Zd ZdZdZd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 fddZdd Zdd Zdd Zdd Zdd Z  ZS )BaseWorkflowFormViewz|
    Shared functionality for views that need to render the modal form to collect extra details
    for a workflow task
    Nz.wagtailadmin/shared/workflow_action_modal.htmlc                   sL   t  j|f|| || _|| _|  | _|  | _|  | _	| 
 | _d S N)supersetupaction_nametask_state_idget_redirect_urlredirect_urlget_task_state
task_stateget_tasktaskget_form_class
form_class)selfrequestr   r   argskwargs	__class__ l/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/views/generic/workflow.pyr      s    


zBaseWorkflowFormView.setupc                 C   s*   t | j}|r|S t| jt| jjfdS N)r#   )r   r"   r   redirect_url_namer   objectpk)r!   Znext_urlr'   r'   r(   r   #   s    
z%BaseWorkflowFormView.get_redirect_urlc                 C   s   t t| jdjS N)id)r   r   r   specificr!   r'   r'   r(   r   )   s    z#BaseWorkflowFormView.get_task_statec                 C   s
   | j jjS r   )r   r   r/   r0   r'   r'   r(   r   ,   s    zBaseWorkflowFormView.get_taskc                 C   s   | j | jS r   )r   Zget_form_for_actionr   r0   r'   r'   r(   r   /   s    z#BaseWorkflowFormView.get_form_classc                 C   s,   t | jtd| jjjt| jd  d S )NzDThe %(model_name)s '%(title)s' is not currently awaiting moderation.)
model_nametitle)	r
   errorr"   _model_metaverbose_namer   r+   r0   r'   r'   r(   add_not_in_moderation_error2   s    z0BaseWorkflowFormView.add_not_in_moderation_errorc                 C   s^   | j | j| jj}d| _d}d| _|D ](\}}}|| jkr(d}|r(d| _|| _q(|sZtd S )N FT)	r   get_actionsr+   r"   useraction_verbose_nameaction_modalr   r   )r!   actionsZaction_availablenamer7   Zmodalr'   r'   r(   check_action<   s    
z!BaseWorkflowFormView.check_actionc                    s6   | j js|   t| jS |   t j|f||S r   )r+   Zworkflow_in_progressr8   r   r   r@   r   dispatchr!   r"   r#   r$   r%   r'   r(   rA   M   s
    
zBaseWorkflowFormView.dispatchc                 O   s   |  ||  S r   )render_modal_formr    rB   r'   r'   r(   getT   s    zBaseWorkflowFormView.getc                 C   s"   t | jt| jj| j| jjfdS r)   )r   submit_url_namer   r+   r,   r   r   r.   r0   r'   r'   r(   get_submit_urlW   s    z#BaseWorkflowFormView.get_submit_urlc                 K   s    | j | j| j| j|  d|S )N)r+   actionZaction_verboser   Z
submit_url)r+   r   r<   r   rF   r!   r$   r'   r'   r(   get_context_data]   s    z%BaseWorkflowFormView.get_context_datac                 C   s    t || jd | j|dddidS )N)formsteprG   	json_data)r   template_namerI   )r!   r"   rJ   r'   r'   r(   rC   g   s    
z&BaseWorkflowFormView.render_modal_formc                 C   s   t |dd i |dS )Nr9   rL   r   )r!   r"   rM   r'   r'   r(   render_modal_jsonp   s    z&BaseWorkflowFormView.render_modal_json)__name__
__module____qualname____doc__r*   rE   rN   r   r   r   r   r   r8   r@   rA   rD   rF   rI   rC   rO   __classcell__r'   r'   r%   r(   r      s"   	

	r   c                   @   s   e Zd ZdZdd ZdS )WorkflowActionzProvides a modal view to enter additional data for the specified workflow action on GET,
    or perform the specified action on POSTc                 O   s   | j rl|  | jj}| rD| jj| j| jj| jf|j	p>| j
| _
q| jr| jjddkr| | j|S n | j| j| jj| jp| j
| _
| jjddkr| | jd| j
dS t| j
S )Nx-requested-withXMLHttpRequestsuccess)rK   r   )r    r"   POSTis_validr   Z	on_actionr   r;   r   cleaned_datar   r=   headersrD   rC   rO   r   r!   r"   r#   r$   rJ   r'   r'   r(   postx   s<    
  
zWorkflowAction.postNrP   rQ   rR   rS   r^   r'   r'   r'   r(   rU   t   s   rU   c                   @   s   e Zd ZdZdd ZdS )CollectWorkflowActionDataa\  
    On GET, provides a modal view to enter additional data for the specified workflow action;
    on POST, return the validated form data back to the modal's caller via a JSON response, so that
    the calling view can subsequently perform the action as part of its own processing
    (for example, approving moderation while making an edit).
    c                 O   sT   |  |j}| r(| |d|jdS | jrJ|jddkrJ| ||S t	| j
S )NrX   )rK   r[   rV   rW   )r    rY   rZ   rO   r[   r=   r\   rD   rC   r   r   r]   r'   r'   r(   r^      s    
zCollectWorkflowActionData.postNr_   r'   r'   r'   r(   r`      s   r`   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )ConfirmWorkflowCancellationz7wagtailadmin/generic/confirm_workflow_cancellation.htmlc                    s"   t  j|f|| | jj| _d S r   )r   r   r+   Zcurrent_workflow_stateworkflow_staterB   r%   r'   r(   r      s    z!ConfirmWorkflowCancellation.setupc                 O   sD   | j rttdds(t|dd i ddidS t|| jd |  ddidS )NZ"WAGTAIL_WORKFLOW_CANCEL_ON_PUBLISHTr9   rK   Zno_confirmation_neededrL   Zconfirm)rb   getattrr   r   rN   rI   rB   r'   r'   r(   rA      s&      z$ConfirmWorkflowCancellation.dispatchc                 K   s,   | j jtjk| j jjj| j jj| jd|S )N)Zneeds_changesr   workflow
model_opts)	rb   statusr   ZSTATUS_NEEDS_CHANGESZcurrent_task_stater   r?   rd   re   rH   r'   r'   r(   rI      s    
z,ConfirmWorkflowCancellation.get_context_data)rP   rQ   rR   rN   r   rA   rI   rT   r'   r'   r%   r(   ra      s   ra   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )PreviewRevisionForTaskc                   s2   t  j|f|| || _|  | _|  | _d S r   )r   r   task_idr   r   r   r   )r!   r"   rh   r#   r$   r%   r'   r(   r      s    
zPreviewRevisionForTask.setupc                 C   s   t t| jdjS r-   )r   r   rh   r/   r0   r'   r'   r(   r      s    zPreviewRevisionForTask.get_taskc                 C   s$   t jj| j | j| jt jd S )N)Zrevision__base_content_typeZrevision__object_idr   rf   )	r   objectsfilterr+   Zget_base_content_typer,   r   ZSTATUS_IN_PROGRESSfirstr0   r'   r'   r(   r      s    z%PreviewRevisionForTask.get_task_statec                 C   s2   t | jtd| jjjt| j| j	j
d  d S )Nz\The %(model_name)s '%(title)s' is not currently awaiting moderation in task '%(task_name)s'.)r1   r2   Z	task_name)r
   r3   r"   r4   r5   r6   r7   r   r+   r   r?   r0   r'   r'   r(   add_error_message   s    z(PreviewRevisionForTask.add_error_messagec                 O   sT   | j s|   tdS | j| j|js,t| j j}|	 }|j
||jd|jidS )NZwagtailadmin_homeZrevision_id)Zextra_request_attrs)r   rl   r   r   r:   r+   r;   r   revisionZ	as_objectZmake_preview_requestZdefault_preview_moder.   )r!   r"   r#   r$   rm   Zobject_to_viewr'   r'   r(   rD      s    zPreviewRevisionForTask.get)	rP   rQ   rR   r   r   r   rl   rD   rT   r'   r'   r%   r(   rg      s
   rg   N)"Zdjango.confr   Zdjango.contrib.admin.utilsr   Zdjango.core.exceptionsr   Zdjango.shortcutsr   r   Zdjango.urlsr   Zdjango.utils.translationr   r4   Zdjango.viewsr	   Zwagtail.adminr
   Zwagtail.admin.modal_workflowr   Zwagtail.admin.utilsr   r   Z wagtail.admin.views.generic.baser   Zwagtail.modelsr   r   r   r   rU   r`   ra   rg   r'   r'   r'   r(   <module>   s    d'&