B
    CVvg!                 @   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 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$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-install-o3oxmrkh/Django/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)r3   Z	password1Z	password2)classesr2   )r3   r7   r5   r6   r9   )r9   r:   r8   r;   )r3   r5   r6   r7   )r3   )r;   r<   c                s   |s
| j S t ||S )N)add_fieldsetsr"   get_fieldsets)r$   r   obj)r'   r(   r)   r?   C   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   r@   r%   defaults)r'   r(   r)   rD   H   s
    

zUserAdmin.get_formc                s$   t d| j| jddgt   S )Nz<id>/password/Zauth_user_password_change)r   )r   
admin_siteZ
admin_viewuser_change_passwordr"   get_urls)r$   )r'   r(   r)   rH   R   s
    zUserAdmin.get_urlsc                s   | d ot ||S )Nr4   )
startswithr"   lookup_allowed)r$   lookupvalue)r'   r(   r)   rJ   [   s    zUserAdmin.lookup_allowed c          	   C   s.   t jt| jd | |||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_view_   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_textrC   r"   rQ   )r$   r   rO   rP   Zusername_fieldrE   )r'   r(   r)   rN   e   s    


zUserAdmin._add_viewc             C   sx  |  |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d	d
d
d	d
| jj|d
d	d| j%|}
| jj|_&t'|| j(prd|
S )Nz8%(name)s object with primary key %(key)r does not exist.)r   keyPOSTzPassword changed successfully.z%s:%s_%s_change)argsr2   zChange password: %sTF)title	adminFormrO   rA   Zis_popupaddZchangeZhas_delete_permissionrR   Zhas_absolute_urloptsoriginalZsave_asZ	show_savez$admin/auth/user/change_password.html))Z
get_objectr   rR   r   r   _r!   rT   Zverbose_namer   methodchange_password_formrX   Zis_validsaveZconstruct_change_messageZ
log_changer   r   successr   userr   r   rF   r   Z	app_labelZ
model_namepklistZbase_fieldsr   helpersZ	AdminFormZget_usernamer   GETZeach_contextZcurrent_appr   change_user_password_template)r$   r   idrO   rd   rA   Zchange_messagemsg	fieldsetsr[   contextr(   r(   r)   rG      s`    



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)rX   r   copyr"   response_add)r$   r   r@   Zpost_url_continue)r'   r(   r)   rp      s    
zUserAdmin.response_add)N)N)rM   N)rM   N)rM   )N)r*   r+   r,   Zadd_form_templateri   r_   rl   r>   r	   rA   r
   rB   r   ra   Zlist_displayZlist_filterr-   r.   r/   r?   rD   rH   rJ   sensitive_post_parameters_mcsrf_protect_mrQ   rN   rG   rp   r0   r(   r(   )r'   r)   r1   (   s:   

	>r1   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   r_   Zdjango.views.decorators.csrfr   Zdjango.views.decorators.debugr   rr   rq   registerZ
ModelAdminr   r1   r(   r(   r(   r)   <module>   s,   

