a
    Dg</                     @   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 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dadd ZG dd  d ZdS )!zUHandles rendering of the list of actions in the footer of the page create/edit views.    )settings)Media)render_to_string)reverse)cached_property)gettext_lazy)hooks)	Componentc                   @   sR   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d ZdS )ActionMenuItemzEDefines an item in the actions drop-up on the page creation/edit viewd   z-wagtailadmin/pages/action_menu/menu_item.html Nc                 C   s   |d ur|| _ d S Norder)selfr    r   X/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/action_menu.py__init__   s    zActionMenuItem.__init__c                 C   s$   d|v r|d S |d  |d jS )Nuser_page_permissions_testerpagerequest)permissions_for_useruserr   contextr   r   r    get_user_page_permissions_tester   s    z/ActionMenuItem.get_user_page_permissions_testerc                 C   s   |d dkp|d  S )a9  
        Whether this action should be shown on this request; permission checks etc should go here.
        By default, actions are shown for unlocked pages, hidden for locked pages

        context = dictionary containing at least:
            'request' = the current request object
            'view' = 'create', 'edit' or 'revisions_revert'
            'page' (if view = 'edit' or 'revisions_revert') = the page being edited
            'parent_page' (if view = 'create') = the parent page of the page being created
            'lock' = a Lock object if the page is locked, otherwise None
            'locked_for_user' = True if the lock prevents the current user from editing the page
            may also contain:
            'user_page_permissions_tester' = a PagePermissionTester for the current user and page
        viewcreatelocked_for_userr   r   r   r   r   is_shown!   s    zActionMenuItem.is_shownc              	   C   s:   |  }| |}|| j|| j| j| j|d d |S )z>Defines context for the template, overridable to use more datar   )labelurlname	classname	icon_namer   )copyget_urlupdater    r"   r#   r$   )r   parent_contextr   r!   r   r   r   get_context_data2   s    

zActionMenuItem.get_context_datac                 C   s   d S r   r   )r   r(   r   r   r   r&   C   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   r
      s   
r
   c                       s8   e Zd ZedZdZdZdZdd Z fddZ	  Z
S )	PublishMenuItemZPublishzaction-publishz+wagtailadmin/pages/action_menu/publish.htmluploadc                 C   sD   |d dkr$|d  |d j S | |}|d  o>| S d S )Nr   r   parent_pager   r   )r   r   Zcan_publish_subpager   Zcan_publishr   r   perms_testerr   r   r   r   M   s    
zPublishMenuItem.is_shownc                    s    t  |}|d dk|d< |S Nr   Zrevisions_revertZis_revisionsuperr)   r   r(   r   	__class__r   r   r)   X   s    z PublishMenuItem.get_context_data)r*   r+   r,   _r    r"   r.   r$   r   r)   __classcell__r   r   r8   r   r/   G   s   r/   c                       s4   e Zd ZedZdZdZdd Z fddZ  Z	S )SubmitForModerationMenuItemzSubmit for moderationzaction-submitZresubmitc                 C   sR   t tddsdS |d dkr&|d jS |d dkrN| |}| oL|d  S dS )	NWAGTAIL_WORKFLOW_ENABLEDTFr   r   r1   editr   )getattrr   Zhas_workflowr   can_submit_for_moderationr2   r   r   r   r   c   s    

z$SubmitForModerationMenuItem.is_shownc                    sz   t  |}|d}|r |jnd }|rP|j|jkrPtdd|jjj	i |d< n&|rv|
 }|rvtdd|j	i |d< |S )Nr   zResubmit to %(task_name)sZ	task_namer    zSubmit to %(workflow_name)sZworkflow_name)r6   r)   getcurrent_workflow_statestatusZSTATUS_NEEDS_CHANGESr:   current_task_statetaskr"   Zget_workflow)r   r(   r   r   workflow_stateZworkflowr8   r   r   r)   s   s"    



z,SubmitForModerationMenuItem.get_context_data)
r*   r+   r,   r:   r    r"   r$   r   r)   r;   r   r   r8   r   r<   ^   s
   r<   c                       s4   e Zd ZdZ fddZ fddZdd Z  ZS )WorkflowMenuItemz6wagtailadmin/pages/action_menu/workflow_menu_item.htmlc                    s>   || _ || _|| _|dr(|d| _t j|i | d S )Nr$   )r"   r    launch_modalrA   popr$   r6   r   )r   r"   r    rH   argskwargsr8   r   r   r      s    
zWorkflowMenuItem.__init__c                    s(   t  |}| j|d< |d j|d< |S )NrH   r   rD   )r6   r)   rH   Zcurrent_workflow_task_stater7   r8   r   r   r)      s    
z!WorkflowMenuItem.get_context_datac                 C   s   |d dkr|d  S d S Nr   r>   r   r   r   r   r   r   r      s    zWorkflowMenuItem.is_shown)r*   r+   r,   r.   r   r)   r   r;   r   r   r8   r   rG      s   
rG   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rV|d j}| |}| oT|d  oT|oT||d jS dS d S )	Nr=   TFr   r>   r   r   r   )r?   r   rB   r   r@   user_can_cancelr   )r   r   rF   r3   r   r   r   r      s    

