
    fin)                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
Zd dlT d dlmZ d dlmZ d dlmZ d dlmZ  G d	 d
ej        e          ZdS )    NPath)BeautifulSoupComment)*)cmf_hashlib)CmfPluginConvertMixin)cmf_document)CmfActiveEntityc                       e Zd Zddddddddddd	d
ddddddddddddd	dddddddddddddd	ddddddddddddd d!dd"dddd#d$d%d	d&d'dd(ddd)dddd*d+d,d	d-d.dd/d0d1d0d2d3Zej        j        ej        z   g d4z   Ze e	d5d67          d8                         Z
d9 Zed:ed;efd<            Zdd>Zed?             Zd@ ZdA ZdB Z fdCZdD ZddFZdG ZdH ZdI ZdEd=d6dJdKZ fdLZd;efdMZdEd=dNdOZdP ZdQ ZdR ZdS Z dT Z!dU Z"dV Z#dW Z$d=d=dEdX fdY
Z% fdZZ& fd[Z' fd\Z(d] Z)d^ Z*d_ Z+d` Z, fdaZ-d=db fdc
Z. fddZ/de Z0df Z1dg Z2dh Z3di Z4dj Z5dk Z6 fdlZ7e8dmed;efdn            Z9edmed;efdo            Z:edmed;efdp            Z;edmed;efdq            Z<edmed;efdr            Z=edmed;efds            Z>edmed;efdt            Z?e8dmedued;efdv            Z@edmed;efdw            ZAedmed;efdx            ZBedmed;efdy            ZCedmed;efdz            ZDedmed{ed;efd|            ZEedmed;efd}            ZFedmed~eGd{ed;efd            ZHe8dmed;efd            ZIe8dmed;efd            ZJe8dmed;efd            ZKe8dmed;efd            ZLe8dmed;efd            ZMedeNdedefd            ZOe8deded;efd            ZPe8deded;efd            ZQe8dmed{ed;efd            ZRd ZSeTd             ZUeTd             ZVeWjX        Y                    eWjX        jZ        dd6d6          Z[d Z\d Z]d Z^dede_fdZ`dede_fdZad Zbd Zce8d             Zdd Zed Zfd Zg fdZhe8d             Zie8d             Zje8dEdd            Zkddeded;dEfdZle8ded;e_fd            Zme8d             ZnddZod Zpd Zqd Zr fdZse8d             Zt fdZu fdZvd=d fd
Zw fdZx fdZy xZzS )CmfDocumentu
   Важно0pxz0 0 512 512preserve20)xyviewBox	xml:spacewidthheightzrgb(216, 64, 64)a  M256,512c141.385,0,256-114.615,256-256S397.385,0,256,0S0,114.615,0,256C0.153,397.322,114.678,511.847,256,512z    M234.667,128c0-11.782,9.551-21.333,21.333-21.333c11.782,0,21.333,9.551,21.333,21.333v170.667   c0,11.782-9.551,21.333-21.333,21.333c-11.782,0-21.333-9.551-21.333-21.333V128z M256,384c11.782,0,21.333,9.551,21.333,21.333   s-9.551,21.333-21.333,21.333c-11.782,0-21.333-9.551-21.333-21.333S244.218,384,256,384z)filldzpanel-alarmzrgb(255, 235, 230))tooltipsvgsvg_path	classNamecoloru   Ошибкаz0 0 208.891 208.891)r   r   r   r   r   r   zM0,170l65.555-65.555L0,38.891L38.891,0l65.555,65.555L170,0l38.891,38.891l-65.555,65.555L208.891,170L170,208.891  l-65.555-65.555l-65.555,65.555L0,170zzpanel-erroru   Предупреждениеz0 0 554.2 554.199)r   r   r   r   r   r   zrgb(255, 153, 32)a!  M538.5,386.199L356.5,70.8c-16.4-28.4-46.7-45.9-79.501-45.9c-32.8,0-63.1,17.5-79.5,45.9L12.3,391.6   c-16.4,28.4-16.4,63.4,0,91.8C28.7,511.8,59,529.3,91.8,529.3H462.2c0.101,0,0.2,0,0.2,0c50.7,0,91.8-41.101,91.8-91.8   C554.2,418.5,548.4,400.8,538.5,386.199z M316.3,416.899c0,21.7-16.7,38.3-39.2,38.3s-39.2-16.6-39.2-38.3V416   c0-21.601,16.7-38.301,39.2-38.301S316.3,394.3,316.3,416V416.899z M317.2,158.7L297.8,328.1c-1.3,12.2-9.4,19.8-20.7,19.8   s-19.4-7.7-20.7-19.8L237,158.6c-1.3-13.1,5.801-23,18-23H299.1C311.3,135.7,318.5,145.6,317.2,158.7zzpanel-warningz#FFFAE6u   Заметкаz	0 0 24 24zLayer 1)r   r   r   	data-namea  m19 3.022c0-.008 0-.014 0-.022v-2a1 1 0 0 0 -2 0v1.1a5 5 0 0 0 -1-.1h-1v-1a1 1 0 0 0 -2 0v1h-2v-1a1 1 0 0 0 -2 0v1h-1a5 5 0 0 0 -1 .1v-1.1a1 1 0 0 0 -2 0v2 .022a4.979 4.979 0 0 0 -2 3.978v12a5.006 5.006 0 0 0 5 5h8a5.006 5.006 0 0 0 5-5v-12a4.979 4.979 0 0 0 -2-3.978zm-7 13.978h-4a1 1 0 0 1 0-2h4a1 1 0 0 1 0 2zm4-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zm0-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zz#5243aa)r   r   z
panel-notezrgb(234, 230, 255)u   Информация)r   r   r   zrgb(1,82,204)zM12,24A12,12,0,1,0,0,12,12.013,12.013,0,0,0,12,24ZM12,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12,5Zm-1,5h1a2,2,0,0,1,2,2v6a1,1,0,0,1-2,0V12H11a1,1,0,0,1,0-2Zz
panel-infozrgb(222, 235, 255)u   Готовоz0 0 1000 1000)r   r   r   r   r   r   z#01875aa9  M500,990c270.6,0,490-219.4,490-490S770.6,10,500,10S10,229.4,10,500S229.4,990,500,990z M483.7,678c-0.4,0.4-0.7,0.8-1.1,1.2c-19.1,19.1-50.2,19.1-69.3,0L239.9,505.9c-19.1-19.1-19.1-50.1,0-69.3c19.1-19.1,50.2-19.1,69.3,0l138.7,138.7L695,328.1c19.1-19.1,50.2-19.1,69.3,0c19.1,19.1,19.1,50.2,0,69.3L483.7,678L483.7,678zzpanel-successzrgb(227, 252, 239)u   Без иконки zpanel-hidden)r   r   r   r   )alarmerrorwarningnoteinfosuccesshidden)add_inline_commentapprove_oneconvert_uml2svgcreate_doc_from_templatedelete_inline_comment
do_publishclean_after_encryptdownload_all_attachmentget_in_approve	html_diffimport_mswordpatch_20230407restore_versionsave_renderstart_approveupdate_checkbox
public_getpublic_lockpublic_unlockpublic_lock_pingpublic_do_publish"public_update_text_inline_commentspublic_add_inline_commentpublic_download_all_attachmentpublic_mark_viewedpublic_parent_ui_getprocess_dirty_attachpublic_export_to_pdfpublic_export_to_docxu1   Импорт документа в системуT)descriptionshow_bg_progressbarc                    t           j                            |          }t          |j                  }t          j        |j                  \  }}t           j                            |           }t          |j        d          5 }	|	                    |	
                                |j        |          |_        ddd           n# 1 swxY w Y   |                                 |                                 dS )X   
        Импортирование Word документа в систему
        idrbN)modelsCmfAttachmentgetr   full_path_file	mimetypes
guess_typer   openobj_to_htmlreadsuffix
text_draftsaver,   )
doc_id	attach_id_args_kwargsattachfile_objmimetypeencodingdocfs
             (./modules/project/models/cmf_document.pyimport_msword_taskzCmfDocument.import_msword_taskt   s    %))Y)77-..&1&2GHH( $$$//&'.. 	R! __QVVXXxQQCN	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R


s   4CC
C
c                     d| _         |                                  |                                  t          | j        | j        j        |g           | S )rG   uP   Обработка документа, пожалуйста, подождите.)args)rU   rV   r,   schedule_deferred_jobrb   rI   value)selfr[   rd   kwargss       ra   r1   zCmfDocument.import_msword   sM     m		d5TW]F<STTTT    namereturnc                 0   t                               d|           }d}t          |           t          |          z
  t          |          dz  z   }||k    rd}t          j        |           \  }}|r|                     d          d         }t          j        |dz            }| d|dt          |          z   z
                                            d	t          j
        | d
           } |r|  d| } t                              d| d| d|             | S )u   Метод для генерации имени для хранения документа на диске

        Args:
            name (str): _description_

        Returns:
            str: _description_
        u   [А-Яа-я]      r   .N   -   u0   Слишком длинное название. z > u   . Меняем на )refindalllenrO   rP   splitmathfloorstripr   short_str_encgdebug)rj   
rus_simbolos_max_lengthfile_name_lengthextr]   r^   slice_lengths           ra   _get_filenamezCmfDocument._get_filename   sK    ZZ66
t99s:6Z19LLm++C!*!5d!;!;Hh *jjoob):mAo66L9LACL99:@@BBii[E^_cefEgEgiiD 'GG  FGW  F  F\i  F  F  @D  F  F  G  G  Gri   Fc                      fdr j         j        n j         j        }|dn|} j        s|dz   }                     |          }r j        j        n j        j        }|r |           d| S r j        j        n j        j        }|r| d| S r j        j        n j        j        }|r |           d| S t          drdnd d j	         d           )	Nc           	         t          | t          j                  r|                                 S t          | t          j                  r1| j                                        dk    r|                                 S t          | t          j                  r#| j	                                        r
d| j
         S d| j        v rt| j                                         r| j        j        n| j        j        }|r?r| j        j        n| j        j        }                    |          } |           d| S d| j        v r_| j                                         r| j        j        n| j        j        }|r*r| j        j        n| j        j        } |           d| S t%          drdnd d	| j         d
j         d|           )Nhomez/Users/tree_parent/parentCan not calc old r   zdocument path for parent z of -: empty tree_parent, location_path and parent)
isinstancerK   
CmfProjectproject_dir	CmfFoldersys_typeloadhome_dir	CmfPerson
user_localloginfieldsr   oldnewrj   r   r   
ValueErrorrI   )nodetree_parent_rj   parent_r   parent_pathrg   s       ra   r   z.CmfDocument._get_rfile_id.<locals>.parent_path   s   $ 122 *'')))$ 011 'dm6H6H6J6Jf6T6T}}&$ 011 .do6J6J6L6L .----++ %%'''7:Tt/33@P@T A,/B49==TY]D--d33D)k,77@@$@@@4;&&  """-0E$+//dko <,/B49==TY]D)k'22;;T;;;@# 52 @ @PTPW @ @]a]d @ @ @AEsDR R Rri   r   z.htmlr   r   r   zdocument path for r   )
rj   r   r   is_externalr   r   location_pathr   r   rI   )rg   r   rj   filenamer   r   r   r   s   ``     @ra   _get_rfile_idzCmfDocument._get_rfile_id   sv   	R 	R 	R 	R 	R 	R 	R< !$6ty}}\rrt 	"'>D%%d++.1Kd&**t7G7K 	<!k+..;;;;;25Q*..4;M;Q 	1#00h000$'<T[_ 	7!k&))66H666<s2VV < <tw < < <=A3H H 	Hri   c                     d} | dz   }t          j        t          j                    dz  dz            }t          j        |dz            }|dz  }||         ||         z   d                    t          j        | d                    z   }|S )	u   
        Перенесенный аналог функции из фронтенда.
        Генерирует случайную строку для атрибута "data-id" тега
        >ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789z+/  i   @   r      )k)rx   ry   timetime_nsjoinrandomchoices)
charactersalphabertotalijdata_ids         ra   get_data_idzCmfDocument.get_data_id   s     V
$
DLNNT1g>??Jurz""BJ1++bggfnZSU6V6V6V.W.WWri   c                    | j         j        r| j                             g d           |                     dg           | j        r~t	          | j                  }|dk    rf|                                 }|D ]Q}|j        j        | j        j        k    r| j         |_         | j        |_        |	                    d           Ld S d S d S d S )N)	cmf_ownercmf_owner_assistantsactivityr   
tree_nodesr   T	only_data)
r   
is_changedload_fieldsr   rv   get_tree_nodes_recursiverI   rf   projectrV   )rg   nlen	node_listr   s       ra   _calc_nodeszCmfDocument._calc_nodes   s    ;! 	2K##+\+\+\#]]]l^,,, 2))!88 $ = = ? ?I ) 2 27=DGM99$&*k (,|		D	1111	2 	22 282 2ri   c                     d S N rg   s    ra   _calc_parentzCmfDocument._calc_parent  s	    
 	ri   c                    | j         j        s| j        r| j        j        sd S | j         j        s| j        s| j         r5| j                             dg           |                                 | _        nE| j        r+t          | j        j        t          j                  rd | _        | j        s| j	        | _        | 
                                 d S )Nr   )r   r   r   r   _node_parentr   rf   rK   r   r   r   r   s    ra   __calc_parentzCmfDocument.__calc_parent  s      + 		K"	 F& 		1dk 		1 1 ,,hZ888"//11 ; ':dk.?AR#S#S '"&DK{ 1"&.DKri   c                 N    t                                                      g dz   S )N)r   r   z!tree_parent.show_approvers_alwayscur_workflow_versioncur_published_version cur_workflow_version.doc_versionperm_encryptpublish_by_owner_onlycmf_deletedstatus_closed_atstatus_review_at)supersave_preload_fieldsrg   	__class__s    ra   r   zCmfDocument.save_preload_fields&  s/    ww**,, 0
 0
 0
 
 	
ri   c                 \   t           j                            dd| j        gg dg          }|D ]}d|_        |                                 | j                            d          }t                               | j        | |d| j	        	          }|                                 || _
        d S )
Nr   ==cur_workflowr   TfilterFOPENstatus_typeT)textr   statusr   r   )rK   CmfDocumentHistorylistrI   r   rV   workflowget_default_statusrU   r   r   )rg   tmp_listhstatus_opennew_cur_historys        ra   _create_new_historyzCmfDocument._create_new_history9  s    ,118T47:SUqUqUq9r1ss 	 	A"ANFFHHHHm6666JJ 33QU^ix|  LP  L]3  ^  ^$3!!!ri   Nc                 ,   ddl m }m} |                                  t                              d           |                     g d           | j        s|                                  | j        }|j        j	        dvrj|j        j	        dvrG| j
                                                            dd	          |_        |                                 |                                  n<|j        r|                                  n | j        |_        |                                 t                              d
           | j        rHt                              d           |                                  t                              d           d| _        dS )uG   
        Сохраняем черновик в историю
        r   )datetimetimezonezHISTORY START)r   zcur_workflow_version.statusz'cur_workflow_version.status.status_typer   z"cur_workflow_version.has_published)r   )CLOSEDr   rejectedr   status_codezHISTORY ENDzCREATE APPROVE TASK STARTzCREATE APPROVE TASK ENDFN)r   r   _process_text_draftr|   r}   r   r   r   r   r   r   r   r   rV   has_publishedrU   r   r   _create_publish_taskapproved)rg   create_new_historyr   r   r   s        ra   _process_draft_is_changedz%CmfDocument._process_draft_is_changedE  s    	0///////  """	    d d d 	e 	e 	e( 	'$$&&&#8  &2(BB#*6jHH.2m.@.@.B.B.U.Ubj  yC.U  /D  /D$+$))+++$$&&&& $1 ,((****,0O$)$))+++ 	
% 	/ GG/000%%'''GG-...ri   c                 D    t           j                            |            d S r   )rK   
CmfApprovecancel_approve_processr   s    ra   cancel_approvezCmfDocument.cancel_approvev  s    0066666ri   c                 "    | j         j        dk    S )u6   Явлется ли бизнес-процесс simplezdocument.base:default)r   coder   s    ra   wf_is_simplezCmfDocument.wf_is_simple  s    }!%<<<ri   c                      | j         |i |S r   )r,   rg   rd   rh   s      ra   r;   zCmfDocument.public_do_publish  s    t////ri   )doc_versionsave_importnotify_personsc                   |                      g d           t                              | j                  }|r|                    d|            |                                 r!| j                            dd          | _        | j	        r6| j        | j                            dd          k    rt          d           dS | j        rt          j        | j        k    r| j        rt                              d	           t           j                            | | j        d
|                     t)          | j                  t)          | j                            d           t                              d           t          j        |                                 v rt          d           t          d| j        j         dd           dS | j        j        | _        |                                  | j        | _        | j        | _        |                                  |                                  t           j         !                    |           D ]}|"                                  | j#        |i | t!          j$        j%        | dg|R i | | j        | _&        d| j&        _'        | j&        (                    |           | j)        D ]}|*                                 | (                    dd|           dS )u   Выпуск документа)r   rU   r   publish_approved_onlycmf_versionr   zstatus.coder   r   r   	macros_dbmacros_db_draft
project_idattachmentszPPP-DOC-PUBLISHobjr   r   r   ur   Публикация этого документа доступна только после утвержденияNzOWNERS PLACE NOTIFY STARTu8   Необходимо выпустить документ   )r  personrj   msgpriorityzOWNERS PLACE NOTIFY ENDu   Владелец проекта не может Выпускать чужой документ, но Вы можете установить себя Владельцем документа и Выпуститьu}   Данный документ может выпустить только владелец документа                 u   ,                 ему отправлено уведомление об утверждении черновика. Документ сохранен как черновик.Fabort	publishedTr  r   )depthr   notify)+r   APPget_cache_projectr  check_project_role_accessr   r   r   r   r  	cmf_alertr   r|   current_personr   r}   rK   	CmfNotifyplace_notifyr0   strr   rU   
get_ownersrj   r   r  _pinup_attach_versionr
  r	  _delete_publish_taskmark_full_searchCmfPersonViewr   delete_handle_mention_taskCmfEventdo_eventr   r   rV   r  r,   )	rg   r  r  r  rd   rh   r   viewr[   s	            ra   r,   zCmfDocument.do_publish  s]    W W W 	X 	X 	X ''88 	K--.?T-JJJ  	i-::x]g:hhDK% 	$+9Y9Yfn  }G9Y  :H  :H  +H  +H  K  L  L  LF % 	!*:dn*L*L~ 	33444 -->Ts49~~s4?7K7KLL .    1222
 4??#4#444  p  q  q  q o$o o o w|} } } } F  4@""$$$O	-!!### 	 (--$-77 	 	DKKMMMM!!426222
 	 {DTDDDVDDD%)%>"37"0"''K'@@@ & 	  	 F		T.	AAAAAri   c                    | j         j        s`| j        j        sT| j        j        sH| j        j        s<| j        j        s0| j        j        s$| j        j        s| j        j        s| j	        j        r t                      j        |i |S | j        j        rd|                     dg           | j        D ]-}t          j                            |j        j        d           . t                      j        |i |S d | j                                        D             D ]2}t-          | |          j        r t                      j        |i |c S 3d S )Nr  T)forcec              3   .   K   | ]\  }}|j         |V  d S r   )fullsearch_index).0r   vs      ra   	<genexpr>z/CmfDocument.mark_full_search.<locals>.<genexpr>  s.      PPdaQ=OPPPPPPPri   )text_renderr   r   r   r   r   r   rj   tagsuser_ratingr   r$  full_search_typer   r  rK   CmfFullSearch
