a
    Dg8                     @   sR  d dl mZ d dlZd dl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 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#m$Z$m%Z%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l0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ e ZAe4 de5B  ZCdDe4e5B ZEdDe4e5B ZFd d! ZGd"d# ZHd$d% ZIG d&d' d'e'ZJG d(d) d)eZKG d*d+ d+e+jLZLG d,d- d-e+jMZMG d.d/ d/e+jNZNG d0d1 d1e+jOZOG d2d3 d3e+jPZPG d4d5 d5e-ZQdS )6    )warnN)settings)get_user_modelupdate_session_auth_hash)Group)FieldDoesNotExistPermissionDenied)Q)CheckboxSelectMultiple)RequestContext)reverse)cached_property)gettext)gettext_lazy)hooks)DateRangePickerWidgetWagtailFilterSet
SearchArea)BulkActionsCheckboxColumnColumn
DateColumnStatusTagColumnTitleColumnget_user_display_name)generic)ModelViewSet)BooleanRadioSelect)BaseDropdownMenuButtonButtonWithDropdown)AUTH_USER_APP_LABELAUTH_USER_MODEL_NAME)accepts_kwarg)UserCreationFormUserEditForm)user_can_delete_user)RemovedInWagtail70Warning)get_custom_formz.add_z{}.change_{}z{}.delete_{}c                  C   s(   d} t t| r tdt t| S tS d S )NZWAGTAIL_USER_CREATION_FORMzThe `WAGTAIL_USER_CREATION_FORM` setting is deprecated. Use a custom `UserViewSet` subclass and override `get_form_class()` instead.)hasattrr   r   r'   r(   r$   Zform_setting r+   X/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/users/views/users.pyget_user_creation_form;   s    
r-   c                  C   s(   d} t t| r tdt t| S tS d S )NZWAGTAIL_USER_EDIT_FORMzThe `WAGTAIL_USER_EDIT_FORM` setting is deprecated. Use a custom `UserViewSet` subclass and override `get_form_class()` instead.)r)   r   r   r'   r(   r%   r*   r+   r+   r,   get_user_edit_formH   s    
r.   c                 C   sp   t  }|  D ]\}d|v r(|t |dO }d|v r>|t |dO }d|v rT|t |dO }d|v r|t |dO }q|S )	Nusername)Zusername__icontains
first_name)Zfirst_name__icontains	last_name)Zlast_name__icontainsemail)Zemail__icontains)r	   split)qmodel_fields
conditionsZtermr+   r+   r,   get_users_filter_queryU   s    r7   c                   @   s   e Zd ZdZdS )
UserColumnz!wagtailusers/users/user_cell.htmlN)__name__
__module____qualname__Zcell_template_namer+   r+   r+   r,   r8   h   s   r8   c                       st   e Zd ZejededZejede	dZ
ejdej ededZdddd fd	d
ZG dd dZ  ZS )UserFilterSetZAdministrator)labelwidget
Last logingroupsr   )
field_namequerysetr=   r>   Nrequestprefixc                   sj   t  j||||d z| jjjd W n ty:   Y n,0 tjdtdt	d| j
d< | j
jddd d S )NrC   	is_activeActive)rA   r=   r>   F)last)super__init___metamodel	get_fieldr   django_filtersBooleanFilterr   r   filtersmove_to_end)selfdatarB   rD   rE   	__class__r+   r,   rJ   |   s    zUserFilterSet.__init__c                   @   s   e Zd ZeZg ZdS )zUserFilterSet.MetaN)r9   r:   r;   UserrL   fieldsr+   r+   r+   r,   Meta   s   rX   )NN)r9   r:   r;   rN   rO   r   r   is_superuserZDateFromToRangeFilterr   
last_loginZModelMultipleChoiceFilterr   Zobjectsallr
   grouprJ   rX   __classcell__r+   r+   rT   r,   r<   l   s    r<   c                       s   e Zd ZdZdZdZedZdZdZ	edZ
dZedd	 Zed
d Z fddZdd Zdd Z fddZdd Z  ZS )	IndexViewz:
    Lists the users for management within the admin.
    zwagtailusers/users/index.htmlz%wagtailusers/users/index_results.htmlz
Add a userusersTUsersc                 C   s   |  t}tddd|ddd td| jdd	hr8dnd | jdd
t| jj	dtd| jj	dddtddd tdddddt
ddd dd tdd| jv rdnd dddtdtdddddgS ) NZbulk_actionsuser)Zobj_typenamec                 S   s   t | S Nr   ur+   r+   r,   <lambda>       z#IndexView.columns.<locals>.<lambda>Namer0   r1   )accessorr=   sort_keyget_url	classnameZget_usernameZUsernamer/   z20%)ri   r=   rj   rl   widthrY   c                 S   s   | j rtdS d S )NZAdmin)rY   r   rd   r+   r+   r,   rf      rg   zAccess levellevelz10%rF   c                 S   s   | j rtdS tdS )NrG   ZInactive)rF   r   rd   r+   r+   r,   rf      s    
c                 S   s   | j S rc   )rF   rd   r+   r+   r,   rf      rg   ZStatusstatus)ri   Zprimaryr=   rj   rl   rm   rZ   r?   z
last-loginz15%)r=   rj   rl   rm   )Z_get_title_column_classr8   r   r   r5   
issupersetZget_edit_urlr   rL   ZUSERNAME_FIELDr   r   )rR   Z_UserColumnr+   r+   r,   columns   sZ    


