
    jiB                        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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d0d1d2d1d3d4Zej        j        ej        z   g d5z   Ze	d6gfd7            Z
e	 ed8d9:          d;                         Zd< Ze	d=ed>efd?            ZddAZedB             ZedC             ZdD ZdE Z fdFZdG ZddIZdJ ZdK ZdL ZdHd@d9dMdNZ fdOZ fdPZd>efdQZdHd@dRdSZ dT Z!dU Z"dV Z#dW Z$dX Z%dY Z&dZ Z'd[ Z(d@d@dHd\ fd]
Z) fd^Z* fd_Z+ fd`Z,da Z-db Z.dc Z/dd Z0 fdeZ1d@df fdg
Z2 fdhZ3di Z4dj Z5dk Z6dl Z7dm Z8dn Z9do Z:dp Z; fdqZ<edred>efds            Z=e	dred>efdt            Z>e	dred>efdu            Z?e	dred>efdv            Z@e	dred>efdw            ZAe	dred>efdx            ZBe	dred>efdy            ZCedredzed>efd{            ZDe	dred>efd|            ZEe	dred>efd}            ZFe	dred>efd~            ZGe	dred>efd            ZHe	dreded>efd            ZIe	dred>efd            ZJe	dredeKded>efd            ZLedred>efd            ZMedred>efd            ZNedred>efd            ZOedred>efd            ZPedred>efd            ZQe	deRdedefd            ZSededed>efd            ZTededed>efd            ZUedreded>efd            ZVd ZWeXd             ZYeXd             ZZe[j\        ]                    e[j\        j^        dd9d9          Z_d Z`d Zad ZbdedecfdZddedecfdZed Zfd Zged             Zhd Zid Zjd Zk fdZled             Zmed             ZnedHdd            Zoddeded>dHfdZpeded>ecfd            Zqed             ZrddZsd Ztd Zud Zv fdZwed             Zx fdZy fdZzd@d fd
Z{ fdZ| fdZ}d Z~ xZS )CmfDocument>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789u
   Важно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_docxrequest_watchbrc                    t           j                            |           \  }}t          |d          }ddlm} |j        r#t          |j        d         |          r|j        d= |                    d          D ]-}|j	        |v rt           j        
                                |d<   .t           j                            ||          S )u   
        Устанавливает data-id для html тегов при иморте
        исключение: <br> и <svg>
        html.parserr   )DoctypeTdata-id)modelsr   get_all_drawio_svgr   bs4rI   contents
isinstancefind_allnameget_data_idplace_all_drawio_svg)htmlexclude_tagssvg_tagstextsouprI   tags          (./modules/project/models/cmf_document.pypatch_data_id_to_tagsz!CmfDocument.patch_data_id_to_tagsv   s      +>>tDD$T=11= 	!Za(8'BB 	!a ==&& 	> 	>Cx<''#/;;==C	NN!66xFFF    u1   Импорт документа в систему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)rK   CmfAttachmentgetr   full_path_file	mimetypes
guess_typer   openr[   obj_to_htmlreadsuffix
text_draftsaver-   )
doc_id	attach_id_args_kwargsattachfile_objmimetypeencodingdocfs
             rZ   import_msword_taskzCmfDocument.import_msword_task   s    %))Y)77-..&1&2GHH( $$$//&'.. 	! 66(/8DD CN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	


s   ACC Cc                     d| _         |                                  |                                  t          | j        | j        j        |g           | S )r`   uP   Обработка документа, пожалуйста, подождите.)args)rm   rn   r-   schedule_deferred_jobry   rb   value)selfrs   r{   kwargss       rZ   r2   zCmfDocument.import_msword   sM     m		d5TW]F<STTTTr\   rQ   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lenrg   rh   splitmathfloorstripr   short_str_encgdebug)rQ   
rus_simbolos_max_lengthfile_name_lengthextru   rv   slice_lengths           rZ   _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r\   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)rO   rK   
CmfProjectproject_dir	CmfFoldersys_typeloadhome_dir	CmfPerson
user_localloginfieldsr   oldnewrQ   r   r   
ValueErrorrb   )nodetree_parent_rQ   parent_r   parent_pathr~   s       rZ   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r\   r    z.htmlr   r   r   zdocument path for r   )
rQ   r   r   is_externalr   r   location_pathr   r   rb   )r~   r   rQ   filenamer   r   r   r   s   ``     @rZ   _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r\   c                 ^    d                     t          j        | j        |                    S )Nr    )k)joinrandomchoices
CHARACTERS)clslengths     rZ   get_random_strzCmfDocument.get_random_str   s%    wwv~cn???@@@r\   c                     | j         dz   }t          j        t          j                    dz  dz            }t          j        |dz            }|dz  }||         ||         z   |                     d          z   }|S )u   
        Перенесенный аналог функции из фронтенда.
        Генерирует случайную строку для атрибута "data-id" тега
        z+/  i   @      )r   r   r   timetime_nsr   )r   alphabertotalijdata_ids         rZ   rR   zCmfDocument.get_data_id   su     >D(
DLNNT1g>??Jurz""BJ1++c.@.@.D.DDr\   c                     d S N r~   s    rZ   _calc_parentzCmfDocument._calc_parent  s	    
 	r\   c                 z   | j         j        s| j        r| j        j        sd S | j         j        s| j        s| j         r6| j                             dg           |                                 | _        d S | j        r+t          | j        j        t          j                  rd | _        | j        s| j	        | _        d S d S d S )Nr   )
r   
is_changedr   load_fields_node_parentrO   r}   rK   r   	cmf_ownerr   s    rZ   __calc_parentzCmfDocument.__calc_parent#  s      + 		K"	 F& 		1dk 		1 1 ,,hZ888"//11 ; ':dk.?AR#S#S '"&DK{ 1"&.DKKK		1 		11 1r\   c                 N    t                                                      g dz   S )N)r   r   z!tree_parent.show_approvers_alwayscur_workflow_versioncur_published_version cur_workflow_version.doc_versionperm_encryptpublish_by_owner_onlycmf_deletedstatus_closed_atstatus_review_at)supersave_preload_fieldsr~   	__class__s    rZ   r   zCmfDocument.save_preload_fieldsA  s/    ww**,, 0
 0
 0
 
 	
r\   c                    t           j                            dd| j        gg dg          }|D ]}d|_        |                                 | j        r| j                                        }n| j        	                    d          }t                               | j
        | |d| j        	          }|                                 || _        d S )
Nr   ==cur_workflowr   TfilterFOPENstatus_typeT)rW   r   statusr   r   )rK   CmfDocumentHistorylistrb   r   rn   is_newworkflowget_create_statusget_default_statusrm   r   r   )r~   tmp_listhstatus_opennew_cur_historys        rZ   _create_new_historyzCmfDocument._create_new_historyT  s    ,118T47:SUqUqUq9r1ss 	 	A"ANFFHHHH; 	O-99;;KK-::v:NNK 33QU^ix|  LP  L]3  ^  ^$3!!!r\   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   rn   has_publishedrm   rW   r   _create_publish_taskapproved)r~   create_new_historyr   r   r   s        rZ   _process_draft_is_changedz%CmfDocument._process_draft_is_changedc  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-...r\   c                 D    t           j                            |            d S r   )rK   
CmfApprovecancel_approve_processr   s    rZ   cancel_approvezCmfDocument.cancel_approve  s    0066666r\   c                 "    | j         j        dk    S )u6   Явлется ли бизнес-процесс simplezdocument.base:default)r   coder   s    rZ   wf_is_simplezCmfDocument.wf_is_simple  s    }!%<<<r\   c                      | j         |i |S r   )r-   r~   r{   r   s      rZ   r<   zCmfDocument.public_do_publish  s    t////r\   )doc_versionsave_importnotify_personsc                   |                      g d           t                              | j                  }|r|                    d|            |                                 r!| j                            dd          | _        | j	        r6| j        | j                            dd          k    rt          d           dS | j        rt          j        | j        k    r| j        rt                              d	           t           j                            | | j        d
|                     t)          | j                  t)          | j                            d           t                              d           t          j        |                                 v rt          d           t          d| j        j         dd           dS | j        j        | _        |                                  | j        | _        | j        | _        |                                  |                                  t           j         !                    |           D ]}|"                                 | #                                  | j$        |i | t!          j%        j&        | dg|R i | | j        | _'        d| j'        _(        | j'        )                    |           | j*        D ]}|+                                 | j        j,        }	| )                    dd|          }
|	| j        _,        t           j-        .                    |            d| j        _,        |
S )u   Выпуск документа)rW   rm   r   publish_approved_onlycmf_versionr   zstatus.coder   r   r   	macros_dbmacros_db_draft
project_idattachmentszPPP-DOC-PUBLISHobjr   r  r   ur   Публикация этого документа доступна только после утвержденияNzOWNERS PLACE NOTIFY STARTu8   Необходимо выпустить документ   )r  personrQ   msgpriorityzOWNERS PLACE NOTIFY ENDu   Владелец проекта не может Выпускать чужой документ, но Вы можете установить себя Владельцем документа и Выпуститьu}   Данный документ может выпустить только владелец документа                 u   ,                 ему отправлено уведомление об утверждении черновика. Документ сохранен как черновик.Fabort	publishedTr  r   )depth	only_datanotify)/r   APPget_cache_projectr  check_project_role_accessr  r   r   r   r  	cmf_alertr   r   current_personr   r   rK   	CmfNotifyplace_notifyr1   strrW   rm   
get_ownersrQ   r   r  _pinup_attach_versionr  r  _delete_publish_taskmark_full_searchCmfPersonViewr   delete_handle_local_links_handle_mention_taskCmfEventdo_eventr   r   rn   r  r-   r   CmfBackbonePeerobj_after_save_hook)r~   r  r  r  r{   r   projectviewrs   is_text_changedress              rZ   r-   zCmfDocument.do_publish  s    W W W 	X 	X 	X ''88 	K--.?T-JJJ  	i-::x]g:hhDK% 	$+9Y9Yfn  }G9Y  :H  :H  +H  +H  K  L  L  LF % 	!*:dn*L*L~ 	33444 -->Ts49~~s4?7K7KLL .    1222
 4??#4#444  p  q  q  q o$o o o w|} } } } F  4@""$$$O	-!!### 	 (--$-77 	 	DKKMMMM  """!!426222
 	 {DTDDDVDDD%)%>"37"0"''K'@@@ & 	  	 F).iia4iGG  /	224888  %	
r\   c                      t                      j        |i |}d| j        _        t          j                            |            |S NT)r   highlight_inline_commentrW   r   rK   r7  r8  )r~   r{   r   r<  r   s       rZ   r?  z$CmfDocument.highlight_inline_comment  sF    .egg.???  $	224888
r\   c                    | j         j        s| j        j        s| j        j        s| j        j        sx| j        j        sl| j        j        s`| j        j        sT| j        j        sH| j	        j        s<| j
        j        s0| j        j        s$| j        j        s| j        j        s| j        j        r t                      j        |i |S | j        j        rb|                     dg           | j        D ]+}t(          j                            |j        j                   , t                      j        |i |S d | j                                        D             D ]2}t7          | |          j        r t                      j        |i |c S 3d S )Nr  c              3   .   K   | ]\  }}|j         |V  d S r   )fullsearch_index).0r   vs      rZ   	<genexpr>z/CmfDocument.mark_full_search.<locals>.<genexpr>  s.      PPdaQ=OPPPPPPPr\   )text_renderr   rW   r   r   r   r9  rQ   tagsuser_ratingkey_phrasesr   cmf_archivedfullsearch_user_portal_topfullsearch_client_portal_topr   r0  full_search_typer   r  rK   CmfFullSearch
