a
    Dg+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   specificZserve_submissions_list_view)requestargskwargsr    	form_page r)   Z/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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_datar3   )r1   r2   Zparent_contextcontext	__class__r)   r*   r6   .   s    z'ContentTypeColumn.get_cell_context_data)__name__
__module____qualname__r/   Zcell_template_namer3   r6   __classcell__r)   r)   r8   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)   r0   ).0ctr)   r)   r*   
<listcomp>8       z.FormPageFilterSet.<lambda>.<locals>.<listcomp>)Zpk__inmodel)r   Z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*   r>   4   s
   r>   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>   lockpublishZunlockaddZchangeZbulk_deletezwagtailforms/index.htmlzwagtailforms/index_results.htmlZ
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 )>   titletype)name)r@   colr)   r)   r*   rB   Y   s   z-FormPagesListView.columns.<locals>.<listcomp>   rU   ZTitlewagtailforms:list_submissionsz30%)	classnamerH   Zurl_namesort_keywidthrK   ZOriginz20%)rH   r\   r]   )r   columnsinsertr   r   r,   )r1   r_   r)   r)   r*   r_   W   s0    	zFormPagesListView.columnsc                 C   s   | j d| jtddg S )N ZPagesr4   rH   Zsublabel)breadcrumbs_items
page_titler   r1   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 viewrK   )r   r%   userZselect_relatedZannotate_queryset)r1   Zpagesr)   r)   r*   get_base_querysetw   s    z#FormPagesListView.get_base_querysetN)r:   r;   r<   __doc__r   Zpermission_policyZany_permission_requiredtemplate_nameresults_template_namecontext_object_namepaginate_byZ
page_kwargindex_url_nameindex_results_url_namer   rd   header_iconr   rD   Zis_searchabler>   filterset_classr
   r_   rf   rh   r)   r)   r)   r*   rL   >   s&   
rL   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.htmlNrZ   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_managerrE   )r1   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)rz   deleter   successr%   r   )r1   submissionsrz   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_nameru   r"   )r1   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rd| | j t|  S t j|g|R i |S )z>Check permissions, set the page and submissions, handle deleter    r!   POST)r#   r   r%   rg   rE   existsr   r   r   r$   ru   ry   r}   methodr~   r   r   r5   dispatch)r1   r%   r&   r'   r    r8   r)   r*   r      s    

zDeleteSubmissionsView.dispatchc                    s6   t  jf i |}|| j| jd |  |d< |S )zGet the context for this view)ru   r}   r   )r5   get_context_dataupdateru   r}   r   )r1   r'   r7   r8   r)   r*   r      s    z&DeleteSubmissionsView.get_context_data)r:   r;   r<   ri   rj   ru   r}   r   ry   r~   r   r   r   r=   r)   r)   r8   r*   rr   }   s   rr   c                   @   s   e Zd ZeeddedZdS )SubmissionsListFilterSetzSubmission datesubmit_time)rH   
field_namerJ   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 datarT   rP   rR   rZ   z%wagtailforms:list_submissions_resultsTc                    sn   | d| _t|jj| jjd s*t| jrT| j	 }dd |D | _
t|| _t j|g|R i |S )z'Check permissions and set the form pager(   r?   c                 S   s   g | ]\}}|qS r)   r)   )r@   fieldrH   r)   r)   r*   rB      rC   z0SubmissionsListView.dispatch.<locals>.<listcomp>)r#   r(   r   rg   rE   r"   r   r   	is_exportget_data_fieldslist_exportdictZexport_headingsr5   r   )r1   r%   r&   r'   data_fieldsr8   r)   r*   r      s    

zSubmissionsListView.dispatchc                    s   t   }|  |d< |S )NrI   )r5   get_filterset_kwargsrh   )r1   r'   r8   r)   r*   r      s    
z(SubmissionsListView.get_filterset_kwargsc                 C   s   | j  }|jj| j d}|S )z#Return queryset of form submissions)ru   )r(   rv   rw   rE   )r1   rx   rI   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 ]T}z4|
d\}}}||v r||dkrdndf||< W qT ttfy   Y qTY qT0 qT|S )zFReturn a dict of field names with ordering labels if ordering is validr)   rF   -Z
descendingZ	ascending)orderable_fieldsr   ordering_csvdefault_ordering
isinstancestrr%   rs   rt   list
rpartition
IndexError
ValueError)	r1   r   orderingr   Z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)   )r@   rW   valuesr)   r)   r*   rB     rC   z4SubmissionsListView.get_ordering.<locals>.<listcomp>)r   items)r1   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                    s4   | j r | |d | jjdS t j|fi |S )Nr}   export)r   Zas_spreadsheetr%   rs   r#   r5   render_to_response)r1   r7   Zresponse_kwargsr8   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#   )r@   r   itemr)   r*   	<genexpr>%  s   z2SubmissionsListView.to_row_dict.<locals>.<genexpr>)r   r   )r1   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_subtitle0  s    z%SubmissionsListView.get_page_subtitlec                 C   s.   | j t| jtddd|  |  dg S )NrS   )r4   rH   ra   rb   )rc   r	   forms_index_url_namer   Zget_page_titler   re   r)   r)   r*   rf   3  s    z)SubmissionsListView.get_breadcrumbs_itemsc                    s  t  jf i |}|| j }| j }g }||d< | js|D ]X}| }g }|D ]0\}	}
||	}t|t	rxd
|}|| qR||j|d q>|  }| j}g }|D ]B\}	}
d}|	|v r||	}|r|d }nd}||	|
|d q|| j||d | j |d	< |S )
zReturn context for viewr}   z, )Zmodel_idfieldsNrY   Z	orderable)rW   rH   r   )r(   data_headings	data_rowsr   )r5   r   rl   r(   r   r   r   r#   r   r   joinappendr"   r   r   r   r%   Zget_full_path)r1   r'   r7   r}   r   r   Z
submissionZ	form_dataZdata_rowrW   rH   valZordering_by_fieldr   r   Zorder_labelr   r8   r)   r*   r   @  sN    






z$SubmissionsListView.get_context_data)#r:   r;   r<   ri   rj   rk   rl   r(   r   r   r   r   rd   rp   rm   r   rq   r   rn   ro   Zshow_export_buttonsr   r   rh   r   r   r   r   r   r   r   r   rf   r   r=   r)   r)   r8   r*   r      s:   r   )<r   collectionsr   Zdjango.contrib.admin.utilsr   Z"django.contrib.contenttypes.modelsr   Zdjango.core.exceptionsr   Zdjango.formsr   Zdjango.shortcutsr   r   Zdjango.urlsr	   Zdjango.utils.functionalr
   Zdjango.utils.translationr   r   r   Zdjango.views.genericr   Zdjango_filtersr   Zwagtail.adminr   Zwagtail.admin.filtersr   r   r   Zwagtail.admin.ui.tablesr   r   Zwagtail.admin.utilsr   Zwagtail.admin.views.genericr   Z wagtail.admin.views.generic.baser   Zwagtail.admin.views.mixinsr   Z!wagtail.admin.views.pages.listingr   r   Zwagtail.contrib.forms.utilsr   r   Zwagtail.modelsr   Zwagtail.permissionsr   r+   r,   r>   rL   rr   r   r   r)   r)   r)   r*   <module>   s:   
?C