U
    h!                     @   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ed-d. Zed2d0d1Z  ZS )3
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                    s
   t   S N)r   emitr   r   r   r   r      s    zCmfComment.emitc                 C   s(   | j r$| j j| _| j j| _| j j| _d S r   )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
   value
class_namer   r   r   r   	_calc_doc2   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	isoformatgcurrent_personr   r   r   r   r   r   r   _calc_views<   s
    zCmfComment._calc_views)notifyauditc                   sv   |    |   |   | jdkr&d}t j|d|i|}| jrZ| jdkrZ| jj| d | jdkrrtj	j
| d |S )u   
        Первый коммент для чатов создает либо топик без чата либо топик с чатом
        :param args:
        :param kwargs:
        :return:
        r   Fr-   )comment)obj)r   r+   r   r   r   saver
   Z_comment_save_hookmodelsZCmfStatZdo_calc_statistics)r   r,   r-   argskwargsresr   r   r   r0   E   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_parentZ   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)load_fieldsr#   Zis_nullr)   r*   r   r   Zjsonappendr!   r%   r&   r'   r(   r   r0   Zchannel_messageZmessage_status)r   r3   r   r   r   r   c   s    
zCmfComment.mark_readr   c                 C   s   t | } | S r   )bleachlinkifyr<   r   r   r   r>   t   s    
zCmfComment.linkifyc                    s&   |  dg |   t j|| d S )Nzcmf_author.login)r:   r   r   _save_importr   r2   r3   r   r   r   r?   y   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"   r1   CmfEventdo_eventr@   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   rA   r1   rB   rC   r@   r   r   r   _do_event_deleted   s
    
zCmfComment._do_event_deletedupdateNpermr
   c                   s   zR|dkrPt |tr>|}tj|dgd}|s>td| dd |rP|jdgd W n tk
rh   Y d	S X t j|||d
|S )NcreateZprojectr7   u%   Не найден объект с id TabortZcomments)Zforce_check_fieldsFrG   )	
isinstancestrZcmfutilZget_obj_by_id	cmf_alertZ_acl_check_writeZCmfPermissionErrorr   ux_check_perm)clsrH   r
   r2   r3   Zobj_idr   r   r   rO      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 комментариевTrJ   )r
   )rA   loadrN   r1   ZCmfAttachmentlistdelete)r   ZattachmentsZ
attachmentr   r   r   r      s    
z#CmfComment.delete_dummy_attachmentsr7   c                O   s&   | j ||ddi}tjj|j|dS )uN   Создаем dummy-комментарий и возвращает его getrA   T)idr8   )rI   r1   r   sgetrT   )rP   r8   r2   r3   Znew_commentr   r   r   r	      s    zCmfComment.create_dummyc                 C   s   t jt| j|d dS )uk   
            Метод добавляет комментарий к объекту с log_level=2
        )	parent_idr   N)r)   deferred_comment_audit_listr;   rM   rT   )r
   r   r   r   r   add_comment_audit   s    zCmfComment.add_comment_auditFc                 C   sb   | rg t _d S t jsd S t dtt j d t jD ] }tj|d |d dd  q6g t _d S )Nz'apply_deferred_comment_audit_list save z audit recsrV   r      )r
   r   r   )r)   rW   debuglenr1   r   r0   )Z
only_cleanr.   r   r   r   !apply_deferred_comment_audit_list   s    
z,CmfComment.apply_deferred_comment_audit_list)F)__name__
__module____qualname__Z	api_allowr   r   Zapi_methodsr   r   r   r   r+   r0   r5   r6   r   staticmethodrM   r>   r?   rD   rE   classmethodrO   r   r	   rX   r\   __classcell__r   r   r   r   r      s>   
		
	r   )	r!   urllib.parser   r=   r   Zcmf.includeZ
cmf.fieldsr   r   r   r   r   r   <module>   s   