U
    |h.8                     @   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+   a/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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|kr(|t |dO }d|kr>|t |dO }d|krT|t |dO }d|k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
conditionstermr+   r+   r,   get_users_filter_queryU   s    r8   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,   r9   h   s   r9   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                   sl   t  j||||d z| jjjd W n tk
r<   Y n,X tjdtdt	d| j
d< | j
jddd d S )NrD   	is_activeActive)rB   r>   r?   F)last)super__init___metamodel	get_fieldr   django_filtersBooleanFilterr   r   filtersmove_to_end)selfdatarC   rE   rF   	__class__r+   r,   rK   |   s    zUserFilterSet.__init__c                   @   s   e Zd ZeZg ZdS )zUserFilterSet.MetaN)r:   r;   r<   UserrM   fieldsr+   r+   r+   r,   Meta   s   rY   )NN)r:   r;   r<   rO   rP   r   r   is_superuserZDateFromToRangeFilterr   
last_loginZModelMultipleChoiceFilterr   objectsallr
   grouprK   rY   __classcell__r+   r+   rU   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krdnd dddtdtdddddgS ) NZbulk_actionsuser)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%)rl   r>   rm   ro   widthrZ   c                 S   s   | j rtdS d S )NZAdmin)rZ   r   rg   r+   r+   r,   ri      rj   zAccess levellevelz10%rG   c                 S   s   | j rtdS tdS )NrH   ZInactive)rG   r   rg   r+   r+   r,   ri      s    
c                 S   s   | j S rf   )rG   rg   r+   r+   r,   ri      rj   Statusstatus)rl   primaryr>   rm   ro   rp   r[   r@   z
last-loginz15%)r>   rm   ro   rp   )Z_get_title_column_classr9   r   r   r5   
issupersetZget_edit_urlr   rM   ZUSERNAME_FIELDr   r   )rS   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+   )re   ).0fr+   r+   r,   	<setcomp>   s     z)IndexView.model_fields.<locals>.<setcomp>)rW   rL   Z
get_fieldsrS   r+   r+   r,   r5      s    zIndexView.model_fieldsc                    s   t | jj|rt |S d S rf   )r&   rE   rc   rJ   get_delete_urlrS   instancerU   r+   r,   r{      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)rc   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)Zbuttons	icon_nameattrs)Zget_list_more_buttonsr   Z	get_hooksr#   rE   rc   r   r   r;   r:   r'   
isinstancer   appendr    sorted_str)rS   r}   Zmore_buttonsZlist_buttonshookZhook_buttonsZbuttonr+   r+   r,   get_list_buttons   s4    


 
zIndexView.get_list_buttonsc                 C   s"   t j }d| jkr|d}|S )NZwagtail_userprofile)rW   Z_default_managerr]   r5   Zselect_related)rS   ra   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 )Nre   r1   r0   z-namez
-last_namez-first_name)orderingZorder_byrJ   order_queryset)rS   rC   rU   r+   r,   r     s
    

zIndexView.order_querysetc                 C   s"   | j rt| j| j}||S |S rf   )Zis_searchingr8   Zsearch_queryr5   filter)rS   rC   r6   r+   r+   r,   search_queryset  s    
zIndexView.search_queryset)r:   r;   r<   __doc__Ztemplate_nameZresults_template_namer   Zadd_item_labelcontext_object_nameZis_searchable
page_titleZshow_other_searchesr   rv   r5   r{   r   r   r   r   r_   r+   r+   rU   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_hookrE   rz   r+   r+   r,   run_before_hook  s    zCreateView.run_before_hookc                 C   s   |  d| j| jS )NZafter_create_userr   rE   objectrz   r+   r+   r,   run_after_hook!  s
    zCreateView.run_after_hookN)	r:   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.rc   c                    s@   t  j|f|| |  | _t|j| j| _|j| jk| _d S rf   )rJ   setup
get_objectr   r&   rc   
can_deleteediting_selfrS   rE   argskwargsrU   r+   r,   r   2  s    
zEditView.setupc                    s6   t   }| j| jjkr2d| jjkr2t| j| j |S )NZ	password1)rJ   save_instancer   rE   rc   formZchanged_datar   r|   rU   r+   r,   r   8  s    
zEditView.save_instancec                    s   t   }|d| ji |S )Nr   )rJ   get_form_kwargsupdater   rS   r   rU   r+   r,   r   ?  s    
 zEditView.get_form_kwargsc                 C   s   |  d| j| jS )NZbefore_edit_userr   rz   r+   r+   r,   r   H  s
    zEditView.run_before_hookc                 C   s   |  d| j| jS )NZafter_edit_userr   rz   r+   r+   r,   r   O  s
    zEditView.run_after_hookc                 C   s
   t | jS rf   r   r   rz   r+   r+   r,   get_page_subtitleV  s    zEditView.get_page_subtitlec                    s   t  jf |}| j|d< |S )Nr   )rJ   get_context_datar   )rS   r   contextrU   r+   r,   r   Y  s    
zEditView.get_context_data)r:   r;   r<   r   r   r   error_messager   r   r   r   r   r   r   r   r_   r+   r+   rU   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.rc   c                    s2   |   | _t| jj| jstt j|f||S rf   )r   r   r&   rE   rc   r   rJ   dispatchr   rU   r+   r,   r   h  s    
zDeleteView.dispatchc                 C   s   |  d| j| jS )NZbefore_delete_userr   rz   r+   r+   r,   r   n  s
    zDeleteView.run_before_hookc                 C   s   |  d| j| jS )NZafter_delete_userr   rz   r+   r+   r,   r   u  s
    zDeleteView.run_after_hook)r:   r;   r<   r   r   r   r   r   r   r   r   r_   r+   r+   rU   r,   r   _  s   r   c                   @   s   e Zd Zdd ZdS )HistoryViewc                 C   s
   t | jS rf   r   rz   r+   r+   r,   r   ~  s    zHistoryView.get_page_subtitleN)r:   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 )UserViewSetrc   re   Fra   rb   X  Tzwagtailusers/users/c                    s   t  jf dd i|S )NZusage_url_name)rJ   get_common_view_kwargsr   rU   r+   r,   r     s     z"UserViewSet.get_common_view_kwargsc                 C   s   |r
t  S t S rf   )r.   r-   )rS   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dddhS )NaddZchangedelete)Zpermission_policyZuser_has_any_permissionrc   )Zsearch_arearE   rz   r+   r,   is_shown  s     z?UserViewSet.search_area_class.<locals>.UsersSearchArea.is_shownN)r:   r;   r<   r   r+   rz   r+   r,   UsersSearchArea  s   r   r   )rS   r   r+   rz   r,   search_area_class  s    zUserViewSet.search_area_classc                 C   s"   | j tdt| dddddS )Nrb   indexra   rc   r   )re   r   order)r   r   r   Zget_url_namerz   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   rz   r+   r+   r,   register_search_area  s    z UserViewSet.register_search_areac                    s   t    |   d S rf   )rJ   on_registerr   rz   rU   r+   r,   r     s    
zUserViewSet.on_register)F)"r:   r;   r<   iconrW   rM   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+   rU   r,   r     s,   

		r   )Rwarningsr   rO   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(   rW   lowerZadd_user_permformatZchange_user_permZdelete_user_permr-   r.   r8   r9   r=   r`   r   r   r   r   r   r+   r+   r+   r,   <module>   sb     # 6