U
    Rh                     @   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dZejjdddddg Z fddZ fd	d
Zdd Z	dd Z
dd Zddd fdd
Zdd Zdd Zdd ZeedddZ fddZdd  Zd!d" Zed#d$d% fd&d'
Zd(d) Zed$d*d+d,Z  ZS )-
CmfCommentT	mark_readZpublic_likeZpublic_updatedelete_dummy_attachmentscreate_dummyc                    s   t   ddddddg S )Nparent
cmf_authorstatus	log_leveltextZtree_parent_id)supersave_preload_fieldsself	__class__ ./cmf/models/cmf_comment.pyr      s    zCmfComment.save_preload_fieldsc                    sv   |  ddg | jdkrd S | j}|s<| j r<| jj }|rltd| jj | jjtj	jjd|
 d t  S )Nr   r
   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_doc1   s    zCmfComment._calc_docc                 C   s@   | j r<| jjs<tjjtjjd tj	j
jtj	jjdg| _d S )NZtzdatetimer   r    )is_newviews
is_changedr&   nowtimezoneutc	isoformatr   r   r   r   r    r   r   r   r   _calc_views;   s
    zCmfComment._calc_views)notifyauditc                   sl   |    |   |   | jdkr&d}t j|d|i|}| jrP| jj| d | jdkrhtj	j
| d |S )u   
        Первый коммент для чатов создает либо топик без чата либо топик с чатом
        :param args:
        :param kwargs:
        :return:
        r   Fr0   )Zcomment)obj)r#   r.   r!   r   r   saver
   Z_comment_save_hookmodelsZCmfStatZdo_calc_statistics)r   r/   r0   argskwargsresr   r   r   r2   D   s    

zCmfComment.savec                 C   s&   | j s| jjsd S |   | j| _d S r   )r'   r
   r)   Z_load_perm_fieldsZperm_parentr   r   r   r   _calc_perm_parentY   s    zCmfComment._calc_perm_parentc                 C   s   d S r   r   r   r   r   r   gen_code_   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fieldsr$   r%   T)Z	only_datareadF)r   r(   Zis_nullr   r   r   r   Zjsonappendr&   r*   r+   r,   r-   r    r2   Zchannel_messageZmessage_status)r   r5   r   r   r   r   b   s    
zCmfComment.mark_readr   c                 C   s   t | } | S r   )bleachlinkifyr=   r   r   r   r?   s   s    
zCmfComment.linkifyc                    s&   |  dg |   t j|| d S )Nzcmf_author.login)r   r!   r   _save_importr   r4   r5   r   r   r   r@   x   s    zCmfComment._save_importc                 O   sZ   | j dkrd S | jsV| jjs"| jr:tjj| df|| n| jsVtjj| df|| d S )Nr   Zcomment_createdZcomment_updated)r   is_dummyr)   r'   r3   CmfEventdo_eventrA   r   r   r   _do_event_save}   s    

zCmfComment._do_event_savec                 O   s:   |  dg | jdkrd S | js6tjj| df|| d S )Nr   r   Zcomment_deleted)r   r   rB   r3   rC   rD   rA   r   r   r   _do_event_deleted   s
    
zCmfComment._do_event_deletedupdateNpermr
   c                   sd   z4|dkr2t |tr$tj|dgd}|jdgd W n tk
rJ   Y dS X t j|||d|S )NcreateZprojectr9   Zcomments)Zforce_check_fieldsFrH   )
isinstancestrZcmfutilZget_obj_by_idZ_acl_check_writeZCmfPermissionErrorr   ux_check_perm)clsrI   r
   r4   r5   r   r   r   rM      s    
zCmfComment.ux_check_permc                 C   s@   | j   | j stddd tjj| d}|D ]}|  q.d S )NuU   Метод можно вызывать только у dummy комментариевT)abort)r
   )rB   r   Z	cmf_alertr3   ZCmfAttachmentlistdelete)r   ZattachmentsZ
attachmentr   r   r   r      s    
z#CmfComment.delete_dummy_attachmentsr9   c                O   s&   | j ||ddi}tjj|j|dS )uN   Создаем dummy-комментарий и возвращает его getrB   T)r   r:   )rJ   r3   r   sgetr   )rN   r:   r4   r5   Znew_commentr   r   r   r	      s    zCmfComment.create_dummy)__name__
__module____qualname__Z	api_allowr   r   Zapi_methodsr   r   r!   r#   r.   r2   r7   r8   r   staticmethodrL   r?   r@   rE   rF   classmethodrM   r   r	   __classcell__r   r   r   r   r      s6   
	
	r   )	r&   urllib.parser   r>   r   Zcmf.includeZ
cmf.fieldsr   r   r   r   r   r   <module>   s   