U
    Yh}#                     @   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   |  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)r	   r   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   r0   6   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	   r   r
   r   r   r9   F   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   r7   r   zPPP-COM-DELETE-ALLr1   zPPP-COM-DELETE-OWN)r   r   r.   r/   r7   r   r5   r   r8   r   check_delete_permr   r
   r   r   r:   b   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   r   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_ofr3   r4   r   Z	api_scoper+   r   Zlogic_prefixZ
user_localr;   
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_visibilitys   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_entityrA   Z_replace_attach_urlr6   r   )r	   ZattachZ
new_attachrA   r   r   r   _replace_attachment   s    zCmfComment._replace_attachment)N)NN)__name__
__module____qualname__r   classmethodr   r   r'   r0   r9   r:   r=   r?   rB   __classcell__r   r   r
   r   r      s   )
r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   