mark_dirtyrb   r}   r   itemsgetattr)r~   r{   r   rs   cf_namer   s        rZ   r0  zCmfDocument.mark_full_search  s   & 	=9'	=>,	= ;)	= #.		=
 <*	= 9'	= 9'	= #.	= #.	= #.	= $/	= 2=	= 4?	= ,577+T<V<<<  + 	=m_---* A A$//	@@@@+577+T<V<<<PPdk&7&7&9&9PPP 	A 	AGtW%%0 A/uww/@@@@@@A	A 	Ar\   c                    | j         j        }t                              d           |                     g d           |                     |          \  }}t          |          }|                    d          D ]S}|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          }
|
sG|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 <   U|                    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rb   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,  rC  r   s     rZ   
<listcomp>z5CmfDocument._pinup_attach_version.<locals>.<listcomp>Z  s    $C$C$CSVV$C$C$Cr\   z_pinup_attach_version END)rm   r}   r   r   r   rL   r   selectattrsre   rK   rd   r(  	get_rfile
_file_nameget_versionrQ   rY  findr[  rZ  r   childrenreplace)r~   rW   svg_replaceprepared_textrX   attachment_nodeattachment_id
attachmentrfile
latest_verattachment_linkpreview_imgrh  keys                 rZ   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	+,,,'r\   )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  rW   r   r   u$   Не найдена DocumentHistory!Tr  rb   r#  r    Fr   )r"  r  )r   rK   r   re   rb   r(  r   rW   rm   r   rn   _update_attachments_versionsr2  r  )r~   r  r  r{   r   doc_historyrestore_historys          rZ   r4   zCmfDocument.restore_versiona  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Or\   c                    |                      g d           |                     | j        j                  \  }}t	          |          }|                    d          D ]}|j                            d          }|j                            d          }t          j	                            |g d          }|
                    |          D ]}|                    |           d S )	NrT  rU  rV  rW  r^  rX  r\  )stream)r   rL   rm   r}   r   rm  rn  re   rK   rd   get_contentupload_stream_file)	r~   ru  rv  rX   rw  rx  attachment_verry  files	            rZ   r  z(CmfDocument._update_attachments_versions  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-::::;		; 	;r\   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)r   r   cmfutilget_model_by_idrb   rK   r   r   r  r   r   r   rO   r}   r   r   s    rZ   _calc_publish_optionsz!CmfDocument._calc_publish_options  ss   ; 	4+ 	0G0GHXH[0\0\`f`r0r0rACfghhh)-)9)OD&)-)9)OD&F Z Z Z 	[ 	[ 	[ &+"%*"= 	2}2 2-1*}2 2-1*; 	2:dk&79KLL 	2PZ[_[f[lntn  QA  QA 	2{0 2-1*{0 2-1***		2 	22 2r\   c                 4   d}d}| j         j        r,	 | j         j                            dd          }n	#  d}Y nxY w| j         rG	 | j        r| j                                         }n| 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   )rW   r   r   )r   r   r   r   r   r   r   rn   rK   r   rm   )r~   r   status_rejectedprev_historyhistorys        rZ   _switch_to_new_versionz"CmfDocument._switch_to_new_version  sS    = 	''"&-"3"F"FS[is"F"t"t'"&= 	##; W"&-"A"A"C"CKK"&-"B"Bv"B"V"VK#" 	&4L"1L  33QU^i3jj   	&/G(GNLLNNN%DKKK		& 	&s   !4 :<B B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   r  r   r  _start_approver   s    rZ   do_status_is_changedz CmfDocument.do_status_is_changed  s    lllmmm;? 	"t{;@@BB 	"4;Kc 	"!!!;# 	"!!!!!	" 	"r\   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.workflowr  u   Из статуса uO    нет ниодного перехода на следующий статус!Tr  r  uf    существует больше одного перехода на следующий статус!r   )
rK   CmfTransr   r   rb   r   r(  r   r   r  )r~   transitionss     rZ   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>++tr\   c                     | j         dk    r|                                 | _        | j        }t          j                            | |j                   d S )Nr   )cache_status_typer  r   r   rK   r  start_approve_processr  )r~   r{   r   
wf_historys       rZ   r  zCmfDocument._start_approve  sM    !V++**,,DK.
//j6LMMMMMr\   c                     |                      |                                            |                                   | j        |i | d S r   )r   r   r  rn   r  s      rZ   r6   zCmfDocument.start_approve  sQ    1133444	4"6"""""r\   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 )Nr  r   rb   !=)official_number>0z-official_datez-official_numberr  official_dater   order_byr   r  )
rK   r   re   r   rb   r  r   r   nowr  )r~   official_historys     rZ   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r\   )	overwrite
no_versionr  c                	   |                                   |                                  | j        j        rt	          dd           |rt	          dd           d S | j        r%| j        j        s|                                 | _        | j        rx|                                  | 	                                 | 
                                 |                                  |                                  |                                  |                                  | j        j        r|                     |           | j        j        r(|                                  |                                  | j        rZ| j        rSt*          j                            t*          j        j                                      d          }| j         d| | _        d	d
