
    Y~h^                        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 fdBZdC ZddEZdF ZdG ZdH ZdDd=d6dIdJZ fdKZd;efdLZdDd=dMdNZdO ZdP ZdQ ZdR ZdS Z dT Z!dU Z"dV Z#d=d=dDdW fdX
Z$ fdYZ% fdZZ& fd[Z'd\ Z(d] Z)d^ Z*d_ Z+ fd`Z,d=da fdb
Z- fdcZ.dd Z/de Z0df Z1dg Z2dh Z3di Z4dj Z5 fdkZ6e7dled;efdm            Z8edled;efdn            Z9edled;efdo            Z:edled;efdp            Z;edled;efdq            Z<edled;efdr            Z=edled;efds            Z>e7dledted;efdu            Z?edled;efdv            Z@edled;efdw            ZAedled;efdx            ZBedled;efdy            ZCedledzed;efd{            ZDedled;efd|            ZEedled}eFdzed;efd~            ZGe7dled;efd            ZHe7dled;efd            ZIe7dled;efd            ZJe7dled;efd            ZKe7dled;efd            ZLedeMdedefd            ZNe7deded;efd            ZOe7deded;efd            ZPe7dledzed;efd            ZQd ZReSd             ZTeSd             ZUeVjW        X                    eVjW        jY        dd6d6          ZZd Z[d Z\d Z]dede^fdZ_dede^fdZ`d Zad Zbe7d             Zcd Zdd Zed Zf fdZge7d             Zhe7d             Zie7dDdd            Zjddeded;dDfdZke7ded;e^fd            Zle7d             Zme e	d6d6d          d                         ZnddZod Zpd Zqd Zr fdZse7d             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                     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	        | _        | 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 )Nr   )	cmf_ownercmf_owner_assistantsactivityr   
tree_nodesr   T	only_data)r   
is_changedr   load_fields_node_parentr   rf   rK   r   r   r   rv   get_tree_nodes_recursiverI   projectrV   )rg   nlen	node_listr   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 ;! 	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                 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)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_history5  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_changedA  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_approver  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           | j        r| j                            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_draftr   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   r   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   viewr[   s           ra   r,   zCmfDocument.do_publish  sL    T T T 	U 	U 	U < 	PL223D$2OOO  	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 d | j                                        D             D ]2}t          | |          j        r t                      j        |i |c S 3d S )Nc              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  r   itemsgetattr)rg   rd   rh   cf_namer   s       ra   r  zCmfDocument.mark_full_search  s   & 		=9'		=>,		= ;)		= #.			=
 <*		= 9'		= 9'		= #.		= ,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   r6  findr8  r7  r   childrenreplace)rg   r   svg_replaceprepared_textsoupattachment_nodeattachment_id
attachmentrfile
latest_verattachment_linkpreview_imgrE  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   r^  r_  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 )	Nr2  r   r3  r4  r;  r5  r9  )stream)r   rJ  rU   rf   r   rK  rL  rM   rK   rL   get_contentupload_stream_file)	rg   rS  rT  rU  rV  rW  attachment_verrX  files	            ra   rd  z(CmfDocument._update_attachments_versionsF  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_optionsQ  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_versionj  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   ra  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.workflowrc  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   rx  zCmfDocument._start_approve  sM    !V++**,,DK.
//j6LMMMMMri   c                     |                      |                                            |                                   | j        |i | d S r   )r   r   rx  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 )Nrb  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                N	   |                                   | 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(|                                  |                                  ddd| j        gd	d| j        gd
d| j        gdd| j        ggg}t,          j                            | j        |          ru| j        rTt4          j                            t4          j        j                                      d          }| j         d| | _        n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?        |         }t,          j@                            d	d | jA        gg d!g"          }t,          jB                            d
d |gdd t          |          gg"          }|sit,          B                    | jA        ||#          D                                }t,          B                    | jA        ||#          D                                }n^t,          jB                            d
d |gdd |gg"          }|s4t,          B                    | jA        ||#          D                                }|| _        t,          jE                            d$%          }|| _        | j        s| jF        j        rt,          jG        H                    d&'           t          | d(d)*          }| jF        r$t-          jJ        d+i |D                                 n*t-          jJ        j        d+i |}|K                                  t                      jD        |i |}|S ),Nus   Нельзя менять текст напрямую, используйте text_draft вместе с do_publishTr  uH   Метод устарел! Используйте update_inline_comments)r   ANDrj   r   r   r   rI   r  )rj   r   )tzz%d-%m-%Y %H.%M.%S 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)r   up   Изменение опции "Это шаблон" доступно только администраторам)messageu   Без группы
add_button)r
  
group_name	menu_typer   )M_CmfDocument__calc_parentr   r   r  rn  r   calc_doc_version_calc_scheme_wf_calc_workflow_calc_executors_calc_spectators_calc_show_approvers_alwaysr   rU   r   r   rq  rv  rj   r   r   rI   rK   r   rM   cloned_fromr   r  r   utcstrftimer   CmfRFiledpdata_driverget_rdr   rM  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monthro  	RU_MONTHSCmfRegistryr   CmfBlogFolderr  rV   CmfWorkflowis_templateCmfAccessListcheck_admin_modedictCmfMenuItemr   r   )rg   r  r  r   rd   rh   filtdtrdiskrfile_idrY  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  s   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=# 	*&&((('')))ty)4-d&67tTW%	'  !!ty!>> 		 &**h.?.C*DDMMNabb#y//2//		>	 > > >     %	N %	NR ?% 	$$+*C*H*H*J*J 	$!!###; 	4,??&,1D'-3E%e,E%))8S$,2OQrQrQr1s)ttD*..sD7QTZ\_adeiajajSk6l.mmG q ..dlPT[_.``eegg!//t|QX_d/eejjll!/33]CQX<Y\bdgin[o;p3qq q%334<U\ch3iinnppH'D#''-D'EEBDM{ 	#t/: 	# 11  ;m1  n  n  n0&  F  #",,V,,113333".2<<V<<	  """egglD+F++
ri   c           	           t                      j        di |}g d}|                     |           |D ]!}t          ||t	          | |                     "|S )N)r   r   r  	executors
spectatorsr   )r   create_from_templater   setattrr/  )rg   rh   new_docr   attrr   s        ra   r  z CmfDocument.create_from_template@  sy    .%''.8888
 
 
 	    	8 	8DGT74#6#67777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)rn  
logic_typeis_nullr   ro  rp  tree_parent_idrK   r   r   r   _calc_logic_typer   s    ra   r  zCmfDocument._calc_logic_typeP  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)rn  r   r  r   ro  rp  r  rK   r   r   r   _calc_activityr   s    ra   r  zCmfDocument._calc_activity^  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)	rn  r   r  r   ro  rp  r  rK   r   r   s    ra   r  zCmfDocument._calc_executorsl  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)	rn  r   r  r   ro  rp  r  rK   r   r   s    ra   r  zCmfDocument._calc_spectatorsw  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   )rn  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_eventrD  )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 )Nr2  )r   include_deletedT)descr_documentr  r   )r   r  r  )r   rK   r  r  r  r  r   rM  r  r  rI   r   CmfComponentr   r  rV   r   r   rM   r   )rg   r  rd   rh   r  r  rY  r  	componentru  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 )Nrb  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.parserrA  taskrL  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   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~!@@@((ys(KKK	L 	Lri   c                 `     | j         di |}|                    d           |j        j        S )u   Создание документа из шаблона
        :param self: Шаблон документа
        :param params: Параметры для шаблона
        :return: Идентификатор нового документа
        Tr   r   )r  rV   rI   rf   )rg   r  r  s      ra   r*   z$CmfDocument.create_doc_from_template  s;     ,$+55f55t$$$zri   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.pathr#  r   _acl_check_readCmfPermissionErrorr  r  r  rI   rw   rK   rL   rM   tempfileTemporaryDirectoryospathr   ZipFilerj   writerN   rQ   rj  r6  )rg   rd   rh   r*  r+  r   r#  zip_filenamerX  r0  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_attachment  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   rI  z1CmfDocument.full_search_index.<locals>.<listcomp>(  s&    2_2_2_3qv|3D3D2_2_2_ri   r   )r   full_search_fieldsr+  rf   r   rU   rK   CmfFullSearch
