o
    h+4                     @   s  d dl 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 d d
l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mZ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,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 dd Z5G dd de!Z6G dd de,Z7G dd de-e&e(Z8G d d! d!eZ9G d"d# d#eZ:G d$d% d%e*e(Z;dS )&    N)OrderedDict)quote)ContentType)PermissionDenied)CheckboxSelectMultiple)get_object_or_404redirect)reverse)classproperty)gettextgettext_lazyngettext)TemplateView)DateFromToRangeFilter)messages)DateRangePickerWidgetMultipleContentTypeFilterWagtailFilterSet)ColumnTitleColumn)get_valid_next_url_from_request)PermissionCheckedMixin)BaseListingView)SpreadsheetExportMixin)PageFilterSetPageListingMixin)get_form_typesget_forms_for_user)Page)page_permission_policyc                 O   s0   | d}tt|dj}|j| g|R i |S )z0Call the form page's list submissions view classpage_idid)getr   r   specificserve_submissions_list_view)requestargskwargsr    	form_page r*   [/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/forms/views.pyget_submissions_list_view    s   
r,   c                       s,   e Zd ZdZdZdd Z fddZ  ZS )ContentTypeColumnzwagtailadmin_pages:editz%wagtailforms/content_type_column.htmlc                 C   s   t | jt|jfdS Nr'   )r	   edit_url_namer   pk)selfinstancer*   r*   r+   get_url+   s   zContentTypeColumn.get_urlc                    s    t  ||}| ||d< |S )Nurl)superget_cell_context_datar4   )r2   r3   parent_contextcontext	__class__r*   r+   r7   .   s   z'ContentTypeColumn.get_cell_context_data)__name__
__module____qualname__r0   cell_template_namer4   r7   __classcell__r*   r*   r:   r+   r-   '   s
    r-   c                   @   s"   e Zd Zeeddd edZdS )FormPageFilterSetz	Page typec                 C   s    t jjdd t D ddS )Nc                 S   s   g | ]}|j qS r*   r1   ).0ctr*   r*   r+   
<listcomp>8   s    z.FormPageFilterSet.<lambda>.<locals>.<listcomp>)pk__inmodel)r   objectsfilterr   order_by)r&   r*   r*   r+   <lambda>7   s    zFormPageFilterSet.<lambda>)labelquerysetwidgetN)r<   r=   r>   r   r   r   content_typer*   r*   r*   r+   rA   4   s    
rA   c                   @   sl   e Zd ZdZeZh dZdZdZdZ	dZ
dZdZd	Zed
ZdZeZdZeZedd Zdd Zdd ZdS )FormPagesListViewz3Lists the available form pages for the current user>   addlockchangeunlockpublishbulk_deletezwagtailforms/index.htmlzwagtailforms/index_results.html
form_pages   pwagtailforms:indexzwagtailforms:index_resultsFormsformTc                 C   sP   dd t jD }|dtddtddddd |d	td
tdd
dd |S )Nc                 S   s   g | ]	}|j d vr|qS )>   typetitle)name)rC   colr*   r*   r+   rE   Y   s    z-FormPagesListView.columns.<locals>.<listcomp>   r^   Titlewagtailforms:list_submissionsz30%)	classnamerL   url_namesort_keywidthrO   Originz20%)rL   rf   rg   )r   columnsinsertr   r   r-   )r2   rj   r*   r*   r+   rj   W   s0   	zFormPagesListView.columnsc                 C   s   | j d| jtddg S )N Pagesr5   rL   sublabel)breadcrumbs_items
page_titler   r2   r*   r*   r+   get_breadcrumbs_itemsr   s   z'FormPagesListView.get_breadcrumbs_itemsc                 C   s   t | jjd}| |S )z/Return the queryset of form pages for this viewrO   )r   r&   userselect_relatedannotate_queryset)r2   pagesr*   r*   r+   get_base_querysetw   s   
z#FormPagesListView.get_base_querysetN)r<   r=   r>   __doc__r   permission_policyany_permission_requiredtemplate_nameresults_template_namecontext_object_namepaginate_by
page_kwargindex_url_nameindex_results_url_namer   rq   header_iconr   rG   is_searchablerA   filterset_classr
   rj   rs   rx   r*   r*   r*   r+   rP   >   s(    
rP   c                       sT   e Zd ZdZdZdZdZdZdd Zdd Z	d	d
 Z
 fddZ fddZ  ZS )DeleteSubmissionsViewzDelete the selected submissionsz wagtailforms/confirm_delete.htmlNrc   c                 C   s&   | j jd}| j }|jj|dS )z/Returns a queryset for the selected submissionszselected-submissions)id__in)r&   GETgetlistpageget_submission_class_default_managerrI   )r2   submission_idssubmission_classr*   r*   r+   get_queryset   s   
