U
    |h.                     @   s`  d 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mZ ddlmZ G dd deZG dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#G dd deZ$G d d! d!eZ%ed"d#d$d% Z&G d&d' d'Z'd"S )(zXHandles rendering of the list of actions in the footer of the snippet create/edit views.    )	lru_cache)settings)quote)Media)render_to_string)reverse)cached_property)gettext_lazy)hooks)	Component)DraftStateMixinLockableMixinWorkflowMixin)get_permission_namec                   @   sJ   e Zd ZdZdZdZdZdZdZdZ	dddZ
dd	 Zd
d Zdd ZdS )ActionMenuItemzHDefines an item in the actions drop-up on the snippet creation/edit viewd   z3wagtailsnippets/snippets/action_menu/menu_item.html Nc                 C   s   |d k	r|| _ d S Norder)selfr    r   d/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/snippets/action_menu.py__init__   s    zActionMenuItem.__init__c                 C   s   | d S )a~  
        Whether this action should be shown on this request; permission checks etc should go here.

        request = the current request object

        context = dictionary containing at least:
            'view' = 'create' or 'edit'
            'model' = the model of the snippet being created/edited
            'instance' (if view = 'edit') = the snippet being edited
        locked_for_usergetr   contextr   r   r   is_shown!   s    zActionMenuItem.is_shownc              
   C   sD   |  }| |}|| j|| j| j| j|d |d dkd |S )z>Defines context for the template, overridable to use more datarequestviewZrevisions_revert)labelurlname	classname	icon_namer    Zis_revision)copyget_urlupdater"   r$   r%   r&   )r   parent_contextr   r#   r   r   r   get_context_data.   s    

zActionMenuItem.get_context_datac                 C   s   d S r   r   )r   r*   r   r   r   r(   @   s    zActionMenuItem.get_url)N)__name__
__module____qualname____doc__r   template_namer"   r$   r%   r&   r   r   r+   r(   r   r   r   r   r      s   
r   c                   @   s(   e Zd ZdZedZdZdZdd ZdS )PublishMenuItemzaction-publishZPublishuploadz1wagtailsnippets/snippets/action_menu/publish.htmlc                 C   s*   t d|d }|d j|o(|d S )Npublishmodelr    r   r   userhas_permr   r   r   Zpublish_permissionr   r   r   r   J   s    zPublishMenuItem.is_shownN)	r,   r-   r.   r$   _r"   r&   r0   r   r   r   r   r   r1   D   s
   r1   c                       s4   e Zd ZdZedZdZdd Z fddZ  Z	S )SubmitForModerationMenuItemzaction-submitzSubmit for moderationZresubmitc                 C   s\   t tddsdS |drdS |d dkr:|d  d k	S |d dkoZ|d	 joZ|d	 j S )
NWAGTAIL_WORKFLOW_ENABLEDTFr   r!   creater4   editinstance)getattrr   r   get_default_workflowhas_workflowworkflow_in_progressr   r   r   r   r   V   s    

z$SubmitForModerationMenuItem.is_shownc                    s   t  |}|d}|r |jnd }|rP|j|jkrPtdd|jjj	i |d< n4|r^|
 }n|d  }|rtdd|j	i |d< |S )Nr>   zResubmit to %(task_name)sZ	task_namer"   r4   zSubmit to %(workflow_name)sZworkflow_name)superr+   r   current_workflow_statestatusZSTATUS_NEEDS_CHANGESr9   Zcurrent_task_statetaskr$   Zget_workflowr@   )r   r*   r   r>   workflow_stateZworkflow	__class__r   r   r+   f   s(    

 
 
z,SubmitForModerationMenuItem.get_context_data)
r,   r-   r.   r$   r9   r"   r&   r   r+   __classcell__r   r   rH   r   r:   Q   s
   r:   c                       s<   e Zd ZdZ fddZ fddZdd Zdd	 Z  ZS )
WorkflowMenuItemz<wagtailsnippets/snippets/action_menu/workflow_menu_item.htmlc                    s:   || _ || _|| _|dr(|d| _t j|| d S )Nr&   )r$   r"   launch_modalr   popr&   rC   r   )r   r$   r"   rL   argskwargsrH   r   r   r      s    
zWorkflowMenuItem.__init__c                    s   t  |}| j|d< |S )NrL   )rC   r+   rL   )r   r*   r   rH   r   r   r+      s    
z!WorkflowMenuItem.get_context_datac                 C   s   |d dko| d S )Nr!   r=   r   r   r   r   r   r   r      s    zWorkflowMenuItem.is_shownc                 C   s2   |d }|j d}t|t|j| j|jjfdS )Nr>   Zcollect_workflow_action_datarN   )snippet_viewsetget_url_namer   r   pkr$   Zcurrent_workflow_task_state)r   r*   r>   url_namer   r   r   r(      s    zWorkflowMenuItem.get_url)	r,   r-   r.   r0   r   r+   r   r(   rJ   r   r   rH   r   rK      s
   
rK   c                   @   s(   e Zd ZedZdZdZdZdd ZdS )RestartWorkflowMenuItemzRestart workflow zaction-restart-workflowzbutton--icon-flippedloginc                 C   s`   t tddsdS |d dkr dS |d j}|d o^|d jo^|d j o^|o^||d jS )	Nr;   TFr!   r=   r>   r   r    )r?   r   rD   r   rA   rB   user_can_cancelr6   r   r   rG   r   r   r   r      s    