strip_htmlr   key_phrasesr   full_search_index)rg   rh   r   r   s      ra   rE  zCmfDocument.full_search_index!  s    0111%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   rG  rH  s     ra   rI  z.CmfDocument._convert_h_tag.<locals>.<listcomp>:      ;;;1A;;;ri   )
rt   r  
IGNORECASEr   r  r
  r   r   rE  rQ  )clsr   rU  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_).*?["\'][^>]*>rG  c                      i | ]}|d          |S rH   r   )r(  elements     ra   
<dictcomp>z.CmfDocument._convert_title.<locals>.<dictcomp>K  s    LLL'wt}gLLLri   TrH   ^z.+)rD  rD  r  Ncmf_convertedrI   r   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z.CmfDocument._convert_title.<locals>.<listcomp>]  rJ  ri   )rt   r  r   r  r
  
startswithrM   rR  r   rE  rQ  )r   old_idnew_idrU  idslinkid_nameid_bodys           ra   _convert_titlezCmfDocument._convert_title<  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  r@  r	  rU  zmce-tocFcontenteditableTh2u   Оглавлениеh4rI   ztitlelist-.*mcetoc_)rt   r
  r  r  r   findAllrL  rM   r  new_tagr  )r   r  rU  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[^"\']*["\'][^>]*>rG  r@  r   r	  prezlanguage-markupr   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z-CmfDocument._convert_code.<locals>.<listcomp>  rJ  ri   )rt   r  r   r  re  rP  extendcontentsreplace_withr   rE  rQ  )r   rU  rf  rk  tag_contents        ra   _convert_codezCmfDocument._convert_codew  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r@  contentEditabler	  r   r3  r   ak-editor-panel__contenttruezak-editor-panel eva_convertedr@  zdata-panel-typery  )re  rK   r   
ICONS_DATAr  rm  ro  )	rs  rf  doc_souprn  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-macrorG  r@  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*[^"\']*)([^"\']*["\'][^>]*>)ru  panelpanelContentr>  r#   r   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z5CmfDocument._convert_macro_panels.<locals>.<listcomp>  s    ???qCFF???ri   )r  rt   r  r  r   r  r
  rL  rM   CmfErrorrP  rn  r   rE  rQ  )r   r  rU  rf  rs  contentrn  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  ru  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-iconrv  rw  rx  r   r3  r   rz  r{  zak-editor-panelr|  )rt   r
  r  r  r   r  rM   re  rK   r   r}  r  rm  rn  ro  r  )r   r  re2rU  rf  panel_type_mapping