mark_dirtyrI   rf   r   itemsgetattr)rg   rd   rh   r[   cf_namer   s        ra   r$  zCmfDocument.mark_full_search  s   & 		=9'		=>,		= ;)		= #.			=
 <*		= 9'		= 9'		= #.		= ,577+T<V<<< + 	=m_---* M M$//	t/LLLL+577+T<V<<<PPdk&7&7&9&9PPP 	A 	AGtW%%0 A/uww/@@@@@@A	A 	Ari   c                    | j         j        }t                              d           |                     g d           |                     |          \  }}t          |          }|                    d          D ]O}|j        	                    d          }t          j        	                    |g d          }|st          d| d	
           W|                                }|st          d|j         dd	
           |                                s|                                d         }	|	|j        d<   |j        dk    s|j        dk    s|j        dk    r,|j        d|	 z   |j        d<   |j        d         |j        d<   d|j        	                    dd          v r|                    dddi          }
|j        d|	 z   |
j        d<   |j        d|	 z   |
j        d<   |                    dddi          }|s|j        d|	 z   |j        d<   |j        d         |j        d<   d|j        	                    dd          v rH|                    dddi          }|s|j        d|	 z   |j        d<   |j        d         |j        d<   |j        dk    r*|j        d|	 z   |j        d<   |j        d         |j        d <   Q|                    d!          x}r$d                    d" |j        D                       }|D ]}|                    |||                   }t                              d#           || _         d S )$Nz_pinup_attach_version STARTr   r   r   r   r   [data-attach-id]data-attach-idurlurl_preview_imgurl_previewrI   r   uV   В документе ссылка не несуществующее вложение Fr  uQ   Не удалось получить доступ к файлу вложения u`   , возможно, он был перемещен, переименован или удаленversiondata-attach-versionimgvideosoundz	?version=srczdata-mce-srczapp-tinymce-card-previewclassr   azapp-tinymce-href-previewdownloadrelzapp-tinymce-img-previewz
mso-viewerzmso-preview-imagehrefzdata-mce-hrefbodyc                 ,    g | ]}t          |          S r   r   r/  r   s     ra   
<listcomp>z5CmfDocument._pinup_attach_version.<locals>.<listcomp>  s    $C$C$CSVV$C$C$Cri   z_pinup_attach_version END)rU   rf   r|   r}   r   get_all_drawio_svgr   selectattrsrM   rK   rL   r  	get_rfile
_file_nameget_versionrj   r@  findrB  rA  r   childrenreplace)rg   r   svg_replaceprepared_textsoupattachment_nodeattachment_id
attachmentrfile
latest_verattachment_linkpreview_imgrO  keys                 ra   r"  z!CmfDocument._pinup_attach_version  s   $	-... Y Y YZZZ%)%<%<T%B%B"]]++#{{+=>> (	W (	WO+1556FGGM-11]KtKtKt1uuJ   C  tA  C  C  KP  Q  Q  Q  Q((**E  }nx  oD } } } EJK K K K$$&& **,,Y7J;EO!"78#u,,0D0O0OSbSgkrSrSr/9~@XJ@X@X/X%e,8G8Me8T%n55+/D/H/HRT/U/UUU"1"6"6sWF`<a"b"b4>NE]Q[E]E]4]%j1/9/EH`T^H`H`/`%e,-2257D]:^__" +5+EH`T^H`H`+`!%(4?4Ee4L!.11!6!:!:7B!G!GGG-2257DW:XYY" +5+EH`T^H`H`+`!%(4?4Ee4L!.11 %,,0:AYZAYAY0Y%f-9H9Nv9V%o699V$$$4 	EGG$C$CT]$C$C$CDDM 	I 	IC)11#{37GHHMM	+,,,'ri   )history_version
drop_draftc                   |                      g d           t          j                            dd| j        gdd|ggdg          }|st          dd	           |rt          j                            dd| j        gd
d| j        ggdg          }|j        | _        |j        | _        |j        | _	        | 
                    d           |                                  |                                 | S d| _        d| _        | 
                    d           |j        | _        |                                   | j
        |ddd|S )u   
        Восстанавливаем документ из DocumentHistory
        Принимаем cmf_version CmfDocumentHistory, который является версией draft или approved документа
        )r   r   need_approver   	parent_idr   r  r   r   r   u$   Не найдена DocumentHistory!Tr  rI   r   r   Fr   )r  r   )r   rK   r   rM   rI   r  r   r   rU   r   rV   _update_attachments_versionsr&  r   )rg   rh  ri  rd   rh   doc_historyrestore_historys          ra   r3   zCmfDocument.restore_version&  s    	ggghhh/33[$PTPW<X5BD/4Z<\4:8 4 = =  	J<DIIII 	P$7;;[RVX\X_D`594A[4\D^4:8 < = =O (,DI-2DO(7(:D%III%%%--///   K DI!DMIII%%%).DO--///49d!OOOOOri   c                    |                      g d           |                     | j        j                  \  }}t	          |          }|                    d          D ]}|j                            d          }|j                            d          }t          j	                            |g d          }|
                    |          D ]}|                    |           d S )	Nr<  r   r=  r>  rE  r?  rC  )stream)r   rT  rU   rf   r   rU  rV  rM   rK   rL   get_contentupload_stream_file)	rg   r]  r^  r_  r`  ra  attachment_verrb  files	            ra   rn  z(CmfDocument._update_attachments_versionsQ  s     Y Y YZZZ%)%<%<T_=R%S%S"]]++#{{+=>> 	; 	;O+1556FGGM,2667LMMN-11]KtKtKt1uuJ"..~>> ; ;--T-::::;		; 	;ri   c                    | j         rr| j        rkt                              | j        j                  t
          j        u r;|                     ddg           | j        j        | _        | j        j	        | _	        d S |                     g d           d| _        d| _	        | j
        r&| j
        j        rd| _        | j
        j	        rd| _	        | j        r$t          | j        j        t
          j                  s$t          | j        j        t
          j                  r(| j        j        rd| _        | j        j	        rd| _	        d S d S d S )Nz!tree_parent.publish_approved_onlyz!tree_parent.publish_by_owner_only)r   r   zworkflow.publish_approved_onlyzworkflow.publish_by_owner_onlyzparent.publish_approved_onlyzparent.publish_by_owner_onlyFT)is_newr   cmfutilget_model_by_idrI   rK   r   r   r  r   r   r   r   rf   r   r   s    ra   _calc_publish_optionsz!CmfDocument._calc_publish_options\  ss   ; 	4+ 	0G0GHXH[0\0\`f`r0r0rACfghhh)-)9)OD&)-)9)OD&F Z Z Z 	[ 	[ 	[ &+"%*"= 	2}2 2-1*}2 2-1*; 	2:dk&79KLL 	2PZ[_[f[lntn  QA  QA 	2{0 2-1*{0 2-1***		2 	22 2ri   c                    d}d}| j         j        r,	 | j         j                            dd          }n	#  d}Y nxY w| j         r&	 | j                             d          }n	#  d}Y nxY w|r^| j        }||_        |                                 |r8t                              | j        | |          }|                                 dS dS |r+| j        }||_        |                                 || _        dS dS )u   Если переключаемся на новый БП, надо создать новую версию истории, а старую зареджектитьNr   r   r   r   r   )r   r   r   )	r   r   r   r   r   rV   rK   r   rU   )rg   r   status_rejectedprev_historyhistorys        ra   _switch_to_new_versionz"CmfDocument._switch_to_new_versionu  s4    = 	''"&-"3"F"FS[is"F"t"t'"&= 	##"m>>6>RR#" 	&4L"1L  33QU^i3jj   	&/G(GNLLNNN%DKKK		& 	&s   !4 :A! !A'c                    |                      g d           | j        j        rC| j        j        j                                        r | j        j        s|                                  | j        j        r|                                  d S d S )N)r   z
status.oldzstatus.need_approver   )r   r   r   rk  r   r   _start_approver   s    ra   do_status_is_changedz CmfDocument.do_status_is_changed  s    lllmmm;? 	"t{;@@BB 	"4;Kc 	"!!!;# 	"!!!!!	" 	"ri   c                    t           j                            dd| j        j        ggdd| j        ggg d          }|s,t          d| j                                         dd	
           t          |          dk    r,t          d| j                                         dd	
           t          |          dk    r|d         j	        S d S )Nstatus_fromINr   r   )	status_tozstatus_to.need_approvezstatus_to.workflowrm  u   Из статуса uO    нет ниодного перехода на следующий статус!Tr  r  uf    существует больше одного перехода на следующий статус!r   )
