
    P
i'                     @    d dl T d dlmZ  G d dej                  ZdS )    )*)cmf_commentc                        e Zd Z fdZed fd	            Zddd fd
Zdd fd
Z fd	Z fd
Z	 fdZ
edd            Z fdZd Z xZS )
CmfCommentc                 N    t                                                      ddgz   S )Nprojectzparent.is_public)supersave_preload_fields)self	__class__s    ./common/models/cmf_comment.pyr
   zCmfComment.save_preload_fields   s$    ww**,,	;M/NNN    Nc                     t                                          |          }|s6|                    t                                          g d                     |S )N)
cmf_authorcmf_created_atprivateext_id)r	   import_shop_fieldsextend)clsfields_nameresr   s      r   r   zCmfComment.import_shop_fields
   sg    gg((55 
	 JJ** , , ,     
r   FforceTEXKOM_db_deletec                   |s9|s7t           j                            dd| gd          }|rt          dd           |                     dg           | j        s|r:t           j                            | d	          D ]}|                    d
            t                      j        |||d|}t           j
                            |            |S )Ntree_parent==F)filterinclude_deletedu   Внимание! Данный комментарий нельзя удалить так как на него есть ответыT)abortis_dummy)parentr    )r   r   )modelsr   count	cmf_alertload_fieldsr"   CmfAttachmentlistdeleter	   CmfBackbonePeerobj_after_delete_hook)	r   r   r   argskwargsreplies
attachmentr   r   s	           r   r*   zCmfComment.delete   s    	m- 	m'--%tT2 % .  G  m  `  hl  m  m  m  m 	*&&& = 	9, 	9$277tUY7ZZ 9 9
!!4!8888eggnd%BR]]V\]]44T:::
r   )	recursivec                     t                      j        |d|i|}t          j                            dgdd| gg dgddd          D ]}|                                 |S )Nr1   r   r   r   )cmf_deletedr   TT)fieldsr   TECHCOM_nocacher    include_dummy)r	   restorer$   r   r)   )r   r1   r-   r.   r   commentr   s         r   r7   zCmfComment.restore9   s    eggotCyCFCC(--cU]TXZ^D_`y`y`yCz@D>BRV . X X 	 	G OO
r   c                    | j         s*| j        r#| j        j                                         | _         | j        j        r| j        rd| _        | j        j        r| j        dk    rt          j        | _	        | j        j        rCt          j                            |           D ]"}| j        |_        |                                 # t                      j        di |S )NTclosed)r#    )r#   r   load
spectators
is_changedr   statusgcurrent_user	closed_byr$   r(   r)   saver	   )r   r.   r0   r   s      r   rC   zCmfComment.saveA   s    { 	9t/ 	9*16688DK?% 	 $/ 	 DL;! 	,dkX&=&=^DN<" 	"$277t7DD " "
%)\
"!!!!uww|%%f%%%r   c                 ~   | j         dk    rd S | j        rt                              | j                  x}r| j        r|                    d| j                   d S | j        j        rt          j
        | j        k    r	 |                    d| j                   d S # t          $ rS | j        j        r$| j        s|                    d| j                   n|                    d| j                   Y d S Y d S w xY w|                    d| j                   d S d S t                                                       d S )Nr   zPPP-COM-ADDobjzPPP-COM-EDIT-ALLzPPP-COM-EDIT-OWN)	log_level
project_idAPPget_cache_projectis_newcheck_project_role_accessr#   textr>   r@   rA   	cmf_ownerCmfPermissionErrorr"   r	   check_edit_permr   r   r   s     r   rP   zCmfComment.check_edit_permQ   s   >QF
 ? 	&3+@+@+Q+Q Q 	&{ [11-T[1QQQQQ% [>T^33c99:LRVR]9^^^^^- c c c=3 cDM c $==mQUQ\=]]]]#==>PVZVa=bbbbbb ^]]	c 556Hdk5ZZZZZ[ [ GG##%%%%%s   ?B AC:9C:c                    |                      g d           | j        rt                              | j                  }t          j        | j        k    rU| j        rd S 	 |                    d| j	                   d S # t          $ r  |                    d| j	                   Y d S w xY w|                    d| j	                   d S t                                                       d S )N)rH   r#   rN   r"   zPPP-COM-DELETE-ALLrE   zPPP-COM-DELETE-OWN)r'   rH   rI   rJ   r@   rA   rN   r"   rL   r#   rO   r	   check_delete_permrQ   s     r   rS   zCmfComment.check_delete_permm   s   JJJKKK? 	(++DO<<G~//= F]556JPTP[5\\\\\) ] ] ]556JPTP[5\\\\\\] 112FDK1XXXXXGG%%'''''s   A< <&B&%B&c                    |r|t           j        k    rLt           j        st           j        rdS |rt           j        j        |k    rdS t           j        }t           j        }nd}t                              |dg d          }|j        |j	        k    rdS |j
        sdS t           j        dk    rdS |j        s5|j        j        dk    r%|j        r|                    |j        d	          rdS |j        D ]u}|j        d
k    r$|j        r|                    |j        |          c S |j        |j        k    r dS |du r!t$          j                            |d          }|j        |v r dS vdS )u  
        !!! Копия метода в CmfAttachment
        Проверяем видимость комментария для g.current_person (или check_for_person)
        При использовании check_for_user метод можт выполняться долго! Обязательно перед вызовом
        проверяйте, что комментарий имеет флаг private
        T.)r=   cmf_owner_idr   r   zproject.logic_prefix)simpler4   apiFzproject.servicedeskzsdesk-agent:default)r   	role_codeCmfProjectRole)id_onlyN)r@   rA   disable_permissionsacl_admin_modecurrent_personidcurrent_person__member_ofcmfutilget_obj_by_idrU   r   	api_scoper=   r   logic_prefix
user_localin_project_role
class_namer$   CmfAccessListsubject_full_group_list)r   
comment_idowner_idcheck_for_usercheck_for_user__member_ofr8   subjects          r   check_visibilityzCmfComment.check_visibility   s     
	,1>!A!A$ (8 t A,/8;;t^N()(C%% ),%''t___ ( a a  4444 	4 ;%5! 	O04III"- J"227?Vk2ll J
 4) 	 	G!%555'/5%55gowOOOOO GJ..tt )C//,2,@,X,XYgqu,X,v,v)z666tt 7	 	r   c                    t          t                                                                }|                     dg           | j        r1| j                                        D ]}|                    |           t          |          S )Nr#   )setr	   
get_ownersr'   r#   addr)   )r   r-   r.   ownersparent_ownerr   s        r   rq   zCmfComment.get_owners   s     UWW''))**($$$; 	) $ 6 6 8 8 ) )

<((((F||r   c                 ^    ddl m} |                    | j        j        ||          | _        d S )Nr   )CmfActiveEntity)common.models.cmf_active_entityrv   _replace_attach_urlrM   value)r   attach
new_attachrv   s       r   _replace_attachmentzCmfComment._replace_attachment   s6    CCCCCC#77	Q[\\			r   )N)NN)__name__
__module____qualname__r
   classmethodr   r*   r7   rC   rP   rS   rn   rq   r|   __classcell__)r   s   @r   r   r      sT       O O O O O      [ #(%       > (-       & & & & & & & & & &8( ( ( ( ($ 4 4 4 [4l    ] ] ] ] ] ] ]r   r   N)cmf.includecommon.fieldsr   r   r;   r   r   <module>r      sn        % % % % % %~] ~] ~] ~] ~]' ~] ~] ~] ~] ~]r   