
    jj"                     `    d dl 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)Linker)*)cmf_commentc                   2    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 fdZddZd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_doc1   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_changedr0   nowtimezoneutc	isoformatgcurrent_personr!   r)   r#   r%   s    r   _calc_viewszCmfComment._calc_views;   s     ;;tzz44$--11X5F5F5J5J1KUUW((--33((--33 DJ  5;r   )notifyauditc                   | j                          | j                          | j                          | j                  dk7  rd}t	        |   |d|i|}| j                  r+| j                  dk(  r| j                  j                  |        | j                  r7| j                  dk(  r(| j                  s| j                  j                  d       | j                  dk(  r t        j                  j                  |        |S )u   Первый коммент для чатов создает либо топик без чата либо топик с чатом.r   Fr<   )commentT)force)obj)r+   r:   r&   r   r   saver   _comment_save_hookis_dummymark_full_search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;;4>>Q.t}}KK((t(4>>QNN--$-7
r   c                     | j                   s| j                  j                  sy | j                          | j                  | _        y r   )r1   r   r3   _load_perm_fieldsperm_parentr%   s    r   _calc_perm_parentzCmfComment._calc_perm_parentW   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	)
Nr2   zchannel_message.message_statusfieldsr-   r/   T)	only_datareadF)load_fieldsr2   is_nullr8   r9   r!   r)   jsonappendr0   r4   r5   r6   r7   r#   rA   channel_messagemessage_status)r   rI   s     r   r   zCmfComment.mark_read`   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.linkifyq   s    ~~d#r   c                 h    | j                  dg       | j                          t        |   |i | y )Nzcmf_author.login)rW   r&   r   _save_import)r   rH   rI   r   s      r   ra   zCmfComment._save_importv   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   rC   r3   r1   rE   CmfEventdo_eventr   rH   rI   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)rW   r   rC   rE   re   rf   rg   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projectrS   u%   Не найден объект с id Tabortcomments)force_check_fieldsFrm   )	
isinstancestrcmfutilget_obj_by_id	cmf_alert_acl_check_writeCmfPermissionErrorr   ux_check_perm)clsrn   r   rH   rI   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                 F    | j                          t        |   |i |}|S r   )delete_attachmentsr   delete)r   rH   rI   resultr   s       r   r   zCmfComment.delete   s'    !00r   c                     | j                   j                          | j                   st        dd       | j                          y )NuU   Метод можно вызывать только у dummy комментариевTrr   )rC   loadrz   r   r%   s    r   r   z#CmfComment.delete_dummy_attachments   s1    }}muyz!r   c                 v    t         j                  j                  | dg      }|D ]  }|j                           y )Nzparent.is_dummy)r   rT   )rE   CmfAttachmentlistr   )r   attachments
attachments      r   r   zCmfComment.delete_attachments   s<    **//tEVDW/X% 	 J	 r   rS   c                     | j                   |i |ddi}t        j                  j                  |j                  |      S )uN   Создаем dummy-комментарий и возвращает его getrC   T)idrT   )rp   rE   r   sgetr   )r~   rT   rH   rI   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)uV   Метод добавляет комментарий к объекту с log_level=2.)	parent_idr   N)	rv   cmfrE   CmfModelrw   r   r8   deferred_comment_audit_listrZ   )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   )r8   r   debuglenrE   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   )returnN)F)__name__
__module____qualname__	api_allowr   r   api_methodsr   r   r&   r+   r:   rA   rN   rQ   r   staticmethodrw   r_   ra   rh   rk   classmethodr}   r   r   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   )r0   r^   r   cmf.include
cmf.fieldsr   r   rP   r   r   <module>r      s(        "K+'' K+r   