rK   CmfTransr   r   rI   r   r  r   rv   r  )rg   transitionss     ra   next_statuszCmfDocument.next_status  s"   o**M4$+.IY3Z\fhlnrn{[|2}3p3p3p + r r  	`  QT[-=-=-?-?  Q  Q  Q  [_  `  `  `  `{A  hT[-=-=-?-?  h  h  h  rv  w  w  w  w{Qq>++tri   c                     | j         dk    r|                                 | _        | j        }t          j                            | |j                   d S )Nr   )cache_status_typer  r   r   rK   r   start_approve_processr  )rg   rd   rh   
wf_historys       ra   r  zCmfDocument._start_approve  sM    !V++**,,DK.
//j6LMMMMMri   c                     |                      |                                            |                                   | j        |i | d S r   )r   r   r  rV   r  s      ra   r5   zCmfDocument.start_approve  sQ    1133444	4"6"""""ri   c                 <   t           j                            dd| j        j        gdd| j        gg dgddgdd	g
          }|r|j        r|j        dz   | _        | j                                        sd| _        t          j                                        | _	        d S )Nrl  r   rI   !=)official_number>0z-official_datez-official_numberr  official_dater   order_byr   r  )
rK   r   rM   r   rI   r  r   r   nowr  )rg   official_historys     ra   calc_official_datenumz!CmfDocument.calc_official_datenum  s    !488+tUYU`UcAdBFdgAVA^A^A^A` DTUgBhARTc@d	 9 f f
  	L/ L'7'G!'K$#((** 	%#$D %.2244ri   )	overwrite
no_versionr   c                	   |                                   | j        j        rt          dd           |rt          dd           d S | j        r%| j        j        s|                                 | _        | j        rx|                                  |                                  | 	                                 | 
                                 |                                  |                                  | j        j        r|                     |           | j        j        r(|                                  |                                  | j        rZ| j        rSt&          j                            t&          j        j                                      d          }| j         d| | _        d	d
d| j        gdd| j        gdd| j        gdd| j        ggg}t8          j                            | j        |          rt          d| j         dd           | j        s	 | j        j        r2| j6        j7        8                                r| 9                                 | j        r| j:        dk    r| j;        j3        j<        }| j;        j3        j=        }t|          j?        |         }t8          j@                            dd | jA        gg d!g"          }t8          jB                            dd |gd
d t          |          gg"          }|sit8          B                    | jA        ||#          D                                }t8          B                    | jA        ||#          D                                }n^t8          jB                            dd |gd
d |gg"          }|s4t8          B                    | jA        ||#          D                                }|| _        t8          jE                            d$dd%g&          }|| _        | j        s| jF        j        rt8          jG        H                    d'(           t          | d)d*+          }| jF        r$t9          jJ        d,i |D                                 n*t9          jJ        j        d,i |}|K                                  t                      jD        |i |}| jM        j        r| N                                 |S )-Nus   Нельзя менять текст напрямую, используйте text_draft вместе с do_publishTr  uH   Метод устарел! Используйте update_inline_comments)r   )tzz%d-%m-%Y %H.%M.%S ANDrj   r   r   r   rI   r  )rj   r   u!   Документ с именем u^    уже существует на этом уровне. Выберите другое имя.FzOverwrite file for document z by ()u@   Файл с таким именем уже существует z, )is_direxist_okparents)r   r   document_is_externaldocument_is_internalzdocument.blog=)typer  zCmfDocument-blogr   )r   r   rj   zdocument.blog:defaultsave_eval_code)r   cache_inmemoryr   up   Изменение опции "Это шаблон" доступно только администраторам)messageu   Без группы
add_button)r  
group_name	menu_typer   )O_CmfDocument__calc_parentr   r   r  rx  r  calc_doc_version_calc_scheme_wf_calc_workflow_calc_executors_calc_spectators_calc_show_approvers_alwaysr   rU   r   r   r{  r  cloned_fromr   r  r   utcstrftimerj   r   r   rI   rK   r   rM   r   CmfRFiledpdata_driverget_rdr   rW  exists
meta_tuuidcmfr   CmfTUUIDget_obj_by_tuuid_strr|   r}   	file_pathr   createrename
write_textrf   meta_set_flagr   r   trans_updatedr   _approve_updatedlogic_prefixcmf_created_atyearmonthry  	RU_MONTHSCmfRegistryr  CmfBlogFolderr   rV   CmfWorkflowis_templateCmfAccessListcheck_admin_modedictCmfMenuItemr&  r   r   r   )rg   r  r  r   rd   rh   dtfiltrdiskrfile_idrc  tuuidrfile_parentold_rfile_id	old_rfiler  r  blogyear_bfmonth_bfwfparams	menu_itemresr   s                           ra   rV   zCmfDocument.save  s3   9 	Y  L  TX  Y  Y  Y  Y 	`hlmmmmF; 	7t/: 	7#4466D; 	'  """!!!  """!!###,,...$$&&&?% 	R**>P*QQQ=# 	*&&(((''))); 	,4+ 	,"&&(*;*?&@@IIJ]^^B9++r++DIty)4-d&67tTW%	'  !!ty!>> 	:DI : : :     %	N %	NR ?% 	$$+*C*H*H*J*J 	$!!###; 	4,??&,1D'-3E%e,E%))8S$/2RTuTuTu1v)wwD*..sD7QTZ\_adeiajajSk6l.mmG t ..doSW^b.cchhjj!//tT[bg/hhmmoo!/33]CQX<Y\bdgin[o;p3qq t%334?X_fk3llqqssH'D#''-DUYcsbt'uuBDM{ 	#t/: 	# 11  ;m1  n  n  n0&  F  #",,V,,113333".2<<V<<	  """egglD+F++ <" 	
ri   c           	      B    t                      j        di |}g d}|                     |           |D ]!}t          ||t	          | |                     "| j        r| j        |_        |j                            d          |_        |	                                 |S )N)r   r   r  	executors
spectatorsr   r   r   )
r   create_from_templater   setattrr9  default_clone_workflowr   r   r   r{  )rg   rh   new_docr   attrr   s        ra   r  z CmfDocument.create_from_templateO  s    .%''.8888
 
 
 	    	8 	8DGT74#6#67777& 	;#:G !)<<<PP%%'''ri   c                 8   | j         rs| j        j        rg| j        r`t                              | j                  t          j        u r5| 	                    dg           | j        j        r| j        j        | _        d S t                                                      S )Nztree_parent.logic_type)rx  
logic_typeis_nullr   ry  rz  tree_parent_idrK   r   r   r   _calc_logic_typer   s    ra   r  zCmfDocument._calc_logic_typef  s    K		'		  		 ''(;<<@RRR67888* "&"2"=ww'')))ri   c                 8   | j         rs| j        j        rg| j        r`t                              | j                  t          j        u r5| 	                    dg           | j        j        r| j        j        | _        d S t                                                      S )Nztree_parent.activity)rx  r   r  r   ry  rz  r  rK   r   r   r   _calc_activityr   s    ra   r  zCmfDocument._calc_activityt  s    K		%		  		 ''(;<<@RRR45666(  $ 0 9ww%%'''ri   c                    | j         ro|                     ddg           | j        sS| j        rNt                              | j                  t          j        u r%| j        j        r| j        j        | _        d S d S d S d S d S d S )Nr  ztree_parent.executors)	rx  r   r  r   ry  rz  r  rK   r   r   s    ra   r  zCmfDocument._calc_executors  s    ; 	<k+BCDDDN<$< ++D,?@@FDVVV$. W "&!1!;	< 	<< < < < WVVVri   c                    | j         ro|                     ddg           | j        sS| j        rNt                              | j                  t          j        u r%| j        j        r| j        j        | _        d S d S d S d S d S d S )Nr  ztree_parent.spectators)	rx  r   r  r   ry  rz  r  rK   r   r   s    ra   r  zCmfDocument._calc_spectators  s    ; 	>l,DEFFFO>$> ++D,?@@FDVVV$/ W #'"2"=	> 	>> > > > WVVVri   c                     | j         r>| j        r9t          | j        j        t          j                  r| j        j        | _        d S d S d S d S r   )rx  r   r   rf   rK   r   show_approvers_alwaysr   s    ra   r  z'CmfDocument._calc_show_approvers_always  sl    ; 	P4+ 	P
4;K;QSYSe0f0f 	P)-)9)OD&&&	P 	P 	P 	P 	P 	Pri   c                     d S r   r   r   s    ra   _calc_approvedzCmfDocument._calc_approved  s    ri   c                 F     t                      j        |fd| j        i|S )Nmsg_url)r   create_eventrN  )rg   event_personrh   r   s      ra   r  zCmfDocument.create_event  s8    #uww#
 
"&)
/5
 
 	
ri   )TEXKOM_db_deletec                   |                      g d|           t          j        j        j                                        }|                                 }|                    |          }|j        r(|j	        }|r|| j
        k    r|                                 |rrt          j                            | d          D ]}d |_        |                    d            t          j                            | d          D ]}	 |	j        |i | t          j                            | d          }
|
rd |
_        |
                    d            t'                      j        |d|i|S )Nr<  )r   include_deletedT)descr_documentr  r   )r   r  r  )r   rK   r  r  r  r  r   rW  r  r  rI   r&  CmfComponentr   r  rV   r   r   rM   r   )rg   r  rd   rh   r  r  rc  r  	componentr  r   r   s              ra   r&  zCmfDocument.delete  s   LLL, 	 	. 	. 	. ".5577%%''))< 	$E ETW,, 	0#055T[_5`` / /	+/	(....!499W[9\\ 0 0///// #''tT'RR 	)%)G"LL4L(((uww~tQ6FQ&QQQri   c                      t          t          |           j        |i | | j        j        sd S | j        r	d| _        d S d S )NT)r   r   _process_public	is_publicr   r   )rg   rd   rh   r   s      ra   r  zCmfDocument._process_public  sY    0k4  0$A&AAA~( 	F> 	.)-D&&&	. 	.ri   c                 h    t           j                            dd| j        gg dg dgdgdg          S )Nrl  r   )r   r   T)approved_versionr  Nz-approved_versionr   r  )rK   r   sgetrI   r  s      ra   get_approved_versionz CmfDocument.get_approved_version  sS    (--{D$'6R6N6N6N6V6V6V6X 9L7L6<X	 . ? ? 	?ri   c                 l    t          t          j                            dd| j        g                    S )Nr  r   r   )boolrK   r   countrI   r   s    ra   has_tree_nodes_hookzCmfDocument.has_tree_nodes_hook  s.    F&,,5EtTW4U,VVWWWri   c                    t                               dt           j                  }|                    | j        j                  r	g | _        dS ddlm}  || j        j        pdd          }t                      }|
                    ddd	i
          D ]}|                    |d                    g | _        |D ]>}t          j                            |          }|r| j                            |           ?dS )un   
        Парсит документ, вытаскивает упомнинания на таски
        zdata-mention-typeflagsNr   )r   r   html.parserrK  taskrV  zdata-object-idrH   )rt   compileIsearchr   rf   mention_tasksbs4r   setfind_alladdrK   CmfTaskrM   append)	rg   rd   rh   re1r   bs_textnew_taskitemtsks	            ra   r'  z CmfDocument._handle_mention_task  s    jj-RTj::::dio&& 	!#DF%%%%%%-	 52}EE55$$S1Df0M$NN 	1 	1DLL./0000 	/ 	/D.$$$--C /"))#...	/ 	/ri   c                    | j         j        sd S t                      }t                      }| j         j        r,t          |                     | j         j                            }| j         j        r,t          |                     | j         j                            }||z
  D ]-}|j        dv r"t          j        	                    | d|           .d S )N)CmfPersonGroupr   CmfRolemention)r  )
rU   r   r  r   
parse_textr   
class_namerK   r(  r)  )rg   objs_oldobjs_newr  s       ra   handle_mention_personsz"CmfDocument.handle_mention_persons  s    ) 	F5555? 	A4??4?+>??@@H? 	A4??4?+>??@@Hh& 	L 	LC~!KKK((ys(KKK	L 	Lri   c                 ~    | j         d	i |}|                     g d           d|v r<t                              |d                   dk    r| j        st          dd           | j        r|| j        }||_        |j        |_        |j        |_        |j	        sNd|_	        t          
                                5  |                    d           ddd           n# 1 swxY w Y   nd|v r|d         |_        | j        |_        | j        |_        | j        |_        |                    d           |j        j        S )
