o
    h8                     @   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   $   d} t t| rtdt t| S tS )N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$   form_setting r.   Y/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/users/views/users.pyget_user_creation_form;      
r0   c                  C   r)   )N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   r1   r3   c                 C   sp   t  }|  D ].}d|v r|t |dO }d|v r|t |dO }d|v r*|t |dO }d|v r5|t |dO }q|S )	Nusername)username__icontains
first_name)first_name__icontains	last_name)last_name__icontainsemail)email__icontains)r	   split)qmodel_fields
conditionstermr.   r.   r/   get_users_filter_queryU   s   rA   c                   @   s   e Zd ZdZdS )
UserColumnz!wagtailusers/users/user_cell.htmlN)__name__
__module____qualname__cell_template_namer.   r.   r.   r/   rB   h   s    rB   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 )UserFilterSetAdministrator)labelwidget
Last logingroupsr   )
field_namequerysetrI   rJ   Nrequestprefixc                   sl   t  j||||d z
| jjjd W n
 ty   Y d S w tjdtdt	d| j
d< | j
jddd d S )NrO   	is_activeActive)rM   rI   rJ   F)last)super__init___metamodel	get_fieldr   django_filtersBooleanFilterr   r   filtersmove_to_end)selfdatarN   rP   rQ   	__class__r.   r/   rV   |   s   zUserFilterSet.__init__c                   @   s   e Zd ZeZg ZdS )zUserFilterSet.MetaN)rC   rD   rE   UserrX   fieldsr.   r.   r.   r/   Meta   s    rd   )NN)rC   rD   rE   rZ   r[   r   r   is_superuserDateFromToRangeFilterr   
last_loginModelMultipleChoiceFilterr   objectsallr
   grouprV   rd   __classcell__r.   r.   r`   r/   rG   l   s"    rG   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rd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 rPdnd dddtdtdddddgS ) Nbulk_actionsuser)obj_typenamec                 S   s   t | S Nr   ur.   r.   r/   <lambda>   s    z#IndexView.columns.<locals>.<lambda>Namer6   r8   )accessorrI   sort_keyget_url	classnameget_usernameUsernamer4   z20%)ry   rI   rz   r|   widthre   c                 S   s   | j rtdS d S )NAdmin)re   r   ru   r.   r.   r/   rw          zAccess levellevelz10%rR   c                 S   s   | j rtdS tdS )NrS   Inactive)rR   r   ru   r.   r.   r/   rw      s   
c                 S   s   | j S rt   )rR   ru   r.   r.   r/   rw      s    Statusstatus)ry   primaryrI   rz   r|   r   rg   rK   z
last-loginz15%)rI   rz   r|   r   )_get_title_column_classrB   r   r   r>   
issupersetget_edit_urlr   rX   USERNAME_FIELDr   r   )r^   _UserColumnr.   r.   r/   columns   sZ   


zIndexView.columnsc                 C   s   dd t j D S )Nc                 S   s   h | ]}|j qS r.   )rs   ).0fr.   r.   r/   	<setcomp>   r   z)IndexView.model_fields.<locals>.<setcomp>)rb   rW   
get_fieldsr^   r.   r.   r/   r>      s   zIndexView.model_fieldsc                    s   t | jj|rt |S d S rt   )r&   rP   rq   rU   get_delete_urlr^   instancer`   r.   r/   r      s   zIndexView.get_delete_urlc              
   C   s   |  |}g }tdD ]<}t|dr||| jjd}n|t| j|}td|j d|j	 dt
d |D ]}t|trB|| q5|| q5q|tt|dd	td
dt|i id t|S )Nregister_user_listing_buttonsrequest_user)rq   r   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)buttons	icon_nameattrs)get_list_more_buttonsr   	get_hooksr#   rP   rq   r   r   rD   rC   r'   
isinstancer   appendr    sorted_str)r^   r   more_buttonslist_buttonshookhook_buttonsbuttonr.   r.   r/   get_list_buttons   s<   


	
zIndexView.get_list_buttonsc                 C   s"   t j }d| jv r|d}|S )Nwagtail_userprofile)rb   _default_managerrj   r>   select_related)r^   rn   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 )Nrs   r8   r6   z-namez
-last_namez-first_name)orderingorder_byrU   order_queryset)r^   rN   r`   r.   r/   r     s
   

zIndexView.order_querysetc                 C   s"   | j rt| j| j}||S |S rt   )is_searchingrA   search_queryr>   filter)r^   rN   r?   r.   r.   r/   search_queryset  s   
zIndexView.search_queryset)rC   rD   rE   __doc__template_nameresults_template_namer   add_item_labelcontext_object_nameis_searchable
page_titleshow_other_searchesr   r   r>   r   r   r   r   r   rl   r.   r.   r`   r/   rm      s$    
2
&rm   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 )Nbefore_create_user)run_hookrP   r   r.   r.   r/   run_before_hook  s   zCreateView.run_before_hookc                 C      |  d| j| jS )Nafter_create_userr   rP   objectr   r.   r.   r/   run_after_hook#  
   zCreateView.run_after_hookN)	rC   rD   rE   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.rq   c                    sF   t  j|g|R i | |  | _t|j| j| _|j| jk| _d S rt   )rU   setup