z RestartWorkflowMenuItem.is_shownN)	r*   r+   r,   r:   r    r"   r#   r$   r   r   r   r   r   rM      s
   rM   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 j }|o(||d jS dS )Nr   r>   r   r   F)rB   rO   r   )r   r   rF   r   r   r   r      s    
zCancelWorkflowMenuItem.is_shownN)r*   r+   r,   r:   r    r"   r$   r   r   r   r   r   rP      s   rP   c                   @   s,   e Zd ZedZdZdZdd Zdd ZdS )	UnpublishMenuItemZ	Unpublishzaction-unpublishdownloadc                 C   s,   |d dkr(|  |}|d  o&| S d S rL   )r   Zcan_unpublishr2   r   r   r   r      s    
zUnpublishMenuItem.is_shownc                 C   s   t d|d jfdS )Nzwagtailadmin_pages:unpublishr   )rJ   )r   idr   r   r   r   r&      s    zUnpublishMenuItem.get_urlN)	r*   r+   r,   r:   r    r"   r$   r   r&   r   r   r   r   rR      s
   rR   c                       s,   e Zd ZdZedZdZ fddZ  ZS )SaveDraftMenuItemzaction-save-draftz
Save Draftz.wagtailadmin/pages/action_menu/save_draft.htmlc                    s    t  |}|d dk|d< |S r4   r5   r7   r8   r   r   r)      s    z"SaveDraftMenuItem.get_context_data)	r*   r+   r,   r"   r:   r    r.   r)   r;   r   r   r8   r   rU      s   rU   c                       s4   e Zd ZdZedZdZdd Z fddZ  Z	S )PageLockedMenuItemzaction-page-lockedzPage lockedz/wagtailadmin/pages/action_menu/page_locked.htmlc                 C   s   d|v o|d S )Nr   r   r   r   r   r   r   r      s    zPageLockedMenuItem.is_shownc                    s    t  |}|d dk|d< |S r4   r5   r7   r8   r   r   r)      s    z#PageLockedMenuItem.get_context_data)
r*   r+   r,   r"   r:   r    r.   r   r)   r;   r   r   r8   r   rV      s
   rV   Nc               	   C   sl   t du rhtddtddtddtddtddtddtd	dga t	d
D ]} |  }|rNt 
| qNt S )z
    Retrieve the global list of menu items for the page action menu,
    which may then be customized on a per-request basis
    Nr   r         (   2   <   i'  Zregister_page_action_menu_item)BASE_PAGE_ACTION_MENU_ITEMSrU   rR   r/   rP   rM   r<   rV   r   	get_hooksappend)hookZaction_menu_itemr   r   r    _get_base_page_action_menu_items   s    	r`   c                   @   s,   e Zd ZdZdd Zdd Zedd ZdS )	PageActionMenuz(wagtailadmin/pages/action_menu/menu.htmlc                 K   sn  || _ || _|| jd< | jd}|r:|| j j| jd< g | _|r|j}|j}|oX|j}|r|	||j}g }|D ]`\}	}
}d}|	dkr|rt
tddstdd	|
i }
d
}t|	|
||d}|| jrt|| qt| j| t D ]}|| jr| j| q| jjdd d tdD ]}|| j| j | j q"z| jd| _W n tyh   d | _Y n0 d S )Nr   r   r   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>5      z)PageActionMenu.__init__.<locals>.<lambda>)keyZconstruct_page_action_menur   )r   r   rA   r   r   
menu_itemsZcurrent_workflow_taskrB   Zis_at_final_taskZget_actionsr?   r   r:   rG   r   r^   extendr`   sortr   r]   rI   default_item
IndexError)r   r   rK   r   rE   rB   Zis_final_taskactionsZworkflow_menu_itemsr"   r    rH   r$   rc   	menu_itemr_   r   r   r   r   	  sV    


zPageActionMenu.__init__c                    sL    j s
dS  fdd jD } j  j}t j|t j|d jdS )Nr   c                    s   g | ]}|  jqS r   )render_htmlr   ).0rm   r   r   r   
<listcomp>C  s   z.PageActionMenu.render_html.<locals>.<listcomp>)Zdefault_menu_itemZ	show_menurendered_menu_items)r   )rj   rg   rn   r   r   templateboolr   )r   rr   Zrendered_default_itemr   rp   r   rn   ?  s    
zPageActionMenu.render_htmlc                 C   s.   | j r| j jnt }| jD ]}||j7 }q|S r   )rj   mediar   rg   )r   ru   rc   r   r   r   ru   S  s    
zPageActionMenu.mediaN)r*   r+   r,   rs   r   rn   r   ru   r   r   r   r   ra     s
   6ra   )r-   Zdjango.confr   Zdjango.formsr   Zdjango.template.loaderr   Zdjango.urlsr   Zdjango.utils.functionalr   Zdjango.utils.translationr   r:   Zwagtailr   Zwagtail.admin.ui.componentsr	   r
   r/   r<   rG   rM   rP   rR   rU   rV   r\   r`   ra   r   r   r   r   <module>   s(   :)