d| j        gdd| j        gdd| j        gdd| j        ggg}t<          j                             | j        |          rt	          d| j         dd           | j!        s	 | j        j        r2| j8        j9        :                                r| ;                                 | j        r| j<        dk    r| j=        j5        j>        }| j=        j5        j?        }t          jA        |         }t<          jB                             dd | jC        gg d!g"          }t<          jD                             dd |gd
d t          |          gg"          }|sit<          D                    | jC        ||#          F                                }t<          D                    | jC        ||#          F                                }n^t<          jD                             dd |gd
d |gg"          }|s4t<          D                    | jC        ||#          F                                }|| _        t<          jG                             d$dd%g&          }|| _        | j        s| jH        j        rt<          jI        J                    d'(           t          | d)d*+          }| jH        r$t=          jL        d,i |F                                 n*t=          jL        j         d,i |}|M                                  t                      jF        |i |}t<          jO        P                    |            |S )-Nus   Нельзя менять текст напрямую, используйте text_draft вместе с do_publishTr  uH   Метод устарел! Используйте update_inline_comments)r  )tzz%d-%m-%Y %H.%M.%S ANDrQ   r   r   r   rb   r  )rQ   r   u!   Документ с именем u^    уже существует на этом уровне. Выберите другое имя.FzOverwrite file for document z by ()u@   Файл с таким именем уже существует z, )is_direxist_okparents)r   r    document_is_externaldocument_is_internalzdocument.blog=)typer  zCmfDocument-blogr   )r   r   rQ   zdocument.blog:defaultsave_eval_code)r
  cache_inmemoryr   up   Изменение опции "Это шаблон" доступно только администраторам)messageu   Без группы
add_button)r  
group_name	menu_typer   )Q_CmfDocument__calc_parent_calc_projectrW   r   r(  r   r  calc_doc_version_calc_scheme_wf_calc_workflow_calc_executors_calc_spectators_calc_show_approvers_alwaysr   r0  rm   r  r   r  r  cloned_fromr   r  r   utcstrftimerQ   r   r   rb   rK   r   re   r   CmfRFiledpdata_driverget_rdr   ro  exists
meta_tuuidcmfr   CmfTUUIDget_obj_by_tuuid_strr   r   	file_pathr   createrename
write_textr}   meta_set_flagr   r   trans_updatedr   _approve_updatedlogic_prefixcmf_created_atyearmonthr  	RU_MONTHSCmfRegistryr  CmfBlogFolderr,  rn   CmfWorkflowis_templateCmfAccessListcheck_admin_modedictCmfMenuItemr2  r   r7  r8  )r~   r  r  r  r{   r   dtfiltrdiskrfile_idrz  tuuidrfile_parentold_rfile_id	old_rfiler  r  blogyear_bfmonth_bfwfparams	menu_itemr<  r   s                           rZ   rn   zCmfDocument.save  sM   9 	Y  L  TX  Y  Y  Y  Y 	`hlmmmmF; 	7t/: 	7#4466D; 	'  """!!!  """!!###,,...$$&&&?% 	R**>P*QQQ=# 	*&&(((''))); 	,4+ 	,"&&(*;*?&@@IIJ]^^B9++r++DIty)4-d&67tTW%	'  !!ty!>> 	:DI : : :     %	N %	NR ?% 	$$+*C*H*H*J*J 	$!!###; 	4,??&,1D'-3E%e,E%))8S$/2RTuTuTu1v)wwD*..sD7QTZ\_adeiajajSk6l.mmG t ..doSW^b.cchhjj!//tT[bg/hhmmoo!/33]CQX<Y\bdgin[o;p3qq t%334?X_fk3llqqssH'D#''-DUYcsbt'uuBDM{ 	#t/: 	# 11  ;m1  n  n  n0&  F  #",,V,,113333".2<<V<<	  """egglD+F++224888
r\   c           	      >    t                      j        di |}g d}|                     |           |D ]!}t          ||t	          | |                     "| j        r| j        |_        |j                                        |_        |	                                 |S )N)r   r   r  	executors
spectatorsr   )
r   create_from_templater   setattrrQ  default_clone_workflowr   r   r   r  )r~   r   new_docr   attrr   s        rZ   r   z CmfDocument.create_from_template  s    .%''.8888
 
 
 	    	8 	8DGT74#6#67777& 	;#:G );;==%%'''r\   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)r   
logic_typeis_nullr   r  r  tree_parent_idrK   r   r   r   _calc_logic_typer   s    rZ   r	  zCmfDocument._calc_logic_type  s    K		'		  		 ''(;<<@RRR67888* "&"2"=ww'')))r\   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)r   activityr  r   r  r  r  rK   r   r   r   _calc_activityr   s    rZ   r  zCmfDocument._calc_activity  s    K		%		  		 ''(;<<@RRR45666(  $ 0 9ww%%'''r\   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)	r   r   r  r   r  r  r  rK   r   r   s    rZ   r  zCmfDocument._calc_executors  s    ; 	<k+BCDDDN<$< ++D,?@@FDVVV$. W "&!1!;	< 	<< < < < WVVVr\   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)	r   r   r  r   r  r  r  rK   r   r   s    rZ   r  zCmfDocument._calc_spectators  s    ; 	>l,DEFFFO>$> ++D,?@@FDVVV$/ W #'"2"=	> 	>> > > > WVVVr\   c                     | j         r>| j        r9t          | j        j        t          j                  r| j        j        | _        d S d S d S d S r   )r   r   rO   r}   rK   r   show_approvers_alwaysr   s    rZ   r  z'CmfDocument._calc_show_approvers_always  sl    ; 	P4+ 	P
4;K;QSYSe0f0f 	P)-)9)OD&&&	P 	P 	P 	P 	P 	Pr\   c                     d S r   r   r   s    rZ   _calc_approvedzCmfDocument._calc_approved  s    r\   c                 F     t                      j        |fd| j        i|S )Nmsg_url)r   create_eventrg  )r~   event_personr   r   s      rZ   r  zCmfDocument.create_event  s8    #uww#
 
"&)
/5
 
 	
r\   )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|}t          j                            |            |S )NrT  )r   include_deletedT)descr_documentr  r  )r   r  r  )r   rK   r  r  r  r  r   ro  r  r  rb   r2  CmfComponentr   r  rn   r   r   re   r   r7  obj_after_delete_hook)r~   r  r{   r   r  r  rz  r  	componentr  r9  r<  r   s               rZ   r2  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(((eggndP5EPPP44T:::
r\   c                      t          t          |           j        |i | | j        j        sd S | j        r	d| _        d S d S r>  )r   r   _process_public	is_publicr   r   )r~   r{   r   r   s      rZ   r  zCmfDocument._process_public  sY    0k4  0$A&AAA~( 	F> 	.)-D&&&	. 	.r\   c                 h    t           j                            dd| j        gg dg dgdgdg          S )Nr  r   )r  r   T)approved_versionr  Nz-approved_versionrW   r  )rK   r   sgetrb   r  s      rZ   get_approved_versionz CmfDocument.get_approved_version	  sS    (--{D$'6R6N6N6N6V6V6V6X 9L7L6<X	 . ? ? 	?r\   c                 l    t          t          j                            dd| j        g                    S )Nr  r   r   )boolrK   r   countrb   r   s    rZ   has_tree_nodes_hookzCmfDocument.has_tree_nodes_hook  s.    F&,,5EtTW4U,VVWWWr\   c                    t                               dt           j                  }|                    | j        j                  s	g | _        dS ddlm}  || j        j        pdd          }t                      }|
                    ddd	d
gi          D ]C}t                              |d         dddg          }|r|                    |j                   D|| _        dS )uZ   
        Обновляет связанные ссылки у документа
        data-mention-typeflagsNr   r   r    rH   rd  taskdocumentrn  data-object-idTz--rb   simpler   )r   compileIsearchrW   r}   local_linksrM   r   setrP   r  get_obj_by_idaddrb   )r~   re1r   	soup_textr7  itemr  s          rZ   r3  zCmfDocument._handle_local_links  s     jj-RTj::zz$)/** 	!DF%%%%%%!M$)/"7RGG	ee&&s3FQ[H\2]&^^ 	( 	(D''-=(>tUY[_T`'aaC ('''&r\   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   
        Парсит документ, вытаскивает упомнинания на таски
        r*  r+  Nr   r-  r    rH   rd  r.  r0  r1  ra   )r   r4  r5  r6  rW   r}   mention_tasksrM   r   r8  rP   r:  rK   CmfTaskre   append)	r~   r{   r   r;  r   bs_textnew_taskr=  tsks	            rZ   r4  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 /"))#...	/ 	/r\   c                    | j         j        sd S t                      }t                      }| j         j        r,t          |                     | j         j                            }| j         j        r,t          |                     | j         j                            }||z
  D ]-}|j        dv r"t          j        	                    | d|           .d S )N)CmfPersonGroupr   CmfRolemention)r  )
