a
    Dg5                     @   s  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mZmZmZ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$ 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/m0Z0m1Z1 d dl2m3Z3 e Z4G dd de(Z5G dd de(Z6G dd de(Z7G dd de(Z8G dd de(Z9G dd  d e(Z:G d!d" d"e*eZ;d#d$ Z<e
d%d&d'd(d) Z=d*d+ Z>d,S )-    )Mapping)AnyUnion)settings)get_user_model)permission_required)ExistsIntegerFieldMaxOuterRefQ)Cast)Media)Http404HttpResponse)gettext_lazy)TemplateView)hooks)
SearchForm)	get_icons)get_site_for_user)SiteSummaryPanel)	Component)WagtailAdminTemplateMixin)PagePageLogEntryRevision	TaskStateWorkflowStateget_default_page_content_type)page_permission_policyc                       s   e Zd ZdZdZeeef dddZedddZ	eddd	Z
eeef eeef d
ddZdeeef ed
 fddZ  ZS )UpgradeNotificationPanelz+wagtailadmin/home/upgrade_notification.htmlZlast_upgrade_checkreturnc                 C   s   t tddS )NZWAGTAIL_ENABLE_UPDATE_CHECKTgetattrr   self r(   W/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/views/home.pyget_upgrade_check_setting)   s    z2UpgradeNotificationPanel.get_upgrade_check_settingc                 C   s&   |   }t|tr"| dkr"dS dS )NZltsTF)r*   
isinstancestrlower)r'   Zupgrade_checkr(   r(   r)   upgrade_check_lts_only,   s    z/UpgradeNotificationPanel.upgrade_check_lts_onlyc                 C   s"   t |dd  }r|j| jS d S )Nwagtail_userprofile)r%   dismissiblesgetdismissible_id)r'   userprofiler(   r(   r)   get_dismissible_value2   s    z.UpgradeNotificationPanel.get_dismissible_valueparent_contextr#   c                 C   s   |   | j| |d jdS )Nrequest)Zlts_onlyr2   Zdismissible_value)r.   r2   r5   r3   r'   r7   r(   r(   r)   get_context_data7   s    z)UpgradeNotificationPanel.get_context_dataNc                    s(   |d j jr |  r t |S dS d S )Nr8    )r3   Zis_superuserr*   superrender_htmlr9   	__class__r(   r)   r=   @   s    
z$UpgradeNotificationPanel.render_html)N)__name__
__module____qualname__template_namer2   r   boolr,   r*   r.   r5   r   r   r:   r=   __classcell__r(   r(   r>   r)   r!   %   s    	r!   c                       s   e Zd ZdZdZdZdZeee	f dddZ
e	ddd	Zee	ef ee	ef d
ddZdee	ef ed
ddZdee	ef e	d
 fddZ  ZS )WhatsNewInWagtailVersionPanelZwhats_new_in_wagtail_versionz3wagtailadmin/home/whats_new_in_wagtail_version.htmln   4r"   c                 C   s   t tddS )NZWAGTAIL_ENABLE_WHATS_NEW_BANNERTr$   r&   r(   r(   r)   get_whats_new_banner_settingP   s    z:WhatsNewInWagtailVersionPanel.get_whats_new_banner_settingc                 C   s   | j  d| j S )N_)name_versionr&   r(   r(   r)   get_dismissible_idS   s    z0WhatsNewInWagtailVersionPanel.get_dismissible_idr6   c                 C   s   |   | jdS )N)r2   version)rM   rL   r9   r(   r(   r)   r:   V   s    z.WhatsNewInWagtailVersionPanel.get_context_dataNc                 C   s:   |   sdS t|d jdd }|r6|j|  r6dS dS )NFr8   r/   T)rI   r%   r3   r0   r1   rM   )r'   r7   r4   r(   r(   r)   is_shownY   s    z&WhatsNewInWagtailVersionPanel.is_shownc                    s   |  |sdS t |S )Nr;   )rO   r<   r=   r9   r>   r(   r)   r=   c   s    
