U
    QWd                     @   sR  d dl Z 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 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 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( d dl)m*Z*m+Z+ G dd deZ,G dd deZ-G dd dej.Z/G dd deZ0dS )    N)splitext)DjangoJSONEncoder)models)forms)StructBlock)FormBuilder)AbstractFormFieldFORM_FIELD_CHOICESAbstractForm)StreamField)ClusterableModel)get_image_modelWagtailImageField)Query)blocks)
Collection)Image)Page	Orderable)RichTextField)
FieldPanelInlinePanelMultiFieldPanel)ParentalKeyParentalManyToManyFieldc                   @   s6   e Zd Zejddeedg dZeddej	dZ
dS )	ImageUploadFormz
field type   )imagezUpload Image)verbose_name
max_lengthchoicesWeddingPageform_fields)related_name	on_deleteN)__name__
__module____qualname__r   	CharFieldlistr	   
field_typer   CASCADEpage r.   r.   &/var/www/html/dirtybits/home/models.pyr   "   s   r   c                   @   s   e Zd Zdd ZdS )CustomFormBuilderc                 C   s
   t f |S )Nr   )selffieldoptionsr.   r.   r/   create_image_field,   s    z$CustomFormBuilder.create_image_fieldN)r&   r'   r(   r4   r.   r.   r.   r/   r0   *   s   r0   c                   @   s   e Zd Ze ZdS )MultipleImageN)r&   r'   r(   r   	FileFieldimagesr.   r.   r.   r/   r5   0   s   r5   c                       sx   e Zd ZeZdZejdddejdZ	 fddZ
ejeddd	g Zejed
g Zdd Zedd Zdd Z  ZS )r"   zhome/weddingpage.htmlzwagtailcore.CollectionT)nullblankr%   c                    s,   t  |}tj d }||d< |S )Nidr7   )superget_contextr   objectsallorder_byreverse)r1   requestargskwargscontextr7   	__class__r.   r/   r<   >   s    zWeddingPage.get_contextr#   ZBlogs)labeluploaded_image_collectionc                 C   s   | j }|pt S )z
        Returns a Wagtail Collection, using this form's saved value if present,
        otherwise returns the 'Root' Collection.
        )rH   r   Zget_first_root_node)r1   
collectionr.   r.   r/   get_uploaded_image_collectionP   s    z)WeddingPage.get_uploaded_image_collectionc                 C   s0   | r,t | d }|dddd}| S dS )z
        Generates a usable title from the filename of an image upload.
        Note: The filename will be provided as a 'path/to/file.jpg'
        r   - _ )r   replacetitle)filenameresultr.   r.   r/   get_image_titleX   s
    zWeddingPage.get_image_titlec                 C   s   |j }|j D ]\}}t|tr|| }|r|D ]d}t }|| | || j|  d}|j	rt|j	j
st|j	|d< |f |}	|	  |||	ji q2q||= q|  jjtj|j td| d}
|
S )z
        Processes the form submission, if an Image upload is found, pull out the
        files data, create an actual Wgtail Image and reference its ID only in the
        stored form response.
        )filerP   rI   Zuploaded_by_user)cls)Z	form_datar-   )cleaned_datafieldsitems
isinstancer   r   rS   namerJ   useris_anonymoussaveupdatepkZget_submission_classr=   createjsondumpsr   )r1   formrV   rZ   r2   Zimage_files_dataZimage_file_dataZ
ImageModelrC   r   Z
submissionr.   r.   r/   process_form_submissionf   s,    




z#WeddingPage.process_form_submission)r&   r'   r(   r0   Zform_buildertemplater   
ForeignKeySET_NULLrH   r<   r   content_panelsr   r
   settings_panelsr   rJ   staticmethodrS   rd   __classcell__r.   r.   rE   r/   r"   4   s&   	

r"   )1datetimera   Zos.pathr   django.core.serializers.jsonr   	django.dbr   djangor   Zwagtail.blocksr   Zwagtail.contrib.forms.formsr   Zwagtail.contrib.forms.modelsr   r	   r
   Zwagtail.fieldsr   modelcluster.modelsr   Zwagtail.imagesr   Zwagtail.images.fieldsr   wagtail.search.modelsr   wagtailr   wagtail.modelsr   Zwagtail.images.modelsr   r   r   r   wagtail.admin.panelsr   r   r   modelcluster.fieldsr   r   r   r0   Modelr5   r"   r.   r.   r.   r/   <module>   s0   