u   Создание документа из шаблона
        :param self: Шаблон документа
        :param params: Параметры для шаблона
        :return: Идентификатор нового документа
        )tmplt_target_treeztmplt_target_tree.parentz%tmplt_target_tree.tree_node_is_branchr   r   ur   Из этого шаблона можно создать документ только внутри проектаTr  r   Nr   )r  r   ry  get_class_name_by_idr/  r  r   r   r   tree_node_is_branchdisable_aclrV   r  r  r   rI   rf   )rg   r  r  r/  s       ra   r*   z$CmfDocument.create_doc_from_template  s    ,$+55f55sssttt v'">">vh?O"P"PT_"_"_hlh~"_  K  SW  X  X  X  X! 	. $ 6"3G.5GN/6GO$8 ;8<!5((** ; ;%**T*:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; #H-GN(,(B%(,(B%(,(B%t$$$zs   9CC #C c           	      
   dd l }dd l}ddlm} ddlm} |                     dg           	 |                                  n# t          $ r Y d S w xY w| j	        st          dd           t          | j                                      d          d	          d
}t          j                            | |          }|st                              | |          }dd l}	|	                                5 }
t&          j                            |
|          }|                    |d          5 }| j	        D ]]}|j        |k    r	 |                                 n# t          $ r Y 0w xY w|                    |j         ||j                             ^	 d d d            n# 1 swxY w Y   t5          |d          5 }|                    |dd           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        S )Nr   r   )basenamer  uP   Отсутствуют вложенные файлы для скачиванияTr  :r  z.zipr   rj   w)moderJ   F)backupmake_preview)zipfileshutilpathlibr   os.pathr4  r   _acl_check_readCmfPermissionErrorr  r  r   rI   rw   rK   rL   rM   tempfileTemporaryDirectoryospathr   ZipFilerj   writerN   rQ   rt  r@  )rg   rd   rh   r;  r<  r   r4  zip_filenamerb  rA  tmp_dirzip_file_path_tmparcr#  r`   s                  ra   r.   z#CmfDocument.download_all_attachment!  sE         $$$$$$-)))	  """"! 	 	 	44	  	vhptuuuudg,,,,S11!4:::)--T-MM
 	N--T-MMJ 	((** 	Sg "Wl C C!2== 	R , R RDyL00 !,,....- ! ! ! !IId188D<O3P3PQQQQR	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R '.. S!--aE-RRRS S S S S S S S S S S S S S S	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S  ~s   A 
AA18G3)F EF
E"	F!E"	"-FG3F 	 G3#F 	$G37GG3G 	 G3#G 	$G33G7:G7c                 j    	 |                                   n# t          $ r Y d S w xY w | j        |i |S r   )r?  r@  r.   r  s      ra   r>   z*CmfDocument.public_download_all_attachmentK  sV    	  """"! 	 	 	44	+t+T<V<<<    
%%c                 P   |                      | j                   | j        j        p| j        j        p| j        j        }t          j                            |pd          |d<   d|vr'd	                    d | j
        D                       |d<    t                      j        di |S )Nr   r   obj_key_phrases
c                 :    g | ]}t          |j        pd           S )r   )r   rj   )r/  ts     ra   rS  z1CmfDocument.full_search_index.<locals>.<listcomp>Y  s&    2_2_2_3qv|3D3D2_2_2_ri   r   )r   full_search_preload_fieldsr2  rf   r   rU   rK   r6  
strip_htmlr   key_phrasesr   full_search_index)rg   rh   r   r   s      ra   rU  zCmfDocument.full_search_indexR  s    8999%QQDO<Q-88DDvF**(,		2_2_dN^2_2_2_(`(`F$%(uww(226222ri   r   c                 b   |s|S t                               d|t           j                  s|S t          |d          }|                    t                               d          ddi          D ]}|                                 |d<   d                    d |j        j	        D                       S )	u   
        Добавляет тегам H1-H7 атрибут 'data-id'
        для ссылок в оглавлении
        z <h[1-7](?![^>]*\s+data-id)[^>]*>lxmlz^h[1-7]data-idFr  r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z.CmfDocument._convert_h_tag.<locals>.<listcomp>k      ;;;1A;;;ri   )
rt   r  
IGNORECASEr   r  r  r   r   rO  r[  )clsr   r_  h_tags       ra   _convert_h_tagzCmfDocument._convert_h_tag\  s      	Kyy<dBMRR 	KT6**]]2::j#9#9)UAS]TT 	1 	1E"00E)ww;;	(:;;;<<<ri   c                 T   d}d}t                               d|           s| S t          | d          }d |                    d          D             }|                    t                               d| d	          
          D ]|}|d                             d          r|d         dd         }|                    |          }|d                             ||          |d<   d|d<   |r|d         dd         |d<   }d                    d |j	        j
        D                       S )u?   
        Конвертируем оглавление
        #z#mcetoc_z+<a[^>]*href=["\']#(?!mcetoc_).*?["\'][^>]*>rW  c                      i | ]}|d          |S rH   r   )r/  elements     ra   
<dictcomp>z.CmfDocument._convert_title.<locals>.<dictcomp>|  s    LLL'wt}gLLLri   TrH   ^z.+)rN  rN  r  Ncmf_convertedrI   r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z.CmfDocument._convert_title.<locals>.<listcomp>  rZ  ri   )rt   r  r   r  r  
startswithrM   r\  r   rO  r[  )r   old_idnew_idr_  idslinkid_nameid_bodys           ra   _convert_titlezCmfDocument._convert_titlem  sB   
  yyGNN 	KT6** MLT]]d]5K5KLLLMMrzz.f...'A'AMBB 	1 	1DF|&&z22  6l122&Gggg&&G  <//??DL$(D! 1 $VQRR 0 ww;;	(:;;;<<<ri   c                    t                               dt           j                  }|                    |           s| S t	          | d          }|                    ddi          D ]}|j                            d          r|j        d                             d           d|j        d	<   d
|j        d<   |	                    dd	d
i          }|                    d           |                    |           |                    ddt                               d          i          D ]}d
|d<   d|j        d          |d<   t          |          S )u=   
        Конверитуем оглавление
        z	toc-macror  r  rJ  r  re  zmce-tocFcontenteditableTh2u   Оглавлениеh4rI   ztitlelist-.*mcetoc_)rt   r  r  r  r   findAllrV  rM   r  new_tagr   )r   r   r_  tag	title_tagtag_hs         ra   _convert_title_macroz CmfDocument._convert_title_macro  s[   
 jjRTj22zz$ 	KT=11<<w&<<== 	= 	=Cy}}_-- Ig%%i000+0CI'()-CIo&T2CT1JKKI3444JJy!!!d4N9S9S2TUU = =)-o&<T):<<d= 4yyri   c                    t                               d|           s| S t          | d          }|                    ddi          D ]|}|                    dddi          }|                    d          }|r|                    |j                   n|                    |j                   |                    |           }d	                    d	 |j
        j        D                       S )
uW   
        Конвертируем тэги экранирования кода
        zA<\s*(code|div)[^>]*\sclass=["\'][^"\']*\bcode\b[^"\']*["\'][^>]*>rW  rJ  r   r  prezlanguage-markupr   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z-CmfDocument._convert_code.<locals>.<listcomp>  rZ  ri   )rt   r  r   r  ru  rZ  extendcontentsreplace_withr   rO  r[  )r   r_  rv  r{  tag_contents        ra   _convert_codezCmfDocument._convert_code  s     yy]_cdd 	KT6** =='8=99 	" 	"C,,uW6G,H,IIC ((5//K )

;/0000 

3<((( S!!!! ww;;	(:;;;<<<ri   c                    dt           fd}d }t                              d| t          j                  rt	          | d          }|                    dt                              d          i          D ]}d|j                            dg           v r d	|j        d         v rd
}nHd|j        d         v rd}n6d|j        d         v rd}n$d|j        d         v rd}nt          d|           |
                    dt                              d          i          } |||||j                   t          |          } t                              d|           r|t	          | d          }|                    dddi          D ]R}d|j                            dg           v r |
                    ddi          }|r|j        ndg} |d|||           S|r)d                    d |j        j        D                       S | S )N
panel_typec                 h   |                     dddd          }|                     dt          j        j        |          d                   }|                     dt          j        j        |          d                   }|                    |           |                    |           |                     dd	d
d          }|                    |           |                     dd| dd          }|                    |           |                    |           |                    |           d S )Ndivak-editor-panel__iconfalserJ  contentEditabler  r   rD  r   ak-editor-panel__contenttruezak-editor-panel eva_convertedrJ  zdata-panel-typer  )ru  rK   r   
ICONS_DATAr  r}  r  )	r  rv  doc_soupr~  panel_tag_iconsvg_tagsvg_path_tagpanel_tag_content	panel_tags	            ra   _convert_macro_panelz?CmfDocument._convert_macro_panels.<locals>._convert_macro_panel  sq   %--eE\OV<X <X- Y YN&&V/::FuM ' O OG#++f0;JG
S , U ULNN<(((!!'*** ( 0 0HbRX?Z ?Z 0 ![ ![$$X... ((@_JTJQ7S 7S( T TI ^,,,.///Y'''''ri   zconfluence-information-macrorW  rJ  z^confluence-information-macro$r  eva_convertedz!confluence-information-macro-noter"   z(confluence-information-macro-informationr$   z confluence-information-macro-tipr%   z$confluence-information-macro-warningr!   uO   Неизвестный тег для преобразования панели z.+bodyzc<div[^>]*\bclass=["\'][^"\']*(?!\s*eva_converted)[^"\']*\bpanel\b(?!\s*[^"\']*)([^"\']*["\'][^>]*>)r  panelpanelContentrO  r#   r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z5CmfDocument._convert_macro_panels.<locals>.<listcomp>  s    ???qCFF???ri   )r   rt   r  r  r   r  r  rV  rM   CmfErrorrZ  r~  r   rO  r[  )r   r  r_  rv  r  contentr~  s          ra   _convert_macro_panelsz!CmfDocument._convert_macro_panels  sX   	(S 	( 	( 	( 	(& 994dBDAA 	 v..D }}GRZZ@`5a5a+b}cc N N"cimmGR&@&@@@6#)G:LLL!*JJ?39WCUUU!'JJ739W;MMM!*JJ;sy?QQQ!(JJ"#zux#z#z{{{(('2::h3G3G)H(II$$ZdG<LMMMMt99D 99{  ~B  C  C 
	B v..D}}U7G2D}EE B B"cimmGR&@&@@@(('>)B(CC/6B7++TF$$VS$AAAA 	77??DI,>???@@@Kri   c           
         t                               dt           j                  }t                               dt           j                  }|                    |           r|                    |           s| S t	          | d          }|                    dddi          D ]}dddd	d
dddd}|                    d          }|                    |d          }dddd	d
dd}|                    d          }	|                    |	d          }
|                    dddd          }|                    dt          j	        j
        |
         d                   }|                    dt          j	        j
        |
         d                   }|                    |           |                    |           |                    dddd          }|                    |j                   |                    dd|dd          }|                    |           |                    |           |                    |           t          |          S )uc   
        Конвертирует макрос "UI Text Box RefinedToolkit for Confluence"
        data-macro-namer  zui-text-boxr  r  r  r$   r#   r%   r    r!   r"   )z
light-cyanz
light-bluezlight-purplezlight-greenzlight-magentaz	light-redzlight-yellowzlight-orangez
data-color)r$   r#   defaultr%   r"   r!   z	data-iconr  r  r  r   rD  r   r  r  zak-editor-panelr  )rt   r  r  r  r   r  rM   ru  rK   r   r  r  r}  r~  r  r   )r   r   re2r_  rv  panel_type_mapping
data_colorr  panel_icon_mapping	data_icon
panel_iconr  r  r  r  r  s                   ra   _convert_ui_text_boxz CmfDocument._convert_ui_text_box  s   
 jj+24j88jjrtj44

4   	SZZ%5%5 	KT=11==/@-.P=QQ 9	( 9	(C$$ &(!($ ) )	" 	" ..J+//
FCCJ !$""" " ,,I+//	6BBJ!\\4'.  *  N ll50B0Mj0YZ_0`laaG<<f6H6ST^6_`j6k<llLNN<(((!!'*** $7'-  !- ! ! $$S\222.'1'.  %  I ^,,,.///Y''''4yyri   c                 V   t                               dt           j                  }|                    |           s| S t	          | d          }|                    ddi          D ]4}|                    dddi          }|                    dddi          }|                    d	dd
i          }|                    d           |                    |           |                    |           |                    ddi          }|	                    |j
                   |                    ddi          }|                    dddi          }	|		                    |j
                   |                    |	           |                    |           6t          |          S )Nzexpand-containerr  r  rJ  r  r  zspoiler collapsedzspoiler-togglespanzspoiler-icon_zexpand-control-textzexpand-contentzspoiler-text)rt   r  r  r  r   r  ru  r  rZ  r}  r~  r  r   )
r   r   r_  rv  spoilerspoiler_togglespoiler_icontag_control_texttag_control_contentspoiler_texts
             ra   _convert_expanderzCmfDocument._convert_expanderP  s   jj,BDj99zz$ 	KT=11==1C'D=EE 	& 	&Cll5:M0NlOOG!\\%AQ7R\SSN<<w6O<PPL$$$!!,///NN>***"xxw8M.NxOO!!"2";<<<"%((';K1L("M"M<<g~5N<OOL 3 <===NN<(((W%%%%4yyri   rl  c                 H   |s|S t                               dt           j                  }t                               dt           j                  }|                    |          r|                    |          s|S d|                                  d|                                  d|                                  d|                                  d|                                  d	|                                  d
|                                  d|                                  d|                                  d}t
                              |ddg          }t          |j                  }t          |d          }|
                    ddi          D ]b}	d||ddddd}
|	                    d          }|rt          d |                    d          D                       }|                    d          rd|
d<   nd|
d<   |                    d          rt          j                            |j        |d                    }|s&t          j                            |d         !          }|r+t          |j                  |
d"<   t          |j                  }|                    d#          r|d#         |
d$<   |                    d%          r|d%         |
d<   |                    d&          r|d&         |
d'<   |                    d(          r$dd)d)d*}|                    |d(                   |
d+<   |                    d,          r$d-d.d/d0}|                    |d,                   |
d1<   |                    d2          rd|
d3<   t          |                    ||t(                              |
d4          |5                              d6d          d7          }|	                    |j                   dd                    d8 |j        j        D                       S )9u   
        Конвертируем тег Отображение дочерних из Confluence в наш
        fixme удалить когда добавят поддежку тега из Confluence
        r  r  r[  z
            <div
                class="macros-panel"
                contenteditable="false"
                data-children-docs="{doc_id}"
                data-id="z"
                data-macro-parameters='{params}'
                data-macros="children-docs"
                original-data-macro-parameters="{original_params}"
            >
                <div class="extension-container" data-id="uW   " data-layout="default">
                    <span aria-label="Макрос " data-id="aq  " role="img">
                        <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="20" height="20">
                            <path d="M22.485,10.975,12,17.267,1.515,10.975A1,1,0,1,0,.486,12.69l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                            <path d="M22.485,15.543,12,21.834,1.515,15.543A1,1,0,1,0,.486,17.258l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                            <path d="M12,14.773a2.976,2.976,0,0,1-1.531-.425L.485,8.357a1,1,0,0,1,0-1.714L10.469.652a2.973,2.973,0,0,1,3.062,0l9.984,5.991a1,1,0,0,1,0,1.714l-9.984,5.991A2.976,2.976,0,0,1,12,14.773ZM2.944,7.5,11.5,12.633a.974.974,0,0,0,1,0L21.056,7.5,12.5,2.367a.974.974,0,0,0-1,0h0Z"></path>
                        </svg>
                    </span>
                    <span class="extension-title" data-id="u   ">Макрос "Отображение дочерних"</span>
                    <span class="extension-object-name" data-id="zP">| {doc_name}</span>
                    <span class="macros-actions" data-id="z>">
                        <span class="macros-edit" data-id="a  " style="margin-right: 7px;">
                            <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                                <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                            </svg>
                        </span>
                        <span class="macros-delete" data-id="aD  ">
                            <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            </svg>
                        </span>
                    </span>
                </div>
                <div class="ak-renderer-wrapper" data-fabric-macro="null" data-id="z7" data-macro-body=""></div>
            </div>
        Tzname, parentsimpler   rW  r  F50r   none)isShowChildrenparentId
