
    oi;                        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 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y)    NPath)BeautifulSoupComment)*)cmf_hashlib)CmfPluginConvertMixin)cmf_document)CmfActiveEntityc                   j    e Zd Zddddddddddd	d
ddddddddddddd	dddddddddddddd	ddddddddddddd d!dd"dddd#d$d%d	d&d'dd(ddd)dddd*d+d,d	d-d.dd/d0d1d0d2d3Zej
                  j                  ej                  z   g d4z   Zed5gfd6       Z	e e
d7d89      d:               Zd; Zed<ed=efd>       Zdd@ZedA        ZdB ZdC Z fdDZdE ZddGZdH ZdI ZdJ ZdFd?d8dKdLZ fdMZ fdNZd=efdOZdFd?dPdQZdR ZdS ZdT Z dU Z!dV Z"dW Z#dX Z$dY Z%d?d?dFdZ fd[
Z& fd\Z' fd]Z( fd^Z)d_ Z*d` Z+da Z,db Z- fdcZ.d?dd fde
Z/ fdfZ0dg Z1dh Z2di Z3dj Z4dk Z5dl Z6dm Z7dn Z8 fdoZ9e:dped=efdq       Z;edped=efdr       Z<edped=efds       Z=edped=efdt       Z>edped=efdu       Z?edped=efdv       Z@edped=efdw       ZAe:dpedxed=efdy       ZBedped=efdz       ZCedped=efd{       ZDedped=efd|       ZEedped=efd}       ZFedped~ed=efd       ZGedped=efd       ZHedpedeId~ed=efd       ZJe:dped=efd       ZKe:dped=efd       ZLe:dped=efd       ZMe:dped=efd       ZNe:dped=efd       ZOedePdedefd       ZQe:deded=efd       ZRe:deded=efd       ZSe:dped~ed=efd       ZTd ZUeVd        ZWeVd        ZXeYj                  j                  eYj                  j                  dd8d8      Z]d Z^d Z_d Z`dedeafdZbdedeafdZcd Zdd Zee:d        Zfd Zgd Zhd Zi fdZje:d        Zke:d        Zle:dFdd       Zmddeded=dFfdZne:ded=eafd       Zoe:d        ZpddZqd Zrd Zsd Zt fdZue:d        Zv fdZw fdZxd?d fd
Zy fdZz fdZ{d Z| xZ}S )CmfDocumentu
   Важно0pxz0 0 512 512preserve20)xyviewBox	xml:spacewidthheightzrgb(216, 64, 64)a  M256,512c141.385,0,256-114.615,256-256S397.385,0,256,0S0,114.615,0,256C0.153,397.322,114.678,511.847,256,512z    M234.667,128c0-11.782,9.551-21.333,21.333-21.333c11.782,0,21.333,9.551,21.333,21.333v170.667   c0,11.782-9.551,21.333-21.333,21.333c-11.782,0-21.333-9.551-21.333-21.333V128z M256,384c11.782,0,21.333,9.551,21.333,21.333   s-9.551,21.333-21.333,21.333c-11.782,0-21.333-9.551-21.333-21.333S244.218,384,256,384z)filldzpanel-alarmzrgb(255, 235, 230))tooltipsvgsvg_path	classNamecoloru   Ошибкаz0 0 208.891 208.891)r   r   r   r   r   r   zM0,170l65.555-65.555L0,38.891L38.891,0l65.555,65.555L170,0l38.891,38.891l-65.555,65.555L208.891,170L170,208.891  l-65.555-65.555l-65.555,65.555L0,170zzpanel-erroru   Предупреждениеz0 0 554.2 554.199)r   r   r   r   r   r   zrgb(255, 153, 32)a!  M538.5,386.199L356.5,70.8c-16.4-28.4-46.7-45.9-79.501-45.9c-32.8,0-63.1,17.5-79.5,45.9L12.3,391.6   c-16.4,28.4-16.4,63.4,0,91.8C28.7,511.8,59,529.3,91.8,529.3H462.2c0.101,0,0.2,0,0.2,0c50.7,0,91.8-41.101,91.8-91.8   C554.2,418.5,548.4,400.8,538.5,386.199z M316.3,416.899c0,21.7-16.7,38.3-39.2,38.3s-39.2-16.6-39.2-38.3V416   c0-21.601,16.7-38.301,39.2-38.301S316.3,394.3,316.3,416V416.899z M317.2,158.7L297.8,328.1c-1.3,12.2-9.4,19.8-20.7,19.8   s-19.4-7.7-20.7-19.8L237,158.6c-1.3-13.1,5.801-23,18-23H299.1C311.3,135.7,318.5,145.6,317.2,158.7zzpanel-warningz#FFFAE6u   Заметкаz	0 0 24 24zLayer 1)r   r   r   	data-namea  m19 3.022c0-.008 0-.014 0-.022v-2a1 1 0 0 0 -2 0v1.1a5 5 0 0 0 -1-.1h-1v-1a1 1 0 0 0 -2 0v1h-2v-1a1 1 0 0 0 -2 0v1h-1a5 5 0 0 0 -1 .1v-1.1a1 1 0 0 0 -2 0v2 .022a4.979 4.979 0 0 0 -2 3.978v12a5.006 5.006 0 0 0 5 5h8a5.006 5.006 0 0 0 5-5v-12a4.979 4.979 0 0 0 -2-3.978zm-7 13.978h-4a1 1 0 0 1 0-2h4a1 1 0 0 1 0 2zm4-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zm0-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zz#5243aa)r   r   z
panel-notezrgb(234, 230, 255)u   Информация)r   r   r   zrgb(1,82,204)zM12,24A12,12,0,1,0,0,12,12.013,12.013,0,0,0,12,24ZM12,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12,5Zm-1,5h1a2,2,0,0,1,2,2v6a1,1,0,0,1-2,0V12H11a1,1,0,0,1,0-2Zz
panel-infozrgb(222, 235, 255)u   Готовоz0 0 1000 1000)r   r   r   r   r   r   z#01875aa9  M500,990c270.6,0,490-219.4,490-490S770.6,10,500,10S10,229.4,10,500S229.4,990,500,990z M483.7,678c-0.4,0.4-0.7,0.8-1.1,1.2c-19.1,19.1-50.2,19.1-69.3,0L239.9,505.9c-19.1-19.1-19.1-50.1,0-69.3c19.1-19.1,50.2-19.1,69.3,0l138.7,138.7L695,328.1c19.1-19.1,50.2-19.1,69.3,0c19.1,19.1,19.1,50.2,0,69.3L483.7,678L483.7,678zzpanel-successzrgb(227, 252, 239)u   Без иконки zpanel-hidden)r   r   r   r   )alarmerrorwarningnoteinfosuccesshidden)add_inline_commentapprove_oneconvert_uml2svgcreate_doc_from_templatedelete_inline_comment
do_publishclean_after_encryptdownload_all_attachmentget_in_approve	html_diffimport_mswordpatch_20230407restore_versionsave_renderstart_approveupdate_checkbox
public_getpublic_lockpublic_unlockpublic_lock_pingpublic_do_publish"public_update_text_inline_commentspublic_add_inline_commentpublic_download_all_attachmentpublic_mark_viewedpublic_parent_ui_getprocess_dirty_attachpublic_export_to_pdfpublic_export_to_docxrequest_watchbrc                 *   t         j                  j                  |       \  }}t        |d      }|j	                  d      D ]2  }|j
                  |v rt         j                  j                         |d<   4 t         j                  j                  ||      S )u   
        Устанавливает data-id для html тегов при иморте
        исключение: <br> и <svg>
        html.parserTdata-id)modelsr   get_all_drawio_svgr   find_allnameget_data_idplace_all_drawio_svg)htmlexclude_tagssvg_tagstextsouptags         (./modules/project/models/cmf_document.pypatch_data_id_to_tagsz!CmfDocument.patch_data_id_to_tagsu   s      ++>>tD$T=1==& 	>Cxx<'#//;;=C	N	>
 !!66xFF    u1   Импорт документа в системуT)descriptionshow_bg_progressbarc                    t         j                  j                  |      }t        |j                        }t        j                  |j                        \  }}t         j                  j                  |       }t        |j                  d      5 }	|j                  |j                  |	j                         |j                  |            |_        ddd       |j                          |j                          y# 1 sw Y   *xY w)X   
        Импортирование Word документа в систему
        idrbN)rI   CmfAttachmentgetr   full_path_file	mimetypes
guess_typer   openrV   obj_to_htmlreadsuffix
text_draftsaver,   )
doc_id	attach_id_args_kwargsattachfile_objmimetypeencodingdocfs
             rU   import_msword_taskzCmfDocument.import_msword_task   s     %%))Y)7--.&11&2G2GH(  $$$/&''. 	! 66(//8DCN	 	
	 	s   A C77D c                     d| _         | j                          | j                          t        | j                  | j
                  j                  |g       | S )r[   uP   Обработка документа, пожалуйста, подождите.)args)rh   ri   r,   schedule_deferred_jobrt   r]   value)selfrn   rv   kwargss       rU   r1   zCmfDocument.import_msword   sA     m		d55TWW]]F<STrW   rL   returnc                    t         j                  d|       }d}t        |       t        |      z
  t        |      dz  z   }||kD  rd}t        j                  |       \  }}|r| j                  d      d   }t        j                  |dz        }| d|dt        |      z   z
   j                          d	t        j                  | d
       } |r|  d| } t        j                  d| d| d|         | S )u   Метод для генерации имени для хранения документа на диске

        Args:
            name (str): _description_

        Returns:
            str: _description_
        u   [А-Яа-я]      r   .N   -   u0   Слишком длинное название. z > u   . Меняем на )refindalllenrb   rc   splitmathfloorstripr   short_str_encgdebug)rL   
rus_simbolos_max_lengthfile_name_lengthextrp   rq   slice_lengths           rU   _get_filenamezCmfDocument._get_filename   s    ZZ6
t9s:6Z19LLm+C!*!5!5d!;Hhjjob)::mAo6L9LACL9:@@BC1[E^E^_cefEgDhiDqGGFGWFXX[\i[jj~  @D  E  F  GrW   Fc                 h     fdr j                   j                  n j                   j                  }|dn|} j                  s|dz   } j	                  |      }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| j                         S t        | t        j                        r-| j
                  j                         dk(  r| j                         S t        | t        j                        r)| j                  j                         rd| j                   S d| j                  v r| j                  j                          r| j                  j                  n| j                  j                  }|rLr| j                  j                  n| j                  j                  }j!                  |      } |       d| S d| j                  v r| j"                  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)
isinstancerI   
CmfProjectproject_dir	CmfFoldersys_typeloadhome_dir	CmfPerson
user_localloginfieldsr   oldnewrL   r   r   
ValueErrorr]   )nodetree_parent_rL   parent_r   parent_pathry   s       rU   r   z.CmfDocument._get_rfile_id.<locals>.parent_path   s   $ 1 12''))$ 0 01dmm6H6H6Jf6T}}&$ 0 01doo6J6J6L --+  %%'7:t//33@P@P@T@T,/499==TYY]]D--d3D),78$@@4;;&  "-0$++//dkkoo,/499==TYY]]D)'231TF;;#266OPTPWPWyX\]a]d]d\e f? @AEsDR RrW   r   z.htmlr   r   r   zdocument path for r   )
rL   r   r   is_externalr   r   location_pathr   r   r]   )ry   r   rL   filenamer   r   r   r   s   ``     @rU   _get_rfile_idzCmfDocument._get_rfile_id   s*   	R< !$tyy}}\rt'>D%%d+.1d&&**t7G7G7K7K!+./q
;;25**..4;M;M;Q;Q#_AhZ00$'T[[__!&)*!H:66sV44Ftwwi P; <=A3H 	HrW   c                     d} | dz   }t        j                  t        j                         dz  dz        }t        j                  |dz        }|dz  }||   ||   z   dj	                  t        j                  | d            z   }|S )	u   
        Перенесенный аналог функции из фронтенда.
        Генерирует случайную строку для атрибута "data-id" тега
        >ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789z+/  i   @   r      )k)r   r   timetime_nsjoinrandomchoices)
charactersalphabertotalijdata_ids         rU   rM   zCmfDocument.get_data_id   s~     V
$

DLLNT1g>?JJurz"BJ1++bggfnnZSU6V.WWrW   c                      y N ry   s    rU   _calc_parentzCmfDocument._calc_parent  s    
 	rW   c                    | j                   j                  s#| j                  r| j                  j                  sy | j                   j                  s| j                  s| j                   r2| j                   j                  dg       | j	                         | _        y | j                  r5t        | j                  j                  t        j                        rd | _        | j                  s| j                  | _        y y y )Nr   )
r   
is_changedr   load_fields_node_parentr   rx   rI   r   	cmf_ownerr   s    rU   __calc_parentzCmfDocument.__calc_parent  s       ++KK""&&dkk  ,,hZ8"//1 ;;:dkk.?.?ARAR#S"&DK{{"&..DK # /:rW   c                 *    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ry   	__class__s    rU   r   zCmfDocument.save_preload_fields:  s    w*, 0
 
 	
rW   c                    t         j                  j                  dd| j                  gg dg      }|D ]  }d|_        |j                           | j                  r| j                  j                         }n| j                  j                  d      }t         j                  | j                  | |d| j                  	      }|j                          || _        y )
Nr   ==cur_workflowr   TfilterFOPENstatus_typeT)rR   r   statusr   r   )rI   CmfDocumentHistorylistr]   r   ri   is_newworkflowget_create_statusget_default_statusrh   r   r   )ry   tmp_listhstatus_opennew_cur_historys        rU   _create_new_historyzCmfDocument._create_new_historyM  s    ,,118T477:SUq9r1s 	A"ANFFH	 ;;--99;K--::v:NK 33QU^ix|  LP  L]  L]3  ^$3!rW   Nc                    ddl m }m} | j                          t        j	                  d       | j                  g d       | j                  s| j                          | j                  }|j                  j                  dvri|j                  j                  dvr@| j                  j                         j                  dd	      |_        |j                          | j                          n>|j                  r| j                          n!| j                  |_        |j                          t        j	                  d
       | j"                  r:t        j	                  d       | j%                          t        j	                  d       d| _        y)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   ri   has_publishedrh   rR   r   _create_publish_taskapproved)ry   create_new_historyr   r   r   s        rU   _process_draft_is_changedz%CmfDocument._process_draft_is_changed\  s<    	0  "	  d 	e(($$&#88  &&22(B#**66jH.2mm.@.@.B.U.Ubj  yC.U  /D$+$))+$$& $11((*,0OO$)$))+ 	
%% GG/0%%'GG-.rW   c                 B    t         j                  j                  |        y r   )rI   
CmfApprovecancel_approve_processr   s    rU   cancel_approvezCmfDocument.cancel_approve  s    006rW   c                 4    | j                   j                  dk(  S )u6   Явлется ли бизнес-процесс simplezdocument.base:default)r   coder   s    rU   wf_is_simplezCmfDocument.wf_is_simple  s    }}!!%<<<rW   c                 &     | j                   |i |S r   )r,   ry   rv   rz   s      rU   r;   zCmfDocument.public_do_publish  s    t///rW   )doc_versionsave_importnotify_personsc                
   | j                  g d       t        j                  | j                        }|r|j	                  d|        | j                         r"| j                  j                  dd      | _        | j                  r6| j                  | j                  j                  dd      k7  rt        d       y| j                  rt        j                  | j                  k7  r| j                  rt        j                  d	       t         j"                  j%                  | | j                  d
| j'                  t)        | j*                        t)        | j,                              d       t        j                  d       t        j                  | j/                         v rt        d       t        d| j                  j0                   dd       y| j2                  j4                  | _        | j7                          | j,                  | _        | j8                  | _        | j=                          | j?                          t         j@                  jC                  |       D ]  }|jE                           | jG                           | jH                  |i | t!        jJ                  jL                  | dg|i | | j2                  | _'        d| jN                  _(        | jN                  jS                  |       | jT                  D ]  }|jW                           | j*                  jX                  }	| jS                  dd|      }
|	| j*                  _,        t         jZ                  j]                  |        d| j*                  _,        |
S )u   Выпуск документа)rR   rh   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  personrL   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   rI   	CmfNotifyplace_notifyr0   strrR   rh   
get_ownersrL   r   r  _pinup_attach_versionr  r  _delete_publish_taskmark_full_searchCmfPersonViewr   delete_handle_local_links_handle_mention_taskCmfEventdo_eventr   r   ri   r  r,   r   CmfBackbonePeerobj_after_save_hook)ry   r  r  r	  rv   rz   projectviewrn   is_text_changedress              rU   r,   zCmfDocument.do_publish  s    W 	X ''8--.?T-J --::x]g:hDK%%$++9Y9Yfn  }G9Y  :H  +H  K  L %%!*:*:dnn*L~~34  -->>Ss499~s4??7KL .  12
 4??#44  o  q $$% &no w|}   44@@""$OO	--!!# 	 ((--$-7 	DKKM	 	  "!!!4262
 	  {DTDVD%)%>%>"37""0""''K'@ && 	 F	  ))..iia4iG  /		2248  %		
rW   c                     t        |   |i |}d| j                  _        t        j
                  j                  |        |S NT)r   highlight_inline_commentrR   r   rI   r0  r1  )ry   rv   rz   r5  r   s       rU   r8  z$CmfDocument.highlight_inline_comment  s>    g.??  $		2248
rW   c                 l   | j                   j                  s| j                  j                  s| j                  j                  s| j                  j                  s| j
                  j                  sn| j                  j                  sX| j                  j                  sB| j                  j                  s,| j                  j                  s| j                  j                  rt        | 0  |i |S | j                  j                  re| j                  dg       | j                  D ]5  }t         j"                  j%                  |j&                  j(                         7 t        | 0  |i |S d | j*                  j-                         D        D ])  }t/        | |      j                  st        | 0  |i |c S  y )Nr  c              3   @   K   | ]  \  }}|j                   s|  y wr   )fullsearch_index).0r   vs      rU   	<genexpr>z/CmfDocument.mark_full_search.<locals>.<genexpr>  s     PdaQ=O=OPs   )text_renderr   rR   r   r   r   r2  rL   tagsuser_ratingkey_phrasesr   r)  full_search_typer   r  rI   CmfFullSearch
mark_dirtyr]   rx   r   itemsgetattr)ry   rv   rz   rn   cf_namer   s        rU   r)  zCmfDocument.mark_full_search  sS   &&99''>>,,;;))##..<<**99''99''##..##..7+T<V<<   ++m_-** A$$//		@A7+T<V<<Pdkk&7&7&9P 	AGtW%00w/@@@	ArW   c                 4   | j                   j                  }t        j                  d       | j	                  g d       | j                  |      \  }}t        |      }|j                  d      D ]  }|j                  j                  d      }t        j                  j                  |g d      }|st        d| d	
       U|j                         }|st        d|j                   dd	
       |j                         s|j                         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                  j                  dd      v r|j%                  dddi      }
|j"                  d|	 z   |
j                  d<   |j&                  d|	 z   |
j                  d<   |j%                  dddi      }|s|j(                  d|	 z   |j                  d<   |j                  d   |j                  d<   d|j                  j                  dd      v rU|j%                  dddi      }|s|j(                  d|	 z   |j                  d<   |j                  d   |j                  d<   X|j                   dk(  si|j"                  d|	 z   |j                  d<   |j                  d   |j                  d <    |j%                  d!      x}r2dj+                  |j,                  D cg c]  }t/        |       c}      }|D ]  }|j1                  |||         } t        j                  d"       || _         y c c}w )#Nz_pinup_attach_version STARTr   r   r   r   r   [data-attach-id]data-attach-idurlurl_preview_imgurl_previewr]   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bodyz_pinup_attach_version END)rh   rx   r   r   r   rJ   r   selectattrsr`   rI   r_   r!  	get_rfile
_file_nameget_versionrL   rO  findrQ  rP  r   childrenr%  replace)ry   rR   svg_replaceprepared_textrS   attachment_nodeattachment_id
attachmentrfile
latest_verattachment_linkpreview_imgr^  r   keys                  rU   r'  z!CmfDocument._pinup_attach_version  s   $$	-. YZ%)%<%<T%B"]]+#{{+=> (	WO+11556FGM--11]Kt1uJr  tA  sB  C  KP  Q((*Emnx  oD  oD  nE E| } EJK$$&**,Y7J;EO!!"78##u,0D0D0OSbSgSgkrSr/9~~)J<@X/X%%e,8G8M8Me8T%%n5+/D/D/H/HRT/UU"1"6"6sWF`<a"b4>NNyQ[P\E]4]%%j1/9/E/E)T^S_H`/`%%e,-2257D]:^_"+5+E+E)T^S_H`+`!!%(4?4E4Ee4L!!.1!6!6!:!:7B!GG-2257DW:XY"+5+E+E)T^S_H`+`!!%(4?4E4Ee4L!!.1 %%,0:9ZLAY0Y%%f-9H9N9Nv9V%%o6Q(	WT 99V$$4$GGT]]$CSV$CDM 	IC)11#{37GHM	I	+,' %Ds   N)history_version
drop_draftc                   | j                  g d       t        j                  j                  dd| j                  gdd|ggdg      }|st        dd	       |rt        j                  j                  dd| j                  gd
d| j                  ggdg      }|j                  | _        |j                  | _        |j                  | _	        | j                  d       | j                          |j                          | S d| _        d| _        | j                  d       |j                  | _        | j                           | j                  |ddd|S )u   
        Восстанавливаем документ из DocumentHistory
        Принимаем cmf_version CmfDocumentHistory, который является версией draft или approved документа
        )r   r   need_approver   	parent_idr   r  rR   r   r   u$   Не найдена DocumentHistory!Tr  r]   r  r   Fr   )r  r   )r   rI   r   r`   r]   r!  r   rR   rh   r   ri   _update_attachments_versionsr+  r   )ry   rq  rr  rv   rz   doc_historyrestore_historys          rU   r3   zCmfDocument.restore_versionT  sT    	gh//33[$PTPWPW<X5BD/4Z<\4:8 4 = <DI$77;;[RVX\X_X_D`594A[A[4\D^4:8 < =O (,,DI-22DO(7(:(:D%III%--/ K DI!DMIII%)..DO--/499d!OOOrW   c                    | j                  g d       | j                  | j                  j                        \  }}t	        |      }|j                  d      D ]  }|j                  j                  d      }|j                  j                  d      }t        j                  j                  |g d      }|j                  |      D ]  }|j                  |         y )	NrJ  rK  rL  rM  rT  rN  rR  )stream)r   rJ   rh   rx   r   r_  r`  r`   rI   r_   get_contentupload_stream_file)	ry   rg  rh  rS   ri  rj  attachment_verrk  files	            rU   rx  z(CmfDocument._update_attachments_versions  s     YZ%)%<%<T__=R=R%S"]]+#{{+=> 	;O+11556FGM,22667LMN--11]Kt1uJ"..~> ;--T-:;		;rW   c                 P   | j                   r| j                  rt        j                  | j                  j                        t
        j                  u rJ| j                  ddg       | j                  j                  | _        | j                  j                  | _	        y | j                  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| _	        y y y )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_idr]   rI   r   r   r  r   r   r   r   rx   r   r   s    rU   _calc_publish_optionsz!CmfDocument._calc_publish_options  sF   ;;4++0G0GHXHXH[H[0\`f`r`r0rACfgh)-)9)9)O)OD&)-)9)9)O)OD& Z 	[ &+"%*"==}}22-1*}}22-1*;;:dkk&7&79K9KLPZ[_[f[f[l[lntnn  QA{{00-1*{{00-1* 1 QArW   c                 \   d}d}| j                   j                  r(	 | j                   j                  j                  dd      }| j                   rD	 | j                  r| j                   j	                         }n| j                   j                  d      }|rY| j
                  }||_        |j                          |r3t        j                  | j                  | |      }|j                          yy|r+| j
                  }||_        |j                          || _        yy#  d}Y xY w#  d}Y xY w)u   Если переключаемся на новый БП, надо создать новую версию истории, а старую зареджектитьNr   r   r   r   r   )rR   r   r   )r   r   r   r   r   r   r   ri   rI   r   rh   )ry   r   status_rejectedprev_historyhistorys        rU   _switch_to_new_versionz"CmfDocument._switch_to_new_version  s    =='"&--"3"3"F"FS[is"F"t ==#;;"&--"A"A"CK"&--"B"Bv"B"VK
 44L"1L 33QU^i3j  //G(GNLLN%DK	 +'"&#"s   'D AD% D"%D+c                 L   | j                  g d       | j                  j                  rT| j                  j                  j                  j	                         r&| j                  j                  s| j                          | j                  j                  r| j                          y y )N)r   z
status.oldzstatus.need_approver   )r   r   r   rt  r   r  _start_approver   s    rU   do_status_is_changedz CmfDocument.do_status_is_changed  sk    lm;;??t{{;;@@B4;;KcKc!;;##! $rW   c                    t         j                  j                  dd| j                  j                  ggdd| j
                  ggg d      }|s)t        d| j                  j                          dd	
       t        |      dkD  r)t        d| j                  j                          dd	
       t        |      dk(  r|d   j                  S y )Nstatus_fromINr   r   )	status_tozstatus_to.need_approvezstatus_to.workflowrv  u   Из статуса uO    нет ниодного перехода на следующий статус!Tr  r  uf    существует больше одного перехода на следующий статус!r   )
rI   CmfTransr   r   r]   r   r!  r   r   r  )ry   transitionss     rU   next_statuszCmfDocument.next_status  s    oo**M4$++..IY3Z\fhlnrn{n{[|2}3p + r ,T[[-=-=-?,@  AP  Q  [_  `{A,T[[-=-=-?,@  Ag  h  rv  w{Qq>+++rW   c                     | j                   dk(  r| j                         | _        | j                  }t        j
                  j                  | |j                         y )Nr   )cache_status_typer  r   r   rI   r   start_approve_processr  )ry   rv   rz   
wf_historys       rU   r  zCmfDocument._start_approve  sG    !!V+**,DK..
//j6L6LMrW   c                     | j                  | j                                | j                           | j                  |i | y r   )r   r   r  ri   r  s      rU   r5   zCmfDocument.start_approve  s8    1134		4"6"rW   c                 n   t         j                  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
                  j                         sd| _        t        j                  j                         | _	        y )Nru  r   r]   !=)official_number>0z-official_datez-official_numberr  official_dater   order_byr   r  )
