o
    =g                     @   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   sf   d}t tdd}|r/zt | |}W n ttfy!   t | d}Y nw t|r-| }t|S |}t|S )N CKEDITOR_RESTRICT_BY_USERFget_username)getattrr   AttributeError	TypeErrorcallablestr)user	user_pathRESTRICT_BY_USER	user_prop r   J/var/www/html/venv/lib/python3.10/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 n2 tyu   z
t||  W n tye   tdtj  Y nw tdtj t || } Y nw || |} ttj	|| S )	NCKEDITOR_RESTRICT_BY_DATETz%Y/%m/%dr    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   slugify_filenamer   r"   inspect	signaturebindr   warningswarnPendingDeprecationWarningr   get_available_name)upload_namerequestr   	date_pathupload_path	generatorr   r   r   get_upload_filename)   sD   




r7   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s+|s+t	d
|S t|j|}||}	t|	}
|rEt	d
||
S tj|	\}}|
d|d}t|S )	zC
        Uploads a file and send back its URL to CKEditor.
        uploadCKEditorFuncNum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)urluploadedfileName)FILESr   GETgetr   r   r   r   is_imager   formatr7   namesave_asr   get_media_urlr%   r&   splitr   )selfr3   kwargsuploaded_filebackendck_func_numfilewrapperallow_nonimagesfilepath
saved_pathr>   _filenameretdatar   r   r   r9   Y   s6   


	

	zImageUploadView.postN)__name__
__module____qualname__http_method_namesr9   r   r   r   r   r8   V   s    r8   r   c           
      c   s    d}d}| r| j st| }nd}tjtj||}zt|}W n t	y+   Y dS  t
y4   Y dS w || D ]!}tj|d dsOtj|drPq9tj||}|V  q9|| D ]}|drgq_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   N_thumb.)r   r&   )is_superuserr   r%   r&   r'   r   r(   r   listdirNotImplementedErrorOSErrorsplitextendswithbasename
startswithget_image_files)
r   r&   STORAGE_DIRECTORIESSTORAGE_FILESr   browse_pathstorage_listrT   	directorydirectory_pathr   r   r   rd      s:   


rd   c                 C   s   g }t | dD ]L}t|}ttddr=t|r!t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   CKEDITOR_IMAGE_BACKENDNr      r      z...)thumbsrcrD   visible_filename)rd   r   rH   r   r   r   get_thumb_filenameget_icon_filenamer%   r&   rI   lenappend)r   filesrT   ro   rn   rp   r   r   r   get_files_browse_urls   s*   

	rv   c                    s   t | j}| jdkr(t| j}| r'|jdd  t	t
 fdd|}nt }ttdd}tdd	 |D d
d}tjdkrHdd |D }||||d}t| d|S )NPOSTqr   c                    s    | d   v S )Nrp   )lower)dqueryr   r   <lambda>   s    zbrowse.<locals>.<lambda>CKEDITOR_BROWSE_SHOW_DIRSFc                 S   s   h | ]
}t j|d  qS )ro   )r%   r&   dirname.0fr   r   r   	<setcomp>   s    zbrowse.<locals>.<setcomp>T)reversentc                 S   s$   g | ]}t j|d  dkr|qS )ro   z	Thumbs.db)r%   r&   rb   r   r   r   r   
<listcomp>   s   $ zbrowse.<locals>.<listcomp>)	show_dirsdirsru   formzckeditor/browse.html)rv   r   methodr   rw   is_validcleaned_datarC   ry   listfilterr   r   sortedr%   rF   r   )r3   ru   r   r   dir_listcontextr   r{   r   browse   s    



r   )Nr   )N)%r+   r%   r.   r   django.confr   django.httpr   r   django.shortcutsr   django.utils.htmlr   django.utils.module_loadingr   django.viewsr	   django.views.decorators.csrfr
   ckeditor_uploaderr   ckeditor_uploader.backendsr   ckeditor_uploader.formsr   ckeditor_uploader.utilsr   r   r   r7   Viewr8   as_viewr:   rd   rv   r   r   r   r   r   <module>   s.    -2

)