data_colorrs  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  r@  r	  ru  zspoiler collapsedzspoiler-togglespanzspoiler-icon_zexpand-control-textzexpand-contentzspoiler-text)rt   r
  r  r  r   r  re  r  rP  rm  rn  ro  r  )
r   r  rU  rf  spoilerspoiler_togglespoiler_icontag_control_texttag_control_contentspoiler_texts
             ra   _convert_expanderzCmfDocument._convert_expander  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   rb  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  rQ  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   rG  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   r*  z2CmfDocument._convert_childpages.<locals>.<genexpr>{  s.      &`&`Eu{{3'7'7&`&`&`&`&`&`ri   |allr  1r  pager%  )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_paramsr>  r  c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z3CmfDocument._convert_childpages.<locals>.<listcomp>  rJ  ri   )rt   r
  r  r  r   ro  get_obj_by_idr  rj   r   r  rM   r  rw   rK   r   rb  r   rI   formatjsondumpsrR  ro  
currentTagr   rE  rQ  )rL  r   rb  r  r  TMPLr
  r  rU  rf  r  r  parent_pageview_type_mapsort_type_mapnew_soups                   ra   _convert_childpageszCmfDocument._convert_childpages5  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-widthr@  singler	  )r(  r
  s     ra   rI  z0CmfDocument._convert_layouts.<locals>.<listcomp>  sH     c c c 	'(:::xsyY`Oa?a?a ?a?a?ari   r@  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-layoutr>  ru  rw  r{  zmceNonEditable selected)r`  zdata-layout-sectionr@  r  r   rn   r     r  %zflex-basis: )zdata-column-widthzdata-layout-columnr  )zdata-layout-contentr`  )rt   r
  r  r  r   r  rM   rL  r   rn  r  re  rv   ro  	enumerater  )r   r  rU  r,  rf  layout_typecolrn  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_souprf  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  r<  class_zdata-emoticon-name)	rt   r
  r  r  r   r  rM   ro  r  )r   	emoji_mapr  r  rf  emoticon_nameemojis          ra   _convert_emojizCmfDocument._convert_emoji  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  ro  r  r  )r   r  r  r  r  rf  re  s          ra   _convert_macro_attachmentsz&CmfDocument._convert_macro_attachmentsB  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  rc  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  r>  r   )pagetree_paramsr{  rU  root_page_original)&urllib.parser  r  rt   r
  r  r  r   r  r  ro  r  r  r  r   r  r   rK   r   r  rI   rM   rP  rL  r   r  rf   rj   rR  queryr  loadslowerr  r  ru  ro  r  )r   r  r  r  r  r  rU  pagetree_tagsTAG_TMPL	sort_dictr
  homepage_idselfpage_idroot_parentpagetree_tagrU  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_pagetreek  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-successrG  r  r	  r@  c                 X    |                      d          o|                      d           S )Nzaui-lozenge-zaui-lozenge-subtle)rW  )r   s    ra   <lambda>z1CmfDocument._convert_status_tag.<locals>.<lambda>J  s*    1<<+G+G+rPQP\P\]qPrPrLr ri   r8  zdata-macro-idF_cloudneutral)r   r   r  r   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z3CmfDocument._convert_status_tag.<locals>.<listcomp>Y  rJ  ri   )rt   r
  r  r  r   r  nextr   rM   r  r   ro  r  r   rE  rQ  )