z"DeleteSubmissionsView.get_querysetc                 C   s2   |  }|  t| jtdd|d|i  dS )zDeletes the given querysetz One submission has been deleted.z(%(count)d submissions have been deleted.countN)r   deleter   successr&   r   )r2   submissionsr   r*   r*   r+   handle_delete   s   z#DeleteSubmissionsView.handle_deletec                 C   s&   t | j}|r	|S t| j| jjfdS )zBReturns the success URL to redirect to after a successful deletionr/   )r   r&   r	   success_url_namer   r"   )r2   next_urlr*   r*   r+   get_success_url   s   
z%DeleteSubmissionsView.get_success_urlc                    s~   | d}t| jjj|d sttt|dj	| _
|  | _| jjdkr2| | j t|  S t j|g|R i |S )z>Check permissions, set the page and submissions, handle deleter    r!   POST)r#   r   r&   rt   rI   existsr   r   r   r$   r   r   r   methodr   r   r   r6   dispatch)r2   r&   r'   r(   r    r:   r*   r+   r      s   

zDeleteSubmissionsView.dispatchc                    s6   t  jdi |}|| j| jd |  |d< |S )zGet the context for this view)r   r   r   Nr*   )r6   get_context_dataupdater   r   r   )r2   r(   r9   r:   r*   r+   r      s   z&DeleteSubmissionsView.get_context_data)r<   r=   r>   ry   r|   r   r   r   r   r   r   r   r   r@   r*   r*   r:   r+   r   }   s    r   c                   @   s   e Zd ZeeddedZdS )SubmissionsListFilterSetzSubmission datesubmit_time)rL   
field_namerN   N)r<   r=   r>   r   r   r   dater*   r*   r*   r+   r      s    
r   c                       s   e Zd ZdZdZdZdZdZdZdZ	dZ
ed	Zd
ZdZeZdZdZdZdZ fddZ fddZdd Zdd Zdd Zdd Z fddZdd Zd d! Zd"d# Zd$d% Zd&d' Z  fd(d)Z!  Z"S )*SubmissionsListViewz,Lists submissions for the provided form pagez#wagtailforms/submissions_index.htmlz"wagtailforms/list_submissions.htmlr   N)z-submit_time)r   )r"   r   z	Form datar\   rX   rZ   rc   z%wagtailforms:list_submissions_resultsTc                    sn   | d| _t|jj| jjd st| jr*| j	 }dd |D | _
t|| _t j|g|R i |S )z'Check permissions and set the form pager)   rB   c                 S   s   g | ]\}}|qS r*   r*   )rC   fieldrL   r*   r*   r+   rE      s    z0SubmissionsListView.dispatch.<locals>.<listcomp>)r#   r)   r   rt   rI   r"   r   r   	is_exportget_data_fieldslist_exportdictexport_headingsr6   r   )r2   r&   r'   r(   data_fieldsr:   r*   r+   r      s   

zSubmissionsListView.dispatchc                    s   t   }|  |d< |S )NrM   )r6   get_filterset_kwargsrx   )r2   r(   r:   r*   r+   r      s   
z(SubmissionsListView.get_filterset_kwargsc                 C   s   | j  }|jj| j d}|S )z#Return queryset of form submissions)r   )r)   r   r   rI   )r2   r   rM   r*   r*   r+   rx      s   
z%SubmissionsListView.get_base_querysetc           	   
   C   s   | j pd}i }| jr| jpd}n| jpd}t|tr|f}| jjdp't	|}|D ]'}z|
