
    h['                     D    d dl  d dlmZ  G d dej                        Zy)    )*)cmf_commentc                        e Zd Z fdZed fd	       Zddd fd
Zdd fd
Z fdZ fd	Z	 fd
Z
edd       Z fdZd Z xZS )
CmfCommentc                 *    t         |          ddgz   S )Nprojectzparent.is_public)supersave_preload_fields)self	__class__s    ./common/models/cmf_comment.pyr
   zCmfComment.save_preload_fields   s    w*,	;M/NNN    c                 j    t         |   |      }|s |j                  t         |   g d             |S )N)
cmf_authorcmf_created_atprivateext_id)r	   import_shop_fieldsextend)clsfields_nameresr   s      r   r   zCmfComment.import_shop_fields
   s<    g(5 JJ* ,  
r   FforceTEXKOM_db_deletec                   |s5|s3t         j                  j                  dd| gd      }|rt        dd       | j	                  dg       | j
                  s|r8t         j                  j                  | d	      D ]  }|j                  d
        t        |    |||d|}t         j                  j                  |        |S )Ntree_parent==F)filterinclude_deletedu   Внимание! Данный комментарий нельзя удалить так как на него есть ответыT)abortis_dummy)parentr    )r   r   )modelsr   count	cmf_alertload_fieldsr"   CmfAttachmentlistdeleter	   CmfBackbonePeerobj_after_delete_hook)	r   r   r   argskwargsreplies
attachmentr   r   s	           r   r*   zCmfComment.delete   s    -''--%tT2 % . G   `  hl  m 	*& ==,$2277tUY7Z 9
!!4!89 gnd%BR]V\]44T:
r   )	recursivec                    t        |   |d|i|}t        j                  j	                  dgdd| gg dgddd      D ]  }|j                           |S )Nr1   r   r   r   )cmf_deletedr   TT)fieldsr   TECHCOM_nocacher    include_dummy)r	   restorer$   r   r)   )r   r1   r-   r.   r   commentr   s         r   r7   zCmfComment.restore9   sr    gotCyCFC((--cU]TXZ^D_`yCz@D>BRV . X 	G OO	 
r   c                 d   | j                   s5| j                  r)| j                  j                   j                         | _         | j                  j                  r| j                  rd| _        | j                  j                  r$| j                  dk(  rt        j                  | _	        | j
                  j                  rFt        j                  j                  |       D ]#  }| j
                  |_        |j                          % t        | 4  di |}t        j                  j!                  |        |S )NTclosed)r#    )r#   r   load
spectators
is_changedr   statusgcurrent_user	closed_byr$   r(   r)   saver	   r+   obj_after_save_hook)r   r.   r0   r   r   s       r   rC   zCmfComment.saveA   s    {{t//**11668DK??%%$//DL;;!!dkkX&=^^DN<<""$2277t7D "
%)\\
"!" gl$V$2248
r   c                    | j                   dk7  ry | j                  rt        j                  | j                        x}r| j                  r|j                  d| j                         y | j                  j                  rZt        j                  | j                  k(  r	 |j                  d| j                         y |j                  d| j                         y y t        | =          y # t        $ rb | j                  j                  r*| j                  s|j                  d| j                         n|j                  d| j                         Y y Y y w xY w)Nr   zPPP-COM-ADDobjzPPP-COM-EDIT-ALLzPPP-COM-EDIT-OWN)	log_level
project_idAPPget_cache_projectis_newcheck_project_role_accessr#   textr>   r@   rA   	cmf_ownerCmfPermissionErrorr"   r	   check_edit_permr   r   r   s     r   rQ   zCmfComment.check_edit_permU   s   >>Q
 ??3+@+@+Q Q Q{{11-T[[1Q%%>>T^^3c99:LRVR]R]9^ 556Hdkk5Z & G#% . c==33DMM $==mQUQ\Q\=]#==>PVZVaVa=b ^	cs   C) )A&EEc                    | j                  g d       | j                  rt        j                  | j                        }t        j
                  | j                  k(  r,| j                  ry 	 |j                  d| j                         y |j                  d| j                         y t        | 1          y # t        $ r  |j                  d| j                         Y y w xY w)N)rI   r#   rO   r"   zPPP-COM-DELETE-ALLrF   zPPP-COM-DELETE-OWN)r'   rI   rJ   rK   r@   rA   rO   r"   rM   r#   rP   r	   check_delete_permrR   s     r   rT   zCmfComment.check_delete_permq   s    JK??++DOO<G~~/==]556JPTP[P[5\ 112FDKK1XG%' * ]556JPTP[P[5\]s   +B6 6&CCc                 r   |r|t         j                  k(  rbt         j                  st         j                  ry|rt         j                  j
                  |k(  ryt         j                  }t         j                  }nd}t        j                  |dg d      }|j
                  |j                  k(  ry|j                  syt         j                  dk7  ry|j                  sC|j                  j                  dk(  r*|j                  r|j!                  |j                  d	      ry|j                  D ]  }|j"                  d
k(  r*|j                  r|j!                  |j                  |      c S |j
                  |j
                  k(  r y|du r!t$        j&                  j)                  |d      }|j
                  |v s y y)u  
        !!! Копия метода в CmfAttachment
        Проверяем видимость комментария для g.current_person (или check_for_person)
        При использовании check_for_user метод можт выполняться долго! Обязательно перед вызовом
        проверяйте, что комментарий имеет флаг private
        T.)r=   cmf_owner_idr   r   zproject.logic_prefix)simpler4   apiFzproject.servicedeskzsdesk-agent:default)r   	role_codeCmfProjectRole)id_onlyN)r@   rA   disable_permissionsacl_admin_modecurrent_personidcurrent_person__member_ofcmfutilget_obj_by_idrV   r   	api_scoper=   r   logic_prefix
user_localin_project_role
class_namer$   CmfAccessListsubject_full_group_list)r   
comment_idowner_idcheck_for_usercheck_for_user__member_ofr8   subjects          r   check_visibilityzCmfComment.check_visibility   s~    1>>!A$$(8(8A,,//8;^^N()(C(C% ),%''t_ ( a  4 44 ;;%!!OO004II"--"227??Vk2l )) 	G!!%55'//%55goowOO  GJJ. )C/,2,@,@,X,XYgqu,X,v)zz66	r   c                     t        t        | 	               }| j                  dg       | j                  r0| j                  j                         D ]  }|j                  |        t        |      S )Nr#   )setr	   
get_ownersr'   r#   addr)   )r   r-   r.   ownersparent_ownerr   s        r   rr   zCmfComment.get_owners   s`     UW')*($;; $ 6 6 8 )

<()F|r   c                 h    ddl m} |j                  | j                  j                  ||      | _        y )Nr   )CmfActiveEntity)common.models.cmf_active_entityrw   _replace_attach_urlrN   value)r   attach
new_attachrw   s       r   _replace_attachmentzCmfComment._replace_attachment   s$    C#77		Q[\	r   )N)NN)__name__
__module____qualname__r
   classmethodr   r*   r7   rC   rQ   rT   ro   rr   r}   __classcell__)r   s   @r   r   r      sb    O   #(% > (- (&8($ 4 4l]r   r   N)cmf.includecommon.fieldsr   r   r;   r   r   <module>r      s!     %B]'' B]r   