a
    DgN\                     @   s  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 d dlmZ d dlmZ d dlmZ d dlmZmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z% erd dl&m'Z' dd Z(e)ddd Z*e)ddd Z+e,eddrJe)ddd Z-e)dd d! Z.e)d"d#d$ Z/e)d%d&d' Z0e)d%d(d) Z1ej)d*d d+ed,d-d.d/Z2d0S )1    )TYPE_CHECKING)settings)
Permission)redirect_to_login)models)reverse)add_never_cache_headers)capfirst)gettext_lazy)ngettext)hooks)
HTTPMethod)get_content_languages)LogFormatter)ModelLogEntryPagePageLogEntryPageViewRestriction)PageLinkHandler)parse_datetime_localizedrender_timestamp)HttpRequestc                 C   s   t tdtd}t| |S )NZWAGTAIL_FRONTEND_LOGIN_URLZwagtailcore_login)getattrr   r   r   )nextZ	login_url r   T/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/wagtail_hooks.pyrequire_wagtail_login   s    
r   Zon_serve_pagec                    s    fdd}|S )Nc           
         s   |   }d}|D ]}||s|jtjkr|ddlm} ||d| id}td|j	| j	gd}	| 
|||	}t| |  S |jtjtjfv rt| d}t| |  S q | |||}|rt| |S )	as  
        Check whether there are any view restrictions on this page which are
        not fulfilled by the given request object. If there are, return an
        HttpResponse that will notify the user of that restriction (and possibly
        include a password / login form that will allow them to proceed). If
        there are no such restrictions, return None
        Nr   )PasswordViewRestrictionFormZ
return_url)instanceinitialZ&wagtailcore_authenticate_with_password)args)r   )Zget_view_restrictionsZaccept_requestZrestriction_typer   ZPASSWORDZwagtail.formsr   Zget_full_pathr   idZ serve_password_required_responser   ZLOGINZGROUPSr   )
pagerequestZ
serve_argsZserve_kwargsZrestrictionsresponserestrictionr   formZ
action_urlcallbackr   r   inner"   s<    



