U
    d<#                     @   sB  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 d dlmZmZ d dlmZ d d	lmZmZ d d
lmZ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* e e(Z+e e* Z,e-eG dd dej.Z/e-eG dd dej.Z0dS )    )settings)adminmessages)IS_POPUP_VAR)unquote)update_session_auth_hash)AdminPasswordChangeFormUserChangeFormUserCreationForm)GroupUser)PermissionDenied)routertransaction)Http404HttpResponseRedirect)TemplateResponse)pathreverse)method_decorator)escape)gettext)gettext_lazy)csrf_protect)sensitive_post_parametersc                       s*   e Zd ZdZdZdZd fdd	Z  ZS )
GroupAdminname)permissionsNc                    sB   |j dkr*|d|jjj}|d|d< t j|fd|i|S )Nr   Zquerysetcontent_typerequest)r   getZremote_fieldmodelZobjectsZselect_relatedsuperformfield_for_manytomany)selfZdb_fieldr    kwargsqs	__class__ =/tmp/pip-unpacked-wheel-7vj2equ7/django/contrib/auth/admin.pyr$   "   s    
z#GroupAdmin.formfield_for_manytomany)N)__name__
__module____qualname__search_fieldsorderingfilter_horizontalr$   __classcell__r*   r*   r(   r+   r      s   r   c                       s   e Zd ZdZdZdddifedddifedddifed	dd
iffZddddffZeZ	e
ZeZdZdZdZdZdZd$ fdd	Zd% fdd	Z fddZ fddZeed&ddZd' fdd	Zed(d d!Zd) fd"d#	Z  ZS )*	UserAdminzadmin/auth/user/add_form.htmlNfields)usernamepasswordzPersonal info)
first_name	last_nameemailZPermissions)	is_activeis_staffis_superusergroupsuser_permissionszImportant dates)Z
last_loginZdate_joined)Zwide)r5   Z	password1Z	password2)classesr4   )r5   r9   r7   r8   r;   )r;   r<   r:   r=   )r5   r7   r8   r9   )r5   )r=   r>   c                    s   |s
| j S t ||S )N)add_fieldsetsr#   get_fieldsets)r%   r    objr(   r*   r+   rA   U   s    zUserAdmin.get_fieldsetsc                    s2   i }|dkr| j |d< || t j||f|S )z7
        Use special form during user creation
        Nform)add_formupdater#   get_form)r%   r    rB   r&   defaultsr(   r*   r+   rF   Z   s
    

zUserAdmin.get_formc                    s$   t d| j| jddgt   S )Nz<id>/password/Zauth_user_password_changer   )r   
admin_siteZ
admin_viewuser_change_passwordr#   get_urls)r%   r(   r*   r+   rJ   d   s    zUserAdmin.get_urlsc                    s   | d ot ||S )Nr6   )
startswithr#   lookup_allowed)r%   lookupvaluer(   r*   r+   rL   m   s     zUserAdmin.lookup_allowed c              
   C   s:   t jt| jd | |||W  5 Q R  S Q R X d S )N)Zusing)r   Zatomicr   Zdb_for_writer"   	_add_view)r%   r    form_urlextra_contextr*   r*   r+   add_views   s    zUserAdmin.add_viewc                    sj   |  |s&| |r"tjr"tdt|d kr2i }| jj| jj	}d|j
d}|| t |||S )NzYour user does not have the "Change user" permission. In order to add users, Django requires that your user account have both the "Add user" and "Change user" permissions set.r*   )Zauto_populated_fieldsZusername_help_text)has_change_permissionZhas_add_permissionr   DEBUGr   r   r"   _meta	get_fieldZUSERNAME_FIELD	help_textrE   r#   rS   )r%   r    rQ   rR   Zusername_fieldrG   r(   r*   r+   rP   y   s    

zUserAdmin._add_viewc                 C   sz  |  |t|}| ||s t|d krHttd| jjjt	|d |j
dkr| ||j}| r|  | ||d }| ||| td}t|| t||j ttd| jj|jj|jjf |jfdS n
| |}d dt|jifg}tj !||i }	tdt	|"  |	||t#|jkp2t#|j$kt#d	d
d
d	d
| jj|d
d	d| j%|}
| jj|_&t'|| j(ptd|
S )Nz8%(name)s object with primary key %(key)r does not exist.)r   keyPOSTzPassword changed successfully.z%s:%s_%s_change)argsr4   zChange password: %sTF)title	adminFormrQ   rC   Zis_popupZis_popup_varaddZchangeZhas_delete_permissionrT   Zhas_absolute_urloptsoriginalZsave_asZ	show_savez$admin/auth/user/change_password.html))Z
get_objectr   rT   r   r   _r"   rV   Zverbose_namer   methodchange_password_formrZ   Zis_validsaveZconstruct_change_messageZ
log_changer   r   successr   userr   r   rH   r   Z	app_labelZ
model_namepklistZbase_fieldsr   ZhelpersZ	AdminFormZget_usernamer   GETZeach_contextZcurrent_appr   change_user_password_template)r%   r    idrQ   rf   rC   Zchange_messagemsg	fieldsetsr]   contextr*   r*   r+   rI      sv    



zUserAdmin.user_change_passwordc                    s:   d|j kr*t|j kr*|j  |_ d|j d< t |||S )z
        Determine the HttpResponse for the add_view stage. It mostly defers to
        its superclass implementation but is customized because the User model
        has a slightly different workflow.
        Z_addanother   Z	_continue)rZ   r   copyr#   response_add)r%   r    rB   Zpost_url_continuer(   r*   r+   rq      s    
zUserAdmin.response_add)N)N)rO   N)rO   N)rO   )N)r,   r-   r.   Zadd_form_templaterj   ra   rm   r@   r	   rC   r
   rD   r   rc   Zlist_displayZlist_filterr/   r0   r1   rA   rF   rJ   rL   sensitive_post_parameters_mcsrf_protect_mrS   rP   rI   rq   r2   r*   r*   r(   r+   r3   +   sH   
 	
	Br3   N)1Zdjango.confr   Zdjango.contribr   r   Zdjango.contrib.admin.optionsr   Zdjango.contrib.admin.utilsr   Zdjango.contrib.authr   Zdjango.contrib.auth.formsr   r	   r
   Zdjango.contrib.auth.modelsr   r   Zdjango.core.exceptionsr   Z	django.dbr   r   Zdjango.httpr   r   Zdjango.template.responser   Zdjango.urlsr   r   Zdjango.utils.decoratorsr   Zdjango.utils.htmlr   Zdjango.utils.translationr   r   ra   Zdjango.views.decorators.csrfr   Zdjango.views.decorators.debugr   rs   rr   registerZ
ModelAdminr   r3   r*   r*   r*   r+   <module>   s.   