rm   r   r8  r   
parse_textr   
class_namerK   r5  r6  )r~   objs_oldobjs_newr  s       rZ   handle_mention_personsz"CmfDocument.handle_mention_persons@  s    ) 	F5555? 	A4??4?+>??@@H? 	A4??4?+>??@@Hh& 	L 	LC~!KKK((ys(KKK	L 	Lr\   c                 ~    | j         d	i |}|                     g d           d|v r<t                              |d                   dk    r| j        st          dd           | j        r|| j        }||_        |j        |_        |j        |_        |j	        sNd|_	        t          
                                5  |                    d           ddd           n# 1 swxY w Y   nd|v r|d         |_        | j        |_        | j        |_        | j        |_        |                    d           |j        j        S )
u   Создание документа из шаблона
        :param self: Шаблон документа
        :param params: Параметры для шаблона
        :return: Идентификатор нового документа
        )tmplt_target_treeztmplt_target_tree.parentz%tmplt_target_tree.tree_node_is_branchr   r   ur   Из этого шаблона можно создать документ только внутри проектаTr  r  Nr   )r   r   r  get_class_name_by_idrO  r(  r   r   r9  tree_node_is_branchdisable_aclrn   r  r  r   rb   r}   )r~   r  r  rO  s       rZ   r+   z$CmfDocument.create_doc_from_templateP  s    ,$+55f55sssttt v'">">vh?O"P"PT_"_"_hlh~"_  K  SW  X  X  X  X! 	. $ 6"3G.5GN/6GO$8 ;8<!5((** ; ;%**T*:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; #H-GN(,(B%(,(B%(,(B%t$$$zs   9CC #C c           	      
   dd l }dd l}ddlm} ddlm} |                     dg           	 |                                  n# t          $ r Y d S w xY w| j	        st          dd           t          | j                                      d          d	          d
}t          j                            | |          }|st                              | |          }dd l}	|	                                5 }
t&          j                            |
|          }|                    |d          5 }| j	        D ]]}|j        |k    r	 |                                 n# t          $ r Y 0w xY w|                    |j         ||j                             ^	 d d d            n# 1 swxY w Y   t5          |d          5 }|                    |dd           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        S )Nr   r   )basenamer  uP   Отсутствуют вложенные файлы для скачиванияTr  :r  z.zipr   rQ   w)moderc   F)backupmake_preview)zipfileshutilpathlibr   os.pathrT  r   _acl_check_readCmfPermissionErrorr  r(  r,  rb   r   rK   rd   re   tempfileTemporaryDirectoryospathr   ZipFilerQ   writerf   ri   r  rY  )r~   r{   r   r[  r\  r   rT  zip_filenamery  ra  tmp_dirzip_file_path_tmparcr=  rx   s                  rZ   r/   z#CmfDocument.download_all_attachmentv  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      rZ   r?   z*CmfDocument.public_download_all_attachment  sV    	  """"! 	 	 	44	+t+T<V<<<    
%%c                 x   |                      | j                   | j        j        p| j        j        p| j        j        }t          j                            |pd          |d<   d|vr'd	                    d | j
        D                       |d<   | j        |d<   | j        |d<    t                      j        di |S )	Nr    rW   obj_key_phrases
c                 :    g | ]}t          |j        pd           S )r    )r,  rQ   )rC  ts     rZ   rl  z1CmfDocument.full_search_index.<locals>.<listcomp>  s&    2_2_2_3qv|3D3D2_2_2_r\   obj_user_portal_topobj_client_portal_topr   )r   full_search_preload_fieldsrF  r}   rW   rm   rK   rN  
strip_htmlr   rI  rK  rL  r   full_search_index)r~   r   rW   r   s      rZ   rv  zCmfDocument.full_search_index  s    8999%QQDO<Q-88DDvF**(,		2_2_dN^2_2_2_(`(`F$%(,(G$%*.*K&'(uww(226222r\   rW   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]rJ   Fr0  r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z.CmfDocument._convert_h_tag.<locals>.<listcomp>      ;;;1A;;;r\   )
r   r6  
IGNORECASEr   rP   r4  rR   r   rh  rs  )r   rW   rX   h_tags       rZ   _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;;	(:;;;<<<r\   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_).*?["\'][^>]*>rx  c                      i | ]}|d          |S ra   r   )rC  elements     rZ   
<dictcomp>z.CmfDocument._convert_title.<locals>.<dictcomp>  s    LLL'wt}gLLLr\   Tra   ^z.+)rg  rg  r  Ncmf_convertedrb   r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z.CmfDocument._convert_title.<locals>.<listcomp>  rz  r\   )r   r6  r   rP   r4  
startswithre   rt  r   rh  rs  )rW   old_idnew_idrX   idslinkid_nameid_bodys           rZ   _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;;	(:;;;<<<r\   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+  rH   rc  r0  r  zmce-tocFcontenteditableTh2u   Оглавлениеh4rb   ztitlelist-.*mcetoc_)r   r4  r5  r6  r   findAllrn  re   rA  new_tagr,  )rW   r;  rX   rY   	title_tagtag_hs         rZ   _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r\   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[^"\']*["\'][^>]*>rx  rc  r
  r0  prezlanguage-markupr    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z-CmfDocument._convert_code.<locals>.<listcomp>  rz  r\   )r   r6  r   rP   r  rr  extendrN   replace_withr   rh  rs  )rW   rX   rY   r  tag_contents        rZ   _convert_codezCmfDocument._convert_code  s     yy]_cdd 	KT6** =='8=99 	" 	"C,,uW6G,H,IIC ((5//K )

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