rI   r   r`   r   r]   r  r   r   nowr  )ry   official_historys     rU   calc_official_datenumz!CmfDocument.calc_official_datenum  s    !4488+tUYU`U`UcUcAdBFdggAVA^A` DTUgBhARTc@d	 9 f
 //'7'G'G!'K$##((*#$D %..224rW   )	overwrite
no_versionr   c                
   | j                          | j                          | j                  j                  rt	        dd       |rt	        dd       y | j
                  r+| j                  j                  s| j                         | _        | j
                  r`| j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                  j                  r| j!                  |       | j"                  j                  r | j%                          | j'                          | j
                  ri| j(                  r]t*        j*                  j-                  t*        j.                  j0                        j3                  d      }| j4                   d| | _        d	d
d| j4                  gdd| j6                  gdd| j8                  gdd| j:                  ggg}t<        j>                  jA                  | j4                  |      rt	        d| j4                   dd       | jB                  s	 | j                  j                  r4| jp                  jr                  ju                         r| jw                          | j
                  r| jx                  dk(  r| jz                  jj                  j|                  }| jz                  jj                  j~                  }t        j                  |   }t<        j                  jA                  dd| j                  gg dg      }t<        j                  jA                  dd|gd
dt        |      gg      }|sat<        j                  | j                  ||      j                         }t<        j                  | j                  ||      j                         }nZt<        j                  jA                  dd|gd
d|gg      }|s0t<        j                  | j                  ||      j                         }|| _        t<        j                  jA                  dddg      }|| _        | j
                  s| j                  j                  rt<        j                  j                  d       t        | dd      }| j                  r$t=        j                  d i |j                          n/t=        j                  j@                  d i |}|j                          t        |   |i |}t<        j                  j                  |        |S )!Nus   Нельзя менять текст напрямую, используйте text_draft вместе с do_publishTr  uH   Метод устарел! Используйте update_inline_comments)r   )tzz%d-%m-%Y %H.%M.%S ANDrL   r   r   r   r]   r  )rL   r   u!   Документ с именем u^    уже существует на этом уровне. Выберите другое имя.zdocument.blog=)typer  zCmfDocument-blogr   )r   r   rL   zdocument.blog:defaultsave_eval_code)r  cache_inmemoryr   up   Изменение опции "Это шаблон" доступно только администраторам)messageu   Без группы
add_button)r  
group_name	menu_typer   )Q_CmfDocument__calc_parent_calc_projectrR   r   r!  r   r  calc_doc_version_calc_scheme_wf_calc_workflow_calc_executors_calc_spectators_calc_show_approvers_alwaysr   r)  rh   r   r   r  r  cloned_fromr   r  r   utcstrftimerL   r   r   r]   rI   r   r`   r   CmfRFiledpdata_driverget_rdr   ra  exists
meta_tuuidcmfr   CmfTUUIDget_obj_by_tuuid_strr   r   	file_pathr   createrename
write_textrx   meta_set_flagr   r   trans_updatedr   _approve_updatedlogic_prefixcmf_created_atyearmonthr  	RU_MONTHSCmfRegistryr  CmfBlogFolderr%  ri   CmfWorkflowis_templateCmfAccessListcheck_admin_modedictCmfMenuItemr+  r   r0  r1  )ry   r  r  r   rv   rz   dtfiltrdiskrfile_idrl  tuuidrfile_parentold_rfile_id	old_rfiler  r  blogyear_bfmonth_bfwfparams	menu_itemr5  r   s                           rU   ri   zCmfDocument.save  sx   99  L  TX  Y`hlm;;t//::#446D;;  "!  "!!#,,.$$&??%%**>P*Q==##&&('');;4++""&&(*;*;*?*?&@IIJ]^B99+Qrd+DItyy)4-d&6&67tTWW%	'  !!tyy!>3DII; ?9 : ER ??%%$++*C*C*H*H*J!!#;;4,,?&&,,11D''--33E%%e,E%%))8S$//2RTu1v)wD**..sD7QTZ\_adeiajSk6l.mG ..dooSW^b.chhj!//tT[bg/hmmo!//33]CQX<Y\bdgin[o;p3q%334??X_fk3lqqsH'D##''-DUYcsbt'uBDM{{t//::  11  ;m1  n0&F "",V,113"..22<V<	  "glD+F+2248
rW   c           	      $   t        |   di |}g d}| j                  |       |D ]  }t        ||t	        | |              | j
                  r| j
                  |_        |j                  j                         |_        |j                          |S )N)r   r   r  	executors
spectatorsr   )
r   create_from_templater   setattrrG  default_clone_workflowr   r   r   r  )ry   rz   new_docr   attrr   s        rU   r  z CmfDocument.create_from_template  s    '.88
 	  	8DGT74#67	8 &&#::G ));;=%%'rW   c                 b   | j                   r| j                  j                  r| j                  rst        j                  | j                        t        j                  u rD| j                  dg       | j                  j                  r| j                  j                  | _        y t        | -         S )Nztree_parent.logic_type)r   
logic_typeis_nullr   r  r  tree_parent_idrI   r   r   r   _calc_logic_typer   s    rU   r  zCmfDocument._calc_logic_type  s    KK''  ''(;(;<@R@RR678**"&"2"2"="=w'))rW   c                 b   | j                   r| j                  j                  r| j                  rst        j                  | j                        t        j                  u rD| j                  dg       | j                  j                  r| j                  j                  | _        y t        | -         S )Nztree_parent.activity)r   activityr  r   r  r  r  rI   r   r   r   _calc_activityr   s    rU   r  zCmfDocument._calc_activity  s    KK%%  ''(;(;<@R@RR456(( $ 0 0 9 9w%''rW   c                 <   | j                   r| j                  ddg       | j                  sp| j                  rct        j                  | j                        t        j                  u r3| j                  j                  r| j                  j                  | _        y y y y y y )Nr  ztree_parent.executors)	r   r   r  r   r  r  r  rI   r   r   s    rU   r  zCmfDocument._calc_executors  s    ;;k+BCDNN$$++D,?,?@FDVDVV$$..!%!1!1!;!; / W % # rW   c                 <   | j                   r| j                  ddg       | j                  sp| j                  rct        j                  | j                        t        j                  u r3| j                  j                  r| j                  j                  | _        y y y y y y )Nr  ztree_parent.spectators)	r   r   r  r   r  r  r  rI   r   r   s    rU   r  zCmfDocument._calc_spectators  s    ;;l,DEFOO$$++D,?,?@FDVDVV$$//"&"2"2"="= 0 W % $ rW   c                     | j                   rX| j                  rKt        | j                  j                  t        j
                        r| j                  j                  | _        y y y y r   )r   r   r   rx   rI   r   show_approvers_alwaysr   s    rU   r  z'CmfDocument._calc_show_approvers_always  sL    ;;4++
4;K;K;Q;QSYSeSe0f)-)9)9)O)OD& 1g+;rW   c                      y r   r   r   s    rU   _calc_approvedzCmfDocument._calc_approved  s    rW   c                 <    t        |   |fd| j                  i|S )Nmsg_url)r   create_eventr]  )ry   event_personrz   r   s      rU   r   zCmfDocument.create_event  s,    w#
"&))
/5
 	
rW   )TEXKOM_db_deletec                   | j                  g d|       t        j                  j                  j                  j                         }| j                         }|j                  |      }|j                  r-|j                  }|r|| j                  k(  r|j                          |rwt        j                  j                  | d      D ]  }d |_        |j                  d        t        j                   j                  | d      D ]  }	 |	j                  |i |  t        j"                  j%                  | d      }
|
rd |
_        |
j                  d       t'        | ,  |d|i|}t        j(                  j+                  |        |S )NrJ  )r   include_deletedT)descr_documentr  rw  )r   r  r  )r   rI   r  r  r  r  r   ra  r  r  r]   r+  CmfComponentr   r  ri   r   r   r`   r   r0  obj_after_delete_hook)ry   r  rv   rz   r  r  rl  r  	componentr  r2  r5  r   s               rU   r+  zCmfDocument.delete  sc   L, 	 	. ""..557%%')<<$$EETWW,#0055T[_5` /	+/	(./ "4499W[9\ 0//0 ##''tT'R%)G"LL4L(gndP5EPP44T:
rW   c                     t        t        | 
  |i | | j                  j                  sy | j                  rd| _        y y r7  )r   r   _process_public	is_publicr   r   )ry   rv   rz   r   s      rU   r
  zCmfDocument._process_public  s;    k40$A&A~~((>>)-D& rW   c                 r    t         j                  j                  dd| j                  gg dg dgdgdg      S )Nru  r   )r   r   T)approved_versionr  Nz-approved_versionrR   r  )rI   r   sgetr]   r  s      rU   get_approved_versionz CmfDocument.get_approved_version  sG    ((--{D$''6R6N6V6X 9L7L6<X	 . ? 	?rW   c                 n    t        t        j                  j                  dd| j                  g            S )Nr  r   r   )boolrI   r   countr]   r   s    rU   has_tree_nodes_hookzCmfDocument.has_tree_nodes_hook  s-    F&&,,5EtTWW4U,VWWrW   c                    t         j                  dt         j                        }|j                  | j                  j
                        sg | _        yddlm}  || j                  j
                  xs dd      }t               }|j                  ddd	d