r   TMPr  r  status_color_mappingrU  rf  classesr  ss
             ra   _convert_status_tagzCmfDocument._convert_status_tag)  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   rS  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-replacerG  r  r  r	  ru  r@  rI   zSRC=\[([^]]+)\]r   z@startuml(.*?)@enduml
@startuml
r  
@endumlz{})r  umlr   r  uS   Не удалось преобразовать Plantuml, не найден код: r  u9   Не удалось преобразовать Plantuml: r   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z5CmfDocument._convert_plantuml_tag.<locals>.<listcomp>  rJ  ri   )rt   r
  r  r  r   r   r  rP  r.  ru   rK   r   convert_encuml2umlDOTALLgrouprz   r  ro  r  	Exceptionr   rE  rQ  )r   rS  r  r?  r  r  rU  rf  svg_divsvg_keysvg_textrH  encumlpatternresultre  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  rG  ulr  ztox-checklistr@  rH  r   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z2CmfDocument._convert_task_list.<locals>.<listcomp>      @@@1A@@@ri   )
rt   r
  r  r  r   r  r   r   rE  rQ  )rL  r   rR  r  rf  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	  rH  r@  checkedztox-checklist--checked)
rt   r
  r  r  r   r  rM   r   r  r  )rL  r   r  r  rf  	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  ru  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   rG  r(  r  s     ra   rI  z-CmfDocument._convert_tabs.<locals>.<listcomp>  s    (J(J(JAQ(J(J(Jri   )r  tab_namer  rwui_tabs_menur  c                 ,    t          | t                    S r   )r   r   r   s    ra   r:  z+CmfDocument._convert_tabs.<locals>.<lambda>#  s    jw6O6O ri   rs  )r   rt   r
  r  r  r   r  r  rM   r  r  r  rR  r   rn  ro  r  	decomposeextractunwrapr  )rL  r   r  r  r  r  tabs_tagr   tab_tagrp  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>
        rG  r   r   Tr	  z%Y-%m-%dr   ru)locale)	timestampdate_strr  r   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z-CmfDocument._convert_date.<locals>.<listcomp>S  rX  ri   )babel.datesr}  rt   r
  r  r  r   r   r  rM   r   strptimeintr  r  ro  r  r   rE  rQ  )rL  r   r}  rR  r  r  rf  datetime_strdatetime_objr  r  re  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  ru  r  ztableView-content-wrapzcmf-scrollbarr@  
wikitableszdata-macrosrH  table)rt   r
  r  r  r   r  r   r  )rL  r   r  r  table_wrap_tag	table_tags         ra   _convert_table_wrapzCmfDocument._convert_table_wrapU  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   rl  )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_plantumlh  sp    mmF9&$ajv|V}V}m~~?c!!gYggZ]Zegghhh2;ri   rQ  c                 x    |                      |                                d|                                          S )Npuml)r  encodedecode)rL  rQ  r  s      ra   rJ  zCmfDocument.convert_encuml2umlr  s.    ##FMMOOVVDDKKMMMri   rH  c                 d   |                     d          }d |D             }d                    |          }t                              d|          sd| }t                              d|          s| d}|                     |                                d|                                          S )Nr>  c                 6    g | ]}|                                 S r   )rstrip)r(  lines     ra   rI  z/CmfDocument.convert_uml2svg.<locals>.<listcomp>z  s     9994999ri   z