3<((( S!!!! ww;;	(:;;;<<<r\   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rc  contentEditabler0  r   rd  r   ak-editor-panel__contenttruezak-editor-panel eva_convertedrc  zdata-panel-typer  )r  rK   r   
ICONS_DATArA  r  r  )	r  rY   doc_souprN   panel_tag_iconsvg_tagsvg_path_tagpanel_tag_content	panel_tags	            rZ   _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'''''r\   zconfluence-information-macrorx  rc  z^confluence-information-macro$r0  eva_convertedz!confluence-information-macro-noter#   z(confluence-information-macro-informationr%   z confluence-information-macro-tipr&   z$confluence-information-macro-warningr"   uO   Неизвестный тег для преобразования панели z.+bodyzc<div[^>]*\bclass=["\'][^"\']*(?!\s*eva_converted)[^"\']*\bpanel\b(?!\s*[^"\']*)([^"\']*["\'][^>]*>)r  panelpanelContentro  r$   r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z5CmfDocument._convert_macro_panels.<locals>.<listcomp>[  s    ???qCFF???r\   )r,  r   r6  r5  r   rP   r4  rn  re   CmfErrorrr  rN   r   rh  rs  )rW   r  rX   rY   r  contentrN   s          rZ   _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,>???@@@Kr\   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-boxrH   r  r0  r%   r$   r&   r!   r"   r#   )z
light-cyanz
light-bluezlight-purplezlight-greenzlight-magentaz	light-redzlight-yellowzlight-orangez
data-color)r%   r$   defaultr&   r#   r"   z	data-iconr  r  r  r   rd  r   r  r  zak-editor-panelr  )r   r4  r5  r6  r   rP   re   r  rK   r   r  rA  r  rN   r  r,  )rW   r;  re2rX   rY   panel_type_mapping
data_colorr  panel_icon_mapping	data_icon
panel_iconr  r  r  r  r  s                   rZ   _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r\   c                    t                               dt           j                  }|                    |           s| S t	          | d          }|                    ddi          D ]}|                    dddd	d
          }|                    dddi          }|                    dddi          }|                    d           |                    dddd          }|                    d          }|                    ddi          }	|	                    |	j
                   |                    |           |                    |           |                    |           |                    |           |                    ddi          }
|                    dddd          }|	                    |
j
                   |                    |           |                    |           t          |          S )Nzexpand-containerr+  rH   rc  r0  r  expandr  z spoiler mceNonEditable collapsed)data-macrosr  rc  zspoiler-togglezspoiler-icon    r  zspoiler-header mceEditable)r  rc  pzexpand-control-textzexpand-contentzspoiler-text mceEditable)r   r4  r5  r6  r   rP   r  rA  rr  r  rN   r  r,  )rW   r;  rX   rY   spoilerspoiler_togglespoiler_iconspoiler_headerspoiler_header_ptag_control_texttag_control_contentspoiler_texts               rZ   _convert_expanderzCmfDocument._convert_expander  s2   jj,BDj99zz$ 	KT=11==1C'D=EE '	& '	&Cll#+'.?  #  G "\\%AQ7R\SSN<<g~5N<OOL'''!\\'-9  *  N  $||C00"xxw8M.NxOO##$4$=>>>!!"2333!!,///!!.111NN>***"%((';K1L("M"M<<'-7  (  L  3 <===NN<(((W%%%%4yyr\   r  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+  rs  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, parentr2  rx  r0  F50r    none)isShowChildrenparentId
documentIdchildrenAmountlevelincludeViewTypeisOrderByDeskzoriginal-data-macro-parametersc              3   @   K   | ]}|                     d           V  dS )r  N)r   )rC  params     rZ   rE  z2CmfDocument._convert_childpages.<locals>.<genexpr>  s.      &`&`Eu{{3'7'7&`&`&`&`&`&`r\   |allr  1r  pagerV  )rQ   r  firstr  r"  style
headerTypeexcerptTyper  )r  r3  zrich contentr  sortrQ   r  cmf_modified_at)titlecreationmodifiedsortTypereverser  ensure_ascii)ro   doc_namer  original_paramsro  rH   c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z3CmfDocument._convert_childpages.<locals>.<listcomp>?  rz  r\   )r   r4  r5  r6  rR   r  r9  r,  rQ   r   rP   re   r  r   rK   r   r  r   rb   formatjsondumpsrt  r  
currentTagr   rh  rs  )r   rW   r  r;  r  TMPLr  r  rX   rY   r  r  parent_pageview_type_mapsort_type_mapnew_soups                   rZ   _convert_childpageszCmfDocument._convert_childpages  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;;	(:;;;<<<r\   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+  rH   c                 N    g | ]"}d |j         d         vd|j         d         v |#S )zfixed-widthrc  singler0  )rC  r  s     rZ   rl  z0CmfDocument._convert_layouts.<locals>.<listcomp>L  sH     c c c 	'(:::xsyY`Oa?a?a ?a?a?ar\   rc  r0  50.0z66.6633.33)r   r   r   )25.0r  r  )	two-equalztwo-right-sidebarztwo-left-sidebarthree-equalzthree-with-sidebarszdata-layoutro  r  r  r  zmceNonEditable selected)r  zdata-layout-sectionrc  r  r   r   r     r  %zflex-basis: )zdata-column-widthzdata-layout-columnr  )zdata-layout-contentr  )r   r4  r5  r6  r   rP   re   rn  r   rN   rA  r  r   r  	enumerater,  )rW   r;  rX   rG  rY   layout_typecolrN   ctag_layout_sectiontag_divr   r   tag_layout_coltag_layout_contents                  rZ   _convert_layoutszCmfDocument._convert_layoutsA  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r\   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+  rH   thtdTr0  zdata-highlight-colorzbackground-color: ; r  r    )r   r4  r5  r6  r   rP   re   r,  )rW   	color_mapr;  	text_souprY   data_highlight_colourr   s          rZ   _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~~r\   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 ]}d'}|                    d(          }|                    d)          }|r|                    |          }nq|ro	 |                    d*          }d+ |D             }	d,                    |	          }n7# t          $ r*}
t                              d-| d.|
            Y d'}
~
nd'}
~
ww xY w|r|                    |           t          |          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+  rH   r_  class_Nzdata-emoticon-namezdata-emoji-idr   c                 L    g | ]!}|t          t          |d                     "S )   )chrint)rC  parts     rZ   rl  z.CmfDocument._convert_emoji.<locals>.<listcomp>  s-    "P"P"P$4"P3s4}}#5#5"P"P"Pr\   r    zDEV: Error emoji 'z': )r   r4  r5  r6  r   rP   re   r   r   r   r   r   r  r,  )rW   	emoji_mapr;  r  rY   emojiemoticon_nameemoji_idpartsemoji_charsexcs              rZ   _convert_emojizCmfDocument._convert_emoji  sV   
]
m
 ]
 M	

 
 =
 =
 M
 ]
 .
 M
 ]
 
 
 
  =!
" #
$ (&'
 
 
	, jjBDj11zz$ 	K!$66	%%eJ%?? 	( 	(CEGG$899Mww//H E!m44 EE$NN3//E"P"P%"P"P"PKGGK00EE! E E EGGCCCcCCDDDDDDDDE  (  '''9~~s   (6D
E) EE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  rH   r0  )	r   r4  r5  r6  r   rP   r  r  r,  )rW   r  r;  r  r  rY   r  s          rZ   _convert_macro_attachmentsz&CmfDocument._convert_macro_attachments  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~~r\   	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+  pagetreerH   r0  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>
        rQ   r  r  orderno)naturalr  r  positionT)import_raw_jsonzparent.import_raw_jsonzparent.logic_typer2  Nr   zproject.agile:defaultr   r   )rQ   r   u   ДокументыrC  r  rb   homepage
root_pagesFz@homer  )
rootLocalerootexpandCollapseAll
startDepthr  r  	searchBox
rootPageIdr}   z@selfrG  rF  ext_idLIKEz%::zparent.descr_documentz%"homepage":{"id":"z"%r   rI  pagetreesearchra   rJ  plugin_pagetree_expandcollapser*  rH  treeRequestIdz&amp;&r  r  ro  r    )pagetree_paramsr  r  root_page_original)&urllib.parser=  r>  r   r4  r5  r6  r   rP   r,  r  r9  rC  rJ  r   r  r
  rK   r   r#  rb   re   rr  rn  r   r  r}   rQ   rt  queryr  loadslowerr  r  r  r  r  )rW   r;  r=  r>  r;  r  rX   pagetree_tagsTAG_TMPL	sort_dictr  homepage_idselfpage_idroot_parentpagetree_tagr  rR  root_page_tagroot_page_idpagetree_rootstart_depth_tagtree_request_id_tagtree_request_idparsed_requestrequest_paramsmacros_soups                             rZ   _convert_pagetreezCmfDocument._convert_pagetree  sZ   
 	43333333jj+24j88jjBDj11

