U
    hVci                     @   sR   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 dejZdS )    N)urlparse)Linker)*)cmf_commentc                       s   e Zd Z fddZ fddZdd Zdd Zd	d
 Zdd Zdd fdd
Z	dd Z
dd Zdd Zdd ZeedddZ  ZS )
CmfCommentc                    s   t   ddg S )Nparent
cmf_author)supersave_preload_fieldsself	__class__ ./models/cmf_comment.pyr
      s    zCmfComment.save_preload_fieldsc                    sn   |  dd | jdkrd S | j}|s4| j j }|rdtd| jj | jjtj	jjd|
 d t  S )N	log_levelr   r   zcomment-)idZ	person_id)Zevent_persons)load_fieldsr   r   Ztree_parentloadZcmf_emit_eventr   valuegcurrent_personZall_relation_personsr	   emit)r   r   r   r   r   r      s    
zCmfComment.emitc                 C   s(   | j r$| j j| _| j j| _| j j| _d S N)r   ZloginZcache_cmf_author_logincodeZcache_cmf_author_codenameZcache_cmf_author_namer   r   r   r   _calc_cache   s    

zCmfComment._calc_cachec                 C   s   | j r| j jjdkrd S d S )NZCmfDocument)r   r   
class_namer   r   r   r   	_calc_doc&   s    zCmfComment._calc_docc                 C   sh   | j jstjjj| j jkrd| j jr(g | _ d| j _| j jt	j	j
t	jjd tjjjtjjjd d S )NTZtzdatetimer   r   )viewsis_nullr   r   r   r   json
is_changedappendr!   nowtimezoneutc	isoformatr   r   r   r   r   _calc_views0   s    zCmfComment._calc_viewsc                 C   s(   | j jr| j jrdS t| j j| _ dS )u   
        Защита от инжектов которые могу прилететь из внешних систем
        :return:
        N)textr%   r#   ZcmfutilZ
clean_textr   r   r   r   r   _clean_text<   s    zCmfComment._clean_textT)notifyc                   sR   |    |   |   |   t j||}|r:|   | jrN| jj| d |S )u   
        Первый коммент для чатов создает либо топик без чата либо топик с чатом
        :param args:
        :param kwargs:
        :return:
        )Zcomment)	r-   r   r+   r   r	   save_calc_notifyr   Z_comment_save_hook)r   r.   argskwargsresr   r   r   r/   E   s    zCmfComment.savec                 K   s$   | j dkr | jr | jj| jd dS )u{   
        Отправляем оповещение о комментрии
        :param kwargs:
        :return:
        r   r,   N)r   r   Zall_place_notifyr,   r   r2   r   r   r   r0   X   s    zCmfComment._calc_notifyc                 C   s&   | j s| jjsd S |   | j| _d S r   )Zis_newr   r%   Z_load_perm_fieldsZperm_parentr   r   r   r   _calc_perm_parentb   s    zCmfComment._calc_perm_parentc                 C   s   d S r   r   r   r   r   r   gen_codeh   s    zCmfComment.gen_codec                 K   s   | j ddgd | jjrg | _tjjj| jjkr| jjt	j	j
t	jjd tjjjtjjjd | jdd | jr| jjdkrd| j_| j  dS d	S )
Nr"   zchannel_message.message_status)Zfieldsr   r    T)Z	only_datareadF)r   r"   r#   r   r   r   r   r$   r&   r!   r'   r(   r)   r*   r   r/   Zchannel_messageZmessage_statusr5   r   r   r   	mark_readk   s    
zCmfComment.mark_readr4   c                 C   s   t | } | S r   )bleachlinkifyr4   r   r   r   r;   |   s    
zCmfComment.linkify)__name__
__module____qualname__r
   r   r   r   r+   r-   r/   r0   r6   r7   r9   staticmethodstrr;   __classcell__r   r   r   r   r      s   
	
r   )	r!   Zurllib.parser   r:   r   Zcmf.includeZ
cmf.fieldsr   r   r   r   r   r   <module>   s   