U
    _i'                     @   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dg S )Nprojectzparent.is_public)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g | jsD|rft jj| dd	D ]}|jdd
 qTt	 j|||d|}t j
|  |S )Ntree_parent==F)filterinclude_deletedu   Внимание! Данный комментарий нельзя удалить так как на него есть ответыT)abortis_dummy)parentr   )r   r   )modelsr   countZ	cmf_alertload_fieldsr   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'   9   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   r0   A   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_level
project_idAPPget_cache_projectZis_newcheck_project_role_accessr   textr,   r.   r/   	cmf_ownerCmfPermissionErrorr   r   check_edit_permr   r   r	   r   r   r:   Q   s    
zCmfComment.check_edit_permc                    s   |  ddddg | jrt| j}tj| jkrv| jr:d S z|jd| j	d W q t
k
rr   |jd| j	d Y qX q|jd| j	d n
t   d S )Nr3   r   r8   r   zPPP-COM-DELETE-ALLr1   zPPP-COM-DELETE-OWN)r   r3   r4   r5   r.   r/   r8   r   r6   r   r9   r   check_delete_permr;   r	   r   r   r<   m   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)r.   r/   Zdisable_permissionsZacl_admin_modeZcurrent_personidZcurrent_person__member_ofZcmfutilZget_obj_by_idr=   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_urlr7   value)r   ZattachZ
new_attachrD   r   r   r   _replace_attachment   s    zCmfComment._replace_attachment)N)NN)__name__
__module____qualname__r   classmethodr   r!   r'   r0   r:   r<   r@   rB   rF   __classcell__r   r   r	   r   r      s   6
r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   