get_objectr   r&   rq   
can_deleteediting_selfr^   rP   argskwargsr`   r.   r/   r   4  s   
zEditView.setupc                    s6   t   }| j| jjkrd| jjv rt| j| j |S )N	password1)rU   save_instancer   rP   rq   formchanged_datar   r   r`   r.   r/   r   :  s   
zEditView.save_instancec                    s   t   }|d| ji |S )Nr   )rU   get_form_kwargsupdater   r^   r   r`   r.   r/   r   A  s   
zEditView.get_form_kwargsc                 C   r   )Nbefore_edit_userr   r   r.   r.   r/   r   J  r   zEditView.run_before_hookc                 C   r   )Nafter_edit_userr   r   r.   r.   r/   r   Q  r   zEditView.run_after_hookc                 C   
   t | jS rt   r   r   r   r.   r.   r/   get_page_subtitleX     
zEditView.get_page_subtitlec                    s    t  jdi |}| j|d< |S )Nr   r.   )rU   get_context_datar   )r^   r   contextr`   r.   r/   r   [  s   
zEditView.get_context_data)rC   rD   rE   r   r   r   error_messager   r   r   r   r   r   r   r   rl   r.   r.   r`   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.rq   c                    s8   |   | _t| jj| jstt j|g|R i |S rt   )r   r   r&   rP   rq   r   rU   dispatchr   r`   r.   r/   r   j  s   
zDeleteView.dispatchc                 C   r   )Nbefore_delete_userr   r   r.   r.   r/   r   p  r   zDeleteView.run_before_hookc                 C   r   )Nafter_delete_userr   r   r.   r.   r/   r   w  r   zDeleteView.run_after_hook)rC   rD   rE   r   r   r   r   r   r   r   r   rl   r.   r.   r`   r/   r   a  s    r   c                   @   s   e Zd Zdd ZdS )HistoryViewc                 C   r   rt   r   r   r.   r.   r/   r     r   zHistoryView.get_page_subtitleN)rC   rD   rE   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 )UserViewSetrq   rs   Frn   ro   X  Tzwagtailusers/users/c                    s   t  jdi dd i|S )Nusage_url_namer.   )rU   get_common_view_kwargsr   r`   r.   r/   r     s   
z"UserViewSet.get_common_view_kwargsc                 C   s   |rt  S t S rt   )r3   r0   )r^   
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>   addchangedelete)permission_policyuser_has_any_permissionrq   )search_arearP   r   r.   r/   is_shown  s   
z?UserViewSet.search_area_class.<locals>.UsersSearchArea.is_shownN)rC   rD   rE   r   r.   r   r.   r/   UsersSearchArea  s    r   r   )r^   r   r.   r   r/   search_area_class  s   zUserViewSet.search_area_classc                 C   s"   | j tdt| dddddS )Nro   indexrn   rq   r   )rs   r   order)r   r   r   get_url_namer   r.   r.   r/   get_search_area  s   zUserViewSet.get_search_areac                 C   s   t d| j d S )Nregister_admin_search_area)r   registerr   r   r.   r.   r/   register_search_area  s   z UserViewSet.register_search_areac                    s   t    |   d S rt   )rU   on_registerr   r   r`   r.   r/   r     s   
zUserViewSet.on_register)F)"rC   rD   rE   iconrb   rX   r   add_to_reference_indexrG   filterset_class	menu_namer   
menu_label
menu_orderadd_to_settings_menurm   index_view_classr   add_view_classr   edit_view_classr   delete_view_classr   history_view_classtemplate_prefixr   r   r   r   r   r   r   rl   r.   r.   r`   r/   r     s.    

		r   )Rwarningsr   rZ   django.confr   django.contrib.authr   r   django.contrib.auth.modelsr   django.core.exceptionsr   r   django.db.modelsr	   django.formsr
   django.templater   django.urlsr   django.utils.functionalr   django.utils.translationr   r   r   wagtailr   wagtail.admin.filtersr   r   wagtail.admin.searchr   wagtail.admin.ui.tablesr   r   r   r   r   wagtail.admin.utilsr   wagtail.admin.viewsr   wagtail.admin.viewsets.modelr   *wagtail.admin.widgets.boolean_radio_selectr   wagtail.admin.widgets.buttonr   r    wagtail.compatr!   r"   wagtail.coreutilsr#   wagtail.users.formsr$   r%   wagtail.users.utilsr&   wagtail.utils.deprecationr'   wagtail.utils.loadingr(   rb   loweradd_user_permformatchange_user_permdelete_user_permr0   r3   rA   rB   rG   rm   r   r   r   r   r   r.   r.   r.   r/   <module>   s`    # 6