z RestartWorkflowMenuItem.is_shownN)	r,   r-   r.   r9   r"   r$   r%   r&   r   r   r   r   r   rU      s
   rU   c                   @   s$   e Zd ZedZdZdZdd ZdS )CancelWorkflowMenuItemzCancel workflow zaction-cancel-workflowerrorc                 C   s.   |d dkrdS |d j }|o,||d jS )Nr!   r=   Fr>   r    )rD   rW   r6   rX   r   r   r   r      s    
zCancelWorkflowMenuItem.is_shownN)r,   r-   r.   r9   r"   r$   r&   r   r   r   r   r   rY      s   rY   c                   @   s0   e Zd ZedZdZdZdZdd Zdd Z	d	S )
UnpublishMenuItemZ	Unpublishzaction-unpublishdownloadaction-secondaryc                 C   sF   | drdS |d dkrB|d jrBtd|d }|d j|S dS )	Nr   Fr!   r=   r>   r3   r4   r    )r   liver   r6   r7   r8   r   r   r   r      s    
zUnpublishMenuItem.is_shownc                 C   s(   |d }|j d}t|t|jgdS )Nr>   Z	unpublishrP   rQ   rR   r   r   rS   r   r   r>   rT   r   r   r   r(      s    zUnpublishMenuItem.get_urlN)
r,   r-   r.   r9   r"   r$   r&   r%   r   r(   r   r   r   r   r[      s   r[   c                   @   s0   e Zd ZdZedZdZdZdd Zdd Z	d	S )
DeleteMenuItemzaction-deleteDeletebinr]   c                 C   s6   t d|d }|d dko4|d j|o4|d S )Ndeleter4   r!   r=   r    r   r5   )r   r   Zdelete_permissionr   r   r   r      s    
zDeleteMenuItem.is_shownc                 C   s(   |d }|j d}t|t|jgdS )Nr>   rd   rP   r_   r`   r   r   r   r(      s    zDeleteMenuItem.get_urlN)
r,   r-   r.   r$   r9   r"   r&   r%   r   r(   r   r   r   r   ra      s   	ra   c                   @   s    e Zd ZdZedZdZdZdS )SaveMenuItemzaction-saveZSaver\   z.wagtailsnippets/snippets/action_menu/save.htmlN)r,   r-   r.   r$   r9   r"   r&   r0   r   r   r   r   re      s   re   c                   @   s$   e Zd ZdZedZdZdd ZdS )LockedMenuItemzaction-lockedLockedz0wagtailsnippets/snippets/action_menu/locked.htmlc                 C   s
   | dS )Nr   r   r   r   r   r   r      s    zLockedMenuItem.is_shownN)r,   r-   r.   r$   r9   r"   r0   r   r   r   r   r   rf      s   rf   N)maxsizec                 C   s   t ddtddg}t| tr6|tddtddg7 }t| tr`|tddtddt	ddg7 }t| t
