o
    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 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 d S Norder)selfr    r   Y/var/www/html/ndineBlogger/venv/lib/python3.10/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_urlr   )__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 )	PublishMenuItemPublishzaction-publishz+wagtailadmin/pages/action_menu/publish.htmluploadc                 C   s@   |d dkr|d  |d j S | |}|d  o| S )Nr   r   parent_pager   r   )r   r   can_publish_subpager   can_publishr   r   perms_testerr   r   r   r   M   s   
zPublishMenuItem.is_shownc                        t  |}|d dk|d< |S Nr   revisions_revertis_revisionsuperr)   r   r(   r   	__class__r   r   r)   X      z PublishMenuItem.get_context_data)r*   r+   r,   _r    r"   r.   r$   r   r)   __classcell__r   r   r>   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-submitresubmitc                 C   sR   t tddsdS |d dkr|d jS |d dkr'| |}| o&|d  S dS )	NWAGTAIL_WORKFLOW_ENABLEDTFr   r   r2   editr   )getattrr   has_workflowr   can_submit_for_moderationr5   r   r   r   r   c   s   

z$SubmitForModerationMenuItem.is_shownc                    s|   t  |}|d}|r|jnd }|r)|j|jkr)tdd|jjj	i |d< |S |r<|
 }|r<tdd|j	i |d< |S )Nr   zResubmit to %(task_name)s	task_namer    zSubmit to %(workflow_name)sworkflow_name)r<   r)   getcurrent_workflow_statestatusSTATUS_NEEDS_CHANGESrA   current_task_statetaskr"   get_workflow)r   r(   r   r   workflow_stateworkflowr>   r   r   r)   s   s"   


	
z,SubmitForModerationMenuItem.get_context_data)
r*   r+   r,   rA   r    r"   r$   r   r)   rB   r   r   r>   r   rC   ^   s    rC   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_modalrL   popr$   r<   r   )r   r"   r    rV   argskwargsr>   r   r   r      s   
zWorkflowMenuItem.__init__c                    s(   t  |}| j|d< |d j|d< |S )NrV   r   rP   )r<   r)   rV   current_workflow_task_stater=   r>   r   r   r)      s   
z!WorkflowMenuItem.get_context_datac                 C   s   |d dkr|d  S d S Nr   rF   r   r   r   r   r   r   r      s   
zWorkflowMenuItem.is_shown)r*   r+   r,   r.   r   r)   r   rB   r   r   r>   r   rU      s
    
rU   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   sZ   t tddsdS |d dkr+|d j}| |}| o*|d  o*|o*||d jS dS )	NrE   TFr   rF   r   r   r   )rG   r   rM   r   rI   user_can_cancelr   )r   r   rS   r6   r   r   r   r      s   

z RestartWorkflowMenuItem.is_shownN)	r*   r+   r,   rA   r    r"   r#   r$   r   r   r   r   r   r\      s    r\   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   rF   r   r   F)rM   r^   r   )r   r   rS   r   r   r   r      s   
zCancelWorkflowMenuItem.is_shownN)r*   r+   r,   rA   r    r"   r$   r   r   r   r   r   r_      s
    r_   c                   @   s,   e Zd ZedZdZdZdd Zdd ZdS )	UnpublishMenuItem	Unpublishzaction-unpublishdownloadc                 C   s,   |d dkr|  |}|d  o| S d S r[   )r   can_unpublishr5   r   r   r   r      s   
zUnpublishMenuItem.is_shownc                 C   s   t d|d jfdS )Nzwagtailadmin_pages:unpublishr   )rX   )r   idr   r   r   r   r&      s   zUnpublishMenuItem.get_urlN)	r*   r+   r,   rA   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 fddZ  ZS )SaveDraftMenuItemzaction-save-draftz
Save Draftz.wagtailadmin/pages/action_menu/save_draft.htmlc                    r7   r8   r;   r=   r>   r   r   r)      r@   z"SaveDraftMenuItem.get_context_data)	r*   r+   r,   r"   rA   r    r.   r)   rB   r   r   r>   r   rf      s
    rf   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                    r7   r8   r;   r=   r>   r   r   r)      r@   z#PageLockedMenuItem.get_context_data)
r*   r+   r,   r"   rA   r    r.   r   r)   rB   r   r   r>   r   rg      s    rg   Nc               	   C   sl   t du r4t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 ]} |  }|r3t 
| q't 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'  register_page_action_menu_item)BASE_PAGE_ACTION_MENU_ITEMSrf   ra   r/   r_   r\   rC   rg   r   	get_hooksappend)hookaction_menu_itemr   r   r    _get_base_page_action_menu_items   s   	
rs   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   sj  || _ || _|| jd< | jd}|r|| j j| jd< g | _|rq|j}|j}|o,|j}|rq|	||j}g }|D ]0\}	}
}d}|	dkrW|rUt
tddsUtdd	|
i }
d
}t|	|
||d}|| jrj|| q:| j| t D ]}|| jr| j| qt| jjdd d tdD ]}|| j| j | j qz
| jd| _W d S  ty   d | _Y d S w )Nr   r   r   rF   approve+WAGTAIL_WORKFLOW_REQUIRE_REAPPROVAL_ON_EDITFz%(label)s and Publishr    success)r$   c                 S   s   | j S r   r   )itemr   r   r   <lambda>5  s    z)PageActionMenu.__init__.<locals>.<lambda>)keyconstruct_page_action_menur   )r   r   rL   r   r   
menu_itemscurrent_workflow_taskrM   is_at_final_taskget_actionsrG   r   rA   rU   r   rp   extendrs   sortr   ro   rW   default_item
IndexError)r   r   rY   r   rQ   rM   is_final_taskactionsworkflow_menu_itemsr"   r    rV   r$   rx   	menu_itemrq   r   r   r   r   	  s\   



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   ).0r   r   r   r   
<listcomp>C  s    z.PageActionMenu.render_html.<locals>.<listcomp>)default_menu_item	show_menurendered_menu_items)r   )r   r|   r   r   r   templateboolr   )r   r   rendered_default_itemr   r   r   r   ?  s   
zPageActionMenu.render_htmlc                 C   s.   | j r| j jnt }| jD ]}||j7 }q|S r   )r   mediar   r|   )r   r   rx   r   r   r   r   S  s   
zPageActionMenu.mediaN)r*   r+   r,   r   r   r   r   r   r   r   r   r   rt     s    6rt   )r-   django.confr   django.formsr   django.template.loaderr   django.urlsr   django.utils.functionalr   django.utils.translationr   rA   wagtailr   wagtail.admin.ui.componentsr	   r
   r/   rC   rU   r\   r_   ra   rf   rg   rn   rs   rt   r   r   r   r   <module>   s*    :)