documentIdchildrenAmountlevelincludeViewTypeisOrderByDeskzoriginal-data-macro-parametersc              3   @   K   | ]}|                     d           V  dS )r  N)rw   )r/  params     ra   r1  z2CmfDocument._convert_childpages.<locals>.<genexpr>  s.      &`&`Eu{{3'7'7&`&`&`&`&`&`ri   |allr  1r  pager6  )rj   r  firstr  r  style
headerTypeexcerptTyper  )r  r  zrich contentr  sortrj   r  cmf_modified_at)titlecreationmodifiedsortTypereverser  ensure_ascii)rW   doc_namer  original_paramsrO  r  c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z3CmfDocument._convert_childpages.<locals>.<listcomp>  rZ  ri   )rt   r  r  r  r   ry  get_obj_by_idr   rj   r   r  rM   r  rw   rK   r   rl  r   rI   formatjsondumpsr\  r  
currentTagr   rO  r[  )r\  r   rl  r   r  TMPLr  r  r_  rv  r  r  parent_pageview_type_mapsort_type_mapnew_soups                   ra   _convert_childpageszCmfDocument._convert_childpagesf  s     	Kjj+24j88jjBDj11

4   	SZZ%5%5 	K%
 //++% % <???;L;L% % @C?P?P% %$ =@OO<M<M%% %& CF//BSBS'% %( <???;L;L)% %* =@OO<M<M+% %4 ?Boo>O>O5% %F UXTcTcTeTeG% % %L ##IdNCS#TTsx==T6**==(9:'F=GG .	2 .	2C #(%'"&#)!& F "gg&FGGO 3"&&`&`_EZEZ[^E_E_&`&`&`"`"`"&&u-- */3F+,,&)F7O"&&v.. 9"("4"8"8TcdjTk"8"l"lK& Z&,&7&;&;QWAX&;&Y&Y" 9/2;>/B/B|,#&{'7#8#8"&&w// H/>w/GF+,"&&w// ?&5g&>F7O"&&w// D+:7+CF<("&&}55 b-3yZc$d$dM0=0A0A/R_B`0a0aF,-"&&v.. T.4BR`q$r$rM)6):):?6;R)S)SF:&"&&y11 3.2F?+$T[[	:B8<

6X]
8^8^AP &1 &R &R SZRYZ^`bRcRc%2	4 4H
 X01111ww;;	(:;;;<<<ri   c           
         t                               dt           j                  }|                    |           s| S t	          | d          }d |                    ddi          D             }|D ]}ddgdd	gd	dgg d
g dd}|                    |j                            d                    }|sEg }t          |j	                  D ]}|dk    r	|
                    |           |s}|                    ddddd          }	t          |          t          |          k    rt          |          dk    r>|                    d          }
|d         j	        |
_	        |                    |
           	t          |          dk    r|                    d          }n(t          |          dk    r|                    d          }t          |          D ]}\  }}|                    d| ddd| dd          }|                    dddd          }||         j	        |_	        |
                    |           |	
                    |           ~|                    |	           t          |          S )u   
        Конвертирует "Разметка страницы"(коробочная) или "Макеты"(облачная)
        columnLayoutr  r  c                 N    g | ]"}d |j         d         vd|j         d         v |#S )zfixed-widthrJ  singler  )r/  r  s     ra   rS  z0CmfDocument._convert_layouts.<locals>.<listcomp>  sH     c c c 	'(:::xsyY`Oa?a?a ?a?a?ari   rJ  r  50.0z66.6633.33)r  r  r  )25.0r  r  )	two-equalztwo-right-sidebarztwo-left-sidebarthree-equalzthree-with-sidebarszdata-layoutrO  r  r  r  zmceNonEditable selected)rp  zdata-layout-sectionrJ  r  r   rn   r     r  %zflex-basis: )zdata-column-widthzdata-layout-columnr  )zdata-layout-contentrp  )rt   r  r  r  r   r  rM   rV  r   r~  r  ru  rv   r  	enumerater   )r   r   r_  r3  rv  layout_typecolr~  ctag_layout_sectiontag_divr   r   tag_layout_coltag_layout_contents                  ra   _convert_layoutszCmfDocument._convert_layouts  s   
 jjj55zz$ 	KT=11c ct}}G^3L}MM c c c  >	1 >	1C$f-&-w%7%,g$6:::'?'?'? K //#)--">">??C H#,'' # #99"""" !%'.+16  ". " " 3xx3x==((x==A%%"ll511G'/{';G$$$W---]]a''%//+66CC]]a''%//-88C%cNN : :5!%05[[[.4!8!8!8!8  ". " " &*\\/5+1  &2 & &" /7qk.B"+%%&8999")).9999/00004yyri   c                    i ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%}t                               d&t           j        '          }|                    |           s| S t	          | d(          }|                    d)d*gd&d+i,          D ]F}|d&         }|                    |          }|r||d-<   'd.| d/|                    d0d1           |d0<   Gt          |          S )2u%    Конвертирует цвета z#e6fcffz
Light tealz#e3fcefzLight greenz#fffae6zLight yellowz#feece5z	Light redz#eae6ffzLight purplez#f4f5f7z
Light grayz#b3d4ffBluez#b3f5ffTealz#abf5d1Greenz#fff0b3Yellowz#ffbdadRedz#c0b6f2Purplez#b3bac5Grayz#4c9affz	Dark Bluez#79e2f2z	Dark tealz#57d9a3z
Dark greenz#ffc400zDark yellowzDark redzDark purple)z#ff8f73z#998dd9zdata-highlight-colourr  r  thtdTr  zdata-highlight-colorzbackground-color: ; r  r   )rt   r  r  r  r   r  rM   r   )r   	color_mapr   	text_souprv  data_highlight_colourr   s          ra   _convert_colorszCmfDocument._convert_colors   s   
 |
 }	

 ~
 {
 ~
 |
 v
 v
 w
 x
 u
 x
 v
  {!
" {#
$ |%
& }'
( "$+
 
 
	0 jj1j>>zz$ 	K!$66	%%tTl;RTX:Y%ZZ 	d 	dC$'(?$@!MM"788E d.3*++c4IccSWWU\^`MaMaccG9~~ri   c                    i ddddddddd	d
ddddddddddddddddddddddd dddd!}t                               d"t           j        #          }|                    |           s| S t	          | d$          }|                    d%d"&          D ]C}|                    d'          }|                    |          }|r|                    |           Dt          |          S )(u    Конвертирует Emojismileu   🙂cheekyu   😛laughu   😃winku   😉z	thumbs-upu   👍zthumbs-downu   👎informationu   ℹticku   ✅crossu   ❌r"   u   ⚠️plusu   ➕minusu   ⛔questionu   ❓zlight-onu   💡z	light-offzyellow-staru   ⭐zred-star)z
green-starz	blue-staremoticonr  r  rF  class_zdata-emoticon-name)	rt   r  r  r  r   r  rM   r  r   )r   	emoji_mapr   r  rv  emoticon_nameemojis          ra   _convert_emojizCmfDocument._convert_emojiL  s   
]
m
 ]
 M	

 
 =
 =
 M
 ]
 .
 M
 ]
 
 
 
  =!
