U
    Įwh#                     @   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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 )
CmfCommentNc                    s.   t  |}|s*|t  ddddg |S )NZ
cmf_authorZcmf_created_atprivateZext_id)superimport_shop_fieldsextend)clsZfields_nameres	__class__ ./common/models/cmf_comment.pyr      s    zCmfComment.import_shop_fieldsFforceTEXKOM_db_deletec                   s   |  ddg | jr@| js@td| jj d| jji| j d | jsJ|rltjj	| ddD ]}|j
dd qZt j
|||d	|}tj|  |S )
Nparentis_dummyzcomment-delete-id)Zevent_personsT)r   include_deleted)r   r   )load_fieldsr   r   Zcmf_emit_eventr   valueZall_relation_personsmodelsCmfAttachmentlistdeleter   ZCmfBackbonePeerZobj_after_delete_hook)selfr   r   argskwargs
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   tree_parentz==Zcmf_deletedT)fieldsfilterZTECHCOM_nocacher   Zinclude_dummy)r   restorer   r   r   )r   r    r   r   r
   commentr   r   r   r$   *   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   r-   2   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)   r+   r,   	cmf_ownerCmfPermissionErrorr   r   check_edit_perm)r   projectr   r   r   r6   B   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 )Nr7   r   r4   r   zPPP-COM-DELETE-ALLr.   zPPP-COM-DELETE-OWN)r   r7   r+   r,   r4   r   r2   r   r5   r   check_delete_perm)r   r   r   r   r8   ^   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	rrt j
d	krrd
S |js|jjdkr|jrdS |j	sdS |j|jkrdS |jD ]`}|jdkr|jr||j|  S |j|jkr dS |dkrtjj|dd}|j|kr dS qdS )uy  
        Проверяем видимость комментария для g.current_person (или check_for_person)
        При использовании check_for_user метод можт выполняться долго! Обязательно перед вызовом
        проверяйте, что комментарий имеет флаг private
        T.r(   cmf_owner_idr   r7   zproject.logic_prefix)Zsimpler"   ZapiFzproject.servicedeskZCmfProjectRole)Zid_onlyN)r+   r,   Zdisable_permissionsZacl_admin_modeZcurrent_personr   Zcurrent_person__member_ofr0   r1   r   Z	api_scoper(   r7   Zlogic_prefixZ
user_localr9   
class_nameZin_project_roler   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_visibilityo   s8    

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   r=      s    zCmfComment.get_ownersc                 C   s$   ddl m} || jj||| _d S )Nr   )CmfActiveEntity)Zcommon.models.cmf_active_entityr?   Z_replace_attach_urlr3   r   )r   ZattachZ
new_attachr?   r   r   r   _replace_attachment   s    zCmfComment._replace_attachment)N)NN)__name__
__module____qualname__classmethodr   r   r$   r-   r6   r8   r;   r=   r@   __classcell__r   r   r   r   r      s   )
r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   