
^Q\                  @   sh  d  d l  m 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	 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   Z d d   Z Gd d   d e j  Z e e j     Z! d d d d  Z" d d d  Z# d d   Z$ d d   Z% d S)    )absolute_importN)datetime)settings)default_storage)HttpResponseJsonResponse)render)escape)import_string)generic)csrf_exempt)Image)image_processingutils)
SearchFormc             C   s   d } t  t d d  } | r| y t  |  |  } Wn' t t f k
 rZ t  |  d  } Yn Xt |  rs |   } q| | } n  | S)N ZCKEDITOR_RESTRICT_BY_USERFZget_username)getattrr   AttributeError	TypeErrorcallable)user	user_pathZRESTRICT_BY_USERZ	user_prop r   L/var/www/dbchiro/venv/lib/python3.4/site-packages/ckeditor_uploader/views.py_get_user_path   s    	r   c             C   s   t  |  } t t d d  r6 t j   j d  } n d } t j j t j	 | |  } t t d d  r t
 t d  r t j |   }  n  t
 t d  r t t j  } | |   }  n  t j t j j | |    S)NZCKEDITOR_RESTRICT_BY_DATETz%Y/%m/%dr   Z CKEDITOR_UPLOAD_SLUGIFY_FILENAMECKEDITOR_FILENAME_GENERATOR)r   r   r   r   nowstrftimeospathjoinCKEDITOR_UPLOAD_PATHhasattrr   Zslugify_filenamer
   r   r   Zget_available_name)Zupload_namer   r   Z	date_pathZupload_path	generatorr   r   r   get_upload_filename(   s    	r$   c               @   sI   e  Z d  Z d g Z d d   Z e d d    Z e d d    Z d S)	ImageUploadViewpostc       	      K   s2  | j  d } t j   } | j j d  } | r@ t |  } n  t t d d  s y | j |  Wq t	 j
 k
 r t d j |   SYq Xn  |  j | |  } t |  j d  d j   d k r |  j | |  n  t	 j |  } | rt d	 j | |   Si | d
 6d d 6| j d 6} t |  Sd 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({0}, '', 'Invalid file type.');
                    </script>.   gifz
            <script type='text/javascript'>
                window.parent.CKEDITOR.tools.callFunction({0}, '{1}');
            </script>url1ZuploadedZfileNameN)ZFILESr   Zget_backendGETgetr	   r   r   Zimage_verifyr   ZNotAnImageExceptionr   format
_save_filestrsplitlower_create_thumbnail_if_neededget_media_urlnamer   )	selfrequestkwargsuploaded_filebackendZck_func_num
saved_pathr+   Zretdatar   r   r   r&   H   s*    %zImageUploadView.postc             C   sY  t  | j |  j  } t j j |  \ } } t t d d  } t |  j	   d k r t
 j |  } | j | j t
 j  } t j d j |  |  } | j d j |  d | d d n t |  j	   d k s t |  j	   d	 k rCt
 j |  } | j | j t
 j  } t j | |  } | j | d | d d n t j | |  } | S)
NIMAGE_QUALITY<   pngz{}.jpgZqualityoptimizeTjpgjpeg)r$   r6   r   r   r   splitextr   r   r1   r3   r   openZresizesizeZ	ANTIALIASr   saver/   )r8   r:   filenameZimg_nameZ
img_formatr=   Zimgr<   r   r   r   r0   n   s    %0zImageUploadView._save_filec             C   s#   |  j  |  r |  j |  n  d  S)N)Zshould_create_thumbnailZcreate_thumbnail)r;   r<   r   r   r   r4      s    z+ImageUploadView._create_thumbnail_if_neededN)__name__
__module____qualname__Zhttp_method_namesr&   staticmethodr0   r4   r   r   r   r   r%   E   s   	&r%   r   c             c   sd  d } d } |  r+ |  j  r+ t |   } n d } t j j t j | |  } y t j |  } Wn+ t	 k
 rw d SYn t
 k
 r d SYn Xxl | | D]` } t j j |  d j d  s t j j |  j d  r q n  t j j | |  } | Vq Wxa | | D]U } | j d  r"qn  t j j | |  }	 x" t d |  d |	  D] }
 |
 VqMWqWd S)	zq
    Recursively walks all dirs under upload dir and generates a list of
    full paths for each file found.
    r   r)   r   NZ_thumbr(   r   r   )Zis_superuserr   r   r   r    r   r!   r   listdirNotImplementedErrorOSErrorrC   endswithbasename
startswithget_image_files)r   r   ZSTORAGE_DIRECTORIESZSTORAGE_FILESr   Zbrowse_pathZstorage_listrG   	directoryZdirectory_pathelementr   r   r   rR      s.    	:	rR   c             C   s  g  } x t  d |   D] } t j |  } t t d d  r t |  rd t j t j |   } n t j |  } t j	 j
 |  d } t |  d k r | d d  d } q n | } t j	 j
 |  d } | j i | d	 6| d
 6t |  d 6| d 6 q W| 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srcis_imagevisible_filename)rR   r   r5   r   r   rY   Zget_thumb_filenameZget_icon_filenamer   r   r2   lenappend)r   filesrG   rX   rW   rZ   r   r   r   get_files_browse_urls   s$    	r^   c             C   s#   |  j  d  d j   } | d k S)	Nr(   r)   rA   rB   r?   r*   )zjpgzjpegzpngzgif)r2   r3   )r   extr   r   r   rY      s    rY   c                s  t  |  j  } |  j d k r{ t |  j  } | j   r | j j d d  j     t	 t
   f d d   |   } q n	 t   } t t d d  } t t d d	   | D  d
 d } t j d k r d d   | D } n  i | d 6| d 6| d 6| d 6} t |  d |  S)NPOSTqr   c                s     |  d j    k S)NrZ   )r3   )d)queryr   r   <lambda>   s   zbrowse.<locals>.<lambda>ZCKEDITOR_BROWSE_SHOW_DIRSFc             s   s%   |  ] } t  j j | d   Vq d S)rX   N)r   r   dirname).0fr   r   r   	<genexpr>   s   zbrowse.<locals>.<genexpr>reverseTntc             S   s2   g  |  ]( } t  j j | d   d k r |  q S)rX   z	Thumbs.db)r   r   rP   )rg   rh   r   r   r   
<listcomp>   s   	 zbrowse.<locals>.<listcomp>	show_dirsdirsr]   formzckeditor/browse.html)r^   r   methodr   ra   is_validZcleaned_datar.   r3   listfilterr   r   sortedsetr   r6   r   )r8   r]   ro   rm   Zdir_listcontextr   )rd   r   browse   s&    	
rw   )&
__future__r   r   r   Zdjango.confr   Zdjango.core.files.storager   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PILr   Zckeditor_uploaderr   r   Zckeditor_uploader.formsr   r   r$   ZViewr%   Zas_viewr'   rR   r^   rY   rw   r   r   r   r   <module>   s*   I(