4   	SZZ%5%5 	KT=11->
,KLL 	t99D ()!	
 
	 ##   $ 
 
 " 	K>]**z$)-DDD$055&cjm<<<< .. 6   "j" 8!1$7* O.22:>> O"-"=j"I$"OKv//&1 044\BB O"-"=l"KA"NK  	&"&&z22 C!1*=dC$((66 C!1,?B%K) S	> S	>L!M%%*! " O )--V\4J-KKM?LV=.227;;;RVL '%;..$(MM![00.5OF+4;OL1$(MM$*$6$:$: (&2F2F2FG 78 %; % %M ) (.(9(=(=$5v?fVb?f?f?f#g )> ) ) % -)4EE -1E1T T T !)4EE - 0CF : : 7>OF3<COL996C6F6LOF3<I<N<TOL9(,*1'07- $"."3"36<:P"3"Q"QQ S0?0E0I0I'0R0R-  $4 55 4/3,  (H II <7; 34&2&7&7v>W&7&X&XX" 	b"5";"?"?"H"H!)/*A*A'3*O*O!P!P!).*>!?!?!%%f-- b.7mmN6<RST<UW`.a.aOF+!%%i00 b15N9<UVW<X<^<^<`<`1a1aOI.'  r**11$**_B]B]1^^ K  E39008D 45%%k&<====4yyr\   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-successrx  spanr0  rc  c                 X    |                      d          o|                      d           S )Nzaui-lozenge-zaui-lozenge-subtle)r  )r   s    rZ   <lambda>z1CmfDocument._convert_status_tag.<locals>.<lambda>  s*    1<<+G+G+rPQP\P\]qPrPrLr r\   ro  zdata-macro-idF_cloudneutral)rW   r   rH   r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z3CmfDocument._convert_status_tag.<locals>.<listcomp>  rz  r\   )r   r4  r5  r6  r   rP   nextr   re   r  rW   r  r  r   rh  rs  )
rW   TMPr;  r  status_color_mappingrX   rY   classesr+  ss
             rZ   _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;;	(:;;;<<<r\   ru  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-replacerx  rp  r  r0  r  rc  rb   zSRC=\[([^]]+)\]r   z@startuml(.*?)@enduml
@startuml
r  
@endumlz{})r  umlr   rH   uS   Не удалось преобразовать Plantuml, не найден код: r  u9   Не удалось преобразовать Plantuml: r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z5CmfDocument._convert_plantuml_tag.<locals>.<listcomp>Q  rz  r\   )r   r4  r5  r6  r   r   rP   rr  rP  r   rK   r   convert_encuml2umlDOTALLgroupr   r  r  r  	Exceptionr   rh  rs  )rW   ru  r;  rw  r;  r  rX   rY   svg_divsvg_keysvg_textr  encumlpatternresultr  s                   rZ   _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+  rx  ulr*  ztox-checklistrc  rJ   r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z2CmfDocument._convert_task_list.<locals>.<listcomp>d      @@@1A@@@r\   )
r   r4  r5  r6  r   rP   rR   r   rh  rs  )r   rW   r  r  rY   s        rZ   _convert_task_listzCmfDocument._convert_task_listS  s    
  	K**0*==~~d## 	K!$//	%%d3E%FF 	/ 	/C*CL __..C	NNww@@	(?@@@AAAr\   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+  rH   liTr0  rJ   rc  checkedztox-checklist--checked)
r   r4  r5  r6  r   rP   re   rR   rA  r,  )r   rW   r;  r  rY   	tag_classs         rZ   _convert_checkboxzCmfDocument._convert_checkboxf  s    
  	Kjj/rtj<<zz$ 	K!$66	%%d3H$2O%PP 		> 		>C779%% 3!$!2!2I,,IY&&,I==G##$<===9~~r\   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-tabsrH   r  r0  zui-tabr   r   z#254dcbDefaultFr   
horizontalleftBasic)
vertabsPageTitler   colorPalettes	hasBorderfixed
primaryTab	directiontextAlignmentheaderStyler  "z&quot;r    c                 ,    g | ]}t          |          S r   rj  rC  r	  s     rZ   rl  z-CmfDocument._convert_tabs.<locals>.<listcomp>  s    (J(J(JAQ(J(J(Jr\   )r  tab_namer  rwui_tabs_menur*  c                 ,    t          | t                    S r   )rO   r   rW   s    rZ   rr  z+CmfDocument._convert_tabs.<locals>.<lambda>  s    jw6O6O r\   r  )rR   r   r4  r5  r6  r   rP   r  re   r  r  r  rt  r   rN   r  r  	decomposeextractunwrapr,  )r   rW   r  r;  r  r  tabs_tagr   tab_tagr  r  r  ul_tagcomments                 rZ   _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~~r\   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>
        rx  r   r   Tr0  z%Y-%m-%dr   ru)locale)	timestampdate_strrH   r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z-CmfDocument._convert_date.<locals>.<listcomp>	  r  r\   )babel.datesr  r   r4  r5  r6  rR   r   rP   re   r   strptimer/  r  r  r  r  r   rh  rs  )r   rW   r  r  r  r  rY   datetime_strdatetime_objr  r  r  s               rZ   _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Ar\   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+  rH   r  r*  ztableView-content-wrapzcmf-scrollbarrc  
wikitablesr  rJ   table)r   r4  r5  r6  r   rP   rR   r,  )r   rW   r;  r  table_wrap_tag	table_tags         rZ   _convert_table_wrapzCmfDocument._convert_table_wrap	  s     	Kjjbdj33zz$ 	K!$66	'00|0LL 	9 	9N'?&QN7#,8N=)(+(9(9N9%+44W== 9 9	'*'8'8	)$$9 9~~r\   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   r  )r  r  )filesr     u4   Не удалось конвертировать в z: r    )requestspostconfigCONVERTER_PLANTUML_URLr   r(  r  )r  r  r  r  r<  s        rZ   convert_plantumlzCmfDocument.convert_plantuml	  sp    mmF9&$ajv|V}V}m~~?c!!gYggZ]Zegghhh2;r\   r  c                 x    |                      |                                d|                                          S )Npuml)r  encodedecode)r   r  r  s      rZ   r  zCmfDocument.convert_encuml2uml!	  s.    ##FMMOOVVDDKKMMMr\   r  c                 d   |                     d          }d |D             }d                    |          }t                              d|          sd| }t                              d|          s| d}|                     |                                d|                                          S )Nro  c                 6    g | ]}|                                 S r   )rstrip)rC  lines     rZ   rl  z/CmfDocument.convert_uml2svg.<locals>.<listcomp>)	  s     9994999r\   z
^@[a-z]+\nr~  z@[a-z]+$r  r   )r   r   r   r6  r  r  r  )r   r  r  linescleaned_lines	clean_umls         rZ   r*   zCmfDocument.convert_uml2svg%	  s    		$995999IIm,,	yy	22 	21i11Iyyi00 	0$///I##I$4$4$6$6vFFMMOOOr\   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   rL   r  r{  r}  r  r  r  r  r  r  r  r  rh  r  r8  r:  r  r  r  rt  )r   rW   r;  ru  r~  s        rZ   r  zCmfDocument.confluence_convert2	  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r\   c                     | j         j        r| j        rd S |                     | j         j        | j        j                  | _         |                                  d S r   )rm   r   r   r  r}   rb   r.  r   s    rZ   r   zCmfDocument._process_text_draftq	  sV    ) 	T-> 	F11$/2GWW""$$$$$r\   c                     |                      ddg           d}t          | j        j        t          j                  sd}| d| j         S )Nr
  r   r9  deskz
/Document/)r   rO   r   r}   rK   r   r
  )r~   
base_places     rZ   rg  zCmfDocument.hrefw	  sU    &(+,,,
$++V->?? 	 J33	333r\   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
        rk   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_idr  cmf_owner_idrb   %perm_security_level_allowed_ids_cacher}   r   rJ  rK   r  check_accessr   anonymous_usersharelink_anonymous_usertest_guest_userr  
base_errorr  r   )r~   r  obj_parent_idr  self_idr  rJ  es           rZ   _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    rZ   r9   zCmfDocument.public_lock	  s"    yy{{r\   c                 R    |                                   |                                 S r   )r  unlockr   s    rZ   r:   zCmfDocument.public_unlock	  s"    {{}}r\   c                 R    |                                   |                                 S r   )r  	lock_pingr   s    rZ   r;   zCmfDocument.public_lock_ping	  s$    ~~r\   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 )Nrx  rJ   r0  ztox-checklist--checked checkedrc  r    c                 ,    g | ]}t          |          S r   rj  rk  s     rZ   rl  z5CmfDocument._text_update_checkbox.<locals>.<listcomp>	  s    DDDqCFFDDDr\   )	rL   r   rr  rn  re   r   rh  rs  rt  )	r~   rW   r   r  ru  r<  text_elementnew_textr~  s	            rZ   _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r\   c                 d   |                      g d           | j        rt          dd           | j        rt          dd           t          j                            | j        d          }|r;| j        j	        | j        
                    dd	          k    rt          d
d           |                     | j        j        ||          }|                     | j        j        ||          }|s|st          d| d           n!|r|st                              d|            d}|r	|| _        d}d}|r	|| _        d}|                     d           |rd| j        _        |rd| j        _        t          j                            |            |rd| j        _        |rd| j        _        d S d S )N)rW   rm   r   r   zcur_published_version.statusr  r   u~   Нельзя в документе, у которого стоит опция "Выпуск только владельцем"Tr  u   Нельзя в шаблоне)r   r  r   r  r   u(   Нельзя в утвержденномuD   DEV: в документе не найден элемент data-id=Fr  )r   r   r(  r  rK   	CmfStatusr'  r   r   r   r   r  rW   r}   rm   r   r   rn   r   r7  r8  )r~   r   r  workflow_need_approverW   rm   text_is_changedtext_draft_is_changeds           rZ   r7   zCmfDocument.update_checkbox	  sH     ]  ]  ]  	^  	^  	^% 	d  W  _c  d  d  d  d 	D6dCCCC & 0 6 6\` 6 a a  	NT%?%F$-JjJjw  NXJj  KY  KY  &Y  &Y@MMMM))$)/7NSS//0EwP^__
 	fJ 	ff]dffnrsssss 	fZ 	fGGd[bddeee 	#DI"O % 	)(DO$(!		D	!!!  	(#'DI   	.)-DO&224888 	)#(DI   	/).DO&&&	/ 	/r\   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   r  r   )r   r  Tr   r  c                     g | ]	}|j         
S r   ra   r  s     rZ   rl  z3CmfDocument.clean_after_encrypt.<locals>.<listcomp>$
  s    WoWoWoabXYX\WoWoWor\   )rK   r   r   r2  
CmfCommentrb   rd   )	r~   r{   r   history_listr  commentsr  r  ry  s	            rZ   r.   zCmfDocument.clean_after_encrypt
  s   055T5BB# 	 	GNN $));dg2NPlPlPl1m)nn 	 	GNN *//dTWLpWoWofnWoWoWoLp8q  tP  tP  tP  8Q/  R  R% 	  	 J	  	 r\   c                    |                      g d           t                              || j        | j        |||           }|                                 | j        D ]\}t                              |j	                  t          j
        u r|                    |||           E|                    |||           ]| j        D ]8}t                              || j        |||                                           9d S )N)