z)WhatsNewInWagtailVersionPanel.render_html)N)N)r@   rA   rB   rK   rC   orderrL   r   rD   r,   rI   rM   r   r   r:   rO   r=   rE   r(   r(   r>   r)   rF   J   s    
rF   c                       s(   e Zd ZdZdZdZ fddZ  ZS )$UserObjectsInWorkflowModerationPanelZ#user_objects_in_workflow_moderationz:wagtailadmin/home/user_objects_in_workflow_moderation.html   c                    s   |d }t  |}ttddrtt jdttj	j
|jttdt dd@ }tj	 
|t|jdB d	d
ddd|d< dd |d D |d< ntj	 |d< ||d< |S )Nr8   WAGTAIL_WORKFLOW_ENABLEDT)Zbase_content_type_idZ	object_id)Zoutput_field)ownerid)Zrequested_bycontent_objectZcontent_object__latest_revisionZcurrent_task_stateZcurrent_task_state__taskz-current_task_state__started_atZworkflow_statesc                 S   s   g | ]}|j r|qS r(   )rV   ).0stater(   r(   r)   
<listcomp>   s   zIUserObjectsInWorkflowModerationPanel.get_context_data.<locals>.<listcomp>)r<   r:   r%   r   r   r   rU   r   r   objectsfilterr3   r   r   r	   r   activeprefetch_relatedselect_relatedorder_bynone)r'   r7   r8   contextZpages_owned_by_userr>   r(   r)   r:   n   s>    


z5UserObjectsInWorkflowModerationPanel.get_context_datar@   rA   rB   rK   rC   rP   r:   rE   r(   r(   r>   r)   rQ   i   s   rQ   c                       s(   e Zd ZdZdZdZ fddZ  ZS )WorkflowObjectsToModeratePanelZworkflow_objects_to_moderatez3wagtailadmin/home/workflow_objects_to_moderate.html   c                    s"  |d }t  |}g |d< ||d< |d |d< ttdds@|S tj|jdddd		d
d
djtj d}|D ]}|jj}|sqz|jj||j}|j }d}	d}
d}t|ts|j}|d}	|d}
|d}t|ddsd }
|d ||j|j|j||||	|
|d
 qz|S )Nr8   states
csrf_tokenrS   TrevisionZrevision__userworkflow_stateZworkflow_state__workflowZrevision__content_objectZ)revision__content_object__latest_revisionz-started_at)previous_revision_idz"wagtailadmin_pages:workflow_actionz#wagtailadmin_pages:workflow_previewz$wagtailadmin_pages:revisions_compareZworkflow_actionZworkflow_previewZrevisions_compareZis_previewableF)
objrg   ri   live_revision_idZ
task_stateactionsworkflow_tasksworkflow_action_url_nameworkflow_preview_url_namerevisions_compare_url_name)r<   r:   r%   r   r   rZ   Zreviewable_byr3   r^   r]   r_   annotater   Zprevious_revision_id_subqueryrg   rV   ZtaskspecificZget_actionsrh   Zall_tasks_with_statusr+   r   Zsnippet_viewsetZget_url_nameappendri   rk   )r'   r7   r8   ra   re   rX   rj   rl   rm   rn   ro   rp   Zviewsetr>   r(   r)   r:      sf    




z/WorkflowObjectsToModeratePanel.get_context_datarb   r(   r(   r>   r)   rc      s   rc   c                       s(   e Zd ZdZdZdZ fddZ  ZS )LockedPagesPanellocked_pagesz#wagtailadmin/home/locked_pages.htmli,  c                    sZ   |d }t  |}|tjjd|jddddjddt	
|jd||d	 d
 |S )Nr8   T)lockedZ	locked_byz
-locked_atz-latest_revision_created_atz-pk)deferZunlockrf   )ru   Zcan_remove_locksr8   rf   )r<   r:   updater   rZ   r[   r3   r_   rr   r    Zuser_has_permission)r'   r7   r8   ra   r>   r(   r)   r:      s&    z!LockedPagesPanel.get_context_datarb   r(   r(   r>   r)   rt      s   rt   c                       s(   e Zd ZdZdZdZ fddZ  ZS )RecentEditsPanelZrecent_editsz#wagtailadmin/home/recent_edits.html   c           
         s   |d }t  |}ttdd}tjj|jdddj	t