gi      D ]=  }t        j                  |d   dddg      }|s#|j                  |j                         ? || _        y)uZ   
        Обновляет связанные ссылки у документа
        data-mention-typeflagsNr   r   r   rG   rZ  taskdocumentr`  data-object-idTz--r]   simpler   )r   compileIsearchrR   rx   local_linksbs4r   setrK   r  get_obj_by_idaddr]   )ry   re1r   	soup_textr"  itemr  s          rU   r,  zCmfDocument._handle_local_links  s     jj-RTTj:zz$))//*!D%!$))//"7RG	e&&s3FQ[H\2]&^ 	(D''-=(>tUY[_T`'aC'	(
 'rW   c                    t         j                  dt         j                        }|j                  | j                  j
                        rg | _        yddlm}  || j                  j
                  xs dd      }t               }|j                  ddd	i
      D ]  }|j                  |d           g | _        |D ]@  }t        j                  j                  |      }|s&| j                  j                  |       B y)un   
        Парсит документ, вытаскивает упомнинания на таски
        r  r  Nr   r  r   rG   rZ  r  r  r  r\   )r   r  r   r!  rR   rx   mention_tasksr#  r   r$  rK   r&  rI   CmfTaskr`   append)	ry   rv   rz   r'  r   bs_textnew_taskr)  tsks	            rU   r-  z CmfDocument._handle_mention_task  s     jj-RTTj:::diioo&!#D%		 52}E5$$S1Df0M$N 	1DLL./0	1   	/D..$$$-C""))#.	/rW   c                    | j                   j                  sy t               }t               }| j                   j                  r.t        | j	                  | j                   j                              }| j                   j
                  r.t        | j	                  | j                   j
                              }||z
  D ]3  }|j                  dv st        j                  j                  | d|       5 y )N)CmfPersonGroupr   CmfRolemention)r  )