^@[a-z]+\nrF  z@[a-z]+$rG  r   )rw   r   rt   r  r  r  r  )rL  rH  r  linescleaned_lines	clean_umls         ra   r)   zCmfDocument.convert_uml2svgv  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}   rJ  rT  rC  rN  ri  r^  rq  r  r  r  r  r  r1  r  r  r  rY  r^  r{  rR  )rL  r   r  rS  r]  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   rD  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_idrb  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_lock	  s"    yy{{ri   c                 R    |                                   |                                 S r   )r  unlockr   s    ra   r9   zCmfDocument.public_unlock	  s"    {{}}ri   c                 R    |                                   |                                 S r   )r  	lock_pingr   s    ra   r:   zCmfDocument.public_lock_ping"	  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 )NrG  rH  r	  ztox-checklist--checked checkedr@  r   c                 ,    g | ]}t          |          S r   rG  rH  s     ra   rI  z5CmfDocument._text_update_checkbox.<locals>.<listcomp>4	  s    DDDqCFFDDDri   )	rJ  r   rP  rL  rM   r   rE  rQ  rR  )	rg   r   r   r  rS  	soup_texttext_elementnew_textr]  s	            ra   _text_update_checkboxz!CmfDocument._text_update_checkbox'	  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                 |   |                      ddg           |                     | j        j        ||          }|                     | j        j        ||          }|s|st          d| d           n!|r|st                              d|            |r|| _        |r|| _        |                     d           d S )Nr   rU   uD   DEV: в документе не найден элемент data-id=Tr  r   )	r   r  r   rf   rU   r  r|   r}   rV   )rg   r   r  r   rU   s        ra   r6   zCmfDocument.update_checkbox:	  s    &,/000))$)/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   rb  r   )r   r  Tr   r|  c                     g | ]	}|j         
S r   rH   ro  s     ra   rI  z3CmfDocument.clean_after_encrypt.<locals>.<listcomp>Y	  s    WoWoWoabXYX\WoWoWori   )rK   r   r   r   
CmfCommentrI   rL   )	rg   rd   rh   history_listru  commentsrz  r  rX  s	            ra   r-   zCmfDocument.clean_after_encryptM	  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   ro  rp  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)rL  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|                     dg           | j        r| j                            d|             | j        |i |S )Nr   zPPP-COM-ADDr	  )r.  r/  r   r   r  r'   r   s      ra   r=   z%CmfDocument.public_add_inline_comment	  s    	  """"! 	 	 	44	 	)%%%< 	LL22=d2KKK&t&7777r;  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	 !!###r;  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	 ""$$$r;  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   rW  r  rU   )rL  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   rc  )rK   r   rM   )rL  r
  rd   rh   r   ru  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  ro  requests_sessionrM   r   base64	b64encoder  r  )rL  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   r+  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  utilro  disable_aclr+  rV   )rg   r+  r   r  s       ra   r4   zCmfDocument.save_render
  s     	>=====!!###t+++FX))++ 	& 	&00==D#+D III%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	s   .B

BBrI   c                      t          d          )Nu   Устарело)DeprecationWarning)rL  rI   s     ra   check_dirtyzCmfDocument.check_dirty
  s     !3444ri   c                 n   t           j        j        j                                        }|j                            t          j                  s'|j        	                    t          j        dd           |j        
                    t          j                  D ]}|                    d          d         }t           j                            |g d          }d|j        _        |                                 |                                 |j                            |           t'                       d S )NT)r  r  r   rp   )r   rU   r   r   r   r   r   r9  )rK   r  r  r  r  io	io_existsr  
DIRTY_PATHio_mkdir
io_iterdirrw   r   rM   rU   r   r   rV   	io_unlink
cmf_commit)rL  r  
dirty_filerW   r_   s        ra   rA   z CmfDocument.process_dirty_attach!
  s   ".5577x!!&"344 	NHf/MMM(--f.?@@ 		 		J%%c**2.F$((F <F <F <F( G GC )-CN%))+++HHJJJHz***LLLL		 		ri   z	@minutely)	only_once