ddd	d | }tj   d
d |D }g }|D ](}||d }	|	r|||d |	f q|||d< ||d< |S )Nr8   ZWAGTAILADMIN_RECENT_EDITS_LIMIT   zwagtail.edit)r3   actionpage_id	timestamp)latest_datez-latest_datec                 S   s   g | ]}|d  qS )r}   r(   )rW   logr(   r(   r)   rY         z5RecentEditsPanel.get_context_data.<locals>.<listcomp>r   
last_edits)r<   r:   r%   r   r   rZ   r[   r3   valuesrq   r
   r_   r   rr   Zprefetch_workflow_statesZannotate_approved_scheduleZin_bulkr1   rs   )
r'   r7   r8   ra   Z
edit_countZlast_edits_datesZpages_mappingr   r   pager>   r(   r)   r:     s2    z!RecentEditsPanel.get_context_datarb   r(   r(   r>   r)   ry     s   ry   c                       sH   e Zd ZdZedZeZ fddZg fddZ	dd Z
d	d
 Z  ZS )HomeViewzwagtailadmin/home.htmlZ	Dashboardc                    s   t  jf i |}|  }t| j}|  }| g |||d< t|dd d|d< ||d< t |d< t	t
dd	|d
< | jj|d< i ||S )Nmediac                 S   s   | j S N)rP   )pr(   r(   r)   <lambda>3  r   z+HomeView.get_context_data.<locals>.<lambda>)keypanelssite_summaryZupgrade_notificationu   Search all pages…)placeholderZsearch_formr3   )r<   r:   
get_panelsr   r8   get_site_details	get_mediasortedr!   r   rJ   r3   )r'   kwargsra   r   r   Zsite_detailsr>   r(   r)   r:   ,  s    

zHomeView.get_context_datac                 C   s   t  }|D ]}||j7 }q
|S r   )r   r   )r'   r   r   Zpanelr(   r(   r)   r   ;  s    zHomeView.get_mediac                 C   s8   | j }t t t t g}tdD ]}||| q$|S )NZconstruct_homepage_panels)r8   rc   rQ   ry   rt   r   Z	get_hooks)r'   r8   r   fnr(   r(   r)   r   C  s    	zHomeView.get_panelsc                 C   s(   | j }t|j}|d |d |d dS )N	root_page	root_site	site_name)r   r   r   )r8   r   r3   )r'   r8   siter(   r(   r)   r   S  s    
zHomeView.get_site_details)r@   rA   rB   rC   rJ   Z
page_titler    Zpermission_policyr:   r   r   r   rE   r(   r(   r>   r)   r   '  s   r   c                 C   s   t dd S )Nz1This is a test of the emergency broadcast system.)	Exceptionr8   r(   r(   r)   
error_test^  s    r   zwagtailadmin.access_adminZwagtailadmin_login)Z	login_urlc                 C   s   t dS )z
    Called whenever a request comes in with the correct prefix (eg /admin/) but
    doesn't actually correspond to a Wagtail view.

    For authenticated users, it'll raise a 404 error. Anonymous users will be
    redirected to the login page.
    N)r   r   r(   r(   r)   defaultb  s    	r   c                 C   s   t t ddS )Nzimage/svg+xml; charset=utf-8)content_type)r   r   r   r(   r(   r)   spriten  s    r   N)?collections.abcr   typingr   r   Zdjango.confr   Zdjango.contrib.authr   Zdjango.contrib.auth.decoratorsr   Zdjango.db.modelsr   r	   r
   r   r   Zdjango.db.models.functionsr   Zdjango.formsr   Zdjango.httpr   r   Zdjango.utils.translationr   rJ   Zdjango.views.generic.baser   Zwagtailr   Zwagtail.admin.forms.searchr   Zwagtail.admin.iconsr   Zwagtail.admin.navigationr   Zwagtail.admin.site_summaryr   Zwagtail.admin.ui.componentsr   Zwagtail.admin.views.genericr   Zwagtail.modelsr   r   r   r   r   r   Zwagtail.permissionsr    ZUserr!   rF   rQ   rc   rt   ry   r   r   r   r   r(   r(   r(   r)   <module>   s>    %2L&7