rh   r   r$  r   
parse_textr   
class_namerI   r.  r/  )ry   objs_oldobjs_newr  s       rU   handle_mention_personsz"CmfDocument.handle_mention_persons3  s    ))55??4??4??+>+>?@H??4??4??+>+>?@Hh& 	LC~~!KK((ys(K	LrW   c                     | j                   d	i |}| j                  g d       d|v r4t        j                  |d         dk(  r| j                  st        dd       | j                  rx| j                  }||_        |j                  |_        |j                  |_        |j                  sEd|_	        t        j                         5  |j                  d       ddd       nd|v r
|d   |_        | j                  |_        | j                  |_        | j                  |_        |j                  d       |j                  j                   S # 1 sw Y   dxY w)
u   Создание документа из шаблона
        :param self: Шаблон документа
        :param params: Параметры для шаблона
        :return: Идентификатор нового документа
        )tmplt_target_treeztmplt_target_tree.parentz%tmplt_target_tree.tree_node_is_branchr   r   ur   Из этого шаблона можно создать документ только внутри проектаTr  rw  Nr   )r  r   r  get_class_name_by_idr;  r!  r   r   r2  tree_node_is_branchdisable_aclri   r  r  r   r]   rx   )ry   r  r  r;  s       rU   r*   z$CmfDocument.create_doc_from_templateC  sG    ,$++5f5st v'">">vh?O"PT_"_hlh~h~  K  SW  X!! $ 6 6"3G.55GN/66GO$888<!5((* ;%**T*:; ; #H-GN(,(B(B%(,(B(B%(,(B(B%t$zz; ;s   EEc           	         dd l }dd l}ddlm} ddlm} | j                  dg       	 | j                          | j                  st        dd       t        | j                        j                  d      d	    d
}t        j                  j!                  | |      }|st        j                  | |      }dd l}	|	j%                         5 }
t&        j(                  j+                  |
|      }|j-                  |d      5 }| j                  D ]O  }|j.                  |k(  r	 |j                          |j1                  |j2                   ||j2                               Q 	 d d d        t5        |d      5 }|j7                  |dd       d d d        d d d        |j8                  S # t        $ r Y y w xY w# t        $ r Y w xY w# 1 sw Y   dxY w# 1 sw Y   GxY w# 1 sw Y   |j8                  S xY w)Nr   r   )basenamer  uP   Отсутствуют вложенные файлы для скачиванияTr  :r  z.zipr   rL   w)moder^   F)backupmake_preview)zipfileshutilpathlibr   os.pathr@  r   _acl_check_readCmfPermissionErrorr  r!  r%  r]   r   rI   r_   r`   tempfileTemporaryDirectoryospathr   ZipFilerL   writera   rd   r~  rO  )ry   rv   rz   rG  rH  r   r@  zip_filenamerk  rM  tmp_dirzip_file_path_tmparcr)  rs   s                  rU   r.   z#CmfDocument.download_all_attachmenti  s    $-)	  " hptudgg,,,S1!45T:))--T-M
--T-MJ 	((* 	Sg "Wl C!2= 	R ,, RDyyL0 !,,. IId118D<O<O3PQR	R '. S!--aE-RS	S  ~~= " 		. . ! !	R 	RS S	S  ~~sq   F" 	4G= G F1..G G1GG"	F.-F.1	F=	:G <F=	=G  G		GG	GG,c                 f    	 | j                           | j                  |i |S # t        $ r Y y w xY wr   )rK  rL  r.   r  s      rU   r>   z*CmfDocument.public_download_all_attachment  sA    	  " ,t++T<V<< " 		s   $ 	00c           	         | j                  | j                         | j                  j                  xs. | j                  j                  xs | j
                  j                  }t        j                  j                  |xs d      |d<   d|vrCdj                  | j                  D cg c]  }t        |j                  xs d       c}      |d<   t        | 8  di |S c c}w )Nr   rR   obj_key_phrases
r   )r   full_search_preload_fieldsr?  rx   rR   rh   rI   rD  
strip_htmlr   rB  r%  rL   r   full_search_index)ry   rz   rR   tr   s       rU   r]  zCmfDocument.full_search_index  s    889%%QQDOO<Q<Q--88DvF*(,		dN^N^2_3qvv|3D2_(`F$%w(2622 3`s   & CrR   c                 r   |s|S t         j                  d|t         j                        s|S t        |d      }|j	                  t         j                  d      ddi      D ]  }| j                         |d<    dj                  |j                  j                  D cg c]  }t        |       c}      S c c}w )u   
        Добавляет тегам H1-H7 атрибут 'data-id'
        для ссылок в оглавлении
        z <h[1-7](?![^>]*\s+data-id)[^>]*>lxmlz^h[1-7]rH   Fr  r   )r   r!  
IGNORECASEr   rK   r  rM   r   r^  re  r%  )clsrR   rS   h_tagr   s        rU   _convert_h_tagzCmfDocument._convert_h_tag  s     Kyy<dBMMRKT6*]]2::j#9)UAS]T 	1E"0E)	1 ww		(:(:;1A;<<;s   B4c                 2   d}d}t         j                  d|       s| S t        | d      }|j                  d      D ci c]  }|d   |
 }}|j                  t         j	                  d| d	      
      D ][  }|d   j                  d      r|d   dd }|j                  |      }|d   j                  ||      |d<   d|d<   |sQ|d   dd |d<   ] dj                  |j                  j                  D 	cg c]  }	t        |	       c}	      S c c}w c c}	w )u?   
        Конвертируем оглавление
        #z#mcetoc_z+<a[^>]*href=["\']#(?!mcetoc_).*?["\'][^>]*>r`  Tr\   r]   ^z.+)r]  r]  r  Ncmf_convertedr   )r   r!  r   rK   r  
startswithr`   rf  r   r^  re  r%  )
rR   old_idnew_idrS   elementidslinkid_nameid_bodyr   s
             rU   _convert_titlezCmfDocument._convert_title  s+   
  yyGNKT6* 6:]]d]5KL'wt}g%LLMMrzzAfXR.'AMB 	1DF|&&z2 6l12&Gggg&G  <//?DL$(D! $VQR 0	1  ww		(:(:;1A;<<% M$ <s   D6Dc                 ~   t         j                  dt         j                        }|j                  |       s| S t	        | d      }|j                  ddi      D ]  }|j                  j                  d      r|j                  d   j                  d       d|j                  d	<   d
|j                  d<   |j                  dd	d
i      }|j                  d       |j                  |       |j                  ddt         j                  d      i      D ]  }d
|d<   d|j                  d    |d<     t        |      S )u=   
        Конверитуем оглавление
        z	toc-macror  rG   rY  r  rh  zmce-tocFcontenteditableTh2u   Оглавлениеh4r]   ztitlelist-.*mcetoc_)r   r  r   r!  r   findAllr`  r`   r-  new_tagr%  )rR   r'  rS   rT   	title_tagtag_hs         rU   _convert_title_macroz CmfDocument._convert_title_macro  s*   
 jjRTTj2zz$KT=1<<w&<<= 	=Cyy}}_-IIg%%i0+0CII'()-CIIo&T2CT1JKI34JJy!d4N9S2TU =)-o&!(T):(;<d=	= 4yrW   c                    t         j                  d|       s| S t        | d      }|j                  ddi      D ]r  }|j	                  dddi      }|j                  d      }|r|j                  |j                         n|j                  |j                         |j                  |       t dj                  |j                  j                  D cg c]  }t        |       c}      S c c}w )	uW   
        Конвертируем тэги экранирования кода
        zA<\s*(code|div)[^>]*\sclass=["\'][^"\']*\bcode\b[^"\']*["\'][^>]*>r`  rY  r  r  prezlanguage-markupr   )r   r!  r   rK   rx  rd  extendcontentsreplace_withr   r^  re  r%  )rR   rS   rT   r}  tag_contentr   s         rU   _convert_codezCmfDocument._convert_code  s     yy]_cdKT6* =='8=9 	"C,,uW6G,H,IC ((5/K

;//0 