z&check_view_restrictions.<locals>.innerr   )r(   r)   r   r'   r   check_view_restrictions    s    *r*   Zregister_rich_text_featuresc                 C   sf   | j d | j d | t | j d | j d | j g d | j d | j d d S )NhrlinkZboldZitalic)h2h3h4olul)Zdefault_featuresappendZregister_link_typer   extend)featuresr   r   r   register_core_featuresO   s    
r5   ZWAGTAIL_WORKFLOW_ENABLEDTZregister_permissionsc                   C   s   t jjdg ddS )Nwagtailcore)Zadd_workflowZchange_workflowZdelete_workflowZcontent_type__app_labelZcodename__inr   Zobjectsfilterr   r   r   r   register_workflow_permissionsc   s    r:   c                   C   s   t jjdg ddS )Nr6   )Zadd_taskZchange_taskZdelete_taskr7   r8   r   r   r   r   register_task_permissionsj   s    r;   Zdescribe_collection_contentsc                 C   s8   |    }|r4td}|tdd|d|i |dS d S )Nzwagtailadmin_collections:indexz%(count)s descendant collectionz %(count)s descendant collectionscount)r<   Z
count_texturl)Zget_descendantsr<   r   r   )Z
collectionZdescendant_countr=   r   r   r   describe_collection_childrenr   s    r>   Zregister_log_actionsc                 C   s(  |  tjt |  tt | dtdtd | dtdtd | dtdtd	 | d
tdtd | dtdtd | dtdtd | dtdtd | dtdtd | dtdtd | dtdtd | dtd td! | d"G d#d$ d$t}| d%G d&d' d't}| d(G d)d* d*t}| d+G d,d- d-t}| d.G d/d0 d0t}| d1G d2d3 d3t}| d4G d5d6 d6t}| d7G d8d9 d9t}| d:G d;d< d<t}	| d=G d>d? d?t}
| d@G dAdB dBt}| dCG dDdE dEt}| dFG dGdH dHt}G dIdJ dJt}| dKG dLdM dM|}| dNG dOdP dP|}| dQG dRdS dS|}| dTG dUdV dV|}| dWG dXdY dY|}| dZG d[d\ d\|}| d]G d^d_ d_|}d S )`Nzwagtail.createZCreateCreatedzwagtail.editZEditZEditedzwagtail.deleteDeleteZDeletedzwagtail.publishZPublishZ	Publishedzwagtail.publish.scheduledzPublish scheduled draftzPublished scheduled draftzwagtail.unpublishZ	UnpublishZUnpublishedzwagtail.unpublish.scheduledzUnpublish scheduled draftzUnpublished scheduled draftzwagtail.lockLockLockedzwagtail.unlockZUnlockZUnlockedzwagtail.moderation.approveZApproveZApprovedzwagtail.moderation.rejectZRejectZRejectedzwagtail.renamec                   @   s   e Zd ZedZdd ZdS )z8register_core_log_actions.<locals>.RenameActionFormatterZRenamec                 S   sH   z(t d|jd d |jd d d W S  tyB   t d Y S 0 d S )Nz#Renamed from '%(old)s' to '%(new)s'titleoldnew)rD   rE   ZRenamed_dataKeyErrorselfZ	log_entryr   r   r   format_message   s    
zGregister_core_log_actions.<locals>.RenameActionFormatter.format_messageN__name__
__module____qualname__rG   labelrL   r   r   r   r   RenameActionFormatter   s   rR   zwagtail.revertc                   @   s   e Zd ZedZdd ZdS )z8register_core_log_actions.<locals>.RevertActionFormatterZRevertc                 S   sP   z0t d|jd d tt|jd d d W S  tyJ   t d Y S 0 d S )NzIReverted to previous revision with id %(revision_id)s from %(created_at)srevisionr!   created)revision_id
created_atzReverted to previous revision)rG   rH   r   r   rI   rJ   r   r   r   rL      s    
zGregister_core_log_actions.<locals>.RevertActionFormatter.format_messageNrM   r   r   r   r   RevertActionFormatter   s   rW   zwagtail.copyc                   @   s   e Zd ZedZdd ZdS )z6register_core_log_actions.<locals>.CopyActionFormatterZCopyc                 S   s<   zt dd|jd d i W S  ty6   t d Y S 0 d S )NzCopied from %(title)srC   sourceZCopiedrF   rJ   r   r   r   rL      s    zEregister_core_log_actions.<locals>.CopyActionFormatter.format_messageNrM   r   r   r   r   CopyActionFormatter   s   rY   zwagtail.copy_for_translationc                   @   s   e Zd ZedZdd ZdS )zDregister_core_log_actions.<locals>.CopyForTranslationActionFormatterzCopy for translationc                 S   sT   z4t d|jd d t |jd d p,dd W S  tyN   t d Y S 0 d S )	Nz2Copied for translation from %(title)s (%(locale)s)rX   rC   Zsource_localeZlanguage_code )rC   localezCopied for translation)rG   rH   r   getrI   rJ   r   r   r   rL      s    
zSregister_core_log_actions.<locals>.CopyForTranslationActionFormatter.format_messageNrM   r   r   r   r   !CopyForTranslationActionFormatter   s   r]   zwagtail.create_aliasc                   @   s   e Zd ZedZdd ZdS )z=register_core_log_actions.<locals>.CreateAliasActionFormatterzCreate aliasc                 S   s<   zt dd|jd d i W S  ty6   t d Y S 0 d S )NzCreated an alias of %(title)srC   rX   zCreated an aliasrF   rJ   r   r   r   rL      s    zLregister_core_log_actions.<locals>.CreateAliasActionFormatter.format_messageNrM   r   r   r   r   CreateAliasActionFormatter   s   r^   zwagtail.convert_aliasc                   @   s   e Zd ZedZdd ZdS )z>register_core_log_actions.<locals>.ConvertAliasActionFormatterz Convert alias into ordinary pagec                 S   s<   zt dd|jd d i W S  ty6   t d Y S 0 d S )Nz5Converted the alias '%(title)s' into an ordinary pagerC   r"   z(Converted an alias into an ordinary pagerF   rJ   r   r   r   rL      s    zMregister_core_log_actions.<locals>.ConvertAliasActionFormatter.format_messageNrM   r   r   r   r   ConvertAliasActionFormatter   s   r_   zwagtail.movec                   @   s   e Zd ZedZdd ZdS )z6register_core_log_actions.<locals>.MoveActionFormatterZMovec                 S   sH   z(t d|jd d |jd d d W S  tyB   t d Y S 0 d S )Nz/Moved from '%(old_parent)s' to '%(new_parent)s'rX   rC   destination)Z
old_parentZ
new_parentZMovedrF   rJ   r   r   r   rL      s    
zEregister_core_log_actions.<locals>.MoveActionFormatter.format_messageNrM   r   r   r   r   MoveActionFormatter   s   ra   zwagtail.reorderc                   @   s   e Zd ZedZdd ZdS )z9register_core_log_actions.<locals>.ReorderActionFormatterZReorderc                 S   s<   zt dd|jd d i W S  ty6   t d Y S 0 d S )NzReordered under '%(parent)s'parentr`   rC   Z	ReorderedrF   rJ   r   r   r   rL     s    zHregister_core_log_actions.<locals>.ReorderActionFormatter.format_messageNrM   r   r   r   r   ReorderActionFormatter   s   rc   zwagtail.publish.schedulec                   @   s   e Zd ZedZdd ZdS )zAregister_core_log_actions.<locals>.SchedulePublishActionFormatterzSchedule publicationc                 S   s   zz|j d d rTtd|j d d tt|j d d tt|j d d d W S tddtt|j d d i W S W n ty   td	 Y S 0 d S )
NrS   has_live_versionzXRevision %(revision_id)s from %(created_at)s scheduled for publishing at %(go_live_at)s.r!   rT   
go_live_atrU   rV   re   z/Page scheduled for publishing at %(go_live_at)szPage scheduled for publishingrH   rG   r   r   rI   rJ   r   r   r   rL     s6    zPregister_core_log_actions.<locals>.SchedulePublishActionFormatter.format_messageNrM   r   r   r   r   SchedulePublishActionFormatter  s   rh   zwagtail.schedule.cancelc                   @   s   e Zd ZedZdd ZdS )zGregister_core_log_actions.<locals>.UnschedulePublicationActionFormatterzUnschedule publicationc                 S   s   z|j d d rftd|j d d tt|j d d |j d d rZtt|j d d nd d W S tdd|j d d rtt|j d d nd i W S W n ty   td	 Y S 0 d S )
NrS   rd   z[Revision %(revision_id)s from %(created_at)s unscheduled from publishing at %(go_live_at)s.r!   rT   re   rf   z1Page unscheduled for publishing at %(go_live_at)sz Page unscheduled from publishingrg   rJ   r   r   r   rL   0  s@    
	zVregister_core_log_actions.<locals>.UnschedulePublicationActionFormatter.format_messageNrM   r   r   r   r   $UnschedulePublicationActionFormatter,  s   ri   zwagtail.view_restriction.createc                   @   s   e Zd ZedZdd ZdS )zDregister_core_log_actions.<locals>.AddViewRestrictionActionFormatterzAdd view restrictionsc                 S   s<   zt dd|jd d i W S  ty6   t d Y S 0 d S )Nz,Added the '%(restriction)s' view restrictionr%   rC   zAdded view restrictionrF   rJ   r   r   r   rL   U  s    zSregister_core_log_actions.<locals>.AddViewRestrictionActionFormatter.format_messageNrM   r   r   r   r   !AddViewRestrictionActionFormatterQ  s   rj   zwagtail.view_restriction.editc                   @   s   e Zd ZedZdd ZdS )zEregister_core_log_actions.<locals>.EditViewRestrictionActionFormatterzUpdate view restrictionsc                 S   s<   zt dd|jd d i W S  ty6   t d Y S 0 d S )Nz1Updated the view restriction to '%(restriction)s'r%   rC   zUpdated view restrictionrF   rJ   r   r   r   rL   a  s    zTregister_core_log_actions.<locals>.EditViewRestrictionActionFormatter.format_messageNrM   r   r   r   r   "EditViewRestrictionActionFormatter]  s   rk   zwagtail.view_restriction.deletec                   @   s   e Zd ZedZdd ZdS )zGregister_core_log_actions.<locals>.DeleteViewRestrictionActionFormatterzRemove view restrictionsc                 S   s<   zt dd|jd d i W S  ty6   t d Y S 0 d S )NzCRemoved the '%(restriction)s' view restriction. The page is public.r%   rC   zRemoved view restrictionrF   rJ   r   r   r   rL   m  s    zVregister_core_log_actions.<locals>.DeleteViewRestrictionActionFormatter.format_messageNrM   r   r   r   r   $DeleteViewRestrictionActionFormatteri  s   rl   c                   @   s   e Zd Zedd ZdS )z6register_core_log_actions.<locals>.CommentLogFormatterc                 S   s    | dd }t| j|jS )z
            Finds the translated field label for the given model and content path

            Raises LookupError if not found
            .r   )splitr	   Z_meta	get_fieldZverbose_name)modelZcontent_path