tree_nodes
docs_linksr@  )responsiblerQ   r@  r   r   r/  )r  rQ   r   r   r/  )r   rK   CmfCourseDocumentResultrQ   r@  rn   r  r  r  rb   r   _lms_create_progressr  )r~   r  r   course_progresscourse_doc_resultr   rw   s          rZ   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	 	r\   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   re   r  r`  update_text_inline_comments)r   r{   r   rw   s       rZ   r=   z.CmfDocument.public_update_text_inline_commentsH
  s    $D1111 $$T!W--	  """"! 	 	 	44	 ..vi7H.IIIs   A 
AAc                     	 |                                   n# t          $ r Y d S w xY wt                              | j                  }|r|                    d|             | j        |i |S )NzPPP-COM-ADDr  )r_  r`  r%  r&  r  r'  r(   )r~   r{   r   r9  s       rZ   r>   z%CmfDocument.public_add_inline_commentT
  s    	  """"! 	 	 	44	 ''88 	G--m-FFF&t&7777rl  c                 x    	 |                                   n# t          $ r Y d S w xY w|                                 S r   )r_  r`  export_to_pdfr   s    rZ   rC   z CmfDocument.public_export_to_pdf`
  sR    	  """"! 	 	 	44	 !!###rl  c                 x    	 |                                   n# t          $ r Y d S w xY w|                                 S r   )r_  r`  export_to_docxr   s    rZ   rD   z!CmfDocument.public_export_to_docxh
  sR    	  """"! 	 	 	44	 ""$$$rl  c                    | j         st          j        | _         | j        s(|                                  |                                  | j                            d          }| j        s_t          	                    | j
        | |d| j        | j         | j        | j        | j        	  	        }|                    d           || _        n| j
        | j        _        || j        _        d| j        _        | j        | j        _        | j         | j        _         | j        | j        _        | j        | j        _        | j                            d           |                     | j        j        | j        j                  | _        | j        j        r | j        | _
        |                                   t1                      j        |i | |                     d           d S )Nr   r   T)	rW   r   r   r   r   
cmf_authorcmf_modified_byr  r  r!  )r#  r   current_userr   r  r  r   r   rK   r   rm   r   r$  r  r  rn   rW   r   r   r  r}   rb   r   r   r   _save_importr-   )r~   r{   r   r   r   r   s        rZ   r&  zCmfDocument._save_importp
  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)))))r\   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)rW   rM  
%img%src=%z-cmf_modified_atrW   r  zimg[^>]*src=[\'"]([^\'"]*)z
data:imageCmf)rm   rM  r(  rm   )	r8  r   r   r   rW   r}   r  r:  rm   )r   r{   kwragsdocs_with_problemsres_textrw   matchres_text_drafts           rZ   r3   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&'''r\   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_typerW   r   r   r   r  )rK   r   re   )r   r  r{   r   r   r  s         rZ   r0   zCmfDocument.get_in_approve
  sR      
 +//tS)+G+G+GH 0 
 

 r\   )
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  r   )timeoutr  )rK   r  r  r  r  requests_sessionre   r   base64	b64encoder  r  )r   r2  r{   r   r  responser6  r<  s           rZ   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||r\   rF  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  utilr  rR  rF  rn   )r~   rF  r:  r<  s       rZ   r5   zCmfDocument.save_render
  s     	>=====!!###t+++FX))++ 	& 	&00==D#+D III%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	s   .B

BBrb   c                      t          d          )Nu   Устарело)DeprecationWarning)r   rb   s     rZ   check_dirtyzCmfDocument.check_dirty
  s     !3444r\   c                    t           j                            t          j        |          }t
          j                            |g d          }t
          j        j	        j
                                        }|j                            |          D ]J}d|j        _        |                                 |j                            |           t%                       Kd S )N)r   rm   r   r   r  rW   r   r\  T)rc  rd  r   r  
DIRTY_PATHrK   r   re   r  r  r  r  io
io_iterdirrm   r   rn   	io_unlink
cmf_commit)r   r  
dirty_pathrw   r  
dirty_files         rZ   rB   z CmfDocument.process_dirty_attach
  s    W\\&"3V<<
 $$ 8B 8B 8B$ C C ".5577(--j99 	 	J(,CN%HHJJJHz***LLLL	 	r\   c                 $   |                      dg           g }|dk    rg d}|dk    rg d}|s| j        j        }t          | |t          j        d|          }t          j                            | |dd	g
          }|rC|j	        dk    r8t          j        j
        di |ddgi}	|	D ]}
|
j        rt          dd           |r||d<   t          j        j        di |}|sd |d<   t          j        j        di |}|r |j        |fd|i| d S d S )Nr   r  )approver_levelr  masteraccepted)rL  r  rM  r  )r  approve_groupapproverapprove_typeobj_versionfullr   )r  rR  rQ  r   closedr   
resolutionuJ   Нельзя менять решение после утвержденияTr  r   rP  rW   r   )r   r   r  r  r   r%  rK   r  re   r   r   rU  r(  _approve_one)r~   rO  rU  rW   r  r   master_filterr  full_approveexisting_approvesexisting_approveapproves               rZ   r)   zCmfDocument.approve_one
  s   <=>>>##===M##>>>M 	@3?K'^!#
 
 
 (,,;]cmulv,ww 	xL/8;; & 1 6 W W W W W W W$5 x x #. xjrvwwww 	-,F8#'11&11 	6!%F:'+55f55G 	B G AA$A&AAAAA	B 	Br\   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  rn   r   s    rZ   _approve_approvedzCmfDocument._approve_approved"  sL    qrrr13TUVVVk0:		r\   c                     |                      ddg           | j        j        j        | _        |                                  d S )Nzstatus.trans_rejectedzstatus.trans_rejected.status_to)r   r   trans_rejectedr  rn   r   s    rZ   _approve_rejectedzCmfDocument._approve_rejected(  s=    13TUVVVk0:		r\   c                 `    |                      ddg           | j        j        j        | _        d S )Nzstatus.trans_updatedzstatus.trans_updated.status_to)r   r   r  r  r   s    rZ   r  zCmfDocument._approve_updated-  s0    02RSTTTk/9r\   c                     t                                          ||           |                     | j        j        ||          | _        d S r   )r   _replace_attachment_replace_attach_urlrm   r}   )r~   rs   
new_attachr   s      rZ   rd  zCmfDocument._replace_attachment1  s@    ##FJ777224?3H&R\]]r\   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_listra   r  r   )	keysre   r_  r`  r  rR  rK   r   mark_viewed)r   r   r  r<  s       rZ   r@   zCmfDocument.public_mark_viewed5  s<   
	--$]3 * *F''V',,C''))))* gg!1g22##%%%! 	 	 	44	   "" 	5 	5*44V444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s$   A<A? ?
BB)CCCc                    | j         s t                                                      S t                              | j                   }| j        r|                    d|            t                      }|                     d          D ]k}|j	        | 
                                vrN|j	                            d          s4|j	                            d          s|                    |j	                   ld|v r-|                    d| d           |                    d           d	|v r,|                    d
|            |                    d	           d|v sd|v sd|v rb|                    d|            d|v r|                    d           d|v r|                    d           d|v r|                    d           |r|                    d|            d S d S )NzPPP-DOC-CREATEr  T)r   cache__idr   )r  use_new_projectr   zPPP-DOC-TREEMOVEperm_policy_anonymousperm_policy_guestperm_policy_sharelinkzPPP-DOC-SHAREzPPP-DOC-EDIT)r  r   check_edit_permr%  r&  r   r'  r8  valuesrJ  project_perm_allow_fieldsr  endswithr:  remove)r~   r9  changed_fields_to_checkfieldr   s       rZ   rr  zCmfDocument.check_edit_permF  s;    	-77**,,,''88; 	J--.>D-III"%%%[[D[11 	> 	>E$D,J,J,L,LLL!,77AA M!,55e<< M (++E,<===...--.>DZ^-___#**8444 333--.@d-KKK#**=999"&===&*AAA*.EEE--o4-HHH&*AAA'../FGGG"&==='../BCCC&*AAA'../FGGG # 	H--n$-GGGGG	H 	Hr\   c                     |                      g d           t                              | j                  }|r|                    d|            d S t                                                       d S )N)rW   r  r   listsr  r  zPPP-DOC-DELETEr  )r   r%  r&  r  r'  r   check_delete_perm)r~   r9  r   s     rZ   r{  zCmfDocument.check_delete_permr  s     ? ? ? 	@ 	@ 	@''88 	(--.>D-IIIIIGG%%'''''r\   	recursivec                     t                      j        |i |}|rCt          j                            | ddg          D ]}|j        r|                    |            |S )NTr   )r   r  r   r|  )r   restorerK   r   r   r   )r~   r}  r{   r   r<  childr   s         rZ   r  zCmfDocument.restore{  sv    eggot.v.. 	7+00TSWan`o0pp 7 7$ 7MMIM666
r\   c                     t                               | j                  }|r|                    d|             t	                      j        |i | d S NzPPP-DOC-ARCHIVEr  )r%  r&  r  r'  r   archiver~   r{   r   r9  r   s       rZ   r  zCmfDocument.archive  s\    ''88 	K--.?T-JJJ((((((r\   c                     t                               | j                  }|r|                    d|             t	                      j        |i | d S r  )r%  r&  r  r'  r   archive_restorer  s       rZ   r  zCmfDocument.archive_restore  s]    ''88 	K--.?T-JJJ000000r\   c           
         |                      g d           | j        st          dd           dS |                                 }|                                 D ]}|j        | j        j        k    rt          j        	                    dd|j        gdd| j        gg dg d	g
          }|spt          j
        	                    dd          }t                              ||| dd|d          }|j                                         |                                 t                              ||                                           dS )u   
        У всех участников родителя документа запрашиваем необходимость ознакомится
        )r   r   rW   u-   У документа нет родителяTNresponsible_idr   r  )r  r   task.doc_need_watch:default)r  r  r   r   r  )r
  r  	9_disableuE   Необходимо ознакомиться с документом)r  r  r   rM  rQ   rW   r  )r   rW   )r   r   r(  _get_history_diffall_relation_personsrb   r   rK   r@  re   CmfLogicType
alarm_dateset_nowrn   r  )r~   rr   rW   r  r.  r  s         rZ   rE   zCmfDocument.request_watch  s    	888999{ 	EtLLLF%%''//11 	A 	AFyDN--->%%/?vy.Q/:D$'.J.c.c.c.S.S.S.U% V VD  	A#044:Whl4mm
~~&Z-17B+ry}  IM & N N '')))		!!D!99>>@@@@!	A 	Ar\   )Fr   )NN)__name__
__module____qualname__r   r  r
   r   api_methodsr	   staticmethodr[   cmf_deferred_jobry   r2   r,  r   r   classmethodr   rR   r   r  r   r   r  r  r  r<   r-   r?  r0  r.  r4   r  r  r  r  r  r  r6   r  rn   r   r	  r  r  r  r  r  r  r2  r  r$  r(  r3  r4  rM  r+   r/   r?   rv  r}  r  r  r  r  r  r  r  r  r  r8  r:  rh  r{  r  r  r  r  r  r  r  bytesr  r  r*   r  r   propertyrg  r  r  r   FieldCmfBoolis_web_publicr9   r:   r;   r&  r  r7   r.   r  r=   r>   rC   rD   r&  r3   r0   r9  r5   rB  rB   r)   r^  ra  r  rd  r@   rr  r{  r  r  r  rE   __classcell__)r   s   @rZ   r   r      s       QJ $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

+,
 
 
!
KF 26 G G G \G& "Ukoppp  qp \   C C    \25H 5H 5H 5Hn A A [A   [B  1 1 1<
 
 
 
 
&4 4 4/ / / /b7 7 7= = =0 0 0 -1eTX V V V V Vp    A A A A AB8(s 8( 8( 8( 8(t 6:e )P )P )P )P )PV	; 	; 	;2 2 22!& !& !&F" " "  N N N# # #
5 5 5  %*ePT F F F F F F FP    ** * * * *( ( ( ( (	< 	< 	<	> 	> 	>P P P  
 
 
 
 
 .3       <. . . . .? ? ?X X X' ' '(/ / /0L L L $  $  $ L( ( (T= = =
3 
3 
3 
3 
3 =# =# = = = [=   =S  =S  =  =  = \ =D 3 3    \. =C =C = = = \=< >C >C > > > \>@ E3 E3 E E E \EN - - - - - \-^ g=s g=s g=s g= g= g= [g=R Ms Ms M M M \M^ )c )c ) ) ) \)V 1S 1S 1 1 1 \1f & & & & & \&P { { { { { { \{z /= /= /= /= /= \/=b F=C F=d F=c F=c F= F= F= \F=P Bc Bc B B B [B$ S S    [2 V V V V V [Vp (B (B (B (B (B [(BT s s    [$ u  c    \ N NC NC N N N [N 
P# 
Ps 
Ps 
P 
P 
P [
P <c <c <c < < < [<|% % % 4 4 X4 : : X:x J$$
+	 %  M  
  
     
3     &-/s -/D -/ -/ -/ -/^        @ 	J 	J [	J
8 
8 
8$ $ $% % %'* '* '* '* '*R !( !( [!(F   [ 37     [ s S D     5S 5T 5 5 5 [5   [%B %B %B %BN    
: : :^ ^ ^ ^ ^ 5 5 [5 'H 'H 'H 'H 'HX( ( ( ( ( (-       ) ) ) ) )1 1 1 1 1A A A A A A Ar\   r   )r   r   r   r   rg   r]  r   rM   r   r   
cmf.fieldsr  cmf.includecmf.utilr   &common.models.cmf_plugin_convert_mixinr	   modules.project.fieldsr
   common.models.cmf_active_entityr   r   r   r\   rZ   <module>r     s                 & & & & & & & &                     H H H H H H / / / / / / ; ; ; ; ; ;V.A V.A V.A V.A V.A,*,A V.A V.A V.A V.A V.Ar\   