
    *`mh                     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 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dg           | j        dk    rd S | j        }|s7| j                                        r| j        j                                        }|rRt          d| j        j         | j        j        t          j	        j        j        d|
                                           t                                                      S )Nr   r   r   zcomment-)id	person_id)event_persons)load_fieldsr   r   tree_parentloadcmf_emit_eventr   valuegcurrent_personall_relation_personsr   emit)r   r   r   s     r   r'   zCmfComment.emit   s    +x0111>AF 	4$*//11 	4%,1133F 	6dkn66"&'-a>N>Q>WXX)/)D)D)F)F    ww||~~r   c                 ~    | j         r5| j         j        | _        | j         j        | _        | j         j        | _        d S d S N)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   r#   
class_namer0   s    r   	_calc_doczCmfComment._calc_doc1   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_changedr:   nowtimezoneutc	isoformatr$   r%   r,   r#   r.   r0   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   |                                   |                                  |                                  | j        dk    rd} t	                      j        |d|i|}| j        r| j                            |            | j        dk    r t          j	        
                    |            |S )u   
        Первый коммент для чатов создает либо топик без чата либо топик с чатом
        :param args:
        :param kwargs:
        :return:
        r   FrD   )comment)obj)r5   rB   r1   r   r   saver   _comment_save_hookmodelsCmfStatdo_calc_statistics)r   rC   rD   argskwargsresr   s         r   rH   zCmfComment.saveD   s     	>QEegglD8888; 	9K**4*888>QN--$-777
r   c                 p    | j         s| j        j        sd S |                                  | j        | _        d S r)   )r;   r   r=   _load_perm_fieldsperm_parentr0   s    r   _calc_perm_parentzCmfComment._calc_perm_parentY   s?     	t{5 	F   ;r   c                     d S r)    r0   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 )
Nr<   zchannel_message.message_statusfieldsr7   r9   T)	only_datareadF)r   r<   is_nullr$   r%   r,   r#   jsonappendr:   r>   r?   r@   rA   r.   rH   channel_messagemessage_status)r   rN   s     r   r	   zCmfComment.mark_readb   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   rc   zCmfComment.linkifys   s    ~d##r   c                     |                      dg           |                                   t                      j        |i | d S )Nzcmf_author.login)r   r1   r   _save_import)r   rM   rN   r   s      r   re   zCmfComment._save_importx   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_dummyr=   r;   rJ   CmfEventdo_eventr   rM   rN   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)r   r   ri   rJ   rj   rk   rl   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                    	 |dk    rIt          |t                    rt                              |dg          }|                    dg           n# t
          $ r Y dS w xY w t                      j        |||d|S )NcreateprojectrX   comments)force_check_fieldsFrr   )
isinstancestrcmfutilget_obj_by_id_acl_check_writeCmfPermissionErrorr   ux_check_perm)clsrs   r   rM   rN   r   s        r   r   zCmfComment.ux_check_perm   s    	xfc** O$2269+2NNF''J<'HHH! 	 	 	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 комментариевT)abort)r   )ri   r!   	cmf_alertrJ   CmfAttachmentlistdelete)r   attachments
attachments      r   r   z#CmfComment.delete_dummy_attachments   s}    } 	{muyzzzz*//t/<<% 	  	 J	  	 r   rX   c                p     | j         |i |ddi}t          j                            |j        |          S )uN   Создаем dummy-комментарий и возвращает его getri   T)r   rY   )ru   rJ   r   sgetr   )r   rY   rM   rN   new_comments        r   r   zCmfComment.create_dummy   sE     !cj$@&@@4@@@  %%%GGGr   )__name__
__module____qualname__	api_allowr   r   api_methodsr   r'   r1   r5   rB   rH   rS   rV   r	   staticmethodrz   rc   re   rm   rp   classmethodr   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 H H H Hr   r   )	r:   urllib.parser   rb   r   cmf.include
cmf.fieldsr   r   rU   r   r   <module>r      s     ! ! ! ! ! !            " " " " " "eH eH eH eH eH' eH eH eH eH eHr   