3<<( S!	"" ww		(:(:;1A;<<;s   C*c                    dt         fd}d }t        j                  d| t        j                        rt	        | d      }|j                  dt        j                  d      i      D ]  }d|j                  j                  dg       v r"d	|j                  d   v rd
}nJd|j                  d   v rd}n6d|j                  d   v rd}n"d|j                  d   v rd}nt        d|       |j                  dt        j                  d      i      } |||||j                          t        |      } t        j                  d|       rut	        | d      }|j                  dddi      D ]Q  }d|j                  j                  dg       v r"|j                  ddi      }|r|j                  ndg} |d|||       S |r<dj                  |j                  j                  D cg c]  }t        |       c}      S | S c c}w )N
panel_typec                    |j                  dddd      }|j                  dt        j                  j                  |    d         }|j                  dt        j                  j                  |    d         }|j	                  |       |j	                  |       |j                  dd	d
d      }|j                  |       |j                  dd| dd      }|j	                  |       |j	                  |       |j                  |       y )Ndivak-editor-panel__iconfalserY  contentEditabler  r   rP  r   ak-editor-panel__contenttruezak-editor-panel eva_convertedrY  zdata-panel-typer  )rx  rI   r   
ICONS_DATAr-  r~  r  )	r  rT   doc_soupr  panel_tag_iconsvg_tagsvg_path_tagpanel_tag_content	panel_tags	            rU   _convert_macro_panelz?CmfDocument._convert_macro_panels.<locals>._convert_macro_panel  s#   %--eE\OV<X- YN&&V//:::FuM ' OG#++f00;;JG
S , ULNN<(!!'* ( 0 0HbRX?Z 0 ![$$X. ((@_JTJQ7S( TI ^,./Y'rW   zconfluence-information-macror`  rY  z^confluence-information-macro$r  eva_convertedz!confluence-information-macro-noter"   z(confluence-information-macro-informationr$   z confluence-information-macro-tipr%   z$confluence-information-macro-warningr!   uO   Неизвестный тег для преобразования панели z.+bodyzc<div[^>]*\bclass=["\'][^"\']*(?!\s*eva_converted)[^"\']*\bpanel\b(?!\s*[^"\']*)([^"\']*["\'][^>]*>)r  panelpanelContentrZ  r#   r   )r%  r   r!  r   r   rK   r  r`  r`   CmfErrorrd  r  r   r^  re  )rR   r  rS   rT   r  contentr  r   s           rU   _convert_macro_panelsz!CmfDocument._convert_macro_panels  s   	(S 	(& 994dBDDA v.D }}GRZZ@`5a+b}c N"ciimmGR&@@6#))G:LL!*J?399WCUU!'J7399W;MM!*J;syy?QQ!(J"%tuxty#z{{(('2::h3G)H(I$ZdG<L<LM#N& t9D 99{  ~B  C v.D}}U7G2D}E B"ciimmGR&@@(('>)B(C/67++TF$VS$AB 77DII,>,>?qCF?@@K @s   G9c           
      "   t         j                  dt         j                        }t         j                  dt         j                        }|j                  |       r|j                  |       s| S t	        | d      }|j                  dddi      D ]r  }dddd	d
dddd}|j                  d      }|j                  |d      }dddd	d
dd}|j                  d      }	|j                  |	d      }
|j                  dddd      }|j                  dt        j                  j                  |
   d         }|j                  dt        j                  j                  |
   d         }|j                  |       |j                  |       |j                  dddd      }|j                  |j                         |j                  dd|dd      }|j                  |       |j                  |       |j                  |       u t        |      S )uc   
        Конвертирует макрос "UI Text Box RefinedToolkit for Confluence"
        data-macro-namer  zui-text-boxrG   r  r  r$   r#   r%   r    r!   r"   )z
light-cyanz
light-bluezlight-purplezlight-greenzlight-magentaz	light-redzlight-yellowzlight-orangez
data-color)r$   r#   defaultr%   r"   r!   z	data-iconr  r  r  r   rP  r   r  r  zak-editor-panelr  )r   r  r   r!  r   rK   r`   rx  rI   r   r  r-  r~  r  r  r%  )rR   r'  re2rS   rT   panel_type_mapping
data_colorr  panel_icon_mapping	data_icon
panel_iconr  r  r  r  r  s                   rU   _convert_ui_text_boxz CmfDocument._convert_ui_text_boxP  s    
 jj+244j8jjrttj4

