U
    ip&                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_commentc                       s   e Zd Z fddZed fdd	Zddd fdd	
Zdd
 fdd
Z fddZ fddZ	 fddZ
edddZ fddZdd Z  ZS )
CmfCommentc                    s   t   dg S )Nproject)supersave_preload_fieldsself	__class__ ./common/models/cmf_comment.pyr      s    zCmfComment.save_preload_fieldsNc                    s.   t  |}|s*|t  ddddg |S )NZ
cmf_authorZcmf_created_atprivateZext_id)r   import_shop_fieldsextend)clsZfields_nameresr
   r   r   r   
   s    zCmfComment.import_shop_fieldsFforceTEXKOM_db_deletec                   s   |s.|s.t jjdd| gdd}|r.tddd | dd	g | jrn| jsntd
| jj d| jj	i| j
 d | jsx|rt jj| ddD ]}|jdd qt j|||d|}t j|  |S )Ntree_parent==F)filterinclude_deletedu   Внимание! Данный комментарий нельзя удалить так как на него есть ответыT)abortparentis_dummyzcomment-delete-id)Zevent_persons)r   r   )r   r   )modelsr   countZ	cmf_alertload_fieldsr   r   Zcmf_emit_eventr   valueZall_relation_personsCmfAttachmentlistdeleter   ZCmfBackbonePeerZobj_after_delete_hook)r	   r   r   argskwargsZreplies
attachmentr   r
   r   r   r$      s(    
 
zCmfComment.delete)	recursivec                   sP   t  j|d|i|}tjjdgdd| gdddggddddD ]}|  q>|S )Nr(   r   r   r   Zcmf_deletedT)fieldsr   ZTECHCOM_nocacher   Zinclude_dummy)r   restorer   r   r#   )r	   r(   r%   r&   r   commentr
   r   r   r*   7   s     

zCmfComment.restorec                    s   | j s| jr| jj  | _ | jjr.| jr.d| _| jjrH| jdkrHtj| _	| jjrtt
jj| dD ]}| j|_|  q^t jf |S )NTclosed)r   )r   r   load
spectators
is_changedr   statusgcurrent_userZ	closed_byr   r"   r#   saver   )r	   r&   r'   r
   r   r   r3   ?   s    
zCmfComment.savec                    s   | j dkrd S | jrt| j }r| jr<|jd| jd q| jjrt	j
| jkrz|jd| jd W q tk
r   | jjr| js|jd| jd n|jd| jd Y qX q|jd| jd n
t   d S )Nr   zPPP-COM-ADDobjzPPP-COM-EDIT-ALLzPPP-COM-EDIT-OWN)Z	log_levelZ
project_idcmfutilget_obj_by_idZis_newcheck_project_role_accessr   textr/   r1   r2   	cmf_ownerCmfPermissionErrorr   r   check_edit_perm)r	   r   r
   r   r   r<   O   s    
zCmfComment.check_edit_permc                    s   |  ddddg | jrtj| jkrn| jr.d S z| jjd| jd W q tk
rj   | jjd| jd Y qX q| jjd| jd n
t	 
  d S )Nr   r   r:   r   zPPP-COM-DELETE-ALLr4   zPPP-COM-DELETE-OWN)r    r   r1   r2   r:   r   r8   r   r;   r   check_delete_permr   r
   r   r   r=   k   s    zCmfComment.check_delete_permc                 C   s   |r|t jkr@t jst jrdS |r2t jj|kr2dS t j}t j}nd}tj|ddddddgd}|j|j	krndS |j
sxdS t jd	krd
S |js|jjdkr|jr|j|jddrdS |jD ]b}|jdkr|jr||j|  S |j|jkr dS |dkr
tjj|dd}|j|kr dS qdS )u  
        !!! Копия метода в CmfAttachment
        Проверяем видимость комментария для g.current_person (или check_for_person)
        При использовании check_for_user метод можт выполняться долго! Обязательно перед вызовом
        проверяйте, что комментарий имеет флаг private
        T.r.   cmf_owner_idr   r   zproject.logic_prefix)Zsimpler)   ZapiFzproject.servicedeskzsdesk-agent:default)r   Z	role_codeZCmfProjectRole)Zid_onlyN)r1   r2   Zdisable_permissionsZacl_admin_modeZcurrent_personr   Zcurrent_person__member_ofr6   r7   r>   r   Z	api_scoper.   r   Zlogic_prefixZ
user_localZin_project_role
class_namer   ZCmfAccessListZsubject_full_group_list)r   Z
comment_idZowner_idZcheck_for_userZcheck_for_user__member_ofr+   Zsubjectr   r   r   check_visibility|   sH     




zCmfComment.check_visibilityc                    sB   t t  }| dg | jr:| j D ]}|| q*t|S )Nr   )setr   
get_ownersr    r   addr#   )r	   r%   r&   ZownersZparent_ownerr
   r   r   rB      s    zCmfComment.get_ownersc                 C   s$   ddl m} || jj||| _d S )Nr   )CmfActiveEntity)Zcommon.models.cmf_active_entityrD   Z_replace_attach_urlr9   r!   )r	   ZattachZ
new_attachrD   r   r   r   _replace_attachment   s    zCmfComment._replace_attachment)N)NN)__name__
__module____qualname__r   classmethodr   r$   r*   r3   r<   r=   r@   rB   rE   __classcell__r   r   r
   r   r      s   6
r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   