o
    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                   sR   t  j|g|R i | || _|| _|  | _|  | _|  | _	| 
 | _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__ d/var/www/html/ndineBlogger/venv/lib/python3.10/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!   next_urlr'   r'   r(   r   #   s   
z%BaseWorkflowFormView.get_redirect_urlc                 C      t t| jdjS N)id)r   r   r   specificr!   r'   r'   r(   r   )      z#BaseWorkflowFormView.get_task_statec                 C   s
   | j jjS r   )r   r   r1   r2   r'   r'   r(   r   ,   s   
zBaseWorkflowFormView.get_taskc                 C   s   | j | jS r   )r   get_form_for_actionr   r2   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+   r2   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|s-td S )N FT)	r   get_actionsr+   r"   useraction_verbose_nameaction_modalr   r   )r!   actionsaction_availablenamer;   modalr'   r'   r(   check_action<   s   
z!BaseWorkflowFormView.check_actionc                    s<   | j js|   t| jS |   t j|g|R i |S r   )r+   workflow_in_progressr<   r   r   rF   r   dispatchr!   r"   r#   r$   r%   r'   r(   rH   M   s
   
zBaseWorkflowFormView.dispatchc                 O   s   |  ||  S r   )render_modal_formr    rI   r'   r'   r(   getT   r3   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   r0   r2   r'   r'   r(   get_submit_urlW   s   z#BaseWorkflowFormView.get_submit_urlc                 K   s    | j | j| j| j|  d|S )N)r+   actionaction_verboser   
submit_url)r+   r   r@   r   rM   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steprN   	json_data)r   template_namerR   )r!   r"   rS   r'   r'   r(   rJ   g   s   
z&BaseWorkflowFormView.render_modal_formc                 C   s   t |dd i |dS )Nr=   rU   r   )r!   r"   rV   r'   r'   r(   render_modal_jsonp   s   z&BaseWorkflowFormView.render_modal_json)__name__
__module____qualname____doc__r*   rL   rW   r   r   r   r   r   r<   rF   rH   rK   rM   rR   rJ   rX   __classcell__r'   r'   r%   r(   r      s$    	

	r   c                   @      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 r8|  | jj}| r$| jj| j| jj| jfi |j	p!| j
| _
n$| jr7| jjddkr7| | j|S n| j| j| jj| jpF| j
| _
| jjddkr\| | jd| j
dS t| j
S )Nx-requested-withXMLHttpRequestsuccess)rT   r   )r    r"   POSTis_validr   	on_actionr   r?   r   cleaned_datar   rA   headersrK   rJ   rX   r   r!   r"   r#   r$   rS   r'   r'   r(   postx   s8   


zWorkflowAction.postNrY   rZ   r[   r\   ri   r'   r'   r'   r(   r_   t   s    r_   c                   @   r^   )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r%|jddkr%| ||S t	| j
S )Nrb   )rT   rf   r`   ra   )r    rc   rd   rX   rf   rA   rg   rK   rJ   r   r   rh   r'   r'   r(   ri      s   

zCollectWorkflowActionData.postNrj   r'   r'   r'   r(   rk      s    rk   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|g|R i | | jj| _d S r   )r   r   r+   current_workflow_stateworkflow_staterI   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 )N"WAGTAIL_WORKFLOW_CANCEL_ON_PUBLISHTr=   rT   no_confirmation_neededrU   confirm)rn   getattrr   r   rW   rR   rI   r'   r'   r(   rH      s"   z$ConfirmWorkflowCancellation.dispatchc                 K   s,   | j jtjk| j jjj| j jj| jd|S )N)needs_changesr   workflow
model_opts)	rn   statusr   STATUS_NEEDS_CHANGEScurrent_task_stater   rD   rt   ru   rQ   r'   r'   r(   rR      s   
z,ConfirmWorkflowCancellation.get_context_data)rY   rZ   r[   rW   r   rH   rR   r]   r'   r'   r%   r(   rl      s
    rl   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                   s8   t  j|g|R i | || _|  | _|  | _d S r   )r   r   task_idr   r   r   r   )r!   r"   rz   r#   r$   r%   r'   r(   r      s   
zPreviewRevisionForTask.setupc                 C   r.   r/   )r   r   rz   r1   r2   r'   r'   r(   r      r3   zPreviewRevisionForTask.get_taskc                 C   s$   t jj| j | j| jt jd S )N)revision__base_content_typerevision__object_idr   rv   )	r   objectsfilterr+   get_base_content_typer,   r   STATUS_IN_PROGRESSfirstr2   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'.)r5   r6   	task_name)r
   r7   r"   r8   r9   r:   r;   r   r+   r   rD   r2   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 )Nwagtailadmin_homerevision_id)extra_request_attrs)r   r   r   r   r>   r+   r?   r   revision	as_objectmake_preview_requestdefault_preview_moder0   )r!   r"   r#   r$   r   object_to_viewr'   r'   r(   rK      s   zPreviewRevisionForTask.get)	rY   rZ   r[   r   r   r   r   rK   r]   r'   r'   r%   r(   ry      s    ry   N)"django.confr   django.contrib.admin.utilsr   django.core.exceptionsr   django.shortcutsr   r   django.urlsr   django.utils.translationr   r8   django.viewsr	   wagtail.adminr
   wagtail.admin.modal_workflowr   wagtail.admin.utilsr   r    wagtail.admin.views.generic.baser   wagtail.modelsr   r   r   r   r_   rk   rl   ry   r'   r'   r'   r(   <module>   s"    d'&