U
    {h-                     @   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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 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 Z&G dd deZ'G dd dej(Z)G dd deZ*G dd deZ+G dd de!eZ,dS )    N)OrderedDict)quote)PermissionDenied)get_object_or_404redirect)reverse)gettextgettext_lazyngettext)TemplateView)DateFromToRangeFilter)messages)DateRangePickerWidgetWagtailFilterSet)ColumnTitleColumn)generic)BaseListingView)SpreadsheetExportMixin)get_forms_for_user)Pagec                 O   s*   | d}tt|dj}|j| f||S )z0Call the form page's list submissions view classpage_idid)getr   r   specificZserve_submissions_list_view)requestargskwargsr   	form_page r    c/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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_datar)   )r'   r(   Zparent_contextcontext	__class__r    r!   r,   $   s    z'ContentTypeColumn.get_cell_context_data)__name__
__module____qualname__r%   Zcell_template_namer)   r,   __classcell__r    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ddedddddededdddgZeZdZdd Zdd ZdS )FormPagesListViewz3Lists the available form pages for the current userzwagtailforms/index.htmlzwagtailforms/index_results.htmlZ
form_pages   pwagtailforms:indexzwagtailforms:index_resultsFormsformTtitleZTitlez50%wagtailforms:list_submissions)	classnamelabelwidthZurl_namesort_keycontent_typeZOrigin)r=   r>   r?   Fc                 C   s   | j d| jtddg S )N ZPagesr*   r=   Zsublabel)breadcrumbs_items
page_titler   r'   r    r    r!   get_breadcrumbs_itemsJ   s    z'FormPagesListView.get_breadcrumbs_itemsc                 C   s   t | jjdS )z/Return the queryset of form pages for this viewr@   )r   r   userZselect_relatedrE   r    r    r!   get_base_querysetO   s    z#FormPagesListView.get_base_querysetN)r0   r1   r2   __doc__template_nameresults_template_namecontext_object_namepaginate_byZ
page_kwargindex_url_nameindex_results_url_namer	   rD   header_icon_show_breadcrumbsr   r#   columnsr   modelZis_searchablerF   rH   r    r    r    r!   r4   *   s<   r4   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.htmlNr;   c                 C   s&   | j jd}| j }|jj|dS )z/Returns a queryset for the selected submissionszselected-submissions)Zid__in)r   GETgetlistpageget_submission_class_default_managerfilter)r'   Z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
   )r'   submissionsr]   r    r    r!   handle_deleteb   s    z#DeleteSubmissionsView.handle_deletec                 C   s   | j S )zBReturns the success URL to redirect to after a successful deletion)success_urlrE   r    r    r!   get_success_urlp   s    z%DeleteSubmissionsView.get_success_urlc                    sz   | d}t| jjj|d s&ttt|dj	| _
|  | _| jjdkrf| | j t|  |S t j|f||S )z>Check permissions, set the page and submissions, handle deleter   r   POST)r   r   r   rG   rZ   existsr   r   r   r   rW   r\   r`   methodra   r   rc   r+   dispatch)r'   r   r   r   r   r.   r    r!   rg   t   s    

zDeleteSubmissionsView.dispatchc                    s&   t  jf |}|| j| jd |S )zGet the context for this view)rW   r`   )r+   get_context_dataupdaterW   r`   )r'   r   r-   r.   r    r!   rh      s    z&DeleteSubmissionsView.get_context_data)r0   r1   r2   rI   rJ   rW   r`   rb   r\   ra   rc   rg   rh   r3   r    r    r.   r!   rT   T   s   rT   c                   @   s   e Zd ZeeddedZdS )SubmissionsListFilterSetzSubmission datesubmit_time)r=   
field_nameZwidgetN)r0   r1   r2   r   r	   r   dater    r    r    r!   rj      s
   rj   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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)rk   )r   rk   z	Form datar9   r5   r7   r;   z%wagtailforms:list_submissions_resultsTc                    sh   | d| _t|jj| jjd s*t| jrT| j	 }dd |D | _
t|| _t j|f||S )z'Check permissions and set the form pager   )r&   c                 S   s   g | ]\}}|qS r    r    ).0fieldr=   r    r    r!   
<listcomp>   s     z0SubmissionsListView.dispatch.<locals>.<listcomp>)r   r   r   rG   rZ   r   re   r   	is_exportget_data_fieldslist_exportdictZexport_headingsr+   rg   )r'   r   r   r   data_fieldsr.   r    r!   rg      s    