field_namer   r   r   _field_label_from_content_pathx  s    zUregister_core_log_actions.<locals>.CommentLogFormatter._field_label_from_content_pathN)rN   rO   rP   staticmethodrr   r   r   r   r   CommentLogFormatterw  s   rt   zwagtail.comments.createc                   @   s   e Zd ZedZdd ZdS )z?register_core_log_actions.<locals>.CreateCommentActionFormatterzAdd commentc                 S   sT   z4t d| |jj|jd d |jd d d W S  tyN   t d Y S 0 d S )Nz.Added a comment on field %(field)s: "%(text)s"commentcontentpathtextfieldrw   zAdded a commentrG   rr   r"   Zspecific_classrH   rI   rJ   r   r   r   rL     s    
zNregister_core_log_actions.<locals>.CreateCommentActionFormatter.format_messageNrM   r   r   r   r   CreateCommentActionFormatter  s   r{   zwagtail.comments.editc                   @   s   e Zd ZedZdd ZdS )z=register_core_log_actions.<locals>.EditCommentActionFormatterzEdit commentc                 S   sT   z4t d| |jj|jd d |jd d d W S  tyN   t d Y S 0 d S )Nz/Edited a comment on field %(field)s: "%(text)s"ru   rv   rw   rx   zEdited a commentrz   rJ   r   r   r   rL     s    
zLregister_core_log_actions.<locals>.EditCommentActionFormatter.format_messageNrM   r   r   r   r   EditCommentActionFormatter  s   r|   zwagtail.comments.deletec                   @   s   e Zd ZedZdd ZdS )z?register_core_log_actions.<locals>.DeleteCommentActionFormatterzDelete commentc                 S   sT   z4t d| |jj|jd d |jd d d W S  tyN   t d Y S 0 d S )Nz0Deleted a comment on field %(field)s: "%(text)s"ru   rv   rw   rx   zDeleted a commentrz   rJ   r   r   r   rL     s    
zNregister_core_log_actions.<locals>.DeleteCommentActionFormatter.format_messageNrM   r   r   r   r   DeleteCommentActionFormatter  s   r}   zwagtail.comments.resolvec                   @   s   e Zd ZedZdd ZdS )z@register_core_log_actions.<locals>.ResolveCommentActionFormatterzResolve commentc                 S   sT   z4t d| |jj|jd d |jd d d W S  tyN   t d Y S 0 d S )Nz1Resolved a comment on field %(field)s: "%(text)s"ru   rv   rw   rx   zResolved a commentrz   rJ   r   r   r   rL     s    
zOregister_core_log_actions.<locals>.ResolveCommentActionFormatter.format_messageNrM   r   r   r   r   ResolveCommentActionFormatter  s   r~   zwagtail.comments.create_replyc                   @   s   e Zd ZedZdd ZdS )z=register_core_log_actions.<locals>.CreateReplyActionFormatterzReply to commentc                 S   sT   z4t d| |jj|jd d |jd d d W S  tyN   t d Y S 0 d S )Nz1Replied to comment on field %(field)s: "%(text)s"ru   rv   replyrw   rx   zReplied to a commentrz   rJ   r   r   r   rL     s    
zLregister_core_log_actions.<locals>.CreateReplyActionFormatter.format_messageNrM   r   r   r   r   CreateReplyActionFormatter  s   r   zwagtail.comments.edit_replyc                   @   s   e Zd ZedZdd ZdS )z;register_core_log_actions.<locals>.EditReplyActionFormatterzEdit reply to commentc                 S   sT   z4t d| |jj|jd d |jd d d W S  tyN   t d Y S 0 d S )Nz:Edited a reply to a comment on field %(field)s: "%(text)s"ru   rv   r   rw   rx   zEdited a replyrz   rJ   r   r   r   rL     s    	zJregister_core_log_actions.<locals>.EditReplyActionFormatter.format_messageNrM   r   r   r   r   EditReplyActionFormatter  s   r   zwagtail.comments.delete_replyc                   @   s   e Zd ZedZdd ZdS )z=register_core_log_actions.<locals>.DeleteReplyActionFormatterzDelete reply to commentc                 S   sT   z4t d| |jj|jd d |jd d d W S  tyN   t d Y S 0 d S )Nz;Deleted a reply to a comment on field %(field)s: "%(text)s"ru   rv   r   rw   rx   zDeleted a replyrz   rJ   r   r   r   rL     s    	zLregister_core_log_actions.<locals>.DeleteReplyActionFormatter.format_messageNrM   r   r   r   r   DeleteReplyActionFormatter  s   r   )	Zregister_modelr   ZModelr   r   r   register_actionrG   r   )actionsrR   rW   rY   r]   r^   r_   ra   rc   rh   ri   rj   rk   rl   rt   r{   r|   r}   r~   r   r   r   r   r   r   register_core_log_actions   s|     $r   c                 C   s   G dd dt }| dG dd d|}| dG dd d|}| d	G d
d d|}| dG dd d|}| dG dd d|}d S )Nc                   @   s   e Zd Zdd ZdS )z;register_workflow_log_actions.<locals>.WorkflowLogFormatterc                 S   s   |j ddS )Nru   rZ   )rH   r\   rJ   r   r   r   format_comment  s    zJregister_workflow_log_actions.<locals>.WorkflowLogFormatter.format_commentN)rN   rO   rP   r   r   r   r   r   WorkflowLogFormatter  s   r   zwagtail.workflow.startc                   @   s   e Zd ZedZdd ZdS )zCregister_workflow_log_actions.<locals>.StartWorkflowActionFormatterzWorkflow: startc              	   S   sP   z,t d|jd d |jd d d d W S  ttfyJ   t d Y S 0 d S )Nz,'%(workflow)s' started. Next step '%(task)s'workflowrC   r   r   taskzWorkflow startedrG   rH   rI   	TypeErrorrJ   r   r   r   rL     s    
zRregister_workflow_log_actions.<locals>.StartWorkflowActionFormatter.format_messageNrM   r   r   r   r   StartWorkflowActionFormatter  s   r   zwagtail.workflow.approvec                   @   s   e Zd ZedZdd ZdS )zEregister_workflow_log_actions.<locals>.ApproveWorkflowActionFormatterzWorkflow: approve taskc              	   S   s   zn|j d d r@td|j d d d |j d d d d W S td|j d d d |j d d d W S W n ttfy   td	 Y S 0 d S )
Nr   r   z1Approved at '%(task)s'. Next step '%(next_task)s'r   rC   )r   Z	next_taskz/Approved at '%(task)s'. '%(workflow)s' complete)r   r   zWorkflow task approved)rH   rG   rI   r   rJ   r   r   r   rL     s    
zTregister_workflow_log_actions.<locals>.ApproveWorkflowActionFormatter.format_messageNrM   r   r   r   r   ApproveWorkflowActionFormatter
  s   r   zwagtail.workflow.rejectc                   @   s   e Zd ZedZdd ZdS )zDregister_workflow_log_actions.<locals>.RejectWorkflowActionFormatterzWorkflow: reject taskc              	   S   sD   z t dd|jd d d i W S  ttfy>   t d Y S 0 d S )Nz)Rejected at '%(task)s'. Changes requestedr   r   rC   z)Workflow task rejected. Workflow completer   rJ   r   r   r   rL   !  s    zSregister_workflow_log_actions.<locals>.RejectWorkflowActionFormatter.format_messageNrM   r   r   r   r   RejectWorkflowActionFormatter  s   r   zwagtail.workflow.resumec                   @   s   e Zd ZedZdd ZdS )zDregister_workflow_log_actions.<locals>.ResumeWorkflowActionFormatterzWorkflow: resume taskc              	   S   sD   z t dd|jd d d i W S  ttfy>   t d Y S 0 d S )Nz(Resubmitted '%(task)s'. Workflow resumedr   r   rC   z+Workflow task resubmitted. Workflow resumedr   rJ   r   r   r   rL   -  s    zSregister_workflow_log_actions.<locals>.ResumeWorkflowActionFormatter.format_messageNrM   r   r   r   r   ResumeWorkflowActionFormatter)  s   r   zwagtail.workflow.cancelc                   @   s   e Zd ZedZdd ZdS )zDregister_workflow_log_actions.<locals>.CancelWorkflowActionFormatterzWorkflow: cancelc              	   S   sP   z,t d|jd d |jd d d d W S  ttfyJ   t d Y S 0 d S )Nz&Cancelled '%(workflow)s' at '%(task)s'r   rC   r   r   zWorkflow cancelledr   rJ   r   r   r   rL   9  s    
