
    _i"                     l    d dl Z d dlmZ d dlmZ d dl d dlZd dlmZ  G d dej                        Zy)    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                 *    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     w*,/xxx    c                      t         |          S N)r   emitr   s    r   r   zCmfComment.emit   s     w|~r   c                     | j                   rR| j                   j                  | _        | j                   j                  | _        | j                   j
                  | _        y y 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+   sD    ??*.//*?*?D')-)=)=D&)-)=)=D& r   c                 d    | j                   r#| j                   j                  j                  dk7  ry y )NCmfDocument)r   value
class_namer&   s    r   	_calc_doczCmfComment._calc_doc2   s)    {{dkk//::mK Lr   c                 t   | j                   r| j                  j                  st        j                  j	                  t        j
                  j                        j                         t        j                  j                  j                  t        j                  j                  j                  dg| _        y y y )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     ;;tzz44'/'8'8'<'<@Q@Q@U@U'<'V'`'`'b-.-=-=-B-B-H-H-.-=-=-B-B-H-H' (DJ  5;r   )notifyauditc                x   | j                          | j                          | j                          | j                  dk7  rd}t	        |   |d|i|}| j                  r+| j                  dk(  r| j                  j                  |        | j                  dk(  r t        j                  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glD888;;4>>Q.KK**4*8>>QNN--$-7
r   c                     | j                   s| j                  j                  sy | j                          | j                  | _        y r   )r2   r   r4   _load_perm_fieldsperm_parentr&   s    r   _calc_perm_parentzCmfComment._calc_perm_parentZ   s0    t{{55 ;;r   c                      y r    r&   s    r   gen_codezCmfComment.gen_code`   s    r   c                    | j                  ddg       | j                  j                  rg | _        t        j                  j
                  j                  | j                  j                  vr| j                  j                  j                  t        j                  j                  t        j                  j                        j                         t        j                  j
                  j                  t        j                  j                  j                  d       | j                  d       | j                   rD| j                   j"                  dk7  r+d| j                   _        | j                   j                          yy	)
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::DJ  &&djjoo=JJ##1B1B1F1F(J[J[J_J_1F1`1j1j1l-.-=-=-B-B-H-H-.-=-=-B-B-H-H%' ( III%##(<(<(K(Kv(U6<$$3$$))+r   r   c                 0    t        j                  |       } | S r   )bleachlinkify)r   s    r   r]   zCmfComment.linkifyt   s    ~~d#r   c                 h    | j                  dg       | j                          t        |   |i | y )Nzcmf_author.login)rU   r'   r   _save_import)r   rF   rG   r   s      r   r_   zCmfComment._save_importy   s3    ,-.d-f-r   c                 .   | j                   dk7  ry | j                  sy| j                  j                  s| j                  r%t	        j
                  j                  | dg|i | y | j                  s%t	        j
                  j                  | dg|i | y y y )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 }}}}''4;;((/@R4R6R[[((/@R4R6R ! r   c                     | j                  dg       | j                  dk7  ry | j                  s%t        j                  j
                  | dg|i | y y )Nr   r   comment_deleted)rU   r   rc   rC   rd   re   rf   s      r   _do_event_deletedzCmfComment._do_event_deleted   sL    +'>>Q}}OO$$T+<NtNvN r   updateNpermr   c                    	 |dk(  rQt        |t              r,|}t        j                  |dg      }|st	        d| d       |r|j                  dg       t        |    |||d
|S # t        $ r Y y	w xY w)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NF!!$I&"RZ^_++
|+L w$dVNvNN " 		s   AA+ +	A76A7c                     | j                   j                          | j                   st        dd       t        j                  j                  |       }|D ]  }|j                           y )NuU   Метод можно вызывать только у dummy комментариевTrq   )r   )rc   loadry   rC   CmfAttachmentlistdelete)r   attachments
attachments      r   r   z#CmfComment.delete_dummy_attachments   sY    }}muyz**//t/<% 	 J	 r   rQ   c                     | j                   |i |ddi}t        j                  j                  |j                  |      S )uN   Создаем dummy-комментарий и возвращает его getrc   T)idrR   )ro   rC   r   sgetr   )r}   rR   rF   rG   new_comments        r   r   zCmfComment.create_dummy   s@     !cjj$@&@4@   %%%GGr   c                     t        | t        j                  j                        rt	        | j
                        }n| }t        j                  j                  ||d       y)uk   
            Метод добавляет комментарий к объекту с log_level=2
        )	parent_idr   N)	ru   cmfrC   CmfModelrv   r   r9   deferred_comment_audit_listrX   )r   r   r   s      r   add_comment_auditzCmfComment.add_comment_audit   sI    
 fcjj112FIIII	%%,,".
 	r   c                 :   | rg t         _        y t         j                  sy t         j                  dt        t         j                         d       t         j                  D ].  }t        j                  |d   |d   d      j                          0 g t         _        y )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),,	9#a>[>[:\9]]hij44 	$G{+V_   "TV		$
 )+%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4 8
 
Ky
 >( "&T *'" c  .
S$O &.t O O  (, H H   + +r   r   )	r1   urllib.parser   r\   r   cmf.include
cmf.fieldsr   r   rN   r   r   <module>r      s+     !    "H+'' H+r   