
    Tf                     D    d dl  d dlmZ  G d dej                        Zy)    )*)cmf_attachmentc                        e Zd Zed        Zed        Zed        Zed        Zed        Zed        Z	ed        Z
edd	 fd

       Zedd	 fd
       Zedd	d       Z xZS )CmfAttachmentc                    |j                  d      }|j                  d      }|r|syt        j                  j                  }t        j                  j                  }t
        j                  j                  dd|gg dgd      }|j                  d      r|r||kD  rt        d	| d
d       y|j                  d      r|r||kD  rt        d	| dd       yyyy)u}  Если установлен лимит на количество вложений, то мы подсчитываем их общее количество,
        и если оно превышает этот предел, то выводим алерт
        Исключаем изображения, которые добавляются copy-paste (self.embedded == True)nameparentN=)embeddedz!=TF)filterinclude_deletedCmfTaskuQ   Превышено количество добавляемых вложений (u_   ) в задачу.
                        Обратитесь к администраторуTabortCmfDocumentuc   ) в документ.
                        Обратитесь к администратору)
getgglobal_settingstask_attachment_max_countdocument_attachment_max_countmodelsr   count
startswith	cmf_alert)clskwargsr   r	   r   r   	att_counts          &./modules/api/models/cmf_attachment.pycheck_count_attachmentsz%CmfAttachment.check_count_attachments   s   
 zz&!H%6$%$5$5$O$O!()(9(9(W(W%((..f7M7O7Q?D / F	 i(%11k  mF  lG GM PW[] }-)55k  mJ  lK KM PW[] 6 * .    c                 R   |j                  d      }t        j                  j                  r|syt        j                  j                  j                  }dj                  d |D              }|j                  dd      j                  d      }|D cg c]   }|j                         j                         " }}d|vrt        ddj                  |       d	
       |j                  d      d   j                         }||v ryt        d| ddj                  |       d	
       yc c}w )u_   Проверяем расширение у добавляемого файла-вложенияr   N c              3   J   K   | ]  }|j                         s|d v s|  yw));,N)isalnum).0chars     r   	<genexpr>z5CmfAttachment.check_file_extension.<locals>.<genexpr>-   s%     (y$TXT`T`Tbfjnxfx(ys   ##r$   r%   .u   Ошибка: выбранный Вами файл не содержит расширения. Пожалуйста, загрузите файл с одним из следующих форматов: Tr   uu   Ошибка: выбранный Вами файл имеет неподдерживаемое расширение: ul   . Пожалуйста, загрузите файл с одним из следующих форматов: )r   r   r   allowed_attachment_extensionsvaluejoinreplacesplitstriplowerr   )	r   r   r   allowed_extensions_strcleaned_extensions_strraw_extensionsxallowed_file_extensions	extensions	            r   check_file_extensionz"CmfAttachment.check_file_extension&   sg    zz&!  >>d!"!2!2!P!P!V!V!#(y:P(y!y/77SAGGL>L"M1779??#4"M"Md?  b  cf  ck  ck  lC  cD  bE  F  NR  SJJsOB'--/	//  J  KT  JU  UA  BE  BJ  BJ  Kb  Bc  Ad  e  mq  	r #Ns   %D$c                    |j                  d      }|j                  d      }|st        dd       |syd}|j                  d      rt        j                  j
                  }n+|j                  d      rt        j                  j                  }|syt        |d	z  d
      }|r"||j                  kD  rt        d| dd       yyy)uJ   Проверка ограничения вложения по объёмуsizer	   u   Не удалось проверить допустимый размер файла, так как соответствующий параметр не был переданTr   Nr   r   i@B    uE   Превышен допустимый размер вложения (u<    Мб). Обратитесь к администратору)	r   r   r   r   r   task_attachment_max_sizedocument_attachment_max_sizeroundr-   )r   r   size_current_attachmentr	   attachment_max_sizes        r   check_size_attachmentz#CmfAttachment.check_size_attachment8   s     #)**V"4H%&  F  NR  S"Y'"#"3"3"L"L}-"#"3"3"P"P" #((?)(KQ"O#:=P=V=V#V]^q]r  so  p  x|  } $Wr    c                 .   |j                  dd      s t        j                  j                  d      r | j                  |i |}|d   S  | j
                  di |  | j                  di |  | j                  di |  | j                  |i |}|d   S )Nr   F)raise_errorid )r   r   CmfAccessListcheck_admin_modecreater9   r   rB   r   argsr   ress       r   
api_createzCmfAttachment.api_createS   s    ::j%(F,@,@,Q,Q^c,Q,d#**d-f-Ct9   *6*###-f-!!!+F+cjj$)&)4yr    c                 0     | j                   |i |}|d   S )NrE   )updaterJ   s       r   
api_updatezCmfAttachment.api_update`   s!    cjj$)&)4yr    c                 r    | j                  |j                  d            } |j                  |i |}|d   S )Nr   )r   rE   )r   delete)r   rK   r   objrL   s        r   
api_deletezCmfAttachment.api_deletee   s:    ggVZZ1g2cjj$)&)4yr    c                      | j                   |i |}|j                  j                          	 |j                  j                          |d   S # t        $ r t        dd       Y |d   S w xY w)Nu   Нет доступа!Tr   rE   )rI   r	   load_acl_check_writeCmfPermissionErrorr   rJ   s       r   public_createzCmfAttachment.public_createk   sl    cjj$)&)

	<JJ'') 4y " 	<.d;4y	<s   A A*)A*N)fieldsc                    |sg }d|vr|j                  d       t        |   |d|i|}|r|j                  sy 	 |j                  j	                          |j                         S # t
        $ r Y y w xY wNr	   rZ   )appendsuperr   r	   _acl_check_readrX   get_versions)r   rZ   rK   r   att	__class__s        r   public_get_versionsz!CmfAttachment.public_get_versionsw   s}    F6!MM(#gk499&9#**	JJ&&( !! " 		s   A& &	A21A2c                    |sg }d|vr|j                  d       t        |   |d|i|}|r|j                  sy 	 |j                  j	                          |S # t
        $ r Y y w xY wr\   )r]   r^   r   r	   r_   rX   )r   rZ   rK   r   rL   rb   s        r   
public_getzCmfAttachment.public_get   ss    F6!MM(#gk499&9#**	JJ&&( 
 " 		s   A 	A$#A$c                    t               )N)CmfDeprecatedErrorr   r   r   r	   r_   rX   	get_rfile)r   rZ   rK   r   
attachments        r   public_get_rfilezCmfAttachment.public_get_rfile   s     !""r    )__name__
__module____qualname__classmethodr   r9   rB   rM   rP   rT   rY   rc   re   rj   __classcell__)rb   s   @r   r   r      s    ] ]< r r" } }4 
 
    
 	 	 /3 " "& &*  & ,0 = =r    r   N)cmf.includemodules.files.modelsr   r   rF   r    r   <module>rr      s     /i=N00 i=r    