zIndexView.columnsc                 C   s   dd t j D S )Nc                 S   s   h | ]
}|j qS r+   )rb   ).0fr+   r+   r,   	<setcomp>   rg   z)IndexView.model_fields.<locals>.<setcomp>)rV   rK   Z
get_fieldsrR   r+   r+   r,   r5      s    zIndexView.model_fieldsc                    s   t | jj|rt |S d S rc   )r&   rD   ra   rI   get_delete_urlrR   instancerT   r+   r,   rv      s    zIndexView.get_delete_urlc              
   C   s   |  |}g }tdD ]x}t|dr8||| jjd}n.|t| j|}td|j d|j	 dt
d |D ]$}t|tr|| qj|| qjq|tt|dd	td
dt|i id t|S )NZregister_user_listing_buttonsrequest_user)ra   ry   zn`register_user_listing_buttons` hook functions should accept a `request_user` argument instead of `context` - .z needs to be updated)categoryzdots-horizontalz
aria-labelzMore options for '%(title)s'title)Zbuttons	icon_nameattrs)Zget_list_more_buttonsr   Z	get_hooksr#   rD   ra   r   r   r:   r9   r'   
isinstancer   appendr    sorted_str)rR   rx   Zmore_buttonsZlist_buttonshookZhook_buttonsbuttonr+   r+   r,   get_list_buttons   s:    



zIndexView.get_list_buttonsc                 C   s"   t j }d| jv r|d}|S )NZwagtail_userprofile)rV   Z_default_managerr[   r5   Zselect_related)rR   r_   r+   r+   r,   get_base_queryset   s    


zIndexView.get_base_querysetc                    s8   | j dkr|ddS | j dkr,|ddS t |S )Nrb   r1   r0   z-namez
-last_namez-first_name)orderingZorder_byrI   order_queryset)rR   rB   rT   r+   r,   r     s
    

zIndexView.order_querysetc                 C   s"   | j rt| j| j}||S |S rc   )Zis_searchingr7   Zsearch_queryr5   filter)rR   rB   r6   r+   r+   r,   search_queryset  s    
zIndexView.search_queryset)r9   r:   r;   __doc__Ztemplate_nameZresults_template_namer   Zadd_item_labelcontext_object_nameZis_searchable
page_titleZshow_other_searchesr   rq   r5   rv   r   r   r   r   r]   r+   r+   rT   r,   r^      s"   
2
&r^   c                   @   s0   e Zd ZdZedZedZdd Zdd ZdS )	
CreateViewz@
    Provide the ability to create a user within the admin.
    zUser '%(object)s' created.zAdd userc                 C   s   |  d| jS )NZbefore_create_user)run_hookrD   ru   r+   r+   r,   run_before_hook  s    zCreateView.run_before_hookc                 C   s   |  d| j| jS )NZafter_create_userr   rD   objectru   r+   r+   r,   run_after_hook#  s
    zCreateView.run_after_hookN)	r9   r:   r;   r   r   success_messager   r   r   r+   r+   r+   r,   r     s
   r   c                       sp   e Zd ZdZedZedZdZ fddZ fddZ	 fd	d
Z
dd Zdd Zdd Z fddZ  ZS )EditViewz>
    Provide the ability to edit a user within the admin.
    zUser '%(object)s' updated.z*The user could not be saved due to errors.ra   c                    sF   t  j|g|R i | |  | _t|j| j| _|j| jk| _d S rc   )rI   setup
get_objectr   r&   ra   
can_deleteediting_selfrR   rD   argskwargsrT   r+   r,   r   4  s    
zEditView.setupc                    s6   t   }| j| jjkr2d| jjv r2t| j| j |S )NZ	password1)rI   save_instancer   rD   ra   formZchanged_datar   rw   rT   r+   r,   r   :  s    
zEditView.save_instancec                    s   t   }|d| ji |S )Nr   )rI   get_form_kwargsupdater   rR   r   rT   r+   r,   r   A  s    
zEditView.get_form_kwargsc                 C   s   |  d| j| jS )NZbefore_edit_userr   ru   r+   r+   r,   r   J  s
    zEditView.run_before_hookc                 C   s   |  d| j| jS )NZafter_edit_userr   ru   r+   r+   r,   r   Q  s
    zEditView.run_after_hookc                 C   s
   t | jS rc   r   r   ru   r+   r+   r,   get_page_subtitleX  s    zEditView.get_page_subtitlec                    s    t  jf i |}| j|d< |S )Nr   )rI   get_context_datar   )rR   r   contextrT   r+   r,   r   [  s    
zEditView.get_context_data)r9   r:   r;   r   r   r   error_messager   r   r   r   r   r   r   r   r]   r+   r+   rT   r,   r   +  s   	r   c                       sD   e Zd ZdZedZedZdZ fddZdd Z	d	d
 Z
  ZS )
