
    Fi!                     h    d dl Z d dlmZ d dlmZ d dlT d dlZd dlmZ  G d dej                  ZdS )    N)urlparse)Linker)*)cmf_commentc                   (    e Zd ZdZej        j        g dz   Z fdZ fdZd Z	d Z
d Zddd fd	
Zd
 Zd Zd Zedefd            Z fdZd Zd Zeddd fd
            Zd Zeddd            Zed             Zedd            Z xZS )
CmfCommentT)	mark_readpublic_likepublic_updatedelete_dummy_attachmentscreate_dummyc                 N    t                                                      g dz   S )N)parent
cmf_authorstatus	log_leveltexttree_parent_id)supersave_preload_fieldsself	__class__s    ./cmf/models/cmf_comment.pyr   zCmfComment.save_preload_fields   s'     ww**,,/x/x/xxx    c                 D    t                                                      S N)r   emitr   s    r   r   zCmfComment.emit   s     ww||~~r   c                 ~    | j         r5| j         j        | _        | j         j        | _        | j         j        | _        d S d S r   )r   logincache_cmf_author_logincodecache_cmf_author_codenamecache_cmf_author_namer   s    r   _calc_cachezCmfComment._calc_cache+   sC    ? 	>*./*?D')-)=D&)-)=D&&&	> 	>r   c                 B    | j         r| j         j        j        dk    rd S d S )NCmfDocument)r   value
class_namer&   s    r   	_calc_doczCmfComment._calc_doc2   s,    { 	dk/:mKKF LKr   c                    | j         r| j        j        swt          j                            t          j        j                                                  t          j	        j
        j        t          j	        j        j        dg| _        d S d S d S )Ntzdatetimer"   r$   )is_newviews
is_changedr1   nowtimezoneutc	isoformatgcurrent_personr"   r*   r$   r&   s    r   _calc_viewszCmfComment._calc_views<   s     ; 	(tz4 	('/'8'<'<@Q@U'<'V'V'`'`'b'b-.-=-B-H-.-=-B-H' ' (DJJJ	( 	( 	( 	(r   )notifyauditc                   |                                   |                                  |                                  | j        dk    rd} t	                      j        |d|i|}| j        r&| j        dk    r| j                            |            | j        dk    r t          j	        
                    |            |S )u   
        Первый коммент для чатов создает либо топик без чата либо топик с чатом
        :param args:
        :param kwargs:
        :return:
        r   Fr=   )comment)obj)r,   r;   r'   r   r   saver   _comment_save_hookmodelsCmfStatdo_calc_statistics)r   r<   r=   argskwargsresr   s         r   rA   zCmfComment.saveE   s     	>QEegglD8888; 	94>Q..K**4*888>QN--$-777
