U
    Įwh4                     @   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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                   sx   |  ddg | jr@| js@td| jj d| jji| j d | jrbtjj	| dD ]}|
  qTt j
|d|i|S )Nparentis_dummyzcomment-delete-id)Zevent_personsr   r   )load_fieldsr   r   Zcmf_emit_eventr   valueZall_relation_personsmodelsCmfAttachmentlistdeletesuper)selfr   argskwargs
attachment	__class__ $./modules/evagit/examples/example.pyr      s    
 
zCmfComment.deletec                    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closedr	   )r   Ztree_parentload
spectators
is_changedprivatestatusgcurrent_userZ	closed_byr   r   r   saver   )r   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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   r*   '   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   r(   r   zPPP-COM-DELETE-ALLr"   zPPP-COM-DELETE-OWN)r
   r+   r   r    r(   r   r&   r   r)   r   check_delete_perm)r   r   r   r   r,   C   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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_ofZcommentZsubjectr   r   r   check_visibilityT   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   r2   ~   s    zCmfComment.get_owners)NN)__name__
__module____qualname__r   r!   r*   r,   classmethodr0   r2   __classcell__r   r   r   r   r      s   )r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   