DeleteViewz@
    Provide the ability to delete a user within the admin.
    zDelete userzUser '%(object)s' deleted.ra   c                    s8   |   | _t| jj| jstt j|g|R i |S rc   )r   r   r&   rD   ra   r   rI   dispatchr   rT   r+   r,   r   j  s    
zDeleteView.dispatchc                 C   s   |  d| j| jS )NZbefore_delete_userr   ru   r+   r+   r,   r   p  s
    zDeleteView.run_before_hookc                 C   s   |  d| j| jS )NZafter_delete_userr   ru   r+   r+   r,   r   w  s
    zDeleteView.run_after_hook)r9   r:   r;   r   r   r   r   r   r   r   r   r]   r+   r+   rT   r,   r   a  s   r   c                   @   s   e Zd Zdd ZdS )HistoryViewc                 C   s
   t | jS rc   r   ru   r+   r+   r,   r     s    zHistoryView.get_page_subtitleN)r9   r:   r;   r   r+   r+   r+   r,   r     s   r   c                       s   e Zd ZdZeZdZdZeZ	dZ
edZdZdZeZeZeZeZeZdZ fd	d
ZdddZedd Zdd Zdd Z fddZ   Z!S )UserViewSetra   rb   Fr_   r`   X  Tzwagtailusers/users/c                    s   t  jf i dd i|S )NZusage_url_name)rI   get_common_view_kwargsr   rT   r+   r,   r     s    
z"UserViewSet.get_common_view_kwargsc                 C   s   |r
t  S t S rc   )r.   r-   )rR   Z
for_updater+   r+   r,   get_form_class  s    zUserViewSet.get_form_classc                    s   G  fdddt }|S )Nc                       s   e Zd Z fddZdS )z6UserViewSet.search_area_class.<locals>.UsersSearchAreac                    s    j |jh dS )N>   Zchangeadddelete)Zpermission_policyZuser_has_any_permissionra   )Zsearch_arearD   ru   r+   r,   is_shown  s    
z?UserViewSet.search_area_class.<locals>.UsersSearchArea.is_shownN)r9   r:   r;   r   r+   ru   r+   r,   UsersSearchArea  s   r   r   )rR   r   r+   ru   r,   search_area_class  s    zUserViewSet.search_area_classc                 C   s"   | j tdt| dddddS )Nr`   indexr_   ra   r   )rb   r}   order)r   r   r   Zget_url_nameru   r+   r+   r,   get_search_area  s    zUserViewSet.get_search_areac                 C   s   t d| j d S )NZregister_admin_search_area)r   registerr   ru   r+   r+   r,   register_search_area  s    z UserViewSet.register_search_areac                    s   t    |   d S rc   )rI   on_registerr   ru   rT   r+   r,   r     s    
zUserViewSet.on_register)F)"r9   r:   r;   ZiconrV   rL   r   Zadd_to_reference_indexr<   Zfilterset_classZ	menu_namer   Z
menu_labelZ
menu_orderZadd_to_settings_menur^   Zindex_view_classr   Zadd_view_classr   Zedit_view_classr   Zdelete_view_classr   Zhistory_view_classZtemplate_prefixr   r   r   r   r   r   r   r]   r+   r+   rT   r,   r     s,   

		r   )Rwarningsr   rN   Zdjango.confr   Zdjango.contrib.authr   r   Zdjango.contrib.auth.modelsr   Zdjango.core.exceptionsr   r   Zdjango.db.modelsr	   Zdjango.formsr
   Zdjango.templater   Zdjango.urlsr   Zdjango.utils.functionalr   Zdjango.utils.translationr   r   r   Zwagtailr   Zwagtail.admin.filtersr   r   Zwagtail.admin.searchr   Zwagtail.admin.ui.tablesr   r   r   r   r   Zwagtail.admin.utilsr   Zwagtail.admin.viewsr   Zwagtail.admin.viewsets.modelr   Z*wagtail.admin.widgets.boolean_radio_selectr   Zwagtail.admin.widgets.buttonr   r    Zwagtail.compatr!   r"   Zwagtail.coreutilsr#   Zwagtail.users.formsr$   r%   Zwagtail.users.utilsr&   Zwagtail.utils.deprecationr'   Zwagtail.utils.loadingr(   rV   lowerZadd_user_permformatZchange_user_permZdelete_user_permr-   r.   r7   r8   r<   r^   r   r   r   r   r   r+   r+   r+   r,   <module>   s^   # 6