U
    NNf                     @   sZ   d dl Z d dlZd dlZd dlT d dlmZ d dlmZ d dlm	Z	 G dd dej
Z
dS )    N)*)cmf_comment)Path)CmfActiveEntityc                       s`   e Z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	  Z
S )
CmfCommentF)forcec                   sL   | j   | j r6td| j j d| jji| j  d t j|d|i|S )Nzcomment-delete-id)Zevent_personsr   )parentloadZcmf_emit_eventr   valueZall_relation_personssuperdelete)selfr   argskwargs	__class__ ./common/models/cmf_comment.pyr      s    

 zCmfComment.deletec                    s\   | j s| jr| jj  | _ | jr4| jjr4| jr4d| _| jjrN| jdkrNtj	| _
t jf |S )NTclosed)r	   Ztree_parentr
   is_new
spectators
is_changedprivatestatusgcurrent_userZ	closed_byr   save)r   r   r   r   r   r      s    zCmfComment.savec                    s   | j dkrd S | jrt| j }r| jr<|jd| jd q| jjr| jsd| j	rdtj| j	dgd| _t
j| jkrz|jd| jd W q tk
r   |jd| jd Y qX q|jd| jd n
t   d S )Nr   zPPP-COM-ADDobjproject)fieldszPPP-COM-EDIT-ALLzPPP-COM-EDIT-OWN)Z	log_levelZ
project_idcmfutilget_obj_by_idr   check_project_role_accessr	   textr   Z	parent_idr   r   	cmf_ownerCmfPermissionErrorr   check_edit_perm)r   r    r   r   r   r(   #   s    
zCmfComment.check_edit_permc                    s   |  dddg | jrvtj| jkrbz| jjd| jd W qt tk
r^   | jjd| jd Y qtX q| jjd| jd n
t 	  d S )Nr    r	   r&   zPPP-COM-DELETE-ALLr   zPPP-COM-DELETE-OWN)
load_fieldsr    r   r   r&   r$   r	   r'   r   check_delete_perm)r   r   r   r   r*   =   s    zCmfComment.check_delete_permNc                 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_ofr"   r#   r   Z	api_scoper   r    Zlogic_prefixZ
user_localr+   
class_nameZin_project_roleZmodelsZCmfAccessListZsubject_full_group_list)clsZ
comment_idZowner_idZcheck_for_userZcheck_for_user__member_ofZcommentZsubjectr   r   r   check_visibilityK   s8    

zCmfComment.check_visibilityc                    sB   t t  }| dg | jr:| j D ]}|| q*t|S )Nr	   )setr   
get_ownersr)   r	   addlist)r   r   r   ZownersZparent_ownerr   r   r   r0   u   s    zCmfComment.get_owners)NN)__name__
__module____qualname__r   r   r(   r*   classmethodr.   r0   __classcell__r   r   r   r   r      s   
)r   )base64ZdatetimeZ	mimetypesZcmf.includeZ
cmf.modelsr   pathlibr   Zcommon.models.cmf_active_entityr   r   r   r   r   r   <module>   s   