" #
$ (&'
 
 
	, jjBDj11zz$ 	K!$66	%%eJ%?? 	( 	(CGG$899MMM-00E (  '''9~~ri   c                    d}t                               dt           j                  }t                               dt           j                  }|                    |           r|                    |           s| S t	          | d          }|                    ddi          D ],}t	          |d          }|                    |j                   -t          |          S )uJ   
        Конвертирует макрос "Вложения"
        uu  
        <div data-id class="plugin_attachments_table_container" data-attachments-table="true" contenteditable="false">
            <table class="attachments temporary-element">
                <tbody class=" temporary-element">
                    <tr class="header-row  temporary-element">
                        <th class="filename-column temporary-element">Файл</th>
                        <th class="modified-column temporary-element">Изменено</th>
                        <th class="actions-column temporary-element">Действия</th>
                    </tr>
                </tbody>
                <tbody class=" temporary-element"></tbody>
            </table>
            <div class="plugin-attachments-upload-container temporary-element">
                <div class="attachments-table-drop-zone dropzone temporary-element"></div>
                <div class="attachments-table-text temporary-element">
                    <svg style="width: 30px; height: 30px; margin-bottom: -5px;" viewbox="0 0 24 24">
                        <path fill="#AAA" d="m18.746 20.334a1 1 0 0 1 -.081 1.413l-1.586 1.414a2.9 2.9 0 0 1 -2.064.839 3.013 3.013 0 0 1 -2.136-.882l-1.544-1.374a1 1 0 0 1 1.33-1.494l1.335 1.194v-7.444a1 1 0 0 1 2 0v7.445l1.335-1.192a1 1 0 0 1 1.411.081zm-.39-12.973a1.088 1.088 0 0 1 -.722-.735 8 8 0 0 0 -15.489.842 7.657 7.657 0 0 0 .8 5.18 5.448 5.448 0 0 0 -2.888 5.652 5.843 5.843 0 0 0 5.626 4.7h2.317a1 1 0 0 0 0-2h-2.317a3.81 3.81 0 0 1 -3.646-2.982 3.469 3.469 0 0 1 1.834-3.6 1.993 1.993 0 0 0 .793-2.685 6 6 0 1 1 11.06-4.513 3.1 3.1 0 0 0 2.045 2.052 5.971 5.971 0 0 1 4.212 6.21 5.377 5.377 0 0 1 -1.111 2.909 1 1 0 0 0 1.586 1.219 7.466 7.466 0 0 0 1.52-3.972 7.96 7.96 0 0 0 -5.62-8.277z"></path>
                    </svg>&nbsp;Перенесите или <label for="input-file" class=" temporary-element"> <span id="file-upload" class="pseudo-link temporary-element" aria-hidden="true">загрузите файлы</span> <input id="input-file" class="input-file temporary-element" accept=".jpg, .jpeg, .png, .txt, .pdf" type="file" /> </label>
                </div>
            </div>
        </div>
        r  r  r  r  r  )	rt   r  r  r  r   r  r  r  r   )r   r  r   r  r  rv  ru  s          ra   _convert_macro_attachmentsz&CmfDocument._convert_macro_attachmentss  s    
. jj+24j88jjrtj44

4   	SZZ%5%5 	K!$66	%%->,N%OO 	1 	1C#D-88GW/00009~~ri   	object_idc           	      
   ddl m}m} t                              dt          j                  }t                              dt          j                  }|                    |           r|                    |           s| S t          | d          }|                    ddi          }|st          |          S d}d	d
ddd}	t                              |dg d          }
|
j        s| S d}d}|
j        dk    r|
j        j        j        dk    r4t"          j                            dd|
j        j        gg dgdg          }n|
j        }|
j        r|
j        d         }|j        rm|j                            d          r&|j        d         d         }|
j        |j        k    r|}n|j                            d          r|j        d         d         }nd|
j        r]|
j                            d          r|
j        d         d         }n-|
j                            d          r|
j        d         d         }|}|D ] }d}dddddddd}|                    d	d i          }|r|j                            d!          nd}|r||k    rd}n||k    rd"|d#<   d"|d$<   d}nt"          j                            d%d&d'| gd(g          }|s't"          j                            dd&d)| d*g+          }|rb|j        dk    r||j        j        k    rnD|j        dk    r|j        |
j        k    rd"|d#<   d"|d$<   n|j        j        |d#<   |j        j        |d$<   d}nd"|d#<   d"|d$<   d}|                    d	d,i          x}r|j                            d!          |d,<   |                    d-.          rd|d/<   |                    d01          rd|d2<   |                    d	d3i          x}r|j                            d!          } ||                    d4d5                    } ||j                  }|                    d6          r%|	                    |d6         d         d          |d6<   |                    d7          r;t<                              |d7         d                                                    |d7<   t          |                    d8d9          !                    t<          "                    |          :          d          }|rd;|j#        d<<   n
||j#        d=<   |$                    |j%                   t          |          S )>uQ   
        Конвертирует плагин Page Tree из Confluence
        r   )parse_qsurlparser  r  pagetreer  r  u  
        <div class="macros-panel page-tree-macros" contenteditable="false" data-macros="page-tree"
        data-macro-parameters='{pagetree_params}'>
            <div class="extension-container" contenteditable="false" data-layout="default">
                <span role="img" aria-label="Макрос Дерево страниц">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="20" height="20">
                        <path d="M22.485,10.975,12,17.267,1.515,10.975A1,1,0,1,0,.486,12.69l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                        <path d="M22.485,15.543,12,21.834,1.515,15.543A1,1,0,1,0,.486,17.258l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                        <path d="M12,14.773a2.976,2.976,0,0,1-1.531-.425L.485,8.357a1,1,0,0,1,0-1.714L10.469.652a2.973,2.973,0,0,1,3.062,0l9.984,5.991a1,1,0,0,1,0,1.714l-9.984,5.991A2.976,2.976,0,0,1,12,14.773ZM2.944,7.5,11.5,12.633a.974.974,0,0,0,1,0L21.056,7.5,12.5,2.367a.974.974,0,0,0-1,0h0Z"></path>
                    </svg>
                </span>
                <span class="extension-title">
                    <span class="excerpt-title">| Дерево страниц</span>
                </span>
                <span class="macros-actions">
                    <span class="macros-edit" style="margin-right: 7px;">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper" contenteditable="true" data-fabric-macro="null" data-macro-body=""></div>
        </div>
        rj   r  r  orderno)naturalr  r  positionT)import_raw_jsonzparent.import_raw_jsonzparent.logic_typer  Nr   zproject.agile:defaultr   r   )rj   r   u   Документыr  rm  rI   homepage
root_pagesFz@homer  )
rootLocalerootexpandCollapseAll
startDepthr  r  	searchBox
rootPageIdrf   z@selfr   r  ext_idLIKEz%::zparent.descr_documentz%"homepage":{"id":"z"%r   r"  pagetreesearchrH   r#  plugin_pagetree_expandcollapser  r!  treeRequestIdz&amp;&r  r  rO  r   )pagetree_paramsr  re  root_page_original)&urllib.parser  r  rt   r  r  r  r   r  r   ry  r  r  r*  r   r  r   rK   r   r
  rI   rM   rZ  rV  r   r  rf   rj   r\  queryr  loadslowerr  r  r  r  r  )r   r  r  r  r   r  r_  pagetree_tagsTAG_TMPL	sort_dictr  homepage_idselfpage_idroot_parentpagetree_tagre  r+  root_page_tagroot_page_idpagetree_rootstart_depth_tagtree_request_id_tagtree_request_idparsed_requestrequest_paramsmacros_soups                             ra   _convert_pagetreezCmfDocument._convert_pagetree  sZ   
 	43333333jj+24j88jjBDj11

4   	SZZ%5%5 	KT=11->
,KLL 	t99D ()!	
 
	 ##   $ 
 
 " 	K>]**z$)-DDD$055&cjm<<<< .. 6   "j" 8!1$7* O.22:>> O"-"=j"I$"OKv//&1 044\BB O"-"=l"KA"NK  	&"&&z22 C!1*=dC$((66 C!1,?B%K) S	> S	>L!M%%*! " O )--V\4J-KKM?LV=.227;;;RVL '%;..$(MM![00.5OF+4;OL1$(MM$*$6$:$: (&2F2F2FG 78 %; % %M ) (.(9(=(=$5v?fVb?f?f?f#g )> ) ) % -)4EE -1E1T T T !)4EE - 0CF : : 7>OF3<COL996C6F6LOF3<I<N<TOL9(,*1'07- $"."3"36<:P"3"Q"QQ S0?0E0I0I'0R0R-  $4 55 4/3,  (H II <7; 34&2&7&7v>W&7&X&XX" 	b"5";"?"?"H"H!)/*A*A'3*O*O!P!P!).*>!?!?!%%f-- b.7mmN6<RST<UW`.a.aOF+!%%i00 b15N9<UVW<X<^<^<`<`1a1aOI.'  r**11$**_B]B]1^^ K  E39008D 45%%k&<====4yyri   c           
         d}| s| S t                               dt           j                  }t                               dt           j                  }|                    |           r|                    |           s| S ddddddd	d
}t	          | d          }|                    dddi          D ]}|d         }t          t          d |          d           }|dk    r|                    dd          r|dz  }t	          |	                    |j
        |                    |d                    d          }	|                    |	j                   d                    d |j        j        D                       S )Nz
        <span
            data-macros="wiki-status"
            text="{text}"
            color="{color}"
            class="statusView-content-wrap"
            contenteditable="false"
        >
            <span>{text}</span>
        </span>
        r  r  r   purpleredblueyellowgreen)zaui-lozenge-progresszaui-lozenge-errorzaui-lozenge-completeaui-lozenge-currentzaui-lozenge-current_cloudzaui-lozenge-movedzaui-lozenge-successrW  r  r  rJ  c                 X    |                      d          o|                      d           S )Nzaui-lozenge-zaui-lozenge-subtle)rg  )r   s    ra   <lambda>z1CmfDocument._convert_status_tag.<locals>.<lambda>{  s*    1<<+G+G+rPQP\P\]qPrPrLr ri   rH  zdata-macro-idF_cloudneutral)r   r   r  r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z3CmfDocument._convert_status_tag.<locals>.<listcomp>  rZ  ri   )rt   r  r  r  r   r  nextr   rM   r  r   r  r  r   rO  r[  )
r   TMPr   r  status_color_mappingr_  rv  classesr  ss
             ra   _convert_status_tagzCmfDocument._convert_status_tagZ  s   
  	Kjj+24j88jj"$j//

4   	SZZ%5%5 	K %-!&$*#))1!)#* 
  
 T6**==0A8/L=MM 	+ 	+C'lG&!r!rt{||  C  D  DF ...377?E3R3R.("

.2269EE     A Q\****ww;;	(:;;;<<<ri   r]  c           	      f   d}| s| S t                               dt           j                  }t                               dt           j                  }|                    |           r|                    |           s| S t	          | d          }t          |                    dddi                    D ]S}|                    d	d
di          }|                                D ]!\  }	}
|d         |	v r	 d }t           	                    d|
          }|r't          j                            |d         |          }nUd}t                               ||
t           j                  }|r+d|                    d                                           d}|rAt	          |                    d||	          d          }|                    |j                   nt'          d| d|
           #  t'          d| d|
           xY w#Ud                    d |j        j        D                       S )Nu  
        <div class="macros-panel plantuml" contenteditable="false" data-macros-parameters="{params}"
            style="display: inline-flex; flex-direction: column; position: relative; width: 100%;"
            data-rendered="true" data-macros="plantuml">
            <div data-layout="default" class="extension-container" contenteditable="false">
                <span role="img" aria-label="Макрос PlantUML">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="16" height="16">
                        <path d="M22,15h2v7h-7v-2h5v-5Zm2-10v6.731l-2-1.976v-.755H7v11h4.738c.033,.036,.057,.078,.092,.113l1.887,1.887H0V5c0-1.654,1.346-3,3-3H21c1.654,0,3,1.346,3,3ZM2,5v2h3v-3H3c-.551,0-1,.448-1,1Zm3,4H2v11h3V9Zm17-2v-2c0-.552-.448-1-1-1H7v3h15Zm-9.715,9.292c-.38,.391-.38,1.025,0,1.416l2.715,2.792v-2.5h2c1.654,0,3-1.346,3-3v-2.023h2.455l-2.756-2.711c-.386-.386-1.012-.386-1.398,0l-2.756,2.711h2.455v2.023c0,.552-.448,1-1,1h-2v-2.5l-2.715,2.792Z"></path>
                    </svg>
                </span>
                <span class="extension-title">
                    <span class="excerpt-title">PlantUML</span>
                </span>
                <span class="macros-actions">
                    <span class="macros-refresh">
                        <svg viewBox="0 0 24 24" style="width: 14px; height: 14px; color: rgb(32, 32, 32);"><path fill="#202020" d="M12,2a10.032,10.032,0,0,1,7.122,3H16a1,1,0,0,0-1,1h0a1,1,0,0,0,1,1h4.143A1.858,1.858,0,0,0,22,5.143V1a1,1,0,0,0-1-1h0a1,1,0,0,0-1,1V3.078A11.981,11.981,0,0,0,.05,10.9a1.007,1.007,0,0,0,1,1.1h0a.982.982,0,0,0,.989-.878A10.014,10.014,0,0,1,12,2Z"></path><path fill="#202020" d="M22.951,12a.982.982,0,0,0-.989.878A9.986,9.986,0,0,1,4.878,19H8a1,1,0,0,0,1-1H9a1,1,0,0,0-1-1H3.857A1.856,1.856,0,0,0,2,18.857V23a1,1,0,0,0,1,1H3a1,1,0,0,0,1-1V20.922A11.981,11.981,0,0,0,23.95,13.1a1.007,1.007,0,0,0-1-1.1Z"></path></svg>
                    </span>
                    <span class="macros-edit" style="margin-right: 7px;">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div data-fabric-macro="null" data-macro-body="" class="ak-renderer-wrapper" contenteditable="true">
                <textarea class="puml-code">{uml}</textarea>
            </div>
            <div class="macros-preview" contenteditable="true">
                {svg}
            </div>
        </div>
        plantumlr  zsvg-replacerW  r  r  r  r  rJ  rI   zSRC=\[([^]]+)\]r   z@startuml(.*?)@enduml
@startuml
r  
@endumlz{})r  umlr   r  uS   Не удалось преобразовать Plantuml, не найден код: r  u9   Не удалось преобразовать Plantuml: r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z5CmfDocument._convert_plantuml_tag.<locals>.<listcomp>  rZ  ri   )rt   r  r  r  r   r   r  rZ  r8  ru   rK   r   convert_encuml2umlDOTALLgrouprz   r  r  r  	Exceptionr   rO  r[  )r   r]  r  rO  r   r  r_  rv  svg_divsvg_keysvg_textrX  encumlpatternresultru  s                   ra   _convert_plantuml_tagz!CmfDocument._convert_plantuml_tag  s|   &N  	KjjBDj11jjrtj44

4   	SZZ%5%5 	KT6**f5F
4STTUU 	w 	wChhuWm,DhEEG%0%6%6%8%8 w w!4=G++w"!#,>!I!I! W"("4"G"Gq	S\"]"]CC '?G%'YYw")%L%LF% W&VFLLOO4I4I4K4K&V&V&V U&3CJJdPSY`J4a4acp&q&qG,,W-?@@@@"+  -T  CF  -T  -T  JR  -T  -T  #U  #U  U Aw'(udg(u(uks(u(uvvv% ,w* ww;;	(:;;;<<<s   7C3G,,Hc                 b   |s|S t                               dt           j                  }|                    |          s|S t	          |d          }|                    dd          D ]}d|d<   |                                 |d<   d	                    d
 |j        j	        D                       S )u^   
        Заменяет класс у тега 'ul' списка чекбоксов
        zinline-task-listr  rW  ulr  ztox-checklistrJ  rX  r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z2CmfDocument._convert_task_list.<locals>.<listcomp>      @@@1A@@@ri   )
rt   r  r  r  r   r  r   r   rO  r[  )r\  r   rb  r  rv  s        ra   _convert_task_listzCmfDocument._convert_task_list  s    
  	K**0*==~~d## 	K!$//	%%d3E%FF 	/ 	/C*CL __..C	NNww@@	(?@@@AAAri   c                    |s|S t                               dt           j                  }|                    |          s|S t	          |d          }|                    dddi          D ]g}|                    d          s|                                 |d<   |                    dg           }d	|v rd
|vr|d                             d
           ht          |          S )uM   
        Добавляет атрибут "data-id" для checkbox
        zdata-inline-task-idr  r  liTr  rX  rJ  checkedztox-checklist--checked)
rt   r  r  r  r   r  rM   r   r  r   )r\  r   r   r  rv  	tag_classs         ra   _convert_checkboxzCmfDocument._convert_checkbox  s    
  	Kjj/rtj<<zz$ 	K!$66	%%d3H$2O%PP 		> 		>C779%% 3!$!2!2I,,IY&&,I==G##$<===9~~ri   c                    d|                                   d|                                   d|                                   d|                                   d|                                   d|                                   d|                                   d|                                   d	|                                   d
}|s|S t                              dt          j                  }t                              dt          j                  }|                    |          r|                    |          s|S t          |d          }|                    dddi          D ]J}t          |                    dddi                    D ]\  }}|                    d          }	d|	dddd|dk    dddd
}
t          |	                    t                              |
d                              dd          |	d                    d  |j        D                       !          d          }|                    |j                   |                    d"#          D ]}|                                  |d$ %          D ]}|                                 |                                 Lt)          |          S )&u   
        Конвертирует макрос "UI Tabs RefinedToolkit for Confluence" (макрос "Вкладки")
        zr
        <div
            class="macros-panel wiki-tabs"
            contenteditable="false"
            data-id="z"
            data-macros="wikitabs"
            data-macros-parameters="{params}"
        >
            <div class="extension-container" contenteditable="false" data-id="uR   " data-layout="default">
                <span aria-label="Макрос" data-id="a  ">
                    <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="14px" height="14px">
                        <path d="M11.25,7.99874576 L18.75,7.99874576 L18.9896379,8.00744644 L18.9896379,8.00744644 C20.6119031,8.125678 21.9036924,9.43468674 21.9948552,11.0643219 L22,11.2487458 L22,18.7487458 C22,20.4817772 20.6435452,21.8979917 18.9344239,21.993601 L18.75,21.9987458 L11.25,21.9987458 C9.51696854,21.9987458 8.10075407,20.642291 8.00514479,18.9331697 L8,18.7487458 L8,11.2487458 C8,9.5157143 9.35645477,8.09949983 11.0655761,8.00389055 L11.25,7.99874576 Z M9.5,18.7487458 L9.50455771,18.8760231 L9.50455771,18.8760231 L9.52290455,19.0326048 C9.65099554,19.8179147 10.30178,20.427623 11.1064728,20.4929446 L11.25,20.4987458 L18.75,20.4987458 C19.6681734,20.4987458 20.4211923,19.7916355 20.4941988,18.892273 L20.5,18.7487458 L20.5,11.2487458 C20.5,10.2822474 19.7164983,9.49874576 18.75,9.49874576 L11.25,9.49874576 C10.3318266,9.49874576 9.57880766,10.205856 9.5058012,11.1052186 L9.5,11.2487458 L9.5,18.7487458 Z M15.75,5 C15.8305982,5 15.9105112,5.00293389 15.9896379,5.00870069 C17.236948,5.09952529 18.2890659,5.89453789 18.7501004,6.99804043 L16.9722957,6.99760388 C16.6889259,6.72100274 16.3120424,6.5397745 15.8935272,6.5058012 L15.75,6.5 L8.25,6.5 C7.3318266,6.5 6.57880766,7.20711027 6.5058012,8.10647279 L6.5,8.25 L6.5,15.75 L6.51083386,15.9458258 C6.55524501,16.3446817 6.73371018,16.7030658 7.00015022,16.974899 L7.0000564,18.7509418 C5.87931902,18.283597 5.07631822,17.2067274 5.00514479,15.9344239 L5,15.75 L5,8.25 C5,6.51696854 6.35645477,5.10075407 8.06557609,5.00514479 L8.25,5 L15.75,5 Z M12.75,2 C14.0497736,2 15.1713376,2.76300581 15.691219,3.86554427 L15.75,4 L13.9733002,3.99858514 C13.6898169,3.72143138 13.3125371,3.53981466 12.8935272,3.5058012 L12.75,3.5 L5.25,3.5 C4.3318266,3.5 3.57880766,4.20711027 3.5058012,5.10647279 L3.5,5.25 L3.5,12.75 C3.5,13.2269035 3.69076499,13.6592514 4.00015022,13.974899 L4.0000564,15.7509418 C2.87931902,15.283597 2.07631822,14.2067274 2.00514479,12.9344239 L2,12.75 L2,5.25 C2,3.51696854 3.35645477,2.10075407 5.06557609,2.00514479 L5.25,2 L12.75,2 Z"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id="z<">
                    <span class="excerpt-title" data-id="u   ">Макрос "Вкладки" | {tab_name}</span>
                </span>
                <span class="macros-actions" data-id="z<">
                    <span class="macros-action" data-id="a  " data-macros-action="macros-edit">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-action macros-delete" data-id="aA  " data-macros-action="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper" contenteditable="true" data-id="zG">
                {content}
            </div>
        </div>
        r  r  zui-tabsr  r  r  zui-tabr   rn   z#254dcbDefaultFr   
horizontalleftBasic)
vertabsPageTitler   colorPalettes	hasBorderfixed
primaryTab	directiontextAlignmentheaderStyler  "z&quot;r   c                 ,    g | ]}t          |          S r   rQ  r/  r  s     ra   rS  z-CmfDocument._convert_tabs.<locals>.<listcomp>J  s    (J(J(JAQ(J(J(Jri   )r  tab_namer  rwui_tabs_menur  c                 ,    t          | t                    S r   )r   r   r   s    ra   rJ  z+CmfDocument._convert_tabs.<locals>.<lambda>T  s    jw6O6O ri   r  )r   rt   r  r  r  r   r  r  rM   r  r  r  r\  r   r~  r  r  	decomposeextractunwrapr   )r\  r   r  r   r  r  tabs_tagr   tab_tagr  r  r  ul_tagcomments                 ra   _convert_tabszCmfDocument._convert_tabs  s'   
$ oo''	$ $ PSO`O`$ $ ;>//:K:K$ $ 9<8I8I$ $ ;>//:K:K$ $" 8;7H7H#$ $$ ;>//:K:K%$ $. ILHYHY/$ $@ ORooN_N_A$ $ $L  	Kjj+24j88jj24j00

4   	SZZ%5%5 	K!$66	!**59JI8V*WW !	 !	H'(9(9%HY[cGd(9(e(eff : :
7";;{33%-&%.!&""#q&!-%+#*  )KK#zz&uzEEMMcS[\\!) "(J(J9I(J(J(J K K    
 "  $$X%89999"++3C+DD # #  """" $8)O)OPPP " "!!!!OO9~~ri   c                    ddl m} |s|S t                              dt          j                  }|                    |          s|S d|                                  d}t          |d          }|                    dd	d
i          D ]}|	                    d	          }|st          j
                            |d          }t          |                                dz            }	 ||d          }
t          |                    |	|
          d          }|                    |j                   d                    d |j        j        D                       S )uB   
        Конвертирует макрос "Дата"
        r   )format_datez<time .+?</time>r  z
        <span data-id="z" contenteditable="false" timestamp="{timestamp}" class="dateView-content-wrap">
            <span>{date_str}</span>
        </span>
        rW  r   r   Tr  z%Y-%m-%dr   ru)locale)	timestampdate_strr  r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z-CmfDocument._convert_date.<locals>.<listcomp>  rh  ri   )babel.datesr  rt   r  r  r  r   r   r  rM   r   strptimeintr  r  r  r  r   rO  r[  )r\  r   r  rb  r  r  rv  datetime_strdatetime_objr  r  ru  s               ra   _convert_datezCmfDocument._convert_date[  s   
 	,+++++ 	K**0*==~~d## 	K))   "$//	%%fZ4F%GG 	1 	1C77:..L #,55lJOOLL2244t;<<I"{<===H#'%     G W/0000ww@@	(?@@@AAAri   c                    |s|S t                               dt           j                  }|                    |          s|S t	          |d          }|                    dd          D ]T}ddg|d<   d	|d
<   |                                 |d<   |                    d          D ]}|                                 |d<   Ut          |          S )Nz
table-wrapr  r  r  r  ztableView-content-wrapzcmf-scrollbarrJ  
wikitableszdata-macrosrX  table)rt   r  r  r  r   r  r   r   )r\  r   r   r  table_wrap_tag	table_tags         ra   _convert_table_wrapzCmfDocument._convert_table_wrap  s     	Kjjbdj33zz$ 	K!$66	'00|0LL 	9 	9N'?&QN7#,8N=)(+(9(9N9%+44W== 9 9	'*'8'8	)$$9 9~~ri   data	to_formatobj_idc                     dd l }|                    t          j        d| i||d          }|j        dk    rt          d| d|j                    dS |j        S )	Nr   rv  )r  r  )filesr     u4   Не удалось конвертировать в z: r   )requestspostconfigCONVERTER_PLANTUML_URLr   r  r  )r  r  r  r  r  s        ra   convert_plantumlzCmfDocument.convert_plantuml  sp    mmF9&$ajv|V}V}m~~?c!!gYggZ]Zegghhh2;ri   ra  c                 x    |                      |                                d|                                          S )Npuml)r  encodedecode)r\  ra  r  s      ra   rZ  zCmfDocument.convert_encuml2uml  s.    ##FMMOOVVDDKKMMMri   rX  c                 d   |                     d          }d |D             }d                    |          }t                              d|          sd| }t                              d|          s| d}|                     |                                d|                                          S )NrO  c                 6    g | ]}|                                 S r   )rstrip)r/  lines     ra   rS  z/CmfDocument.convert_uml2svg.<locals>.<listcomp>  s     9994999ri   z
^@[a-z]+\nrV  z@[a-z]+$rW  r   )rw   r   rt   r  r  r  r  )r\  rX  r  linescleaned_lines	clean_umls         ra   r)   zCmfDocument.convert_uml2svg  s    		$995999IIm,,	yy	22 	21i11Iyyi00 	0$///I##I$4$4$6$6vFFMMOOOri   c                    t                               d           |                     |          \  }}t                               d           |                     |||          }t                               d           |                     |          }t                               d           |                     |          }t                               d           |                     |          }t                               d           |                     |          }t                               d           |                     |          }t                               d           | 	                    |          }t                               d	           | 
                    |          }t                               d
           |                     |          }t                               d           |                     ||          }t                               d           |                     |          }t                               d           |                     ||          }t                               d           |                     |          }t                               d           |                     |          }t                               d           |                     |          }t                               d           |                     |          }|                     |          }t                               d           |                     |          }t                               d           |                     |          }t                               d           |D ]}|                    |||                   }|S )u   
        Конвертируем модули из Confluence
        TODO это надо все вынести на сторону клиента в фронтенд
        confluence_convertz%confluence_convert get_all_drawio_svgz(confluence_convert _convert_plantuml_tagz&confluence_convert _convert_status_tagz!confluence_convert _convert_h_tagz'confluence_convert _convert_title_macroz!confluence_convert _convert_titlez confluence_convert _convert_codez(confluence_convert _convert_macro_panelsz'confluence_convert _convert_ui_text_boxz$confluence_convert _convert_expanderz&confluence_convert _convert_childpagesz#confluence_convert _convert_layoutsz$confluence_convert _convert_pagetreez confluence_convert _convert_datez!confluence_convert _convert_emojiz-confluence_convert _convert_macro_attachmentsz$confluence_convert _convert_checkboxz confluence_convert _convert_tabs)r|   r}   rT  rd  rS  r^  ry  rn  r  r  r  r  r  r  rA  r  r  r  ri  rn  r  r\  )r\  r   r  r]  rg  s        ra   r  zCmfDocument.confluence_convert  s;    	
$%%%22488T	7888(({IFF	:;;;&&t,,	8999!!$''	3444''--	9:::!!$''	3444  &&	2333((..	:;;;''--	9:::$$T**	6777&&tY77	8999##D))	5666$$T955	6777  &&	2333 !!$''	3444--d33	?@@@%%d++$$T**	6777  &&	2333  &&	2333  	7 	7C<<[%566DDri   c                     | j         j        r| j        rd S |                     | j         j        | j        j                  | _         |                                  d S r   )rU   r   r   r  rf   rI   r"  r   s    ra   r   zCmfDocument._process_text_draft  sV    ) 	T-> 	F11$/2GWW""$$$$$ri   c                     |                      ddg           d}t          | j        j        t          j                  sd}| d| j         S )Nr   r   r   deskz
/Document/)r   r   r   rf   rK   r   r   )rg   
base_places     ra   rN  zCmfDocument.href  sU    &(+,,,
$++V->?? 	 J33	333ri   c                    | j         r$| j        }| j        }| j        }| j        }| j        }n<| j        j        }| j        j        }| j        j        }| j        j        }| j        j        }| j        }	 t          j
                            |||||ddt          j        |	  	        rdS t          j
                            |||||ddt          j        |	  	        rdS t          j
                            |||||ddt          j        |	  	        rdS n?# t           j        j        $ r(}t                              d|            Y d}~dS d}~ww xY wdS )u   
        Если любой из WEB-доступов открыт - возвращаем True
        Хак для быстрого отображения, что документ доступен из WEB
        rS   F)	initial_acl_keyobject_modelobject_owner_idr  object_parent_idaccess_levelraise_errorchecking_personperm_security_level_allowed_idsTz$DEV: _is_web_public ACL load Error: N)simple_objectperm_effective_acl_idrl  cmf_owner_idrI   %perm_security_level_allowed_ids_cacherf   r   r*  rK   r  check_accessr|   anonymous_usersharelink_anonymous_usertest_guest_userr  
base_errorr  r}   )rg   r  obj_parent_idr  self_idr  r*  es           ra   _is_web_publiczCmfDocument._is_web_public	  s     	c"8O NM,LgG484^11"8>O N0M,2LgmG484^4b1_
 	#00 /'!M# ! 00U 1 W W  t #00 /'!M# ! :0U 1 W W  t #00 /'!M# ! 10U 1 W W  t ~& 	 	 	GG>1>>???55555	 us$   02D $2D 2D E	!EE	u   Доступен из WEB)captionvirtualreadonlyc                 R    |                                   |                                 S r   )_acl_check_writelockr   s    ra   r8   zCmfDocument.public_lockI	  s"    yy{{ri   c                 R    |                                   |                                 S r   )r  unlockr   s    ra   r9   zCmfDocument.public_unlockN	  s"    {{}}ri   c                 R    |                                   |                                 S r   )r  	lock_pingr   s    ra   r:   zCmfDocument.public_lock_pingS	  s$    ~~ri   r   checkbox_valuec                    |                      |          \  }}t          |d          }|                    d|i          }|sd S |rd|j        d<   n"|j                            d          r|j        d= d                    d |j        j        D                       }|D ]}|                    |||                   }|S )NrW  rX  r  ztox-checklist--checked checkedrJ  r   c                 ,    g | ]}t          |          S r   rQ  rR  s     ra   rS  z5CmfDocument._text_update_checkbox.<locals>.<listcomp>e	  s    DDDqCFFDDDri   )	rT  r   rZ  rV  rM   r   rO  r[  r\  )	rg   r   r   r  r]  	soup_texttext_elementnew_textrg  s	            ra   _text_update_checkboxz!CmfDocument._text_update_checkboxX	  s     33D99T!$//	 ~~Y,@~AA 	4 	,*JLw''##G,, 	,"7+77DDIN,CDDDEE 	? 	?C''[-=>>HHri   c                    |                      g d           | j        rt          dd           | j        rt          dd           t          j                            | j        d          }|r;| j        j	        | j        
                    dd	          k    rt          d
d           |                     | j        j        ||          }|                     | j        j        ||          }|s|st          d| d           n!|r|st                              d|            |r|| _        |r|| _        |                     d           d S )N)r   rU   r   r   zcur_published_version.statusr  r   u~   Нельзя в документе, у которого стоит опция "Выпуск только владельцем"Tr  u   Нельзя в шаблоне)r   rk  r   r   r   u(   Нельзя в утвержденномuD   DEV: в документе не найден элемент data-id=r   )r   r   r  r  rK   	CmfStatusr  r   r   r   r   r  r   rf   rU   r|   r}   rV   )rg   r   r  workflow_need_approver   rU   s         ra   r6   zCmfDocument.update_checkboxk	  s     ]  ]  ]  	^  	^  	^% 	d  W  _c  d  d  d  d 	D6dCCCC & 0 6 6\` 6 a a  	NT%?%F$-JjJjw  NXJj  KY  KY  &Y  &Y@MMMM))$)/7NSS//0EwP^__
 	fJ 	ff]dffnrsssss 	fZ 	fGGd[bddeee 	DI 	)(DO		D	!!!!!ri   c                    t           j                            |           }|D ]}|                                 t           j                            dd| j        gg dg          }|D ]}|                                 t           j                            dd| j        gd |D             gg dg          }|D ]}|                                 d S )N)r   rl  r   )r   r  Tr   r  c                     g | ]	}|j         
S r   rH   r  s     ra   rS  z3CmfDocument.clean_after_encrypt.<locals>.<listcomp>	  s    WoWoWoabXYX\WoWoWori   )rK   r   r   r&  
CmfCommentrI   rL   )	rg   rd   rh   history_listr  commentsr  r  rb  s	            ra   r-   zCmfDocument.clean_after_encrypt	  s   055T5BB# 	 	GNN $));dg2NPlPlPl1m)nn 	 	GNN *//dTWLpWoWofnWoWoWoLp8q  tP  tP  tP  8Q/  R  R% 	  	 J	  	 ri   c                    |                      g d           t                              || j        | j        |||           }|                                 | j        D ]\}t                              |j	                  t          j
        u r|                    |||           E|                    |||           ]| j        D ]8}t                              || j        |||                                           9d S )N)r   
docs_linksr  )responsiblerj   r  r   r   document)r  rj   r   r   r  )r   rK   CmfCourseDocumentResultrj   r  rV   r   ry  rz  rI   r   _lms_create_progressr  )rg   r  r   course_progresscourse_doc_resultr   r_   s          ra   r  z CmfDocument._lms_create_progress	  s$   @@@AAA #::L"# ; 
 
 	   O 	V 	VD&&tw//63EEE))&2C_UUUU ))&/CTUUUU ? 	 	C**"Y&- +   dffff	 	ri   c                     t          dd           t          j                            |d                   }	 |                                 n# t
          $ r Y d S w xY w|                    |d                   S )NzDEV: depricated!Tr  r   in_text)r  )r  rK   r   rM   r  r@  update_text_inline_comments)r\  rd   rh   r_   s       ra   r<   z.CmfDocument.public_update_text_inline_comments	  s    $D1111 $$T!W--	  """"! 	 	 	44	 ..vi7H.IIIs   A 
AAc                     	 |                                   n# t          $ r Y d S w xY wt                              | j                  }|r|                    d|             | j        |i |S )NzPPP-COM-ADDr  )r?  r@  r  r  r  r  r'   )rg   rd   rh   r   s       ra   r=   z%CmfDocument.public_add_inline_comment	  s    	  """"! 	 	 	44	 ''88 	G--m-FFF&t&7777rL  c                 x    	 |                                   n# t          $ r Y d S w xY w|                                 S r   )r?  r@  export_to_pdfr   s    ra   rB   z CmfDocument.public_export_to_pdf	  sR    	  """"! 	 	 	44	 !!###rL  c                 x    	 |                                   n# t          $ r Y d S w xY w|                                 S r   )r?  r@  export_to_docxr   s    ra   rC   z!CmfDocument.public_export_to_docx	  sR    	  """"! 	 	 	44	 ""$$$rL  c                    | j         st          j        | _         | j        s(|                                  |                                  | j                            d          }| j        s_t          	                    | j
        | |d| j        | j         | j        | j        | j        	  	        }|                    d           || _        n| j
        | j        _        || j        _        d| j        _        | j        | j        _        | j         | j        _         | j        | j        _        | j        | j        _        | j                            d           |                     | j        j        | j        j                  | _        | j        j        r | j        | _
        |                                   t1                      j        |i | |                     d           d S )Nr   r   T)	r   r   r   r   r   
cmf_authorcmf_modified_byr  r  r  )r  r|   current_userr   r  r  r   r   rK   r   rU   r   r  r  r  rV   r   r   r   r  rf   rI   r   r   r   _save_importr,   )rg   rd   rh   r   r   r   s        ra   r  zCmfDocument._save_import	  s    	-nDO} 	"  """!!!m6666JJ( 	=$77T_?C?JEIBF.CG?HLH\GKGZHLH\ 8 ^ ^O   T 222(7D%%-1_D%*-8D%,37D%204D%/15D%06:6JD%56:6JD%5%**t*<<<++DIOTW]KK	9 	'"iDO$$&&& 	d-f---D)))))ri   c                 4   t                      }|                     g ddgdg          }|D ]_}t                              d|j        j                  D ]7}|                    d          rd|vr||vr|                    |            n8`|                     g ddgd	g          }|D ]_}t                              d|j        j                  D ]7}|                    d          rd|vr||vr|                    |            n8`t          |          S )
N)r   r&  
%img%src=%z-cmf_modified_atr   r  zimg[^>]*src=[\'"]([^\'"]*)z
data:imageCmf)rU   r&  r   rU   )	r  r   rt   ru   r   rf   rg  r  rU   )r\  rd   kwragsdocs_with_problemsres_textr_   matchres_text_drafts           ra   r2   zCmfDocument.patch_20230407

  sp    !UU88111()8  
 

  	 	C$A38>RR  ##L11 %%#5G*G*G&**3///E777() > " 
 

 " 	 	C$A3>CWXX  ##L11 %%#5G*G*G&**3///E&'''ri   c                 ^    g d}t           j                            dd|gg dg|          }|S )u_    Возвращает версию документа CmfDocumentHistory в текущем БП)r  r  r  r	  approved_atr  approveszapproves.obj_statuszapproves.approver_levelzapproves.resolutionzapproves.approverzapproves.approve_groupzapprovers.cmf_approved_atzapproves.approve_typer   r   r   r   rm  )rK   r   rM   )r\  r  rd   rh   r   r  s         ra   r/   zCmfDocument.get_in_approve.
  sR      
 +//tS)+G+G+GH 0 
 

 ri   )