r   c                 p    | j         s| j        j        sd S |                                  | j        | _        d S r   )r2   r   r4   _load_perm_fieldsperm_parentr&   s    r   _calc_perm_parentzCmfComment._calc_perm_parentZ   s?     	t{5 	F   ;r   c                     d S r    r&   s    r   gen_codezCmfComment.gen_code`   s    tr   c                 \   |                      ddg           | j        j        rg | _        t          j        j        j        | j        j        vr| j        j                            t          j	        
                    t          j        j                                                  t          j        j        j        t          j        j        j        d           |                     d           | j        r5| j        j        dk    r%d| j        _        | j                                         dS d	S )
Nr3   zchannel_message.message_statusfieldsr.   r0   T)	only_datareadF)load_fieldsr3   is_nullr9   r:   r"   r*   jsonappendr1   r5   r6   r7   r8   r$   rA   channel_messagemessage_status)r   rG   s     r   r	   zCmfComment.mark_readc   s   *J KLLL: 	DJ &djo==J##1B1F1F(J[J_1F1`1`1j1j1l1l-.-=-B-H-.-=-B-H%' %' ( ( ( III%%%# ,(<(Kv(U(U6<$3$))+++4ur   r   c                 .    t          j        |           } | S r   )bleachlinkify)r   s    r   r]   zCmfComment.linkifyt   s    ~d##r   c                     |                      dg           |                                   t                      j        |i | d S )Nzcmf_author.login)rU   r'   r   _save_import)r   rF   rG   r   s      r   r_   zCmfComment._save_importy   sO    ,-...d-f-----r   c                     | j         dk    rd S | j        sT| j        j        s| j        rt	          j        j        | dg|R i | d S | j        st	          j        j        | dg|R i | d S d S d S )Nr   comment_createdcomment_updated)r   is_dummyr4   r2   rC   CmfEventdo_eventr   rF   rG   s      r   _do_event_savezCmfComment._do_event_save~   s    >QF } 	S}' S4; S(/@R4RRR6RRRRR[ S(/@R4RRR6RRRRR		S 	SS Sr   c                     |                      dg           | j        dk    rd S | j        st          j        j        | dg|R i | d S d S )Nr   r   comment_deleted)rU   r   rc   rC   rd   re   rf   s      r   _do_event_deletedzCmfComment._do_event_deleted   sm    +'''>QF} 	OO$T+<NtNNNvNNNNN	O 	Or   updateNpermr   c                4   	 |dk    rct          |t                    r5|}t                              |dg          }|st	          d| d           |r|                    dg           n# t          $ r Y d	S w xY w t                      j        |||d
|S )NcreateprojectrQ   u%   Не найден объект с id Tabortcomments)force_check_fieldsFrl   )	
isinstancestrcmfutilget_obj_by_id	cmf_alert_acl_check_writeCmfPermissionErrorr   ux_check_perm)clsrm   r   rF   rG   obj_idr   s         r   r|   zCmfComment.ux_check_perm   s    
	xfc** `#F$2269+2NNF! `!"R&"R"RZ^____ M++
|+LLL! 	 	 	55	$uww$dVNNvNNNs   A)A- -
A;:A;c                     | j                                          | j         st          dd           t          j                            |           }|D ]}|                                 d S )NuU   Метод можно вызывать только у dummy комментариевTrq   )r   )rc   loadry   rC   CmfAttachmentlistdelete)r   attachments
attachments      r   r   z#CmfComment.delete_dummy_attachments   s}    } 	{muyzzzz*//t/<<% 	  	 J	  	 r   rQ   c                p     | j         |i |ddi}t          j                            |j        |          S )uN   Создаем dummy-комментарий и возвращает его getrc   T)idrR   )ro   rC   r   sgetr   )r}   rR   rF   rG   new_comments        r   r   zCmfComment.create_dummy   sE     !cj$@&@@4@@@  %%%GGGr   c                 n    t           j                            t          | j                  |d           dS )uk   
            Метод добавляет комментарий к объекту с log_level=2
        )	parent_idr   N)r9   deferred_comment_audit_listrX   rv   r   )r   r   s     r   add_comment_auditzCmfComment.add_comment_audit   sA    
 	
%,,VY.
 .
 	 	 	 	 	r   Fc                 X   | rg t           _        d S t           j        sd S t                               dt          t           j                   d           t           j        D ]=}t                              |d         |d         d                                           >g t           _        d S )Nz'apply_deferred_comment_audit_list save z audit recsr   r      )r   r   r   )r9   r   debuglenrC   r   rA   )
only_cleanr?   s     r   !apply_deferred_comment_audit_listz,CmfComment.apply_deferred_comment_audit_list   s     	,.A)F, 	F	i#a>[:\:\iiijjj4 	$ 	$G{+V_    "TVVVV(*%%%r   )F)__name__
__module____qualname__	api_allowr   r   api_methodsr   r   r'   r,   r;   rA   rL   rO   r	   staticmethodrv   r]   r_   rg   rj   classmethodr|   r   r   r   r   __classcell__)r   s   @r   r   r      s       I(4 8
 8
 8
 
Ky y y y y
     > > >  ( ( ( "&T       *' ' '    " c    \. . . . .
S S S$O O O &.t O O O O O O [O      (, H H H H [H   \ + + + \+ + + + +r   r   )	r1   urllib.parser   r\   r   cmf.include
cmf.fieldsr   r   rN   r   r   <module>r      s     ! ! ! ! ! !            " " " " " "C+ C+ C+ C+ C+' C+ C+ C+ C+ C+r   