4 SZZ%5KT=1==/@-.P=Q 9	(C$$ &(!($ ) )	" .J+//
FCJ !$""" ,I+//	6BJ!\\4'. * N ll50B0B0M0Mj0YZ_0`laG<<f6H6H6S6ST^6_`j6k<lLNN<(!!'* $7'- !- ! $$S\\2.'1'. % I ^,./Y's9	(v 4yrW   c                    t         j                  dt         j                        }|j                  |       s| S t	        | d      }|j                  ddi      D ]
  }|j                  dddi      }|j                  dddi      }|j                  d	dd
i      }|j                  d       |j                  |       |j                  |       |j                  ddi      }|j                  |j                         |j                  ddi      }|j                  dddi      }	|	j                  |j                         |j                  |	       |j                  |        t        |      S )Nzexpand-containerr  rG   rY  r  r  zspoiler collapsedzspoiler-togglespanzspoiler-icon_zexpand-control-textzexpand-contentzspoiler-text)r   r  r   r!  r   rK   rx  r-  rd  r~  r  r  r%  )
rR   r'  rS   rT   spoilerspoiler_togglespoiler_icontag_control_texttag_control_contentspoiler_texts
             rU   _convert_expanderzCmfDocument._convert_expander  sZ   jj,BDDj9zz$KT=1==1C'D=E 	&Cll5:M0NlOG!\\%AQ7R\SN<<w6O<PL$!!,/NN>*"xxw8M.NxO!!"2";";<"%((';K1L("M<<g~5N<OL 3 < <=NN<(W%	& 4yrW   ru  c                 ^   |s|S t         j                  dt         j                        }t         j                  dt         j                        }|j                  |      r|j                  |      s|S d| j	                          d| j	                          d| j	                          d| j	                          d| j	                          d	| j	                          d
| j	                          d| j	                          d| j	                          d}t
        j                  |ddg      }t        |j                        }t        |d      }|j                  ddi      D ]  }	d||ddddd}
|	j                  d      }|rt        d |j                  d      D              }|j                  d      rd|
d<   nd|
d<   |j                  d      rt        j                  j                  |j                   |d          }|s#t        j"                  j                  |d   !      }|r-t        |j$                        |
d"<   t        |j                        }|j                  d#      r|d#   |
d$<   |j                  d%      r|d%   |
d<   |j                  d&      r|d&   |
d'<   |j                  d(      rdd)d)d*}|j                  |d(         |
d+<   |j                  d,      rd-d.d/d0}|j                  |d,         |
d1<   |j                  d2      rd|
d3<   t        |j'                  ||t(        j+                  |
d4      |5      j-                  d6d      d7      }|	j/                  |j0                          dj3                  |j4                  j6                  D cg c]  }t        |       c}      S c c}w )8u   
        Конвертируем тег Отображение дочерних из Confluence в наш
        fixme удалить когда добавят поддежку тега из Confluence
        r  r  re  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, parentr  r`  r  F50r   none)isShowChildrenparentId
documentIdchildrenAmountlevelincludeViewTypeisOrderByDeskzoriginal-data-macro-parametersc              3   >   K   | ]  }|j                  d         yw)r  N)r   )r<  params     rU   r>  z2CmfDocument._convert_childpages.<locals>.<genexpr>  s     &`Eu{{3'7&`s   |allr  1r  pagerB  )rL   r  firstr  r  style
headerTypeexcerptTyper  )r  r  zrich contentr  sortrL   r  cmf_modified_at)titlecreationmodifiedsortTypereverser  ensure_ascii)rj   doc_namer  original_paramsrZ  rG   )r   r  r   r!  rM   r  r%  r%  rL   r   rK   r`   r  r   rI   r   ru  r   r]   formatjsondumpsrf  r  
currentTagr   r^  re  )rb  rR   ru  r'  r  TMPLr  r  rS   rT   r  r  parent_pageview_type_mapsort_type_mapnew_soupr   s                    rU   _convert_childpageszCmfDocument._convert_childpages  s    Kjj+244j8jjBDDj1

4 SZZ%5K
 //+, -;
 <???;L:M N??B?P>Q R< =@OO<M;N OBBE//BSAT U;;>??;L:M N<<?OO<M;N O>
 ?Boo>O=P 	QT UXTcTcTeSf g	G%L ##IdNCS#Tsxx=T6*==(9:'F=G .	2C #(%'"&#)!&F "gg&FGO"&&`_EZEZ[^E_&`"`"&&u-/3F+,&)F7O"&&v."("4"4"8"8TcdjTk"8"lK&&,&7&7&;&;QWAX&;&Y"/2;>>/B|,#&{'7'7#8"&&w//>w/GF+,"&&w/&5g&>F7O"&&w/+:7+CF<("&&}5-3yZc$dM0=0A0A/R_B`0aF,-"&&v..4BR`q$rM)6):):?6;R)SF:&"&&y1.2F?+$T[[	:B8<

6X]
8^AP &1 &R SZRYZ^`bRc%2	4H
 X001].	2` ww		(:(:;1A;<<;s   N*c           
         t         j                  dt         j                        }|j                  |       s| S t	        | d      }|j                  ddi      D cg c]&  }d|j                  d   vrd|j                  d   vr|( }}|D ]  }ddgd	d
gd
d	gg dg dd}|j                  |j                  j                  d            }|sCg }t        |j                        D ]  }	|	dk(  r	|j                  |	        |sy|j                  ddddd      }
t        |      t        |      k7  rt        |      dk(  r7|j                  d      }|d   j                  |_	        |j                  |       t        |      dk(  r|j                  d      }nt        |      dk(  r|j                  d      }t        |      D ]o  \  }}|j                  d| ddd| dd      }|j                  dddd      }||   j                  |_	        |j                  |       |
j                  |       q |j                  |
        t        |      S c c}w )u   
        Конвертирует "Разметка страницы"(коробочная) или "Макеты"(облачная)
        columnLayoutr  rG   rY  r  zfixed-widthsingle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-layoutrZ  r  r  r  zmceNonEditable selected)rs  zdata-layout-sectionrY  r  r   r~   r     r  %zflex-basis: )zdata-column-widthzdata-layout-columnr  )zdata-layout-contentrs  )r   r  r   r!  r   rK   r`  r`   r   r  r-  rx  r   r  	enumerater%  )rR   r'  rS   r  r@  rT   layout_typecolr  ctag_layout_sectiontag_divr   r   tag_layout_coltag_layout_contents                   rU   _convert_layoutszCmfDocument._convert_layouts  s   
 jjj5zz$KT=1#}}G^3L}M c 		'(::xsyyY`Oa?a  c c  >	1C$f-&-w%7%,g$6:'?K //#))--">?CH#,,' #9"#
 !%'.+16 ". " 3x3x=(x=A%"ll51G'/{';';G$$$W-]a'%//+6C]a'%//-8C%cN :5!%05wa[.4#/wa!8 ". " &*\\/5+1 &2 &" /7qk.B.B"+%%&89")).9':( /0}>	1@ 4yGcs   +I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         j                  d&t         j                  '      }|j                  |       s| S t	        | d(      }|j                  d)d*gd&d+i,      D ];  }|d&   }|j                  |      }|r||d-<   !d.| d/|j                  d0d1       |d0<   = t        |      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  rG   thtdTr  zdata-highlight-colorzbackground-color: ; r  r   )r   r  r   r!  r   rK   r`   r%  )rR   	color_mapr'  	text_souprT   data_highlight_colourr   s          rU   _convert_colorszCmfDocument._convert_colorsh  s   
 |
 }	

 ~
 {
 ~
 |
 v
 v
 w
 x
 u
 x
 v
  {!
" {#
$ |%
& }'
( "$+
	0 jj1j>zz$K!$6	%%tTl;RTX:Y%Z 	dC$'(?$@!MM"78E.3*+!34I3J"SWWU\^`MaLbcG	d 9~rW   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         j                  d"t         j                  #      }|j                  |       s| S t	        | d$      }|j                  d%d"&      D ]8  }|j                  d'      }|j                  |      }|s(|j                  |       : 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  rG   rU  class_zdata-emoticon-name)	r   r  r   r!  r   rK   r`   r  r%  )rR   	emoji_mapr'  r  rT   emoticon_nameemojis          rU   _convert_emojizCmfDocument._convert_emoji  sm   
]
m
 ]
 M	

 
 =
 =
 M
 ]
 .
 M
 ]
 
 
 
  =!
" #
$ (&'
	, jjBDDj1zz$K!$6	%%eJ%? 	(CGG$89MMM-0E  '		( 9~rW   c                    d}t         j                  dt         j                        }t         j                  dt         j                        }|j                  |       r|j                  |       s| S t	        | d      }|j                  ddi      D ])  }t	        |d      }|j                  |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  rG   r  )	r   r  r   r!  r   rK   r  r  r%  )rR   r  r'  r  r  rT   rx  s          rU   _convert_macro_attachmentsz&CmfDocument._convert_macro_attachments  s    
. jj+244j8jjrttj4

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

4 SZZ%5KT=1->
,KLt9D ()!	
	 ## $ 
 ""K>>]*zz$$))-DD$0055&cjjmm<< .. 6  "jj""!11$7**..22:>"-"="=j"I$"OKvv/&1 0044\B"-"="=l"KA"NK  ""&&z2!11*=dC$$((6!11,?B%K) S	>L!M%%*! "O )--V\4J-KM?L=..227;RVL;.$(M![0.5OF+4;OL1$(M$*$6$6$:$: (&C~2FG 78 %; %M )(.(9(9(=(=$5vAUVbUcce?f#g )> ) %)44E -1E1E1T1T T !)44E - 0 0CFF : 7>OF3<COL96C6F6F6L6LOF3<I<N<N<T<TOL9(,*1'07- $"."3"36<:P"3"QQQ0?0E0E0I0I'0R-  $4 5/3,  (H I7; 34&2&7&7v>W&7&XX"X"5";";"?"?"H!)/*A*A'3*O!P!).*>*>!?!%%f-.7mmN6<RST<UW`.aOF+!%%i015N9<UVW<X<^<^<`1aOI.'  r*11$**_B]1^K 3908D 45%%k&<&<=gS	>j 4yrW   c           
         d}| s| S t         j                  dt         j                        }t         j                  dt         j                        }|j                  |       r|j                  |       s| S ddddddd	d
}t	        | d      }|j                  dddi      D ]  }|d   }t        t        d |      d       }|dk(  r|j                  dd      r|dz  }t	        |j                  |j                  |j                  |d            d      }	|j                  |	j                          dj                  |j                  j                  D 
cg c]  }
t!        |
       c}
      S c c}
w )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-successr`  r  r  rY  c                 L    | j                  d      xr | j                  d       S )Nzaui-lozenge-zaui-lozenge-subtle)ri  )r   s    rU   <lambda>z1CmfDocument._convert_status_tag.<locals>.<lambda>  s$    1<<+G+rPQP\P\]qPrLr rW   rC  zdata-macro-idF_cloudneutral)rR   r   rG   r   )r   r  r   r!  r   rK   nextr   r`   r  rR   r  r  r   r^  re  r%  )rR   TMPr'  r  status_color_mappingrS   rT   classesr  sr   s              rU   _convert_status_tagzCmfDocument._convert_status_tag  sk   
 Kjj+244j8jj"$$j/

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

.2269E   A Q\\*!	+" ww		(:(:;1A;<<;s   E+rg  c           	         d}| s| S t         j                  dt         j                        }t         j                  dt         j                        }|j                  |       r|j                  |       s| S t	        | d      }t        |j                  dddi            D ]  }|j                  d	d
di      }|j                         D ]  \  }	}
|d   |	v s	 d }t         j                  d|
      }|r$t        j                  j                  |d   |      }nLd}t         j                  ||
t         j                        }|r#d|j                  d      j                          d}|r:t	        |j!                  d||	      d      }|j#                  |j$                         nt'        d| d|
         dj)                  |j*                  j,                  D cg c]  }t/        |       c}      S #  t'        d| d|
       xY wc c}w )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-replacer`  r  r  r  r  rY  r]   zSRC=\[([^]]+)\]r   z@startuml(.*?)@enduml
@startuml
r  
@endumlz{})r  umlr   rG   uS   Не удалось преобразовать Plantuml, не найден код: r  u9   Не удалось преобразовать Plantuml: r   )r   r  r   r!  r   r   rK   rd  rF  r   rI   r   convert_encuml2umlDOTALLgroupr   r  r  r  	Exceptionr   r^  re  r%  )rR   rg  r  rI  r'  r  rS   rT   svg_divsvg_keysvg_textrR  encumlpatternresultrx  r   s                    rU   _convert_plantuml_tagz!CmfDocument._convert_plantuml_tag  s   &N KjjBDDj1jjrttj4

4 SZZ%5KT6*f5F
4STU 	wChhuWm,DhEG%0%6%6%8 w!4=G+w"!#,>!I!"("4"4"G"Gq	S\"]C '?G%'YYw"))%LF%(3FLLO4I4I4K3LI&V&3CJJdPSY`J4acp&qG,,W-?-?@"+  /B  CF  BG  GI  JR  IS  -T  #U  U Aw	w. ww		(:(:;1A;<<w'*cdgchhjksjt(uvv;s   CG/H/Hc                 t   |s|S t         j                  dt         j                        }|j                  |      s|S t	        |d      }|j                  dd      D ]  }d|d<   | j                         |d<    d	j                  |j                  j                  D cg c]  }t        |       c}      S c c}w )
u^   
        Заменяет класс у тега 'ul' списка чекбоксов
        zinline-task-listr  r`  ulr  ztox-checklistrY  rH   r   )r   r  r   r!  r   rK   rM   r   r^  re  r%  )rb  rR   r[  r  rT   r   s         rU   _convert_task_listzCmfDocument._convert_task_list  s    
 K**0*=~~d#K!$/	%%d3E%F 	/C*CL __.C	N	/ ww	(?(?@1A@AA@s   B5c                    |s|S t         j                  dt         j                        }|j                  |      s|S t	        |d      }|j                  dddi      D ]V  }|j                  d      s| j                         |d<   |j                  dg       }d	|v s>d
|vsC|d   j                  d
       X t        |      S )uM   
        Добавляет атрибут "data-id" для checkbox
        zdata-inline-task-idr  rG   liTr  rH   rY  checkedztox-checklist--checked)
r   r  r   r!  r   rK   r`   rM   r-  r%  )rb  rR   r'  r  rT   	tag_classs         rU   _convert_checkboxzCmfDocument._convert_checkbox0  s    
 Kjj/rttj<zz$K!$6	%%d3H$2O%P 		>C779%!$!2I,IY&,I=G##$<=		> 9~rW   c                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
}|s|S t        j                  dt        j                        }t        j                  dt        j                        }|j	                  |      r|j	                  |      s|S t        |d      }|j                  dddi      D ].  }t        |j                  dddi            D ]  \  }}|j                  d      }	d|	dddd|dk(  dddd
}
t        |j                  t        j                  |
d      j                  dd      |	dj                  |j                  D cg c]  }t        |       c}             d      }|j!                  |j"                          |j                  d!"      D ]  }|j%                            |d# $      D ]  }|j'                           |j)                          1 t        |      S c c}w )%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-tabsrG   r  r  zui-tabr   r~   z#254dcbDefaultFr   
horizontalleftBasic)
vertabsPageTitler   colorPalettes	hasBorderfixed
primaryTab	directiontextAlignmentheaderStyler  "z&quot;r   )r  tab_namer  rwui_tabs_menur  c                 "    t        | t              S r   )r   r   rR   s    rU   rE  z+CmfDocument._convert_tabs.<locals>.<lambda>  s    jw6O rW   rx  )rM   r   r  r   r!  r   rK   r  r`   r  r  r  rf  r   r  r%  r  r  	decomposeextractunwrap)rb  rR   r  r'  r  r  tabs_tagr   tab_tagru  r  r  r  ul_tagcomments                  rU   _convert_tabszCmfDocument._convert_tabsJ  s   
 oo'( )O PSO`Na b::=//:K9L M8
 9<8I7J K::=//:K9L M77:7H6I J::=//:K9L MH
 ILHYGZ 	[N ORooN_M` a	A$L Kjj+244j8jj244j0

4 SZZ%5K!$6	!**59JI8V*W !	H'(9(9%HY[cGd(9(ef :
7";;{3%-&%.!&""#q&!-%+#* )KK#zz&uzEMMcS[\!) "9I9I(JAQ(J K   
 " $$X%8%89/:2 #++3C+D #  "# $)OP "!" OOC!	F 9~ )Ks   	I-c                    ddl m} |s|S t        j                  dt        j                        }|j                  |      s|S d| j                          d}t        |d      }|j                  dd	d
i      D ]  }|j                  d	      }|st        j                  j                  |d      }t        |j                         dz        }	 ||d      }
t        |j                  |	|
      d      }|j                  |j                           dj#                  |j$                  j&                  D cg c]  }t)        |       c}      S c c}w )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>
        r`  r   r   Tr  z%Y-%m-%dr   ru)locale)	timestampdate_strrG   r   )babel.datesr  r   r  r   r!  rM   r   rK   r`   r   strptimeintr  r  r  r  r   r^  re  r%  )rb  rR   r  r[  r  r  rT   datetime_strdatetime_objr  r  rx  r   s                rU   _convert_datezCmfDocument._convert_date  s@   
 	,K**0*=~~d#K)* +	 "$/	%%fZ4F%G 	1C77:.L#,,55lJOLL224t;<I"<=H#'%   G W//0%	1( ww	(?(?@1A@AA@s   2Ec                 h   |s|S t         j                  dt         j                        }|j                  |      s|S t	        |d      }|j                  dd      D ]J  }ddg|d<   d	|d
<   | j                         |d<   |j                  d      D ]  }| j                         |d<    L t        |      S )Nz
table-wrapr  rG   r  r  ztableView-content-wrapzcmf-scrollbarrY  
wikitableszdata-macrosrH   table)r   r  r   r!  r   rK   rM   r%  )rb  rR   r'  r  table_wrap_tag	table_tags         rU   _convert_table_wrapzCmfDocument._convert_table_wrap  s    Kjjbddj3zz$K!$6	'00|0L 	9N'?&QN7#,8N=)(+(9N9%+44W= 9	'*'8	)$9	9 9~rW   data	to_formatobj_idc                     dd l }|j                  t        j                  d| i||d      }|j                  dk7  rt        d| d|j                          y|j                  S )	Nr   r  )r  r  )filesr     u4   Не удалось конвертировать в z: r   )requestspostconfigCONVERTER_PLANTUML_URLr   r!  r  )r  r  r  r  r5  s        rU   convert_plantumlzCmfDocument.convert_plantuml  sb    mmF99&$ajv|V}m~??c!LYKWYZ]ZeZeYfgh;;rW   rZ  c                 `    | j                  |j                         d|      j                         S )Npuml)r  encodedecode)rb  rZ  r  s      rU   rS  zCmfDocument.convert_encuml2uml  s&    ##FMMOVVDKKMMrW   rR  c                 T   |j                  d      }|D cg c]  }|j                          }}dj                  |      }t        j	                  d|      sd| }t        j	                  d|      s| d}| j                  |j                         d|      j                         S c c}w )NrZ  z
^@[a-z]+\nrP  z@[a-z]+$rQ  r   )r   rstripr   r   r!  r  r  r  )rb  rR  r  lineslinecleaned_lines	clean_umls          rU   r)   zCmfDocument.convert_uml2svg  s    		$389499IIm,	yy	2%i[1Iyyi0$+Y/I##I$4$4$6vFMMOO :s   B%c                 <   t         j                  d       | j                  |      \  }}t         j                  d       | j                  |||      }t         j                  d       | j	                  |      }t         j                  d       | j                  |      }t         j                  d       | j                  |      }t         j                  d       | j                  |      }t         j                  d       | j                  |      }t         j                  d       | j                  |      }t         j                  d	       | j                  |      }t         j                  d
       | j                  |      }t         j                  d       | j                  ||      }t         j                  d       | j                  |      }t         j                  d       | j                  ||      }t         j                  d       | j                  |      }t         j                  d       | j!                  |      }t         j                  d       | j#                  |      }t         j                  d       | j%                  |      }| j'                  |      }t         j                  d       | j)                  |      }t         j                  d       | j                  |      }t         j                  d       |D ]  }|j+                  |||         } |S )u   
        Конвертируем модули из Confluence
        TODO это надо все вынести на сторону клиента в фронтенд
        confluence_convertz%confluence_convert get_all_drawio_svgz(confluence_convert _convert_plantuml_tagz&confluence_convert _convert_status_tagz!confluence_convert _convert_h_tagz'confluence_convert _convert_title_macroz!confluence_convert _convert_titlez confluence_convert _convert_codez(confluence_convert _convert_macro_panelsz'confluence_convert _convert_ui_text_boxz$confluence_convert _convert_expanderz&confluence_convert _convert_childpagesz#confluence_convert _convert_layoutsz$confluence_convert _convert_pagetreez confluence_convert _convert_datez!confluence_convert _convert_emojiz-confluence_convert _convert_macro_attachmentsz$confluence_convert _convert_checkboxz confluence_convert _convert_tabs)r   r   rJ   r]  rM  rd  r{  rq  r  r  r  r  r  r  r<  r  r  r  r`  re  r  rf  )rb  rR   r  rg  rp  s        rU   r  zCmfDocument.confluence_convert  s    	
$%2248T	78(({IF	:;&&t,	89!!$'	34''-	9:!!$'	34  &	23((.	:;''-	9:$$T*	67&&tY7	89##D)	56$$T95	67  &	23 !!$'	34--d3	?@%%d+$$T*	67  &	23  &	23  	7C<<[%56D	7rW   c                     | j                   j                  r| j                  ry | j                  | j                   j                  | j
                  j                        | _         | j                          y r   )rh   r   r   r  rx   r]   r'  r   s    rU   r   zCmfDocument._process_text_draft;	  sL    ))T->->11$//2G2GW""$rW   c                     | j                  ddg       d}t        | j                  j                  t        j
                        sd}| d| j                   S )Nr  r   r2  deskz
/Document/)r   r   r   rx   rI   r   r  )ry   
base_places     rU   r]  zCmfDocument.hrefA	  sN    &(+,
$++++V->->?JZ		{33rW   c                 \   | j                   r=| j                  }| j                  }| j                  }| j                  }| j
                  }nn| j                  j                  }| j                  j                  }| j                  j                  }| j                  j                  }| j
                  j                  }| j                  }	 t        j                  j                  |||||ddt        j                  |	      ryt        j                  j                  |||||ddt        j                  |	      ryt        j                  j                  |||||ddt        j                  |	      ry	 y# t         j"                  j$                  $ r"}t        j'                  d|        Y d}~yd}~ww xY w)u   
        Если любой из WEB-доступов открыт - возвращаем True
        Хак для быстрого отображения, что документ доступен из WEB
        rf   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_idru  cmf_owner_idr]   %perm_security_level_allowed_ids_cacherx   r   r6  rI   r  check_accessr   anonymous_usersharelink_anonymous_usertest_guest_userr  
base_errorr  r   )ry   r  obj_parent_idr  self_idr  r6  es           rU   _is_web_publiczCmfDocument._is_web_publicK	  s    "88O NNM,,LggG484^4^1"88>>O NN00M,,22LggmmG484^4^4b4b1__
 	##00 /'!M# ! 0 00U 1 W  ##00 /'!M# ! : :0U 1 W  ##00 /'!M# ! 1 10U 1 W W 	 ~~&& 	GG:1#>?	s$   6E, <6E, 36E, ,F+	F&&F+u   Доступен из WEB)captionvirtualreadonlyc                 B    | j                          | j                         S r   )_acl_check_writelockr   s    rU   r8   zCmfDocument.public_lock	  s    yy{rW   c                 B    | j                          | j                         S r   )r  unlockr   s    rU   r9   zCmfDocument.public_unlock	  s    {{}rW   c                 B    | j                          | j                         S r   )r  	lock_pingr   s    rU   r:   zCmfDocument.public_lock_ping	  s    ~~rW   r   checkbox_valuec                    | j                  |      \  }}t        |d      }|j                  d|i      }|sy |rd|j                  d<   n(|j                  j	                  d      r|j                  d= dj                  |j                  j                  D cg c]  }t        |       c}      }|D ]  }	|j                  |	||	         } |S c c}w )Nr`  rH   r  ztox-checklist--checked checkedrY  r   )
rJ   r   rd  r`  r`   r   r^  re  r%  rf  )
ry   rR   r   r  rg  r(  text_elementr   new_textrp  s
             rU   _text_update_checkboxz!CmfDocument._text_update_checkbox	  s     33D9T!$/	 ~~Y,@~A*JLw'##G,""7+77INN,C,CDqCFDE 	?C''[-=>H	? 	 Es   Cc                    | j                  g d       | j                  rt        dd       | j                  rt        dd       t        j
                  j                  | j                  d      }|rA| j                  j                  | j                  j                  dd	      k(  rt        d
d       | j                  | j                  j                  ||      }| j                  | j                  j                  ||      }|s|st        d| d       n|r|st        j!                  d|        d}|r	|| _        d}d}|r	|| _        d}| j#                  d       |rd| j                  _        |rd| j                  _        t        j&                  j)                  |        |rd| j                  _        |rd| j                  _        y y )N)rR   rh   r   r   zcur_published_version.statusr  r   u~   Нельзя в документе, у которого стоит опция "Выпуск только владельцем"Tr  u   Нельзя в шаблоне)r   rt  r   r   r   u(   Нельзя в утвержденномuD   DEV: в документе не найден элемент data-id=Frw  )r   r   r!  r  rI   	CmfStatusr  r   r   r   r   r  rR   rx   rh   r   r   ri   r   r0  r1  )ry   r   r  workflow_need_approverR   rh   text_is_changedtext_draft_is_changeds           rU   r6   zCmfDocument.update_checkbox	  s     ]  	^%%  W  _c  d6dC & 0 0 6 6\` 6 a T%?%?%F%F$--JjJjw  NXJj  KY  &Y@M))$))//7NS//0E0EwP^_
J\]d\efnrsZGGZ[bZcdeDI"O %(DO$(!		D	! #'DII  )-DOO&2248#(DII  ).DOO& !rW   c           	         t         j                  j                  |       }|D ]  }|j                           t         j                  j                  dd| j
                  gg dg      }|D ]  }|j                           t         j                  j                  dd| j
                  g|D cg c]  }|j
                   c}gg dg      }|D ]  }	|	j                           y c c}w )N)r   ru  r   )r   r  Tr   r  )rI   r   r   r+  
CmfCommentr]   r_   )
ry   rv   rz   history_listr  commentsr  r  r  rk  s
             rU   r-   zCmfDocument.clean_after_encrypt	  s    0055T5B# 	GNN	 $$));dgg2NPl1m)n 	GNN	 **//dTWWLpfnWoabXYX\X\WoLp8q  tP  8Q/  R% 	 J	  Xps   +C$c                    | j                  g d       t        j                  || j                  | j                  |||       }|j                          | j                  D ]X  }t        j                  |j                        t        j                  u r|j                  |||       F|j                  |||       Z | j                  D ]4  }t        j                  || j                  |||      j                          6 y )N)
tree_nodes
docs_linksr  )responsiblerL   r  r   r   r  )r  rL   r   r   r  )r   rI   CmfCourseDocumentResultrL   r  ri   r  r  r  r]   r   _lms_create_progressr  )ry   r  r   course_progresscourse_doc_resultr   rr   s          rU   r  z CmfDocument._lms_create_progress	  s    @A #::LL"# ; 
 	 OO 	VD&&tww/63E3EE))&2C_U ))&/CTU	V ?? 	C**"YY&- +  df	rW   c                     t        dd       t        j                  j                  |d         }	 |j	                          |j                  |d         S # t
        $ r Y y w xY w)NzDEV: depricated!Tr  r   in_text)r  )r!  rI   r   r`   r  rL  update_text_inline_comments)rb  rv   rz   rr   s       rU   r<   z.CmfDocument.public_update_text_inline_comments
  sg    $D1  $$T!W-	  " ..vi7H.II " 		s   A 	A"!A"c                     	 | j                          t        j                  | j                        }|r|j                  d|         | j                  |i |S # t        $ r Y y w xY w)NzPPP-COM-ADDr  )rK  rL  r  r  r  r   r'   )ry   rv   rz   r2  s       rU   r=   z%CmfDocument.public_add_inline_comment
  sk    	  " ''8--m-F&t&&777 " 		s   A 	A$#A$c                 b    	 | j                          | j                         S # t        $ r Y y w xY wr   )rK  rL  export_to_pdfr   s    rU   rB   z CmfDocument.public_export_to_pdf*
  s8    	  " !!## " 		   " 	..c                 b    	 | j                          | j                         S # t        $ r Y y w xY wr   )rK  rL  export_to_docxr   s    rU   rC   z!CmfDocument.public_export_to_docx2
  s8    	  " ""$$ " 		r  c                    | j                   st        j                  | _         | j                  s | j	                          | j                          | j                  j                  d      }| j                  stt        j                  | j                  | |d| j                  | j                   | j                  | j                  | j                  	      }|j                  d       || _        n| j                  | j                  _        || j                  _        d| j                  _        | j                  | j                  _        | j                   | j                  _         | j                  | j                  _        | j                  | j                  _        | j                  j                  d       | j'                  | j                   j(                  | j*                  j(                        | _        | j                   j,                  r!| j                   | _
        | j/                          t1        | d  |i | | j5                  d       y )Nr   r   T)	rR   r   r   r   r   
cmf_authorcmf_modified_byr  r  r  )r  r   current_userr   r  r  r   r   rI   r   rh   r   r  r  r  ri   rR   r   r   r  rx   r]   r   r   r   _save_importr,   )ry   rv   rz   r   r   r   s        rU   r  zCmfDocument._save_import:
  s   nnDO}}  "!mm6666J(($77T__?C?JEIBF..CG??HLH\H\GKGZGZHLH\H\ 8 ^O   T 2(7D%-1__D%%*-8D%%,37D%%204D%%/15D%%06:6J6JD%%56:6J6JD%%5%%**t*<++DIIOOTWW]]K	99"iiDO$$& 	d-f-D)rW   c                    t               }| j                  g ddgdg      }|D ]_  }t        j                  d|j                  j
                        D ]0  }|j                  d      rd|vs||vs|j                  |        _ a | j                  g ddgd	g      }|D ]_  }t        j                  d|j                  j
                        D ]0  }|j                  d      rd|vs||vs|j                  |        _ a t        |      S )
N)rR   r!  
%img%src=%z-cmf_modified_atrR   r  zimg[^>]*src=[\'"]([^\'"]*)z
data:imageCmf)rh   r!  r  rh   )	r$  r   r   r   rR   rx   ri  r&  rh   )rb  rv   kwragsdocs_with_problemsres_textrr   matchres_text_drafts           rU   r2   zCmfDocument.patch_20230407c
  s,    !U881()8  

  	C$A388>>R ##L1%#5G*G&**3/	 7() > " 

 " 	C$A3>>CWCWX ##L1%#5G*G&**3/	 &''rW   c                 ^    g d}t         j                  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_typerR   r   r   r   rv  )rI   r   r`   )rb  r  rv   rz   r   r  s         rU   r/   zCmfDocument.get_in_approve
  s@    
 ++//tS)+GH 0 

 rW   )
source_urlc                   t         j                  j                  d d      sy |y dd l}t        j                         j                  |d      }|j                  dk7  ry dd l}|j                  |j                        }|j                         S )NFr   )r  r   )timeoutr  )rI   r  r  r  r  requests_sessionr`   r   base64	b64encoder  r  )rb  r  rv   rz   r  responser  r5  s           rU   link_patch_20230407zCmfDocument.link_patch_20230407
  s{    ##44T5A++-11*f1M3&x//0zz|rW   r?  text_verc                 *   ddl m} | j                  j                          || j                  k(  ryt        j
                  j                  j                         5   ||      | _        || _        | j                  d       ddd       y# 1 sw Y   yxY w)u   
        TODO: 16.05.2023 пока что отключаем ацл для записи отрендеренного текста
        r   )markup_html_cleanNTrw  )
cmf.util.cmf_clean_textr  text_render_verr   r  utilr  r>  r?  ri   )ry   r?  r  r  s       rU   r4   zCmfDocument.save_render
  s}     	>!!#t+++XX))+ 	&0=D#+D III%	& 			& 	s   'B		Br]   c                     t        d      )Nu   Устарело)DeprecationWarning)rb  r]   s     rU   check_dirtyzCmfDocument.check_dirty
  s     !344rW   c                    t         j                  j                  t        j                  |      }t
        j                  j                  |g d      }t
        j                  j                  j                  j                         }|j                  j                  |      D ]H  }d|j                  _        |j!                          |j                  j#                  |       t%                J y )N)r   rh   r   r   r   rR   r   rR  T)rO  rP  r   r  
DIRTY_PATHrI   r   r`   r  r  r  r  io
io_iterdirrh   r   ri   	io_unlink
cmf_commit)rb  r  
dirty_pathrr   r  
dirty_files         rU   rA   z CmfDocument.process_dirty_attach
  s    WW\\&"3"3V<
  $$ 8B$ C ""..557((--j9 	J(,CNN%HHJHHz*L	rW   c                 x   | j                  dg       g }|dk(  rg d}|dk(  rg d}|s| j                  j                  }t        | |t        j
                  d|      }t        j                  j                  | |dd	g
      }|rT|j                  dk(  rEt        j                  j                  di |ddgi}	|	D ]  }
|
j                  st        dd        |r||d<   t        j                  j                  di |}|s$d |d<   t        j                  j                  di |}|r |j                  |fd|i| y y )Nr   r   )approver_levelr  masteraccepted)r  r  r  r  )r  approve_groupapproverapprove_typeobj_versionfullr   )r  r  r  r   closedr   
resolutionuJ   Нельзя менять решение после утвержденияTr  r   r  rR   r   )r   r   r  r  r   r  rI   r   r`   r   r   r   r!  _approve_one)ry   r  r   rR   r  rz   master_filterr  full_approveexisting_approvesexisting_approveapproves               rU   r(   zCmfDocument.approve_one
  sR   <=>#=M#>M33??K'^^!#
 ((,,;]cmulv,wL//8; & 1 1 6 6 W W W$5 x #..jrvwx ,F8##''1&1!%F:''++5f5G G  A$A&A rW   c                     t        d       | j                  ddg       | j                  j                  j                  | _        | j                          y )Nu]   Документ утвержден, можно нажать кнопку Выпустить.zstatus.trans_approvedzstatus.trans_approved.status_to)r!  r   r   trans_approvedr  ri   r   s    rU   _approve_approvedzCmfDocument._approve_approved
  s@    qr13TUVkk00::		rW   c                     | j                  ddg       | j                  j                  j                  | _        | j	                          y )Nzstatus.trans_rejectedzstatus.trans_rejected.status_to)r   r   trans_rejectedr  ri   r   s    rU   _approve_rejectedzCmfDocument._approve_rejected
  s7    13TUVkk00::		rW   c                 t    | j                  ddg       | j                  j                  j                  | _        y )Nzstatus.trans_updatedzstatus.trans_updated.status_to)r   r   r  r  r   s    rU   r  zCmfDocument._approve_updated
  s.    02RSTkk//99rW   c                 ~    t         |   ||       | j                  | j                  j                  ||      | _        y r   )r   _replace_attachment_replace_attach_urlrh   rx   )ry   rn   
new_attachr   s      rU   r/  zCmfDocument._replace_attachment
  s3    #FJ7224??3H3H&R\]rW   c                 |   	 d|j                         v r-|d   D ]$  }| j                  |      }|j                          & n%| j                  |d         }|j                          t        j                         5  t        j                  j                  di | d d d        y # t        $ r Y y w xY w# 1 sw Y   y xY w)Nobj_id_listr\   r  r   )	keysr`   rK  rL  r  r>  rI   r   mark_viewed)rb  rz   r  r5  s       rU   r?   zCmfDocument.public_mark_viewed
  s    
	-$]3 *F''V',C'')* gg!1g2##%
   " 	5**4V4	5 	5 " 			5 	5s   A$B# : B2#	B/.B/2B;c                 b   | j                   st        | 	         S t        j	                  | j                         }| j
                  r|j                  d|        t               }| j                  d      D ]r  }|j                  | j                         vs |j                  j                  d      r<|j                  j                  d      rX|j                  |j                         t d|v r%|j                  d| d       |j                  d       d	|v r$|j                  d
|        |j                  d	       d|v sd|v sd|v rR|j                  d|        d|v r|j                  d       d|v r|j                  d       d|v r|j                  d       |r|j                  d|        y y )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   r$  valuesr6  project_perm_allow_fieldsri  endswithr&  remove)ry   r2  changed_fields_to_checkfieldr   s       rU   r=  zCmfDocument.check_edit_perm  s   7*,,''8;;--.>D-I"%%[[D[1 	>E$$D,J,J,LL!,,77A!,,55e<'++E,<,<=	> ..--.>DZ^-_#**84 33--.@d-K#**=9"&==&*AA*.EE--o4-H&*AA'../FG"&=='../BC&*AA'../FG #--n$-G #rW   c                     | j                  g d       t        j                  | j                        }|r|j	                  d|        y t
        |           y )N)rR   r  r   listsr  r  zPPP-DOC-DELETEr  )r   r  r  r  r   r   check_delete_perm)ry   r2  r   s     rU   rF  zCmfDocument.check_delete_perm<  sM     ? 	@''8--.>D-IG%'rW   	recursivec                    t        |   |i |}|rGt        j                  j	                  | ddg      D ]!  }|j
                  s|j                  |       # |S )NTr   )r   r  r   rG  )r   restorerI   r   r   r   )ry   rH  rv   rz   r5  childr   s         rU   rJ  zCmfDocument.restoreE  sc    got.v.++00TSWan`o0p 7$$MMIM67 
rW   c                     t         j                  | j                        }|r|j                  d|        t	        |   |i | y NzPPP-DOC-ARCHIVEr  )r  r  r  r   r   archivery   rv   rz   r2  r   s       rU   rN  zCmfDocument.archiveN  s?    ''8--.?T-J((rW   c                     t         j                  | j                        }|r|j                  d|        t	        |   |i | y rM  )r  r  r  r   r   archive_restorerO  s       rU   rQ  zCmfDocument.archive_restoreT  s@    ''8--.?T-J00rW   c           
         | j                  g d       | j                  st        dd       y| j                         }| j	                         D ]  }|j
                  | j                  j
                  k(  r't        j                  j                  dd|j
                  gdd| j
                  gg dg d	g
      }|sht        j                  j                  dd      }t        j                  ||| dd|d      }|j                  j                          |j                          t        j                  ||      j                           y)u   
        У всех участников родителя документа запрашиваем необходимость ознакомится
        )r   r   rR   u-   У документа нет родителяTNresponsible_idr   ru  )r  r   task.doc_need_watch:default)r  r  r   r   rT  )r  r  	9_disableuE   Необходимо ознакомиться с документом)r  r  r   rC  rL   rR   r   )r   rR   )r   r   r!  _get_history_diffall_relation_personsr]   r   rI   r,  r`   CmfLogicType
alarm_dateset_nowri   r  )ry   rm   rR   r  r  r  s         rU   rD   zCmfDocument.request_watchZ  s-    	89{{EtL%%'//1 	AFyyDNN--->>%%/?vyy.Q/:D$''.J.c.S.U% VD #0044:Whl4m
~~&Z-17B+ry}  IM & N '')		!!D!9>>@!	ArW   )Fr   )NN)~__name__
__module____qualname__r  r
   r   api_methodsr	   staticmethodrV   cmf_deferred_jobrt   r1   r%  r   r   rM   r   r  r   r   r   r  r  r;   r,   r8  r)  r'  r3   rx  r  r  r  r  r  r5   r  ri   r  r  r  r  r  r  r  r   r+  r
  r  r  r,  r-  r9  r*   r.   r>   r]  classmethodrd  rq  r{  r  r  r  r  r  r  r  r  r  r<  rM  r  r]  r`  re  r  r  r  bytesr  rS  r)   r  r   propertyr]  r  r  r   FieldCmfBoolis_web_publicr8   r9   r:   r  r  r6   r-   r  r<   r=   rB   rC   r  r2   r/   r  r4   r  rA   r(   r)  r,  r  r/  r?   r=  rF  rJ  rN  rQ  rD   __classcell__)r   s   @rU   r   r      sR    $U}S]hl"$!3 EF&)
 &U7LW[gk!+- + no ')	
 6Re') "5 B	C	(	
 ("{TXab \!# &)
 .*TTJ!0 |}%)
 &EoT^jny}~!* Z[()
 -'	
o=J| **66

+
+,
!
KF 26 G G "Ukop q  C C  25Hn  F1<
&4/b7=0 -1eTX VpA:6(s 6(p 6:e )PV	;22!&F"N#
5  %*ePT FP**(	<	>P
 .3 <.?X'(/0L $ L(T=3 =# =# = =   =S  =S  =  =D 3 3  . =C =C = =< >C >C > >@ E3 E3 E EN    * g=s g=s g=s g= g=R Ms Ms M M^ )c )c ) )V $S $S $ $L & & & &P { { { { {z /= /= /= /=b F=C F=d F=c F=c F= F=P Bc Bc B B$ S S  2 V V V Vp (B (B (B (BT s s  $ u  c   N NC NC N N 
P# 
Ps 
Ps 
P 
P <c <c <c < <|% 4 4 : :x JJ$$

+	 % M

 
3  &-/s -/D -/^  @ 	J 	J
8$%'*R !( !(F   37  s S D  5S 5T 5 5  %BN
:^ 5 5 'HX( (- )1ArW   r   )r   r   r   r   rb   rI  r   r#  r   r   
cmf.fieldsr  cmf.includecmf.utilr   &common.models.cmf_plugin_convert_mixinr	   modules.project.fieldsr
   common.models.cmf_active_entityr   r   r   rW   rU   <module>rn     sE          &     H / ;`-A,**,A `-ArW   