source_urlc                0   t           j                            d d          sd S |d S dd l}t                                                              |d          }|j        dk    rd S dd l}|	                    |j
                  }|                                S )NFr   )r  rq   )timeoutr  )rK   r  r  r  ry  requests_sessionrM   r   base64	b64encoder  r  )r\  r
  rd   rh   r  responser  r  s           ra   link_patch_20230407zCmfDocument.link_patch_20230407=
  s    #44T5AA 	44++--11*f1MM3&&4x/00zz||ri   r2  text_verc                 .   ddl m} | j                                         || j        k    rdS t          j        j                                        5   ||          | _        || _        | 	                    d           ddd           n# 1 swxY w Y   dS )u   
        TODO: 16.05.2023 пока что отключаем ацл для записи отрендеренного текста
        r   )markup_html_cleanNTr   )
cmf.util.cmf_clean_textr  text_render_verr   r  utilry  r2  r2  rV   )rg   r2  r  r  s       ra   r4   zCmfDocument.save_renderK
  s     	>=====!!###t+++FX))++ 	& 	&00==D#+D III%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	s   .B

BBrI   c                      t          d          )Nu   Устарело)DeprecationWarning)r\  rI   s     ra   check_dirtyzCmfDocument.check_dirtyY
  s     !3444ri   c                    t           j                            t          j        |          }t
          j                            |g d          }t
          j        j	        j
                                        }|j                            |          D ]^}d|j        _        |                                 |                                 |j                            |           t'                       _d S )N)r   rU   r   r   r   r   r   rC  T)rC  rD  r   r  