zSubmissionsListView.dispatchc                    s   t   }|  |d< |S )Nqueryset)r+   get_filterset_kwargsrH   )r'   r   r.   r    r!   rx      s    
z(SubmissionsListView.get_filterset_kwargsc                 C   s   | j  }|jj| j d}|S )z#Return queryset of form submissions)rW   )r   rX   rY   rZ   )r'   r[   rw   r    r    r!   rH      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pNt	|}|D ]V}z4|
d\}}}||kr||dkrdndf||< W qT ttfk
r   Y qTY qTX qT|S )zFReturn a dict of field names with ordering labels if ordering is validr    Zorder_by-Z
descendingZ	ascending)orderable_fieldsrr   ordering_csvdefault_ordering
isinstancestrr   rU   rV   list
rpartition
IndexError
ValueError)	r'   rz   orderingr|   Zordering_strsorder_prefixrl   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    )ro   namevaluesr    r    r!   rq      s     z4SubmissionsListView.get_ordering.<locals>.<listcomp>)r   items)r'   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   ZslugdatetimetodaystrftimerE   r    r    r!   get_filename   s     z SubmissionsListView.get_filenamec                    s0   | j r | |d | jjdS t j|f|S )Nr`   Zexport)rr   Zas_spreadsheetr   rU   r   r+   render_to_response)r'   r-   Z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   )ro   rp   itemr    r!   	<genexpr>   s    z2SubmissionsListView.to_row_dict.<locals>.<genexpr>)r   rt   )r'   r   Zrow_dictr    r   r!   to_row_dict   s    zSubmissionsListView.to_row_dictc                 C   s   t | j| jjfdS r$   )r   rN   r   r   rE   r    r    r!   get_index_url   s    z!SubmissionsListView.get_index_urlc                 C   s   t | j| jjfdS r$   )r   rO   r   r   rE   r    r    r!   get_index_results_url  s    z)SubmissionsListView.get_index_results_urlc                 C   s
   | j  S r   )r   Zget_admin_display_titlerE   r    r    r!   get_page_subtitle  s    z%SubmissionsListView.get_page_subtitlec                 C   s.   | j t| jtddd|  |  dg S )Nr8   )r*   r=   rA   rB   )rC   r   forms_index_url_namer   Zget_page_titler   rE   r    r    r!   rF     s    z)SubmissionsListView.get_breadcrumbs_itemsc                    s  t  jf |}|| j }| j }g }||d< | js|D ]X}| }g }|D ]0\}	}
||	}t|t	rtd
|}|| qN||j|d q:|  }| j}g }|D ]B\}	}
d}|	|kr||	}|r|d }nd}||	|
|d q|| j||d |S )	zReturn context for viewr`   z, )Zmodel_idfieldsN   Z	orderable)r   r=   r   )r   data_headings	data_rows)r+   rh   rL   r   rs   rr   r   r   r}   r   joinappendr   r   rz   ri   )r'   r   r-   r`   rv   r   Z
submissionZ	form_dataZdata_rowr   r=   valZordering_by_fieldrz   r   Zorder_labelr   r.   r    r!   rh     sL    






z$SubmissionsListView.get_context_data)$r0   r1   r2   rI   rJ   rK   rL   r   r|   r{   rz   r	   rD   rP   rM   rj   Zfilterset_classr   rN   rO   rQ   Zshow_export_buttonsrg   rx   rH   r   r   r   r   r   r   r   r   rF   rh   r3   r    r    r.   r!   rn      s<   rn   )-r   collectionsr   Zdjango.contrib.admin.utilsr   Zdjango.core.exceptionsr   Zdjango.shortcutsr   r   Zdjango.urlsr   Zdjango.utils.translationr   r	   r
   Zdjango.views.genericr   Zdjango_filtersr   Zwagtail.adminr   Zwagtail.admin.filtersr   r   Zwagtail.admin.ui.tablesr   r   Zwagtail.admin.viewsr   Z wagtail.admin.views.generic.baser   Zwagtail.admin.views.mixinsr   Zwagtail.contrib.forms.utilsr   Zwagtail.modelsr   r"   r#   Z	IndexViewr4   rT   rj   rn   r    r    r    r!   <module>   s,   *?