a
    Dg7                     @   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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)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= dd Z>dd Z?dd  Z@d!d" ZAd#d$ ZBG d%d& d&ZCeCd'e d(d)d*ZDeCd+e d,d-d*ZEG d.d/ d/ZFG d0d1 d1eFZGG d2d3 d3eFZHG d4d5 d5eFZIG d6d7 d7eFZJG d8d9 d9eFZKG d:d; d;eFZLee# d<d=G d>d? d?e7e%ZMG d@dA dAZNG dBdC dCeNejOZOG dDdE dEeNejPZPG dFdG dGeNejQZQG dHdI dIeNejRZRG dJdK dKejSZSG dLdM dMejTZTdNS )O    )OrderedDict)cached_property)settings)messages)update_session_auth_hash)views)transaction)Media)Http404)redirect)render_to_string)TemplateResponse)reversereverse_lazy)method_decorator)gettext)gettext_lazyoverride)sensitive_post_parameters)TemplateView)hooks)AvatarPreferencesFormLocalePreferencesFormNameEmailFormNotificationPreferencesFormThemePreferencesForm)	LoginFormPasswordChangeFormPasswordResetForm)get_available_admin_languagesget_available_admin_time_zones)EditViewWagtailAdminTemplateMixin)log)UserProfile)get_custom_formc                  C   s   d} t t| rt| S tS d S )NZWAGTAILADMIN_USER_LOGIN_FORM)hasattrr   r%   r   Zform_setting r(   Z/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/views/account.pyget_user_login_form(   s    
r*   c                  C   s   d} t t| rt| S tS d S )NZ%WAGTAILADMIN_USER_PASSWORD_RESET_FORM)r&   r   r%   r   r'   r(   r(   r)   get_password_reset_form0   s    
r+   c                   C   s   t tddS )NZ#WAGTAIL_PASSWORD_MANAGEMENT_ENABLEDTgetattrr   r(   r(   r(   r)   password_management_enabled=   s    r.   c                   C   s   t tddS )NZ WAGTAIL_EMAIL_MANAGEMENT_ENABLEDTr,   r(   r(   r(   r)   email_management_enabledA   s    r/   c                   C   s   t tdt S )NZWAGTAIL_PASSWORD_RESET_ENABLED)r-   r   r.   r(   r(   r(   r)   password_reset_enabledE   s    r0   c                   @   s   e Zd ZdddZdS )SettingsTabr   c                 C   s   || _ || _|| _d S N)nametitleorder)selfr3   r4   r5   r(   r(   r)   __init__O   s    zSettingsTab.__init__N)r   )__name__
__module____qualname__r7   r(   r(   r(   r)   r1   N   s   r1   profileZProfiled   r5   notificationsNotifications   c                   @   sP   e Zd ZdZdZeZdZdZdZ	dZ
dd Zdd Zd	d
 Zdd Zdd ZdS )BaseSettingsPanel Nz.wagtailadmin/account/settings_panels/base.htmluserc                 C   s   || _ || _|| _d S r2   )requestrC   r;   )r6   rD   rC   r;   r(   r(   r)   r7   g   s    zBaseSettingsPanel.__init__c                 C   s   dS )z4
        Returns True to display the panel.
        Tr(   r6   r(   r(   r)   	is_activel   s    zBaseSettingsPanel.is_activec                 C   sZ   | j dkr| jn| j| jd}| jjdkrF| j| jj| jjfi |S | jf i |S dS )z.
        Returns an initialised form.
        r;   )instanceprefixPOSTN)	form_objectr;   rC   r3   rD   method