DIRTY_PATHrK   r   rM   r  r  r  r  io
io_iterdirrU   r   r   rV   	io_unlink
cmf_commit)r\  r  
dirty_pathr_   r  
dirty_files         ra   rA   z CmfDocument.process_dirty_attach]
  s    W\\&"3V<<
 $$ 8B 8B 8B$ C C ".5577(--j99 	 	J(,CN%))+++HHJJJHz***LLLL	 	ri   c                 $   |                      dg           g }|dk    rg d}|dk    rg d}|s| j        j        }t          | |t          j        d|          }t          j                            | |dd	g
          }|rC|j	        dk    r8t          j        j
        di |ddgi}	|	D ]}
|
j        rt          dd           |r||d<   t          j        j        di |}|sd |d<   t          j        j        di |}|r |j        |fd|i| d S d S )Nr   r   )approver_levelr  masteraccepted)r$  r  r%  r  )r  approve_groupapproverapprove_typeobj_versionfullr   )r  r*  r)  r   closedr   
resolutionuJ   Нельзя менять решение после утвержденияTr  r   r(  r   r   )r   r   r  r  r|   r  rK   r   rM   r   r   r-  r  _approve_one)rg   r'  r-  r   r  rh   master_filterr  full_approveexisting_approvesexisting_approveapproves               ra   r(   zCmfDocument.approve_onem
  s   <=>>>##===M##>>>M 	@3?K'^!#
 
 
 (,,;]cmulv,ww 	xL/8;; & 1 6 W W W W W W W$5 x x #. xjrvwwww 	-,F8#'11&11 	6!%F:'+55f55G 	B G AA$A&AAAAA	B 	Bri   c                     t          d           |                     ddg           | j        j        j        | _        |                                  d S )Nu]   Документ утвержден, можно нажать кнопку Выпустить.zstatus.trans_approvedzstatus.trans_approved.status_to)r  r   r   trans_approvedr  rV   r   s    ra   _approve_approvedzCmfDocument._approve_approved
  sL    qrrr13TUVVVk0:		ri   c                     |                      ddg           | j        j        j        | _        |                                  d S )Nzstatus.trans_rejectedzstatus.trans_rejected.status_to)r   r   trans_rejectedr  rV   r   s    ra   _approve_rejectedzCmfDocument._approve_rejected
  s=    13TUVVVk0:		ri   c                 `    |                      ddg           | j        j        j        | _        d S )Nzstatus.trans_updatedzstatus.trans_updated.status_to)r   r   r  r  r   s    ra   r  zCmfDocument._approve_updated
  s0    02RSTTTk/9ri   c                     t                                          ||           |                     | j        j        ||          | _        d S r   )r   _replace_attachment_replace_attach_urlrU   rf   )rg   r[   
new_attachr   s      ra   r<  zCmfDocument._replace_attachment
  s@    ##FJ777224?3H&R\]]ri   c                    	 d|                                 v r6|d         D ],}|                     |          }|                                 -n0|                     |d                   }|                                 n# t          $ r Y d S w xY wt                                          5  t          j        j        di | d d d            d S # 1 swxY w Y   d S )Nobj_id_listrH   r  r   )	keysrM   r?  r@  ry  r2  rK   r   mark_viewed)r\  rh   r  r  s       ra   r?   zCmfDocument.public_mark_viewed
  s<   
	--$]3 * *F''V',,C''))))* gg!1g22##%%%! 	 	 	44	   "" 	5 	5*44V444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s$   A<A? ?
BB)CCCc                    | j         s t                                                      S t                              | j                   }| j        r|                    d|            t                      }|                     d          D ]k}|j	        | 
                                vrN|j	                            d          s4|j	                            d          s|                    |j	                   ld|v r-|                    d| d           |                    d           d	|v r,|                    d
|            |                    d	           d|v sd|v sd|v rb|                    d|            d|v r|                    d           d|v r|                    d           d|v r|                    d           |r|                    d|            d S d S )NzPPP-DOC-CREATEr  T)r   cache__idr   )r  use_new_projectr   zPPP-DOC-TREEMOVEperm_policy_anonymousperm_policy_guestperm_policy_sharelinkzPPP-DOC-SHAREzPPP-DOC-EDIT)r  r   check_edit_permr  r  rx  r  r  valuesr*  project_perm_allow_fieldsrg  endswithr  remove)rg   r   changed_fields_to_checkfieldr   s       ra   rJ  zCmfDocument.check_edit_perm
  s;    	-77**,,,''88; 	J--.>D-III"%%%[[D[11 	> 	>E$D,J,J,L,LLL!,77AA M!,55e<< M (++E,<===...--.>DZ^-___#**8444 333--.@d-KKK#**=999"&===&*AAA*.EEE--o4-HHH&*AAA'../FGGG"&==='../BCCC&*AAA'../FGGG # 	H--n$-GGGGG	H 	Hri   c                     |                      g d           t                              | j                  }|r|                    d|            d S t                                                       d S )N)r   r  r   listsr  r  zPPP-DOC-DELETEr  )r   r  r  r  r  r   check_delete_perm)rg   r   r   s     ra   rS  zCmfDocument.check_delete_perm
  s     ? ? ? 	@ 	@ 	@''88 	(--.>D-IIIIIGG%%'''''ri   	recursivec                     t                      j        |i |}|rCt          j                            | ddg          D ]}|j        r|                    |            |S )NTr   )r   r  r   rT  )r   restorerK   r   r   r   )rg   rU  rd   rh   r  childr   s         ra   rW  zCmfDocument.restore
  sv    eggot.v.. 	7+00TSWan`o0pp 7 7$ 7MMIM666
ri   c                     t                               | j                  }|r|                    d|             t	                      j        |i | d S NzPPP-DOC-ARCHIVEr  )r  r  r  r  r   archiverg   rd   rh   r   r   s       ra   r[  zCmfDocument.archive
  s\    ''88 	K--.?T-JJJ((((((ri   c                     t                               | j                  }|r|                    d|             t	                      j        |i | d S rZ  )r  r  r  r  r   archive_restorer\  s       ra   r^  zCmfDocument.archive_restore
  s]    ''88 	K--.?T-JJJ000000ri   )Fr   )NN){__name__
__module____qualname__r  r
   r   api_methodsr	   staticmethodcmf_deferred_jobrb   r1   r   r   r   r   r   r   r  r   r   r   r   r   r;   r,   r$  r"  r3   rn  r{  r  r  r  r  r5   r  rV   r  r  r  r  r  r  r  r  r&  r  r  r  r'  r-  r*   r.   r>   rU  classmethodr^  rn  ry  r  r  r  r  r  r  r  r  r  rA  rS  r  rd  ri  rn  r  r  r  bytesr  rZ  r)   r  r   propertyrN  r  r  r   FieldCmfBoolis_web_publicr8   r9   r:   r  r  r6   r-   r  r<   r=   rB   rC   r  r2   r/   r  r4   r  rA   r(   r6  r9  r  r<  r?   rJ  rS  rW  r[  r^  __classcell__)r   s   @ra   r   r      s        $U}S]hl"$ $!3 EF F&)
 
 &U7LW[gk!+- - + no o ')	
 	
 6Re') ) "5 B	C	 C	(	
 	
 ("{TXabb \!# # &)
 
 .*TTJJ!0 |} }%)
 
 &EoT^jny}~~!* Z[ [()
 
 -'	
 
o= =J| *6

+,
 
 
 
KD "Ukoppp  qp \   C C    \25H 5H 5H 5Hn   \2 2 2&    <
 
 
 
 
&
4 
4 
4/ / / /b7 7 7= = =0 0 0 -1eTX JB JB JB JB JBXA A A A A66(s 6( 6( 6( 6(p 6:e )P )P )P )P )PV	; 	; 	;2 2 22& & &>" " "  N N N# # #
5 5 5  %*ePT F F F F F F FP    .* * * * *( ( ( ( (	< 	< 	<	> 	> 	>P P P  
 
 
 
 
 .3 R R R R R R R4. . . . .? ? ?X X X/ / /0L L L $  $  $ L( ( (T= = =3 3 3 3 3 =# =# = = = [=   =S  =S  =  =  = \ =D 3 3    \. =C =C = = = \=< >C >C > > > \>@ E3 E3 E E E \EN      \* g=s g=s g=s g= g= g= [g=R Ms Ms M M M \M^ )c )c ) ) ) \)V $S $S $ $ $ \$L & & & & & \&P { { { { { { \{z /= /= /= /= /= \/=b F=C F=d F=c F=c F= F= F= \F=P Bc Bc B B B [B$ S S    [2 V V V V V [Vp (B (B (B (B (B [(BT s s    [$ u  c    \ N NC NC N N N [N 
P# 
Ps 
Ps 
P 
P 
P [
P <c <c <c < < < [<|% % % 4 4 X4 : : X:x J$$
+	 %  M  
  
     
3     &"s "D " " " "<        @ 	J 	J [	J
8 
8 
8$ $ $% % %'* '* '* '* '*R !( !( [!(F   [ 37     [ s S D     5S 5T 5 5 5 [5   [%B %B %B %BN    
: : :^ ^ ^ ^ ^ 5 5 [5 'H 'H 'H 'H 'HX( ( ( ( ( (-       ) ) ) ) )1 1 1 1 1 1 1 1 1ri   r   )r   rx   r   r   rO   r=  r   r  r   r   
cmf.fieldsr  cmf.includecmf.utilr   &common.models.cmf_plugin_convert_mixinr	   modules.project.fieldsr
   common.models.cmf_active_entityr   r   r   ri   ra   <module>rr     s                 & & & & & & & &                     H H H H H H / / / / / / ; ; ; ; ; ;m+1 m+1 m+1 m+1 m+1,*,A m+1 m+1 m+1 m+1 m+1ri   