B
    f                 @   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r t| jnd }| jr|r| jrF|jd| jd q| jjrt	j
| jkry|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)objzPPP-COM-EDIT-ALLzPPP-COM-EDIT-OWN)Z	log_levelZ
project_idcmfutilget_obj_by_idr   check_project_role_accessr	   textr   r   r   	cmf_ownerCmfPermissionErrorr   check_edit_perm)r   project)r   r   r   r$   #   s    

zCmfComment.check_edit_permc                s   |  dddg | jrvtj| jkrby| 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-ALL)r   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 xb|jD ]X}|jdkr|jr||j|S |j|jkrdS |dkrtjj|dd}|j|krdS qW dS )uy  
        Проверяем видимость комментария для g.current_person (или check_for_person)
        При использовании check_for_user метод можт выполняться долго! Обязательно перед вызовом
        проверяйте, что комментарий имеет флаг private
        T.r   cmf_owner_idr   r%   zproject.logic_prefix)ZsimpleZfieldsZ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_ofcommentZsubjectr   r   r   check_visibilityI   s6    
zCmfComment.check_visibilityc                sF   t t  }| dg | jr>x| j D ]}|| q,W t|S )Nr	   )setr   
get_ownersr&   r	   addlist)r   r   r   ZownersZparent_owner)r   r   r   r.   s   s    zCmfComment.get_owners)NN)__name__
__module____qualname__r   r   r$   r'   classmethodr,   r.   __classcell__r   r   )r   r   r      s   
)r   )base64ZdatetimeZ	mimetypesZcmf.includeZ
cmf.modelsr   Zpathlibr   Zcommon.models.cmf_active_entityr   r   r   r   r   r   <module>   s   