form_classrI   ZFILES)r6   kwargsr(   r(   r)   get_formr   s    zBaseSettingsPanel.get_formc                 C   s   d|   iS )zR
        Returns the template context to use when rendering the template.
        formrN   rE   r(   r(   r)   get_context_data   s    z"BaseSettingsPanel.get_context_datac                 C   s   t | j|  | jdS )zw
        Renders the panel using the template specified in .template_name and context from .get_context_data()
        )rD   )r   template_namerQ   rD   rE   r(   r(   r)   render   s    zBaseSettingsPanel.render)r8   r9   r:   r3   r4   profile_tabtab	help_textrR   rL   rJ   r7   rF   rN   rQ   rS   r(   r(   r(   r)   rA   ^   s   rA   c                   @   s$   e Zd ZdZdZeZedd ZdS )NameEmailSettingsPanelZ
name_emailr<   c                 C   s   t  rtdS tdS )NzName and EmailName)r/   _rE   r(   r(   r)   r4      s    zNameEmailSettingsPanel.titleN)	r8   r9   r:   r3   r5   r   rL   r   r4   r(   r(   r(   r)   rW      s
   rW   c                   @   s(   e Zd ZdZedZdZdZeZ	dZ
dS )AvatarSettingsPanelZavatarzProfile picturei,  z0wagtailadmin/account/settings_panels/avatar.htmlr;   N)r8   r9   r:   r3   r   r4   r5   rR   r   rL   rJ   r(   r(   r(   r)   rZ      s   rZ   c                   @   s0   e Zd ZdZedZeZdZe	Z
dZdd ZdS )NotificationsSettingsPanelr>   r?   r<   r;   c                 C   s   t |  jS r2   )boolrN   fieldsrE   r(   r(   r)   rF      s    z$NotificationsSettingsPanel.is_activeN)r8   r9   r:   r3   r   r4   notifications_tabrU   r5   r   rL   rJ   rF   r(   r(   r(   r)   r[      s   r[   c                   @   s,   e Zd ZdZedZdZeZdZ	dd Z
dS )LocaleSettingsPanellocaleZLocalei  r;   c                 C   s   t t dkpt t dkS )N   )lenr   r    rE   r(   r(   r)   rF      s    zLocaleSettingsPanel.is_activeN)r8   r9   r:   r3   r   r4   r5   r   rL   rJ   rF   r(   r(   r(   r)   r_      s   r_   c                   @   s$   e Zd ZdZedZdZeZdZ	dS )ThemeSettingsPanelZthemezTheme preferencesi  r;   N)
r8   r9   r:   r3   r   r4   r5   r   rL   rJ   r(   r(   r(   r)   rc      s
   rc   c                   @   s0   e Zd ZdZedZdZeZdd Z	dd Z
dS )	ChangePasswordPanelpasswordZPasswordi  c                 C   s   t  o| j S r2   )r.   rC   Zhas_usable_passwordrE   r(   r(   r)   rF      s    zChangePasswordPanel.is_activec                 C   sn   d}| j jdkr<t| j j| jd | j j| jd g}|rX| j| j| j j| jdS | j| j| jdS d S )NFrI   z-new_password1z-new_password2)rH   )rD   rK   anyrI   getr3   rL   rC   )r6   Z	bind_formr(   r(   r)   rN      s    zChangePasswordPanel.get_formN)r8   r9   r:   r3   r   r4   r5   r   rL   rF   rN   r(   r(   r(   r)   rd      s   rd   post)r3   c                       s`   e Zd ZdZedZdZ fddZ fddZdd	 Z	d
d Z
dd Zdd Zdd Z  ZS )AccountViewz!wagtailadmin/account/account.htmlZAccountrC   c                    s   t   d|  dg S )NrB   )urllabel)superget_breadcrumbs_itemsZget_page_titlerE   	__class__r(   r)   rm      s    z!AccountView.get_breadcrumbs_itemsc                    sn   t  jf i |}|  }| ||d< |  |d< | ||d< d|d< | jj|d< tj	|d< tj
|d< |S )	Npanels_by_tab
menu_itemsmediaTZform_is_multipartrC   submit_button_labelsubmit_button_active_label)rl   rQ   
get_panelsget_panels_by_tabget_menu_items	get_mediarD   rC   r!   rs   rt   )r6   rM   contextpanelsrn   r(   r)   rQ      s    

zAccountView.get_context_datac              	   C   s   | j }| j j}t|}t|||t|||t|||t|||t|||t	|||g}t
dD ]&}||||}|rb| rb|| qbdd |D }|S )NZregister_account_settings_panelc                 S   s   g | ]}|  r|qS r(   )rF   .0panelr(   r(   r)   
<listcomp>      z*AccountView.get_panels.<locals>.<listcomp>)rD   rC   r$   get_for_userrW   rZ   r[   r_   rc   rd   r   	get_hooksrF   append)r6   rD   rC   r;   rz   fnr}   r(   r(   r)   ru      s     






zAccountView.get_panelsc                 C   st   t dd |D }|jdd d tdd |D }|D ]}||j | q8| D ]\}}|jdd d qV|S )	Nc                 S   s   h | ]
}|j qS r(   rU   r{   r(   r(   r)   	<setcomp>  r   z0AccountView.get_panels_by_tab.<locals>.<setcomp>c                 S   s   | j S r2   r=   r   r(   r(   r)   <lambda>  r   z/AccountView.get_panels_by_tab.<locals>.<lambda>)keyc                 S   s   g | ]}|g fqS r(   r(   )r|   rU   r(   r(   r)   r~     r   z1AccountView.get_panels_by_tab.<locals>.<listcomp>c                 S   s   | j S r2   r=   )r}   r(   r(   r)   r     r   )listsortr   rU   r   items)r6   rz   tabsrp   r}   rU   Z
tab_panelsr(   r(   r)   rv     s    zAccountView.get_panels_by_tabc                 C   s0   g }t dD ]}|| j}|r|| q|S )NZregister_account_menu_item)r   r   rD   r   )r6   rq   r   itemr(   r(   r)   rw      s    
zAccountView.get_menu_itemsc                 C   s,   dd |D }t  }|D ]}||j7 }q|S )Nc                 S   s   g | ]}|  qS r(   rP   r{   r(   r(   r)   r~   *  r   z)AccountView.get_media.<locals>.<listcomp>)r	   rr   )r6   rz   panel_formsrr   rO   r(   r(   r)   rx   )  s
    zAccountView.get_mediac                 C   s   dd |   D }| jj}t|}tdd |D rt ( |D ]}|jrD|	  qDW d    n1 sl0    Y  t
|d t|| t|   t|td W d    n1 s0    Y  tdS t|| j|  S )Nc                 S   s   g | ]}|  qS r(   rP   r{   r(   r(   r)   r~   2  r   z$AccountView.post.<locals>.<listcomp>c                 s   s   | ]}|  p|j V  qd S r2   )Zis_validis_bound)r|   rO   r(   r(   r)   	<genexpr>6  r   z#AccountView.post.<locals>.<genexpr>zwagtail.editz5Your account settings have been changed successfully!Zwagtailadmin_account)ru   rD   rC   r$   r   allr   Zatomicr   saver#   r   r   Zget_preferred_languager   successrY   r   r   rR   rQ   )r6   rD   r   rC   r;   rO   r(   r(   r)   rh   1  s     

(

"zAccountView.post)r8   r9   r:   rR   r   Z
page_titleZheader_iconrm   rQ   ru   rv   rw   rx   rh   __classcell__r(   r(   rn   r)   ri      s   	ri   c                       s    e Zd ZdZ fddZ  ZS )PasswordResetEnabledViewMixinz
    Class based view mixin that disables the view if password reset is disabled by one of the following settings:
    - WAGTAIL_PASSWORD_RESET_ENABLED
    - WAGTAIL_PASSWORD_MANAGEMENT_ENABLED
    c                    s   t  s
tt j|i |S r2   )r0   r
   rl   dispatchr6   argsrM   rn   r(   r)   r   U  s    z&PasswordResetEnabledViewMixin.dispatch)r8   r9   r:   __doc__r   r   r(   r(   rn   r)   r   N  s   r   c                   @   s(   e Zd ZdZdZdZedZdd ZdS )PasswordResetViewz-wagtailadmin/account/password_reset/form.htmlz-wagtailadmin/account/password_reset/email.txtz5wagtailadmin/account/password_reset/email_subject.txtZ wagtailadmin_password_reset_donec                 C   s   t  S r2   )r+   rE   r(   r(   r)   get_form_classb  s    z PasswordResetView.get_form_classN)	r8   r9   r:   rR   Zemail_template_nameZsubject_template_namer   success_urlr   r(   r(   r(   r)   r   \  s
   r   c                   @   s   e Zd ZdZdS )PasswordResetDoneViewz-wagtailadmin/account/password_reset/done.htmlNr8   r9   r:   rR   r(   r(   r(   r)   r   f  s   r   c                   @   s   e Zd ZdZedZdS )PasswordResetConfirmViewz0wagtailadmin/account/password_reset/confirm.htmlZ$wagtailadmin_password_reset_completeN)r8   r9   r:   rR   r   r   r(   r(   r(   r)   r   l  s   r   c                   @   s   e Zd ZdZdS )PasswordResetCompleteViewz1wagtailadmin/account/password_reset/complete.htmlNr   r(   r(   r(   r)   r   s  s   r   c                       sH   e Zd ZdZdd Z fddZdd Z fdd	Z fd
dZ  Z	S )	LoginViewzwagtailadmin/login.htmlc                 C   s   |   ptdS )NZwagtailadmin_home)Zget_redirect_urlr   rE   r(   r(   r)   get_success_url|  s    zLoginView.get_success_urlc                    s6   | j jjr$| j jdr$t|  S t j|i |S )Nzwagtailadmin.access_admin)rD   rC   is_authenticatedZhas_permr   r   rl   rg   r   rn   r(   r)   rg     s
    zLoginView.getc                 C   s   t  S r2   )r*   rE   r(   r(   r)   r     s    zLoginView.get_form_classc                    s@   t  |}|jd}|r.| jjtj n| jjd |S )Nrememberr   )	rl   
form_validZcleaned_datarg   rD   sessionZ
set_expiryr   ZSESSION_COOKIE_AGE)r6   rO   responser   rn   r(   r)   r     s    zLoginView.form_validc                    sF   t  jf i |}t |d< ddlm} | }|j|jj|d< |S )NZshow_password_resetr   )get_user_modelZusername_field)	rl   rQ   r0   django.contrib.authr   Z_meta	get_fieldZUSERNAME_FIELDZverbose_name)r6   rM   ry   r   ZUserrn   r(   r)   rQ     s    

zLoginView.get_context_data)
r8   r9   r:   rR   r   rg   r   r   rQ   r   r(   r(   rn   r)   r   y  s   	r   c                       s    e Zd ZdZ fddZ  ZS )
LogoutViewZwagtailadmin_loginc                    sP   t  j|g|R i |}t| jtd |jtjtj	tj
d d| jj_|S )Nz&You have been successfully logged out.)domainpathF)rl   r   r   r   rD   rY   Zdelete_cookier   ZSESSION_COOKIE_NAMEZSESSION_COOKIE_DOMAINZSESSION_COOKIE_PATHr   modified)r6   rD   r   rM   r   rn   r(   r)   r     s    
zLogoutView.dispatch)r8   r9   r:   Z	next_pager   r   r(   r(   rn   r)   r     s   r   N)Ucollectionsr   	functoolsr   Zdjango.confr   Zdjango.contribr   r   r   r   Z
auth_viewsZ	django.dbr   Zdjango.formsr	   Zdjango.httpr
   Zdjango.shortcutsr   Zdjango.template.loaderr   Zdjango.template.responser   Zdjango.urlsr   r   Zdjango.utils.decoratorsr   Zdjango.utils.translationr   rY   r   r   Zdjango.views.decorators.debugr   Zdjango.views.generic.baser   Zwagtailr   Zwagtail.admin.forms.accountr   r   r   r   r   Zwagtail.admin.forms.authr   r   r   Zwagtail.admin.localizationr   r    Zwagtail.admin.views.genericr!   r"   Zwagtail.log_actionsr#   Zwagtail.users.modelsr$   Zwagtail.utils.loadingr%   r*   r+   r.   r/   r0   r1   rT   r^   rA   rW   rZ   r[   r_   rc   rd   ri   r   r   r   r   r   r   r   r(   r(   r(   r)   <module>   sr   	
1	h



,