B
    fJ                 @   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               s   | j   | j r6td| j j d| jji| j  d t j|d|i|}| jdkrt	| j jt
jrd| jjd}t
j| j |dd	  |S )
Nzcomment-delete-id)Zevent_personsr   r   u)   Удален комментарий от z%d.%m.%Y %H:%M   )parenttext	log_level)r
   loadZcmf_emit_eventr   valueZall_relation_personssuperdeleter   
isinstancemodelsCmfTaskcmf_created_atr   save)selfr   argskwargsZresr   )	__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	| _
| js| jdkrt| j jtjrd| jjd}tj| j |dd  t jf |S )NTclosedr   u+   Изменен комментарий от z%d.%m.%Y %H:%Mr	   )r
   r   r   )r
   Ztree_parentr   is_new
spectators
is_changedprivatestatusgcurrent_userZ	closed_byr   r   r   r   r   r   r   r   r   )r   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)r   Z
project_idcmfutilget_obj_by_idr   check_project_role_accessr
   r   r   r"   r#   	cmf_ownerCmfPermissionErrorr   check_edit_perm)r   project)r   r   r   r*   6   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-   N   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_roler   ZCmfAccessListZsubject_full_group_list)clsZ
comment_idZowner_idZcheck_for_userZcheck_for_user__member_ofcommentZsubjectr   r   r   check_visibility\   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   r4      s    zCmfComment.get_owners)NN)__name__
__module____qualname__r   r   r*   r-   classmethodr2   r4   __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   