U
    کhh$                     @   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dg S )Nprojectzparent.is_public)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g | js|r8tjj| ddD ]}|jdd q&t j|||d|}tj|  |S )Nis_dummyT)parentinclude_deleted)r   r   )	load_fieldsr   modelsCmfAttachmentlistdeleter   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%   0   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 |}t
j|  |S )NTclosed)r   )r   r"   load
spectators
is_changedr   statusgcurrent_userZ	closed_byr   r   r   saver   r   Zobj_after_save_hook)r   r   r    r   r	   r   r   r.   8   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_level
project_idAPPget_cache_projectZis_newcheck_project_role_accessr   textr*   r,   r-   	cmf_ownerCmfPermissionErrorr   r   check_edit_permr   r   r	   r   r   r8   L   s    
zCmfComment.check_edit_permc                    s   |  ddddg | jrt| j}tj| jkrv| jr:d S z|jd| j	d W q t
k
rr   |jd| j	d Y qX q|jd| j	d n
t   d S )Nr1   r   r6   r   zPPP-COM-DELETE-ALLr/   zPPP-COM-DELETE-OWN)r   r1   r2   r3   r,   r-   r6   r   r4   r   r7   r   check_delete_permr9   r	   r   r   r:   h   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_personidZcurrent_person__member_ofZcmfutilZget_obj_by_idr   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_visibilityz   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_entityrB   Z_replace_attach_urlr5   value)r   ZattachZ
new_attachrB   r   r   r   _replace_attachment   s    zCmfComment._replace_attachment)N)NN)__name__
__module____qualname__r   classmethodr   r   r%   r.   r8   r:   r>   r@   rD   __classcell__r   r   r	   r   r      s   )
r   N)Zcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   