system_jobschedulec                  B    t           j                                         d S r   )rK   r   rA   r   ri   ra   cron_check_dirtyzCmfDocument.cron_check_dirty3
  s     	//11111ri   c                 J   |                      dg           g }|dk    rg d}|dk    rg d}t          | |t          j        d| j        j                  }|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_versionr   r  r   r   )
r   r  r|   r  r   r   rK   r   rM   _approve_one)rg   r  
resolutionr   rh   master_filterr  approves           ra   r(   zCmfDocument.approve_one8
  s	   <=>>>##===M##>>>M'^!1=
 
 
  	-,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_approvedU
  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_attachmentd
  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/  ro  r  rK   r   mark_viewed)rL  rh   r  r  s       ra   r?   zCmfDocument.public_mark_viewedh
  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 | j        r| j                             d|            t                      }|                     d          D ]k}|j        |                                 vrN|j        	                    d          s4|j        
                    d          s|                    |j                   ld|v r2| j                             d| d           |                    d           d	|v r1| j                             d
|            |                    d	           d|v sd|v sd|v rg| j                             d|            d|v r|                    d           d|v r|                    d           d|v r|                    d           |r| j                             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_permrn  r  r  valuesr  project_perm_allow_fieldsrW  endswithr  remove)rg   changed_fields_to_checkfieldr   s      ra   r:  zCmfDocument.check_edit_permy
  s0   | 	-77**,,,; 	OL223C2NNN"%%%[[D[11 	> 	>E$D,J,J,L,LLL!,77AA M!,55e<< M (++E,<===...L223C_c2ddd#**8444 333L223E42PPP#**=999"&===&*AAA*.EEEL22?2MMM&*AAA'../FGGG"&==='../BCCC&*AAA'../FGGG # 	ML22>t2LLLLL	M 	Mri   c                     |                      g d           | j        r| j                            d|            d S t                                                       d S )N)r   r   r   listsr  r  zPPP-DOC-DELETEr	  )r   r   r  r   check_delete_permr   s    ra   rC  zCmfDocument.check_delete_perm
  su     ? ? ? 	@ 	@ 	@< 	(L223C2NNNNNGG%%'''''ri   	recursivec                     t                      j        |i |}|rCt          j                            | ddg          D ]}|j        r|                    |            |S )NTr   )r   r  r   rD  )r   restorerK   r   r   r   )rg   rE  rd   rh   r  childr   s         ra   rG  zCmfDocument.restore
  sv    eggot.v.. 	7+00TSWan`o0pp 7 7$ 7MMIM666
ri   c                     | j                                         r| j                             d|             t                      j        |i | d S NzPPP-DOC-ARCHIVEr	  )r   r   r  r   archiver  s      ra   rK  zCmfDocument.archive
  sW    < 	PL223D$2OOO((((((ri   c                     | j                                         r| j                             d|             t                      j        |i | d S rJ  )r   r   r  r   archive_restorer  s      ra   rM  zCmfDocument.archive_restore
  sX    < 	PL223D$2OOO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  r3   rd  rq  rv  ry  r  rx  r5   r  rV   r  r  r  r  r  r  r  r  r   r  r  r  r!  r   r*   r.   r>   rE  classmethodrN  r^  ri  rq  r  r  r  r  r  r  r  r  r1  rC  r  rT  rY  r^  r{  r  r  bytesr  rJ  r)   r  r   propertyrD  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  r(   r&  r)  r  r,  r?   r:  rC  rG  rK  rM  __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 IB IB IB IB IBVA A A A A*6(s 6( 6( 6( 6(p 6:e )P )P )P )P )PV	; 	; 	;2 2 22& & &>" " "  N N N# # #
5 5 5  %*ePT B B B B B B BH     * * * * *( ( ( ( (	< 	< 	<	> 	> 	>P P P  
 
 
 
 
 .3 R R R R R R R4. . . . .? ? ?X X X/ / /0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   [" LLL2 2 ML \2B B B B:    
: : :^ ^ ^ ^ ^ 5 5 [5 &M &M &M &M &MV( ( ( ( ( (-       ) ) ) ) )
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>ra     s                 & & & & & & & &                     H H H H H H / / / / / / ; ; ; ; ; ;j*1 j*1 j*1 j*1 j*1,*,A j*1 j*1 j*1 j*1 j*1ri   