a
    œ"Wf  ã                   @   s  d dl Z d dlZd dl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 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„ Zdd„ ZG dd„ dejƒZee  ¡ ƒZ!ddd„Z"ddd„Z#dd„ Z$dS )é    N)Údatetime)Úsettings)ÚHttpResponseÚJsonResponse)Úrender)Úescape)Úimport_string)Úgeneric)Úcsrf_exempt)Úutils)Úget_backend)Ú
SearchForm)Ústorageé   )Úis_valid_image_extensionc              	   C   s`   d}t tddƒ}|rXzt | |ƒ}W n  ttfyB   t | dƒ}Y n0 t|ƒrT|ƒ }n|}t|ƒS )NÚ ZCKEDITOR_RESTRICT_BY_USERFZget_username)Úgetattrr   ÚAttributeErrorÚ	TypeErrorÚcallableÚstr)ÚuserÚ	user_pathZRESTRICT_BY_USERZ	user_prop© r   úP/var/www/sistema_ama/venv/lib/python3.9/site-packages/ckeditor_uploader/views.pyÚ_get_user_path   s    r   c                 C   s
  t |jƒ}ttddƒr&t ¡  d¡}nd}tj 	tj
||¡}ttddƒr\ttdƒs\t | ¡} ttdƒröttjƒ}zt |¡ | |¡ W nd tyê   zt |¡ | ¡ W n" tyÊ   t dtj ¡ Y n0 t dtj t¡ || ƒ} Y n0 || |ƒ} t tj 	|| ¡¡S )	NZCKEDITOR_RESTRICT_BY_DATETz%Y/%m/%dr   Z CKEDITOR_UPLOAD_SLUGIFY_FILENAMEÚCKEDITOR_FILENAME_GENERATORz8Update %s() to accept the arguments `filename, request`.z2Update %s() to accept a second `request` argument.)r   r   r   r   r   ÚnowÚstrftimeÚosÚpathÚjoinÚCKEDITOR_UPLOAD_PATHÚhasattrr   Zslugify_filenamer   r   ÚinspectÚ	signatureÚbindr   ÚwarningsÚwarnÚPendingDeprecationWarningr   Zget_available_name)Zupload_nameÚrequestr   Z	date_pathZupload_pathÚ	generatorr   r   r   Úget_upload_filename)   s>    
ÿ


ÿÿ
ÿý
r,   c                   @   s   e Zd ZdgZdd„ ZdS )ÚImageUploadViewÚpostc                 K   s²   |j d }tƒ }|j d¡}|r(t|ƒ}|t|ƒ}ttddƒ}|jsV|sVt	d 
|¡ƒS t|j|ƒ}| |¡}	t |	¡}
|rŠt	d 
||
¡ƒS tj |	¡\}}|
d|dœ}t|ƒS d	S )
zC
        Uploads a file and send back its URL to CKEditor.
        ÚuploadZCKEditorFuncNumZCKEDITOR_ALLOW_NONIMAGE_FILESTz£
                <script type='text/javascript'>
                window.parent.CKEDITOR.tools.callFunction({}, '', 'Invalid file type.');
                </script>z‡
            <script type='text/javascript'>
                window.parent.CKEDITOR.tools.callFunction({}, '{}');
            </script>Ú1)ÚurlZuploadedÚfileNameN)ZFILESr   ÚGETÚgetr   r   r   r   Úis_imager   Úformatr,   ÚnameZsave_asr   Úget_media_urlr   r    Úsplitr   )Úselfr*   ÚkwargsZuploaded_fileÚbackendZck_func_numÚfilewrapperZallow_nonimagesÚfilepathZ
saved_pathr1   Ú_ÚfilenameZretdatar   r   r   r.   Y   s2    


üÿ	

üÿ	zImageUploadView.postN)Ú__name__Ú
__module__Ú__qualname__Zhttp_method_namesr.   r   r   r   r   r-   V   s   r-   r   c           
      c   sò   d}d}| r| j st| ƒ}nd}tj tj||¡}zt |¡}W n& t	yT   Y dS  t
yf   Y dS 0 || D ]B}tj |¡d  d¡sptj |¡ d¡ržqptj ||¡}|V  qp|| D ]0}| d¡rÌq¼tj ||¡}	t| |	d�E dH  q¼dS )zq
    Recursively walks all dirs under upload dir and generates a list of
    full paths for each file found.
    r   r   r   NZ_thumbÚ.)r   r    )Zis_superuserr   r   r    r!   r   r"   r   ÚlistdirÚNotImplementedErrorÚOSErrorÚsplitextÚendswithÚbasenameÚ
startswithÚget_image_files)
r   r    ZSTORAGE_DIRECTORIESZSTORAGE_FILESr   Zbrowse_pathZstorage_listr@   Ú	directoryZdirectory_pathr   r   r   rL   ‹   s4    

ÿþ
rL   c                 C   s¬   g }t | d�D ]˜}t |¡}ttddƒrzt|ƒrBt t |¡¡}n
t |¡}tj	 
|¡d }t|ƒdkrŽ|dd… d }n|}tj	 
|¡d }| ||t|ƒ|d	œ¡ q|S )
z…
    Recursively walks all dirs under upload dir and generates a list of
    thumbnail and full image URL's for each file found.
    )r   ZCKEDITOR_IMAGE_BACKENDNr   é   r   é   z...)ÚthumbÚsrcr5   Úvisible_filename)rL   r   r8   r   r   r   Zget_thumb_filenameZget_icon_filenamer   r    r9   ÚlenÚappend)r   Úfilesr@   rQ   rP   rR   r   r   r   Úget_files_browse_urls´   s(    

üÿ	rV   c                    sª   t | jƒ}| jdkrPt| jƒ}| ¡ rV|j dd¡ ¡ ‰ t	t
‡ fdd„|ƒƒ}ntƒ }ttddƒ}tdd	„ |D ƒd
d�}tjdkr�dd„ |D ƒ}||||dœ}t| d|ƒS )NÚPOSTÚqr   c                    s   ˆ | d   ¡ v S )NrR   )Úlower)Úd©Úqueryr   r   Ú<lambda>Ú   ó    zbrowse.<locals>.<lambda>ZCKEDITOR_BROWSE_SHOW_DIRSFc                 S   s   h | ]}t j |d  ¡’qS )rQ   )r   r    Údirname©Ú.0Úfr   r   r   Ú	<setcomp>à   r^   zbrowse.<locals>.<setcomp>T)ÚreverseÚntc                 S   s$   g | ]}t j |d  ¡dkr|‘qS )rQ   z	Thumbs.db)r   r    rJ   r`   r   r   r   Ú
<listcomp>å   r^   zbrowse.<locals>.<listcomp>)Ú	show_dirsÚdirsrU   Úformzckeditor/browse.html)rV   r   Úmethodr   rW   Zis_validZcleaned_datar4   rY   ÚlistÚfilterr   r   Úsortedr   r7   r   )r*   rU   ri   rg   Zdir_listÚcontextr   r[   r   ÚbrowseÓ   s    


ÿ
ro   )Nr   )N)%r$   r   r'   r   Zdjango.confr   Zdjango.httpr   r   Zdjango.shortcutsr   Zdjango.utils.htmlr   Zdjango.utils.module_loadingr   Zdjango.viewsr	   Zdjango.views.decorators.csrfr
   Zckeditor_uploaderr   Zckeditor_uploader.backendsr   Zckeditor_uploader.formsr   Zckeditor_uploader.utilsr   r   r   r,   ZViewr-   Zas_viewr/   rL   rV   ro   r   r   r   r   Ú<module>   s,   -2
)