rz|td	d td
D ]}|| }|r|| q|S )z
    Retrieve the global list of menu items for the snippet action menu,
    which may then be customised on a per-request basis
    r   r   
         (   2   <   i'  Z!register_snippet_action_menu_item)re   ra   
issubclassr   r[   r1   r   rY   rU   r:   r   appendrf   r
   	get_hooks)r4   
menu_itemshookZaction_menu_itemr   r   r   "get_base_snippet_action_menu_items   s*    


rt   c                   @   s,   e Zd ZdZdd Zdd Zedd ZdS )	SnippetActionMenuz.wagtailsnippets/snippets/action_menu/menu.htmlc                    sv  | _ | _| jd<  jd}|r4t| jd< t jd t jd<  fddt jd D  _|rt|t	r|j
}|j}|o|j}|r|||j}|D ]b\}}	}
d}|dkr|rttd	d
stdd|	i }	d}t||	|
|d}| jr j| q jjdd d tdD ]}| j j  j q(z jd _W n tk
rp   d  _Y nX d S )Nr    r>   r4   Zdraftstate_enabledc                    s   g | ]}|  jr|qS r   )r   r   .0Z	menu_itemr   r   r   
<listcomp>-  s   z.SnippetActionMenu.__init__.<locals>.<listcomp>r=   ZapproveZ+WAGTAIL_WORKFLOW_REQUIRE_REAPPROVAL_ON_EDITFz%(label)s and Publishr"   success)r&   c                 S   s   | j S r   r   )itemr   r   r   <lambda>M      z,SnippetActionMenu.__init__.<locals>.<lambda>)keyZconstruct_snippet_action_menur   )r    r   r   typero   r   rt   rr   
isinstancer   Zcurrent_workflow_taskrD   Zis_at_final_taskZget_actionsr6   r?   r   r9   rK   r   rp   sortr
   rq   rM   default_item
IndexError)r   r    rO   r>   rF   rD   Zis_final_taskactionsr$   r"   rL   r&   r{   rs   r   rx   r   r      sZ    
 

   zSnippetActionMenu.__init__c                    sB    fdd j D } j j}t j|t j |d jdS )Nc                    s   g | ]}|  jqS r   )render_htmlr   rv   rx   r   r   ry   X  s    z1SnippetActionMenu.render_html.<locals>.<listcomp>)Zdefault_menu_itemZ	show_menurendered_menu_items)r    )rr   r   r   r   r   templateboolr    )r   r   Zrendered_default_itemr   rx   r   r   W  s    
zSnippetActionMenu.render_htmlc                 C   s    t  }| jD ]}||j7 }q|S r   )r   rr   media)r   r   r{   r   r   r   r   g  s    
zSnippetActionMenu.mediaN)r,   r-   r.   r   r   r   r   r   r   r   r   r   ru     s
   7ru   )(r/   	functoolsr   Zdjango.confr   Zdjango.contrib.admin.utilsr   Zdjango.formsr   Zdjango.template.loaderr   Zdjango.urlsr   Zdjango.utils.functionalr   Zdjango.utils.translationr	   r9   Zwagtailr
   Zwagtail.admin.ui.componentsr   Zwagtail.modelsr   r   r   Zwagtail.snippets.permissionsr   r   r1   r:   rK   rU   rY   r[   ra   re   rf   rt   ru   r   r   r   r   <module>   s2   2."	