d\}}}||v rE||dkr@dndf||< W q* ttfyQ   Y q*w |S )zFReturn a dict of field names with ordering labels if ordering is validr*   rJ   -
descending	ascending)orderable_fieldsr   ordering_csvdefault_ordering
isinstancestrr&   r   r   list
rpartition
IndexError
ValueError)	r2   r   orderingr   ordering_strsorder_prefixr   r*   r*   r+   get_validated_ordering   s(   


z*SubmissionsListView.get_validated_orderingc                 C   s   |   }dd | D S )z;Return the field or fields to use for ordering the querysetc                 S   s   g | ]
\}}|d  | qS )r   r*   )rC   r_   valuesr*   r*   r+   rE     s    z4SubmissionsListView.get_ordering.<locals>.<listcomp>)r   items)r2   r   r*   r*   r+   get_ordering  s   z SubmissionsListView.get_orderingc                 C   s   d | jjtj dS )zAReturns the base filename for the generated spreadsheet data filez{}-export-{}z%Y-%m-%d)formatr)   slugdatetimetodaystrftimerr   r*   r*   r+   get_filename  s   z SubmissionsListView.get_filenamec                    s4   | j r| |d | jjdS t j|fi |S )Nr   export)r   as_spreadsheetr&   r   r#   r6   render_to_response)r2   r9   response_kwargsr:   r*   r+   r     s
   z&SubmissionsListView.render_to_responsec                    s   t  fdd| jD }|S )z8Orders the submission dictionary for spreadsheet writingc                 3   s"    | ]}|   |fV  qd S N)get_datar#   )rC   r   itemr*   r+   	<genexpr>%  s    
z2SubmissionsListView.to_row_dict.<locals>.<genexpr>)r   r   )r2   r   row_dictr*   r   r+   to_row_dict#  s   zSubmissionsListView.to_row_dictc                 C      t | j| jjfdS r.   )r	   r   r)   r"   rr   r*   r*   r+   get_index_url*     z!SubmissionsListView.get_index_urlc                 C   r   r.   )r	   r   r)   r"   rr   r*   r*   r+   get_index_results_url-  r   z)SubmissionsListView.get_index_results_urlc                 C   s
   | j  S r   )r)   get_admin_display_titlerr   r*   r*   r+   get_page_subtitle0  s   
z%SubmissionsListView.get_page_subtitlec                 C   s.   | j t| jtddd|  |  dg S )Nr[   )r5   rL   rl   rn   )rp   r	   forms_index_url_namer   get_page_titler   rr   r*   r*   r+   rs   3  s   z)SubmissionsListView.get_breadcrumbs_itemsc                    s  t  jd
i |}|| j }| j }g }||d< | js|D ],}| }g }|D ]\}	}
||	}t|t	r;d
|}|| q(||j|d q|  }| j}g }|D ]!\}	}
d}|	|v rn||	}|rl|d }nd}||	|
|d qV|| j||d | j |d	< |S )zReturn context for viewr   z, )model_idfieldsNra   	orderable)r_   rL   r   )r)   data_headings	data_rowsr   r*   )r6   r   r~   r)   r   r   r   r#   r   r   joinappendr"   r   r   r   r&   get_full_path)r2   r(   r9   r   r   r   
submission	form_datadata_rowr_   rL   valordering_by_fieldr   r   order_labelr   r:   r*   r+   r   @  sN   






z$SubmissionsListView.get_context_data)#r<   r=   r>   ry   r|   r}   r~   r)   r   r   r   r   rq   r   r   r   r   r   r   r   show_export_buttonsr   r   rx   r   r   r   r   r   r   r   r   rs   r   r@   r*   r*   r:   r+   r      s<    r   )<r   collectionsr   django.contrib.admin.utilsr   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   django.formsr   django.shortcutsr   r   django.urlsr	   django.utils.functionalr
   django.utils.translationr   r   r   django.views.genericr   django_filtersr   wagtail.adminr   wagtail.admin.filtersr   r   r   wagtail.admin.ui.tablesr   r   wagtail.admin.utilsr   wagtail.admin.views.genericr    wagtail.admin.views.generic.baser   wagtail.admin.views.mixinsr   !wagtail.admin.views.pages.listingr   r   wagtail.contrib.forms.utilsr   r   wagtail.modelsr   wagtail.permissionsr   r,   r-   rA   rP   r   r   r   r*   r*   r*   r+   <module>   s<    
?C