zSregister_workflow_log_actions.<locals>.CancelWorkflowActionFormatter.format_messageNrM   r   r   r   r   CancelWorkflowActionFormatter5  s   r   )r   r   )r   r   r   r   r   r   r   r   r   r   register_workflow_log_actions  s    r   Zbefore_serve_page)orderr   )r"   r#   c                 O   sN   | j |g|R i |}|dur$|S |jtjjkrJ| j|g|R i |S dS )z
    Before serving, check the request method is permitted by the page,
    and use the page object's :meth:``wagtail.models.Page.handle_options_request``
    method to generate a response if the OPTIONS HTTP verb is used.
    N)check_request_methodmethodr   OPTIONSvalueZhandle_options_request)r"   r#   r    kwargsZcheck_responser   r   r   r   C  s    r   N)3typingr   Zdjango.confr   Zdjango.contrib.auth.modelsr   Zdjango.contrib.auth.viewsr   Z	django.dbr   Zdjango.urlsr   Zdjango.utils.cacher   Zdjango.utils.textr	   Zdjango.utils.translationr
   rG   r   Zwagtailr   Zwagtail.compatr   Zwagtail.coreutilsr   Zwagtail.log_actionsr   Zwagtail.modelsr   r   r   r   Zwagtail.rich_text.pagesr   Zwagtail.utils.timestampsr   r   Zdjango.httpr   r   registerr*   r5   r   r:   r;   r>   r   r   r   r   r   r   r   <module>   sL   
.




  u
K