
    *`mh?                        d dl mZ d dlT d dlmZ d dlmZ d dlmZ d dl	Z	d dl
Z
d dlmZ d dlmZ d dlZd dlZd dlZ G d	 d
ej                  ZdS )    abort)*)fields)cmf_documenthtmldiffN)BeautifulSoup)floorc            	           e Zd Zej        j        g dz   Zedefd            Zede	fd            Z
d Zd Zd Zd	 Zed)d            Zedededefd            Zedededefd            Zededededefd            Z fdZed             Zed             Zd Zed             Zd Zd Zd Zd Zd Zd Zd*dZed             Z d+d Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z' fd'Z(d( Z) xZ*S ),CmfDocument)	likerequest_watchupdate_text_inline_commentsupdate_text_macros_parametersupdate_text_draft_task_link!update_text_draft_inline_commentsupdate_text_task_linkpatch_inline_comment_data_idshighlight_inline_commenttextc                 p   dd l }i }t          j        t          j        dt          j                  |           D ]y}|                    |                                          }|                                }t          t          d| dd                    }| 
                    ||          } |||<   z|| fS )Nr   z(<svg\b[^<>]*>[\s\S]*?<\/svg>)flagsz<div class="svg-replace" id="z"></div>html.parser)hashlibrefindallcompileDOTALLmd5encode	hexdigeststrr
   replace)r   r   svg_replacesvgr!   md5sumkeys          ./cmf/models/cmf_document.pyget_all_drawio_svgzCmfDocument.get_all_drawio_svg   s    :bj)JRTR[\\\^bcc 	# 	#C++cjjll++C]]__Fm$TF$T$T$TVcddeeC<<S))D"KD      returnc                      ddl m } m} t          |                     |j                                      d          dd                   S )u?   Генерирует номер версии документаr   datetimetimezonez%Y%m%d%H%M%S%fN)r0   r1   intnowutcstrftimer/   s     r*   calc_doc_versionzCmfDocument.calc_doc_version(   sP     	0///////8<<--667GHH"MNNNr,   c           	         |                      g d           | j        st          dd           dS |                                 }|                                 D ]}|j        | j        j        k    rt          j        	                    dd|j        gdd| j        gg dg d	g
          }|sot          j
        	                    dd          }t                              ||| d|d          }|j                                         |                                 t                              ||                                           dS )u   
        У всех участников родителя документа запрашиваем необходимость ознакомится
        )parent	cmf_ownerr   u-   У документа нет родителяTNresponsible_id==	parent_id)logic_prefixr<   task.doc_need_watch:defaultcache_status_typez!=CLOSEDfilterr?   codecache_inmemoryuE   Необходимо ознакомиться с документомresponsible
logic_typer9   namer   approvedr9   r   )load_fieldsr9   	cmf_alert_get_history_diffall_relation_personsidr:   modelsCmfTaskgetCmfLogicType
alarm_dateset_nowsave
CmfComment)selfargskwargsr   persontaskrJ   s          r*   r   zCmfDocument.request_watch.   s}    	888999{ 	EtLLLF%%''//11 	A 	AFyDN--->%%/?vy.Q/:D$'.J.c.c.c.S.S.S.U% V VD  A#044:Whl4mm
~~&Z-1+ry}  IM & N N '')))		!!D!99>>@@@@	A 	Ar,   c                     | j         j        }t          j                            dd| j        gg dgdgddgddg	          }|r&|                     |d
         j         j        |          }d| d| j         d}|S )Nr=   r<   )rL   r<   Tz-cmf_versioncmf_versionr         )rD   order_byr   slicer      Изменения: , <a href="   ">посмотреть</a>)r   valuerS   CmfDocumentHistorylistrR   	html_diffhref)r[   r   doc_historys      r*   rP   zCmfDocument._get_history_diffH   s    y/44k4QUQX=Y<T<T<T=V>L=M<I6;R[\]^Z_ 5 a a  	C>>+a."5";TBBD\d\\ty\\\r,   c           	         t                                           5  |                     | j        j        | j        j                  }d| d| j         d}t          j        	                    dd| j
        j        gdd| j        gg dg dg	          }|st          j        	                    d
d          }t                              | j
        || d|d          }|j                                         |                                 |j                                         |                                 n0t                              ||                              d           d d d            d S # 1 swxY w Y   d S )Nrf   rg   rh   r;   r<   r=   r>   r<   ztask.doc_need_approver@   rC   ztask.doc_need_approve:defaultTrE   u8   Необходимо выпустить документrH   rM   F)notify)cmfutildisable_aclrl   r   ri   
text_draftrm   rS   rT   rU   r:   rR   rV   rW   rX   rY   rZ   )r[   text_diff_content	text_diffr_   rJ   s        r*   _create_publish_taskz CmfDocument._create_publish_taskU   s     "" 	R 	R $ty@U V Vr/@rrTYrrrI>%%/?t~GX.Y/:D$'.J.].].].S.S.S.U% V VD  R#044:Yjn4oo
~~$.Z`d+elu  AE & F F'')))		'')))		 !!I!>>CC5CQQQ+	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	Rs   E	E00E47E4c                 R   t                                           5  t          j                            dd| j        j        gdd| j        gg dg dgdg          }|r3|j                            d          |_	        |
                                 d d d            d S # 1 swxY w Y   d S )	Nr;   r<   r=   rp   r@   workflow)rD   r   rB   )rr   rs   rS   rT   rU   r:   rR   ry   get_default_statusstatusrY   )r[   r_   s     r*   _delete_publish_taskz CmfDocument._delete_publish_taskm   s     "" 	 	>%%/?t~GX.Y/:D$'.J.].].].S.S.S.U _i]i & k kD  "m>>xHH			 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A5BB #B    c                 4    |pd}|pd}t          |||          S )uz   
        Используем единую тулзу для анализа изменений документа
         r   )clsablimits       r*   rl   zCmfDocument.html_diffw   s(    
 GG1e$$$r,   rt   c                    i }t          j        dt           j                  }|                    |           rft	          | d          }|                    dddi          D ]=}|                    dddi          D ]"}|                    d	          r|||d	         <   #>i }t          j        dt           j                  }|                    |          rft	          |d          }|                    dddi          D ]=}|                    dddi          D ]"}|                    d	          r|||d	         <   #>|}	|                                |                                z
  D ]}
t          ||
                   |	z   }	|	S )
u1  
        Получаем черновик с инлайн-задачами

        :param text: Оригинальный текст документа с инлайн-задачами
        :param text_draft: Черновик
        :return: Черновик с инлайн-задачами
        zdata-mentions-taskr   lxmlspanTr   zdata-mention-typer_   data-object-id)	r   r   Isearchr
   find_allhas_keykeysr$   )r   rt   tasks_in_textre1	soup_textr   r   tasks_in_draftsoup_text_draftresult_text	task_spans              r*   handle_inline_taskzCmfDocument.handle_inline_task   s    j.bd;;;::d 	A%dF33I!**64H$3OPP A As-@&,IJJ A AAyy!122 A<@a(8&9:A j.bd;;;::j!! 	B+J??O'00:NPT9UVV B Bs-@&,IJJ B BAyy!122 B=Aq)9':;B !&++--0C0C0E0EE 	F 	FImI677+EKKr,   c           	      Z   t          j        dt           j                  }t          j        dt           j                  }|                    |           r|                    |           s,|                    |          r|                    |          s|S d}t	          | d          }i }|                    dddi          D ]}|||                    d          <   t          j        	                    |          \  }}t	          |d          }	|	                    dddi          D ]j}|                    |                    d                    r*|
                    |                    d          d           Td	}|                                 ki }
|rNd
                    d |	j        j        D                       }|D ]}|                    |||                   }|}nF|}|                                D ].\  }}|                     |          }|                     |j                                        d|          }|                     dd|          }|                     d|          t-          d          z   }| d|                             d          t-          d          z   }|| |d                             d          z   }t          j        d| ||         ddd                   }|r||                                z
  n|}| ||         }t          j        d| ||                   }|r||                                z   n|}| ||         }| |dz
  |         dk    }| ||dz            dk    }|rt          j        dd|          }|rt          j        dd|          }||j        z   |z   }|
                    |g dg          \  }}|s8t3          t          j        ||                    }t-          |          }||g|
|<   |s|t-          |          k     r	||         }n|d         }|d|                                                             d          t-          d          z   } |                                ||                                d                             d          z   }!d}"t          j        dd| ||                   }#t          j        dd|| |                                                   }$|#                                }%|%r|%d         nd
}&t          j        dd
|&          }&|$                    |d                                          }'|'r|'d         nd
}(|&|(k    r|&|vrd	}"|"rt-          |          })t-          |          |)z
  t-          |j                                                  z
  }*||dz
  g|
|<   |                                |)z   }+|                                |*z
  },|d|+         t;          |          z   ||,d         z   }0|S )ua  
        Получаем черновик с комментариями-пометками

        :param text: Оригинальный текст документа с комментариями-пометками
        :param text_draft: Черновик
        :return: Черновик с комментариями-пометками
        data-mark-annotation-typer   inlineCommentFr   r   rR   NTr   c                 ,    g | ]}t          |          S  r$   .0xs     r*   
<listcomp>z5CmfDocument.handle_inline_comment.<locals>.<listcomp>       !P!P!PQ#a&&!P!P!Pr,   r   z<span</span>z<p>z</p>z\s|>z\s|<   z&nbsp;z\&nbsp; z<br />z<br/>rb   )r   r   r   r   r
   r   rU   rS   r   r+   popunwrapjoinbodychildrenr%   itemsfindcountr   striprfindlenstartsubrk   finditerendsplitr$   )-r   rt   r   re2is_remove_commentsoup_text_commentid_commentsr   svg_tagsr   	dict_textr)   r   
id_commentposition_commentidx_position_textstart_commentend_comment	start_rowend_rowmatch_start_wordposition_start_wordword_beforematch_end_wordposition_end_word
word_afterhave_nbsp_beforehave_nbsp_afterword	text_listnumbermatchstart_row_draftend_row_draftis_near_not_matchtext_to_splittext_draft_to_split	near_wordlast_near_wordnear_word_draftlast_near_word_draftshift_start	shift_endresult_start
result_ends-                                                r*   handle_inline_commentz!CmfDocument.handle_inline_comment   s`    j5RTBBBj)666

4   	SZZ%5%5 	ZZ
++	03

:0F0F	!)$77%..v8SUd7eff 	/ 	/D*.K''%1DDZPP*'
F;;#,,V6QSb5cdd 	 	Dtxx~~.. 5555 %)!	 L	`!P!P/2F2O!P!P!PQQJ D D'//Xc]CC

$KK$K$/$5$5$7$7 E` E` 
D#'99Z#8#8 $(JJty/@/@!EU$V$V! $

7A7G H H"ii	3CDDs9~~U -066u==E

J	%[\\(:(?(?(G(GG#%9VT)M:Q5RSWSWUWSW5X#Y#Y Rb&qm6F6L6L6N6N&N&Nhq# ##6}#DE!#64G8K3L!M!MLZ$gK.2F2F2H2H$H$H`g!!+.?"?@
 $((9-(G#HH#T "&{;?'B"Cx"O $ F"$&C"E"EK" D!#	3
!C!CJ#di/*<$-MM$Q$@$@!	6  : $R[{%C%C D DI ^^F'0&&9IdO $s9~~55%&78EE%bME"-nu{{}}n"="C"CE"J"JSQVZZ"W %		k%))++,,.G.L.LV.T.T T$)!
 !#y'4	-@W;X Y Y&(fY_]b]h]h]j]jMjAk&l&l#)//11	2;!C2!#	2~!F!F"5"="=dC"H"H"N"N"P"P>M'Ur':':SU$!%999nTX>X>X(,%$ !+..II3c$)//:K:K6L6LL	#,fqj"9	$${{}}{:"YY[[94
)-<-83t99D{S]S^S^G__r,   	macros_idmacros_parametersc                    t           j                            |           \  }} t          j        |t          j                  }|                    |           r<t          | d          }|                    |          }|r||d<   t          |          } |D ]}| 
                    |||                   } t          |          S )Nr   r   )rR   zdata-macros-parameters)rS   r   r+   r   r   r   r   r
   r   r$   r%   )r   r   r   r   r   r   table_filtersr)   s           r*   handle_macros_parametersz$CmfDocument.handle_macros_parameters  s    +>>tDD$j"$///::d 	"%dM::I%NNiN88M L:K67y>>D 	4 	4C<<Xc]33DD9~~r,   c                 N    t                                                      g dz   S )N)person_signsperson_viewspublish_approved_onlyrL   r9   r   rt   )supersave_preload_fields)r[   	__class__s    r*   r   zCmfDocument.save_preload_fields%  s4    ww**,, 0F 0F 0F F 	Fr,   c                    t          | d          }t          j        |          }|                                D ]K}|r|j        s|j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            d	d           t          |j                  D ]2}|                    d
          r|j                            |d           3d|j                            dg           v s	d|j        v r|                                 M|                                D ]K}|r|j        s|j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            d	d           t          |j                  D ]2}|                    d
          r|j                            |d           3d|j                            dg           v s	d|j        v r|                                 M|j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            dd           |j                            d	d           t          |j                  D ]2}|                    d
          r|j                            |d           3|j                            dd           t          |j	                  } | dd         } | dd         } t          |          }| 
                    dd          
                    dd          
                    dd          } |
                    dd          
                    dd          
                    dd          }| |k    rt          dd           d}t          dt          |          dz             D ]<}| d|         |d|         k    r n#| |dz
           dk    r|}| |dz
           dk    rd}=|dz  }|r|dz
  }|dk    r| |d         } ||d         }d}t          dt          |          dz             D ]:}| | d         || d         k    r n| |          dk    r|}| |          dk    rd};|dz  }|r|dz
  }|dk    r| d|          } |d|          }d| d}t          | d          }t          |d          }	|	j	        j        }
t          |	j	        j                  dk    rEt          |	j	        j        j                  dk    r#|	                                D ]}|r|j        s|}
t          |j	        j                  dk    rt          d|j	        j         d           |j	        j        j        |
j        k    r+t          d |j	        j        j         d!|
j         d           |j	        j        j        }t!          |                                          t!          g d"          z
  rt          d#| d           |                    d$d          S )%u   
        Проверяем, что в текст добавлен только inline-кмментарий.
        Дополнительно здесь мы находим id спана добавленного комментария
        r   classNzdata-renderedstylerelzdata-mce-srczdata-mce-stylezdata-mce-hrefz	data-mce-zmacros-panelzdata-macrosrm   r       r   
r   u+   Не передан комментарий!Tr   rb   <>r   z<span>r   rc   uO   DEV: переданы неверные данные в комментарий: uV   DEV: обрамленный комментарием текст отличается: z != )r   rR   r   data-mark-typedata-idr   u^   DEV: у inline-комментария передан неизвестный аттрибут: r   )r
   copyr   attrsr   rk   
startswith	decomposer$   r   r%   rO   ranger   r   contentssetr   rU   )new_texttext_elementsoup_text_with_inlineelem	attr_nameexisted_textinside_tag_posispan_with_commented_datacommented_datacommented_data_body_span
span_attrss               r*   _verify_inline_commentz"CmfDocument._verify_inline_comment)  s    !.h ? ?y..
 *2244 	! 	!D tz JNN7D)))JNN?D111JNN7D)))JNN5$'''JNN>4000JNN+T222JNN?D111!$*-- 4 4	''44 4JNN9d333 !<!<<<QUQ[@[@[    ))++ 	! 	!D tz JNN7D)))JNN?D111JNN7D)))JNN5$'''JNN>4000JNN+T222JNN?D111!$*-- 4 4	''44 4JNN9d333!<!<<<QUQ[@[@[   w---555w---ud+++~t444/666555l011 	8 	8I##K00 8"&&y$777vt,,,,122ABB<CRC=<(( ##FC0088rBBJJ4QSTT#++FC88@@rJJRRSWY[\\|##C4PPPP q#l++A-.. 	& 	&A||BQB///!}##!"!}##!%	Q 	#"Aq55|H'+L q#l++A-.. 	& 	&A}aRSS 111|s""!"|s""!%	Q 	#"Aq55!}H'!,L 6555#06#B#B &|V<< $2#6#; ~"+,,11c.:M:R:[6\6\`a6a6a&//11 0 0 4: +/((',566!;;  Q  iA  iF  iO  Q  Q  Y]  ^  ^  ^  ^#(-6:R:[[[ o27<Eo oKcKlo ovz| | | |-27=
z  !!C  )D  )D  )D  %E  %E  E 	4 '$' '.24 4 4 4~~.555r,   c                 
   t           j                            |          \  }}t          |d          }|                    d| i          }t          |d          }	|	                    d|i          }
t          |d          }|                    d| i          }|s2t                              ||          }||k    rt          d           |S ||k    rq|                    |	j        j	        d                    d
                    d |j        j        D                       }|D ]}|                    |||                   }|S t          j        d	t          |
                    d         }|                    d
d          }t          |                              d
d          }t          |                              d
d          }|                    |          }|                    |          }|dk    rt          |                    d|
j                            d d         }|                    |          }|d |         }||z  }||||t'          |          z            z  }|dz  }|||t'          |          z   d          z  }|                    |           d
                    d |j        j        D                       }|D ]}|                    |||                   }|S |dk    r||k    rd}d}d}|                    ||          x}dk    rv|t'          |          z   }||dz
           dk    r4||t'          |          z   |t'          |          z   dz            dk    r|}n!|dz  }|                    ||          x}dk    vt          |                    d|
j                            d d         }d}t)          d|dz             D ]*}|                    ||          }|t'          |          z   }+|d |         }||z  }||||t'          |          z            z  }|dz  }|||t'          |          z   d          z  }|                    |           d
                    d |j        j        D                       }|D ]}|                    |||                   }|S |dk    rn	 |                    d|
j                  }d|_        |                    |           d
                    d |j        j        D                       }|D ]}|                    |||                   }|S )Nr   r   r   r   u   В новой версии документа данный абзац отсутствует, в будущем добавленный комментарий Вы сможете посмотерть в истории комментариев.r   r   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument._merge_inline_comment.<locals>.<listcomp>      CCCa3q66CCCr,   z^[^>]*>(.*)</span>$r   r   rb   r   r   r   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument._merge_inline_comment.<locals>.<listcomp>  r
  r,   r      c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument._merge_inline_comment.<locals>.<listcomp>  r
  r,   #c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument._merge_inline_comment.<locals>.<listcomp>  s    @@@1A@@@r,   )rS   r   r+   r
   r   r   rO   replace_withr   r   r   r   r%   r   r   r$   r   new_tagr   r   r   stringappend)data_idcomment_span_idr   html_node_textorig_text_element	text_mainr   r   r   r   comment_span_elementsoup_text_maintext_main_elementresr)   inline_comment_contenttext_element_strtext_main_element_strcontent_countcontent_main_countinserted_span_tagins_postext_element_str_new	find_skip	_find_pos
_find_skip_pos_orphan_comments                                r*   _merge_inline_commentz!CmfDocument._merge_inline_comment  s   +>>tDD$!$//	 ~~Y,@~AA -nf E E499AQSb@c9dd&y&99*//y'6J/KK  	33ItDDCd{{ r s s sJ ,,,%%&;&@&I!&LMMM''CC9>+BCCCDDC 6 6kk#x}55J "$,BCH\D]D]!^!^_`!a!7!?!?!L!L|,,44VSAA #$5 6 6 > >vs K K(../EFF2889OPPA #I$5$5fDXD^$5$_$_ ` `adbdad e '++,BCCG#3HWH#=  $55  $4WWSI_E`E`=`5`$aa  I-  $4WSAW=X=X5X5Y5Y$ZZ %%&:;;;''CC9>+BCCCDDC 6 6kk#x}55JQ=4F#F#F IIJ/445KYWWWD\]]] 3'=#>#>>	(a0C771$s;Q7R7R2RSWX[\rXsXsSstuSu2uv  {D  D  D *Ia
 0445KYWWWD\]]] !$I$5$5fDXD^$5$_$_ ` `adbdad e I1ik** B B*//0F	RR#c*@&A&AA		#3HWH#=  $55  $4WWSI_E`E`=`5`$aa  I-  $4WSAW=X=X5X5Y5Y$ZZ %%&:;;;''CC9>+BCCCDDC 6 6kk#x}55JQ  #**69M9S*TT #N+++ww@@	(?@@@AA 	4 	4C<<Xc]33DDr,   c                 d    i  fd}|dk    r#                       j        j                  \  }}n=|dk    r#                       j        j                  \  }}nt	          d| d           t          |d          }|D ]} |||          }|j        }	|	r|	                                 |j        }
|
r|
                                 |dk    r9 	                    ||           _         
                    ||           _        d S |dk    r 	                    ||           _        d S d S )Nc                    |d         }|d         }|d         }|d         }|                      d|i          }g }|j        }|D ],}	t          |	t                    r|                    |	           -|vr                    ||i           |         }
|
|         }||v r|                    |          }||         d |         }||         ||         }||         |d          }|                     d          }d|d<   |d	<   d
|d<   d|d<                                   |d<   ||_	        | | | }t          |d          }||                             |           | S )Ntext_node_idx	start_posend_posr   r  r   inline-highlightr   r   
annotationr   r   r   r   )r   r   
isinstancer$   r  updateindexr  get_data_idr  r
   r  )r   paramr.  r/  r0  r  r   
text_nodesnodesnodesrc_nodesrc_node_txtbefore_spaninside_span
after_spannew_span_tagresultsp
comment_idr[   text_nodes_tmps                     r*   wrap_span_inlinez?CmfDocument._highlight_inline_comment.<locals>.wrap_span_inline  s   !/2Mk*II&GI&G$>>G0D>EELJ )E , ,dC(( ,%%d+++n,,%%w
&;<<< &g.H#M2Lz)) * 0 0 > >$]3JYJ?K$]3Ig4EFK#M2788<J$,,V44L$6L!-7L)*-9L)*8GL45&*&6&6&8&8L#"-L#?\?:??Fv}55B}%222666r,   r   rt   /   DEV: не поддерживается version=Tr   r   )r+   r   ri   rt   rO   r
   htmlr   r   place_all_drawio_svg!_merge_highlighted_inline_comment)r[   versiondatarC  rE  r   text_without_svgr   r7  html_tagbody_tagrD  s   `  `       @r*   _highlight_inline_commentz%CmfDocument._highlight_inline_comment  s   *	 *	 *	 *	 *	 *	 *	X f)-)@)@)Q)Q&H&&$$)-)@)@AV)W)W&H&&QQQY]^^^^!"2F;;	 	; 	;E((E::II > 	OO> 	OOf11(IFFDI"DDT:WghhDOOO$$"77)LLDOOO %$r,   c                     d                     d |j        D                       }| D ]}|                    || |                   }|S )Nr   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z4CmfDocument.place_all_drawio_svg.<locals>.<listcomp>g  s    ;;;1A;;;r,   )r   r   r%   )r   r   r   r)   s       r*   rH  z CmfDocument.place_all_drawio_svge  sR    ww;;	(:;;;<< 	4 	4C<<Xc]33DDr,   c           	          d }dd}d } fd}d }t          |d          }	                      j        j                  \  }
}t          |d          }|D ]}|d         }|d	         }|d
         }|d         }|	                    d|i          }|                    d|i          }|sV ||          } ||          } |||         ||         d          } |||         d |         dd          }|D ]}g }g }d }d } |||          }|r%t          |          dk    r_|d         d         } |||          }|rAt          |          dk    r|d         d         }n!|t          |          dz
           d         }n |||         |          }t          |          D ]B\  }}|d         |cxk    r|d         k    r$n !|t          |          k     r||         d         }C |||          }|r@t          |          dk    r|d         d         }nm|t          |          dz
           d         }nN |||          }|r@t          |          dk    r|d         d         }n|t          |          dz
           d         }| |||          }| |||          }|||t          |          z
  }|||t          |          z   }|| ||||||          }|j        } | r|                                  |j	        }!|!r|!                                 t          |          }"                     |"|          s j        S                      |
|          S )Nc                 v    g }| j         }|D ],}t          |t                    r|                    |           -|S N)r   r3  r$   r  )r   r8  r9  r:  s       r*   get_text_nodeszECmfDocument._merge_highlighted_inline_comment.<locals>.get_text_nodesn  sK    J )E , ,dC(( ,%%d+++r,   Fc                     |                                  }|rd                    || d                    S d                    |d |                   S )Nr   )r   r   )r   words_countfrom_endwordss       r*   	get_wordsz@CmfDocument._merge_highlighted_inline_comment.<locals>.get_wordsw  sO    JJLLE 6xx{lmm 455588E,;,/000r,   c                     dd l }t           |j         |j        |          |                     }|sg S d |D             }|S )Nr   c                 ^    g | ]*}|                                 |                                f+S r   )r   r   )r   r   s     r*   r   zeCmfDocument._merge_highlighted_inline_comment.<locals>.find_all_substring_entries.<locals>.<listcomp>  s-    KKK%%++--5KKKr,   )r   rk   r   escape)r   	substringr   matches	positionss        r*   find_all_substring_entrieszQCmfDocument._merge_highlighted_inline_comment.<locals>.find_all_substring_entries~  sX    III;2;yry';';TBBCCG 	KK7KKKIr,   c                 ,   |d |         }|||         }||d          }|                      d          }d|d<   ||d<   d|d<   d|d<                                   |d	<   ||_        | | | }	t          |	d
          }
|                    |
           | S )Nr   r1  r   r   r2  r   r   r   r   r   )r  r6  r  r
   r  )r   	text_noder/  r0  rC  r=  r>  r?  r@  rA  rB  r[   s              r*   wrap_text_to_spanzHCmfDocument._merge_highlighted_inline_comment.<locals>.wrap_text_to_span  s    #JYJ/K#Ig$56K"788,J*226::L$6L!-7L)*-9L)*8GL45&*&6&6&8&8L#"-L#?\?:??Fv}55B""2&&&""r,   c                 8   d }d }|                                  }|                                 }|d d         }|d d         }|D ]}||v r|                    |          } n|7d}	t          |          D ]#\  }
}|
|k    r|	t          |          z  }	|	|
z  }	 |	}|S )N   r   )r   r5  	enumerater   )_3wordstext_draft_nodepositionspan_start_positionwords_text1words_text2three_words_text1three_words_text2r   posidxs              r*   fallback_heuristic_searchzPCmfDocument._merge_highlighted_inline_comment.<locals>.fallback_heuristic_search  s    
 H"&!--//K)//11K !,BQB +BQB *  ,,,066t<<HE - #!*+<!=!=  IChs4yy(s
&)#&&r,   r   r   r/  r0  r.  r  )r   rf  T)rX  rb   r   F)r
   r+   rt   ri   r   r   rg  rG  r   r   r$   _check_for_broken_draftrH  )#r[   rK  rC  original_text_without_svgrU  rZ  ra  rd  rr  r   r   text_draft_without_svgr   r7  r  r/  r0  r.  r   text_draft_elementr8  text_draft_nodesstart3words	end3wordsri  start_positionsend_positionsrk  span_end_positionsrc_positionsrq  rp  rM  rN  new_text_drafts#   `                                  r*   rI  z-CmfDocument._merge_highlighted_inline_commentl  s   	 	 		1 	1 	1 	1	 	 		# 	# 	# 	# 	#& 	'  	'  	'F "";VDD	+/+B+B4?CX+Y+Y(('(>GG O	 O	EI&Gk*II&G!/2M$>>G0D>EEL!0!5!5Y<P!5!Q!Q% '\BBBJ-~;MNNN#)J}$=i>O$PRSTTK!	*]";HWH"EqSWXXXI#3 > >"$ "&*#$(!"<"<_k"Z"Z" #W?++q00.=a.@.C+(B(B?T](^(^( ["=11Q664A!4DQ4G 1 14A#mBTBTUVBV4WXY4Z 1 )C(B:mC\^i(j(j(1-(@(@ R RHC"1v<<<<c!f<<<<<#&_)=)=#=#=:I#:Nq:Q$7(B(B?T](^(^( ["=11Q664A!4DQ4G 1 14A#mBTBTUVBV4WXY4Z 1$>$>PY$Z$ZM$ W}--220=a0@0C--0=c->P>PQR>R0STU0V-&.*C*CKQ`*a*a'$,(A(A)_(](]% '.3D3P*;c)nn*L' '27H7P(;c+>N>N(N%&27H7T&7&7Zm  pA  CM  'N  'NOO }>B #' 	OO"' 	OO_--++NJGG 	#?"((?CCCr,   c                 L   t          |d          }|                    dd|i          }|D ]?}|                                }|                    |           |                                 @t          |          }|                     | j        j                  \  }}	|	|k    rdS dS )um   
        Проверка, что вставкой inline коммента не сломали draft
        r   r   r   TF)	r
   r   get_textr  r   r$   r+   rt   ri   )
r[   r  rC  soupspansr   text_contentcleaned_text_draftr   original_text_drafts
             r*   rt  z#CmfDocument._check_for_broken_draft$  s     ^];;f'7&DEE  	 	D==??Ll+++NN YY(,(?(?@U(V(V%%"4444ur,   c                 l   |                      g d           | j        r| j                            d|            	 |                     |||           n# t          $ r}t
                              d| j         d| d| d|            t
                              |           t
                              t          j	                               t          dd	
           Y d }~nd }~ww xY wt                                          5  |                     d	           d d d            d S # 1 swxY w Y   d S )Nr   rt   projectPPP-COM-ADDobjAdd inline comment bug: id=
, version=z, comment_id=z, data=   Ошибка при добавлении комментария. Пожалуйста, обратитесь в Техническую поддержку!Tr   	only_data)rN   r  check_project_role_accessrO  	ExceptiongdebugrR   	traceback
format_excrO   rr   rs   rY   )r[   rJ  rK  rC  es        r*   r   z$CmfDocument.highlight_inline_comment8  s   :::;;;< 	LL22=d2KKK	**7D*EEEE 	 	 	GGt$'ttWtt[ettnrttuuuGGAJJJGGI(**+++  r  z~                  		   "" 	& 	&III%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&*   A 
C)BC$$C)D))D-0D-c                    |dk    r| j         j        }n'|dk    r| j        j        }nt          d| d           |                     |          \  }}t          |d          }|                    d|i          }|st          d	| d           |                     ||          }t          |d          }	|                    |	j	        j
        d
                    d                    d |j	        j        D                       }
|D ]}|
                    |||                   }
|dk    r|
| _         n|dk    r|
| _        |dk    r6|                     ||| j        j        ||| j         j                  }|| _        |S )Nr   rt   rF  Tr   r   r   r  uD   DEV: в документе не найден элемент data-id=r   r   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z3CmfDocument._add_inline_comment.<locals>.<listcomp>c      DDDqCFFDDDr,   )r  )r   ri   rt   rO   r+   r
   r   r  r  r   r   r   r   r%   r+  )r[   rJ  r  	data_htmlr   r&   r   r   r  r   r   r)   draft_new_texts                r*   _add_inline_commentzCmfDocument._add_inline_commentJ  s   f9?DD$$?(DDQQQY]^^^^ 33D99T!$//	 ~~Y,@~AA 	tf]dffnrssss55iNN -i @ @!!"7"<"Ea"HIII 77DDIN,CDDDEE 	? 	?C''[-=>>HHf DII$$&DOf!77RVRaRg8A<[_[d[j 8 l lN,DOr,   c                 l   |                      g d           | j        r| j                            d|            	 |                     |||           n# t          $ r}t
                              d| j         d| d| d|            t
                              |           t
                              t          j	                               t          dd	
           Y d}~nd}~ww xY wt                                          5  |                     d	           ddd           dS # 1 swxY w Y   dS )u  
        html_node_text - всегда один html-элемент, близжайший верхний parent-элемент с data-id для комментария
        Этот метод может вызываться несколько раз для одного и того же comment_id, если выбрали несколько нод
        comment_id (CmfComment равен id элемента span с комментарием)
        r  r  r  r  r  z
, data_id=z, data_html=r  Tr   Nr  )rN   r  r  r  r  r  r  rR   r  r  rO   rr   rs   rY   )r[   rJ  r  r  r  s        r*   add_inline_commentzCmfDocument.add_inline_commentq  s    	:::;;;< 	LL22=d2KKK	$$WgyAAAA 	 	 	GGx$'xxWxxX_xxmvxxyyyGGAJJJGGI(**+++  r  z~                  		   "" 	& 	&III%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r  c                    |                      g d           t          j                            |ddg          }|st	          d| d           d|_        |                                 |                     | j        j	                  \  }}|                     | j
        j	                  \  }}t          |d	          }t          |d	          }g d
}	d}
|	D ]V}|                    ||i          D ];}|                    d                    d |j        D                                  d}
<W|
rQd                    d |j        j        D                       }|D ]}|                    |||                   }|| _        d}
|	D ]V}|                    ||i          D ];}|                    d                    d |j        D                                  d}
<W|
rQd                    d |j        j        D                       }|D ]}|                    |||                   }|| _
        |                     d           d S )N)r   rt   r  r9   r  r9   )rR   r   u)   Не найден комментарий Tr   closedr   )r   zdata-refrR   Fr  r   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument.delete_inline_comment.<locals>.<listcomp>  s    2Y2Y2Ya3q662Y2Y2Yr,   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument.delete_inline_comment.<locals>.<listcomp>  r  r,   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument.delete_inline_comment.<locals>.<listcomp>  s    8e8e8eAQ8e8e8er,   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z5CmfDocument.delete_inline_comment.<locals>.<listcomp>  r   r,   r  )rN   rS   rZ   rU   rO   r{   rY   r+   r   ri   rt   r
   r   r  r   r   r   r%   )r[   data_comment_idcommentsvg_tags_textr   svg_tags_text_draftrt   r   r   comment_id_attr_listchangedcomment_id_attrr   r)   text_element_drafts                  r*   delete_inline_commentz!CmfDocument.delete_inline_comment  s   DDDEEE #''?IxCX'YY 	aS/SS[_```` ""55dioFFt*.*A*A$/BW*X*X'Z!$//	'
F;;  DCC3 	 	O ) 2 2/?9[ 2 \ \   ))"''2Y2Y<CX2Y2Y2Y*Z*Z[[[  	77DDIN,CDDDEED$ = =||Cs);<<DI 3 	 	O&5&>&>oWfEg&>&h&h  ""//8e8eI[Id8e8e8e0f0fggg  	)!P!P/2F2O!P!P!PQQJ* O O'//5H5MNN

(DO		D	!!!!!r,   Fc                    |                      ddg           | j        | j        k    ro|                     d           | j        | _        t                              | j        d|           }|                                 |                     d           d S |dk    r-|                     d           |                     d           d S |dk    r-|                     d           |                     d           d S d S )Nr   rt   F)r   rL   r9   Tr  )rN   r   rt   _set_data_idsrS   rj   rY   )r[   rJ  fix_dublicatehistorys       r*   r   z)CmfDocument.patch_inline_comment_data_ids  s   &,/0009''|,,,DI//T_u]a/bbGLLNNNIII%%%%%v&&&III%%%%%$$ |,,,III%%%%% %$r,   c            "      ~   dddddddddddd	d
dddd	dddddddddddddddd
dddddddddddddddddddddddddddddddddddddd d!d!d"ddddddddd#d$d%d&d'dd(d)d*d+dd(d)d,d-dd$d.d/d0dd1d2d3d4ddd5d5d6d6ddd5d5d7d7ddd8d8d9d9ddd:d:d;d;dddd d<d<d=dddd>d<d<d?ddd@dAdBdBdCddDdEdFdGdHdIdg} | D ]}|dJ         }|                     dK|          }|dL         }|                     dMdN          }|dO         }|                     dPdQ          }|                     dRdQ          }|                     dS|          }	t          j                             dTg dUV          }
||
_        ||
_        |rdQt
          _        |rg t          _        	 |
	                    dJ||           nY# t          $ rL}|r-g t          _        dt
          _        t          dW           Y d }~(t          dX|            Y d }~@d }~ww xY w|r dt
          _        t          dY|            j|
j        j        |k    rt          dZ|
j        j         d[|            |
j        j        |	k    rt          d\|
j        j         d[|	            |r!t          j        g k    rt          d]           t          dW           d S )^NTfgs41gCqEYvnRz#<p data-id="Tfgs41gCqEYvnR">qwe</p>z<p data-id="Tfgs41gCqEYvnR">qw<span class="inline-highlight inline-highlight-active" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:a5b02aac-da09-11ed-9a90-0242ac110002">e</span></p>)r  r   r  rA  z)qwe<p data-id="Tfgs41gCqEYvnR">qwe</p>qwez0<p data-id="Tfgs41gCqEYvnR">q<span>w</span>e</p>z=<p>qwe</p><p data-id="Tfgs41gCqEYvnR">q<span>w</span>e</p>qwe2zB<p data-id="1">qwe</p><p data-id="2">qwe</p><p data-id="3">qwe</p>z#<p data-id="2">q<span>w</span>e</p>zO<p data-id="1">qwe</p><p data-id="2">q<span>w</span>e</p><p data-id="3">qwe</p>z#<p data-id="2"><span>qwe</span></p>zO<p data-id="1">qwe</p><p data-id="2"><span>qwe</span></p><p data-id="3">qwe</p>ze<p data-id="1">qwe</p><p data-id="2">qw<b>e</b><a href="/qwe">h<i>i</i></a></p><p data-id="3">qwe</p>zF<p data-id="2"><span>qw<b>e</b><a href="/qwe">h<i>i</i></a></span></p>zr<p data-id="1">qwe</p><p data-id="2"><span>qw<b>e</b><a href="/qwe">h<i>i</i></a></span></p><p data-id="3">qwe</p>z<p data-id="2">qwe</p>T)r  r   r  error3z$<p data-id="2">q<span>ww</span>e</p>z5<p data-id="2">q<span onclick="alert()">w</span>e</p>z&<p data-id="2">q<span>w</span>e</p>rtyz&<p data-id="2">q<span>w</span>erty</p>1z<p data-id="1">qwe</p>z#<p data-id="1">q<span>w</span>e</p>)r  r   rt   r  rA  z<p data-id="1">qwe</p>HI!z&<p data-id="1">q<span>w</span>e</p>HI!)r  r   rt   r  rA  result_draftz<p data-id="1">qwe2</p>z-<p data-id="1">q<span id="com1">w</span>e</p>z.<p data-id="1">q<span id="com1">w</span>e2</p>)r  r   rt   r  rA  alertr  BnnahcxvEX3XKdu%  <p data-id="BnnahcxvEX3XKd">Токен подписывается очень надежным алгоритмом хеширования SHA-256 (например, используется в подписях https-сертификатов у сайтов, подписях почтовых сообщений, защищенных каналах связи, Bitcoin) и явно удостоверяет права пользователя. подписанного jwt токена производится на отдельном строго защищенном account сервере, ваш пароль не хранится в открытом виде и не передается в открытом виде даже через ssl, а хешируется сразу в браузере.</p>u  <p data-id="BnnahcxvEX3XKd"><span class="inline-highlight inline-highlight-active" id="CmfComment:7a950418-ddc0-11ed-9a90-0242ac110002" data-mark-type="annotation" data-mark-annotation-type="inlineComment">Токен</span>&nbsp;подписывается очень надежным алгоритмом хеширования SHA-256 (например, используется в подписях https-сертификатов у сайтов, подписях почтовых сообщений, защищенных каналах связи, Bitcoin) и явно удостоверяет права пользователя. подписанного jwt токена производится на отдельном строго защищенном account сервере, ваш пароль не хранится в открытом виде и не передается в открытом виде даже через ssl, а хешируется сразу в браузере.</p>u  <p data-id="BnnahcxvEX3XKd"><span class="inline-highlight inline-highlight-active" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:7a950418-ddc0-11ed-9a90-0242ac110002">Токен</span> подписывается очень надежным алгоритмом хеширования SHA-256 (например, используется в подписях https-сертификатов у сайтов, подписях почтовых сообщений, защищенных каналах связи, Bitcoin) и явно удостоверяет права пользователя. подписанного jwt токена производится на отдельном строго защищенном account сервере, ваш пароль не хранится в открытом виде и не передается в открытом виде даже через ssl, а хешируется сразу в браузере.</p>RoHr5PpeuMz9qxuM  <p data-id="BnnahcxvEX3XKd"><span class="inline-highlight" data-id="RjECb1pICX1QMq" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:7a950418-ddc0-11ed-9a90-0242ac110002">Токен</span> подписывается очень надежным</p><p data-id="RoHr5PpeuMz9qx">Параграф 2</p>u   <p data-id="RoHr5PpeuMz9qx">Параграф&nbsp;<span class="inline-highlight inline-highlight-active" id="CmfComment:dd365430-ddc2-11ed-9a90-0242ac110002" data-mark-type="annotation" data-mark-annotation-type="inlineComment">2</span></p>u  <p data-id="BnnahcxvEX3XKd"><span class="inline-highlight" data-id="RjECb1pICX1QMq" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:7a950418-ddc0-11ed-9a90-0242ac110002">Токен</span> подписывается очень надежным</p><p data-id="RoHr5PpeuMz9qx">Параграф <span class="inline-highlight inline-highlight-active" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:dd365430-ddc2-11ed-9a90-0242ac110002">2</span></p>u   <p data-id="RoHr5PpeuMz9qx"><span class="inline-highlight inline-highlight-active" id="CmfComment:624f4ece-ddc3-11ed-9a90-0242ac110002" data-mark-type="annotation" data-mark-annotation-type="inlineComment">Параграф&nbsp;2</span></p>u  <p data-id="BnnahcxvEX3XKd"><span class="inline-highlight" data-id="RjECb1pICX1QMq" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:7a950418-ddc0-11ed-9a90-0242ac110002">Токен</span> подписывается очень надежным</p><p data-id="RoHr5PpeuMz9qx"><span class="inline-highlight inline-highlight-active" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:624f4ece-ddc3-11ed-9a90-0242ac110002">Параграф 2</span></p>ua   <p data-id="BnnahcxvEX3XKd">Токен подписывается очень надежным</p>u  <p data-id="BnnahcxvEX3XKd">Токен<span class="inline-highlight inline-highlight-active" id="CmfComment:b32f901a-ddc3-11ed-9a90-0242ac110002" data-mark-type="annotation" data-mark-annotation-type="inlineComment"> подписывается очень </span>надежным</p>u  <p data-id="BnnahcxvEX3XKd">Токен<span class="inline-highlight inline-highlight-active" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:b32f901a-ddc3-11ed-9a90-0242ac110002"> подписывается очень </span>надежным</p>Tfla06iMmYtsnou  <p data-id="Tfgs41gCqEYvnR"><span class="inline-highlight inline-highlight-active" data-id="JGS0snIzoehAHE" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:d5ef19ec-de89-11ed-bae7-0242ac110002">2. Каждая клиентская установка находится в изолированном виртуальной машине (аналоге физического компьютера).  Никто кроме клиента туда не может получить доступ. </span></p><p data-id="Tfla06iMmYtsno">2. Для контроля доступа в сервисы <span class="inline-highlight inline-highlight-active" data-id="I8sHTtp5rEd1Vq" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:c438b2d0-de89-11ed-bae7-0242ac110002">Eva используется jwt-токен</span>, который получает пользователь после вводе пароля, без него доступ получить невозможно. Jwt-токен для доступа может получить только тот, кого Вы пригласили. </p><span class="macros-panel mentions-macros" contenteditable="false" data-mentions-task="" data-rendered="true" style="display: inline-flex; flex-direction: column; position: relative;"> <span class="extension-container" contenteditable="false" data-layout="default"> <span class="extension-title">@Упоминания <span class="excerpt-title">| TEM-1625012435</span></span> <span class="macros-actions"> <span class="macros-delete"> <svg class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;" viewbox="0 0 18 18"><path class="ng-star-inserted" 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" fill="#222" stroke="none" stroke-width="1"></path><path class="ng-star-inserted" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" fill="#222" stroke="none" stroke-width="1"></path><path class="ng-star-inserted" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" fill="#222" stroke="none" stroke-width="1"></path></svg> </span> </span> </span> <span class="ak-renderer-wrapper"> <a class="external" data-internal-link="1" data-link-type="link" data-macros="mentions" data-mention-type="task" data-object-id="CmfTask:25c3a1a6-dcfd-11ed-9a90-0242ac110002" data-params='{"code":"TEM-1625012435","ui_name":"Task"}' href="/project/Document/DOC-001679?popup=CmfTask:25c3a1a6-dcfd-11ed-9a90-0242ac110002#auzere" rel="noopener" style="font: var(--wiki-text-font);"><svg style="width: 20px; height: 20px; margin-bottom: -4px; margin-left: -7px;" viewbox="0 0 24 24"><path d="M19,3H14.82C14.4,1.84 13.3,1 12,1C10.7,1 9.6,1.84 9.18,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M12,3A1,1 0 0,1 13,4A1,1 0 0,1 12,5A1,1 0 0,1 11,4A1,1 0 0,1 12,3M7,7H17V5H19V19H5V5H7V7M7.5,13.5L9,12L11,14L15.5,9.5L17,11L11,17L7.5,13.5Z" fill="#0053a0"></path></svg> TEM-1625012435  TO DO аузере #Не назначено </a> </span> </span>u?  <p data-id="Tfla06iMmYtsno">2.&nbsp;Для контроля доступа в сервисы&nbsp;<span data-id="I8sHTtp5rEd1Vq" class="inline-highlight" id="CmfComment:c438b2d0-de89-11ed-bae7-0242ac110002" data-mark-type="annotation" data-mark-annotation-type="inlineComment">Eva используется jwt-токен</span>, который получает пользователь после вводе пароля, без него доступ получить невозможно. Jwt-токен для доступа может получить только тот, кого Вы пригласили<span data-id="JMAUxDPbnbMqUw" class="inline-highlight inline-highlight-active" id="CmfComment:d9e7d4f8-de89-11ed-bae7-0242ac110002" data-mark-type="annotation" data-mark-annotation-type="inlineComment">.&nbsp;</span></p>u  <p data-id="Tfgs41gCqEYvnR"><span class="inline-highlight inline-highlight-active" data-id="JGS0snIzoehAHE" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:d5ef19ec-de89-11ed-bae7-0242ac110002">2. Каждая клиентская установка находится в изолированном виртуальной машине (аналоге физического компьютера).  Никто кроме клиента туда не может получить доступ. </span></p><p data-id="Tfla06iMmYtsno">2. Для контроля доступа в сервисы <span class="inline-highlight" data-id="I8sHTtp5rEd1Vq" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:c438b2d0-de89-11ed-bae7-0242ac110002">Eva используется jwt-токен</span>, который получает пользователь после вводе пароля, без него доступ получить невозможно. Jwt-токен для доступа может получить только тот, кого Вы пригласили<span class="inline-highlight inline-highlight-active" data-id="JMAUxDPbnbMqUw" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:d9e7d4f8-de89-11ed-bae7-0242ac110002">. </span></p><span class="macros-panel mentions-macros" contenteditable="false" data-mentions-task="" data-rendered="true" style="display: inline-flex; flex-direction: column; position: relative;"> <span class="extension-container" contenteditable="false" data-layout="default"> <span class="extension-title">@Упоминания <span class="excerpt-title">| TEM-1625012435</span></span> <span class="macros-actions"> <span class="macros-delete"> <svg class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;" viewbox="0 0 18 18"><path class="ng-star-inserted" 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" fill="#222" stroke="none" stroke-width="1"></path><path class="ng-star-inserted" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" fill="#222" stroke="none" stroke-width="1"></path><path class="ng-star-inserted" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" fill="#222" stroke="none" stroke-width="1"></path></svg> </span> </span> </span> <span class="ak-renderer-wrapper"> <a class="external" data-internal-link="1" data-link-type="link" data-macros="mentions" data-mention-type="task" data-object-id="CmfTask:25c3a1a6-dcfd-11ed-9a90-0242ac110002" data-params='{"code":"TEM-1625012435","ui_name":"Task"}' href="/project/Document/DOC-001679?popup=CmfTask:25c3a1a6-dcfd-11ed-9a90-0242ac110002#auzere" rel="noopener" style="font: var(--wiki-text-font);"><svg style="width: 20px; height: 20px; margin-bottom: -4px; margin-left: -7px;" viewbox="0 0 24 24"><path d="M19,3H14.82C14.4,1.84 13.3,1 12,1C10.7,1 9.6,1.84 9.18,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M12,3A1,1 0 0,1 13,4A1,1 0 0,1 12,5A1,1 0 0,1 11,4A1,1 0 0,1 12,3M7,7H17V5H19V19H5V5H7V7M7.5,13.5L9,12L11,14L15.5,9.5L17,11L11,17L7.5,13.5Z" fill="#0053a0"></path></svg> TEM-1625012435  TO DO аузере #Не назначено </a> </span> </span>z'<p data-id="1">q<strong>w</strong>e</p>z4<p data-id="1">q<span><strong>w</strong></span>e</p>z4<p data-id="1">q<strong><span>w</span></strong>e</p>z1<p data-id="1">q<span data-id="qwe">w</span>e</p>z><p data-id="1">q<span><span data-id="qwe">w</span></span>e</p>z2<p data-id="1">q<span data-id="qwe2">w</span>e</p>z?<p data-id="1">q<span data-id="qwe2"><span>w</span></span>e</p>z7<p data-id="1">q<span id="CmfComment:123">w</span>e</p>z8<p data-id="1">q<span id="CmfComment:123">w</span>e2</p>z<p data-id="1">22q2we2</p>z;<p data-id="1">22q2<span id="CmfComment:123">w</span>e2</p>z<p data-id="1">qqq</p>z<p data-id="1">2qqq2</p>z7<p data-id="1">q<span id="CmfComment:123">q</span>q</p>z9<p data-id="1">2q<span id="CmfComment:123">q</span>q2</p>OKMwlzdbVdo67ou   <p data-id="OKMwlzdbVdo67o">1. Провайдим на уровне компонента и вызываем только в нём</p>u   <p data-id="OKMwlzdbVdo67o">1. Провайдим на уровне компонента и вызы2ваем только в нём##</p>um  <p data-id="OKMwlzdbVdo67o">1.&nbsp;<span data-id="1HKljVrmlZFaDi" class="inline-highlight inline-highlight-active" id="CmfComment:9f614c7e-e050-11ed-845f-0242ac110002" data-mark-type="annotation" data-mark-annotation-type="inlineComment">Провайдим&nbsp;на</span>&nbsp;уровне&nbsp;компонента и вызываем только в нём</p>u]  <p data-id="OKMwlzdbVdo67o">1. <span class="inline-highlight inline-highlight-active" data-id="1HKljVrmlZFaDi" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:9f614c7e-e050-11ed-845f-0242ac110002">Провайдим на</span> уровне компонента и вызываем только в нём</p>u\  <p data-id="OKMwlzdbVdo67o">1. <span class="inline-highlight inline-highlight-active" data-id="1HKljVrmlZFaDi" data-mark-annotation-type="inlineComment" data-mark-type="annotation" id="CmfComment:9f614c7e-e050-11ed-845f-0242ac110002">Провайдим на</span> уровне компонента и вызы2ваем только в нём##</p>r   rt   r  rA  r   r  r  Fr  r  z
DOC-001679r  )rF   r   OKuA   ERROR! Ошибка добавления комментария: u+   ERROR! Должна быть ошибка! u(   ERROR! Отличается текст!
r   u@   ERROR! Отличается текст новой версии!
u   ERROR! Нет alert)rU   rS   r   r   rt   configDEBUGr  r  r  r  printri   )	test_datarK  r   rt   r  rA  r  r  r  r  docr  s               r*   _test_add_inline_commentz$CmfDocument._test_add_inline_comment  s{    ,= z y	  ,CMY	  \@k	  \@k	  c O	  03	  0@	  0A	  0R	  0C	  0C	  06@?  09@? H  07JI P  06@? 8	 	 , @ A |	  , h N d	  , h N d	  ,{ x w	  , G8 ] C;	  AGQP  AGQP  KQ[Z  LR\[  07TS Z  0:TS ]  08TS [  , j k K ~ !C m~
	~  &	 &	D<D,55J9oGXXh++F9oGHHWe,,EHHWe,,E88NF;;L$((lCdCdCd(eeCCH'CN %$ 	&&vw@@@@     AG#'FL$KKKHHHH]Z[]]^^^  #JDJJKKKx~''\#(.\\TZ\\]]]~#|33  AZ]ZhZn  A  Ar~  A  A  B  B  B 7b==0111$KKKKM&	 &	s   F00
H:)H)HHc                    d }|                      ddg           |dk    r$| j        sd S t          | j        j        d          }n>|dk    r$| j        sd S t          | j        j        d          }nt          d| d           |                                D ]}d|j        vr |            |j        d<   i }|                                D ]5}|j                            d          }||vrd	||<   ||xx         d
z  cc<   6|	                                D ]R\  }}|d
k    rG|                                D ]2}|j                            d          |k    r |            |j        d<   3S|dk    r0d
                    d |j        j        D                       | _        d S |dk    r0d
                    d |j        j        D                       | _        d S d S )Nc                     dt          t          j                    dz            } t          | dz            }| dz  }|         |         z   }|d                    fdt          d          D                       z   }|S )Nz@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/i   @   r   c              3   @   K   | ]}t          j                  V  d S rT  )randomchoice)r   r)  alphabets     r*   	<genexpr>zCCmfDocument._set_data_ids.<locals>.gen_random_id.<locals>.<genexpr>  s-      "N"Nq6=#:#:"N"N"N"N"N"Nr,      )r   timer   r   )totalr  jprefix_idr  s        @r*   gen_random_idz0CmfDocument._set_data_ids.<locals>.gen_random_id  s    YH$)++122Eebj!!A
Aa[8A;.F277"N"N"N"NE"II"N"N"NNNNCJr,   r   rt   r   rF  Tr   r   r   rb   r   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z-CmfDocument._set_data_ids.<locals>.<listcomp>  s     I I IAQ I I Ir,   c                 ,    g | ]}t          |          S r   r   r   s     r*   r   z-CmfDocument._set_data_ids.<locals>.<listcomp>  s    &O&O&O!s1vv&O&O&Or,   )rN   r   r
   ri   rt   rO   r   r   rU   r   r   r   r   )r[   rJ  r  r   r   idsr  r   s           r*   r  zCmfDocument._set_data_ids  s3   	 	 	 	&,/000f9 %diov>>II$$? %do&;VDDIIQQQY]^^^^%..00 	@ 	@L 2220="9- %..00 	 	L"(,,Y77Gc!! GLLLALLLL!iikk 	H 	HNGUqyy$-$6$6$8$8 H HL#)--i88GCC8E*95f I I1H I I IJJDIII$$ gg&O&Oy~7N&O&O&OPPDOOO %$r,   c                     t          dd           |                     ddg           || _        t                              | j        j        | j        j                  | _         | j        |ddd|S )NDEV: depricatedTr   rt   r   r   r  depth)rO   rN   r   r   r   ri   rt   rY   r[   in_textr\   r]   s       r*   r   z'CmfDocument.update_text_inline_comments  st    #40000,/000	%;;DIOT_Mbccty$$aBB6BBBr,   c                 R    t          dd           || _         | j        |ddd|S )Nr  Tr   r   r  )rO   rt   rY   r  s       r*   r   z-CmfDocument.update_text_draft_inline_comments  s;    #40000!ty$$aBB6BBBr,   c                     |                      ddg           || _        t                              | j        j        | j        j                  | _         | j        |ddd|S )Nrt   r   Tr   r  )rN   r   r   r   ri   rt   rY   r  s       r*   r   z!CmfDocument.update_text_task_link  s`    ,/000	%88$/J_``ty$$aBB6BBBr,   c                 0    || _          | j        |ddd|S )NTr   r  )rt   rY   r  s       r*   r   z'CmfDocument.update_text_draft_task_link  s'    !ty$$aBB6BBBr,   c                     |                      ddg           t                              | j        j        ||          | _        t                              | j        j        ||          | _         | j        |ddd|S )Nr   rt   Tr   r  )rN   r   r   r   ri   rt   rY   )r[   r   r   r\   r]   s        r*   r   z)CmfDocument.update_text_macros_parameters  sw    &,/00088)Ufgg	%>>t?TV_arssty$$aBB6BBBr,   c                     |                      | j        j        ||          | _        |                      | j        j        ||          | _        |                      | j        j        ||          | _        d S rT  )_replace_attach_urlr   ri   rt   text_render)r[   attach
new_attachs      r*   _replace_attachmentzCmfDocument._replace_attachment  se    ,,TY_fjQQ	224?3H&R\]]33D4D4JFT^__r,   c                      t                      j        |i |}|                                 |                                 |S rT  )r   r   _process_draft_is_changed
do_publish)r[   r\   r]   r  r   s       r*   r   zCmfDocument.copy  sF    egglD+F++ 	%%'''
r,   c                 b    ddl m} | j        j        r || j        j                  | _        d S d S )Nr   )markup_html_clean)cmf.util.cmf_clean_textr  rt   
is_changedri   )r[   r\   r]   r  s       r*   _clean_textzCmfDocument._clean_text  sI    ======?% 	G//0EFFDOOO	G 	Gr,   )r}   rs  )r   )+__name__
__module____qualname__r   r   api_methodsstaticmethodr$   r+   r3   r7   r   rP   rw   r|   classmethodrl   r   r   r   r   r  r+  rO  rH  rI  rt  r   r  r  r  r   r  r  r   r   r   r   r   r  r   r  __classcell__)r   s   @r*   r   r      sz       *6 
:
 
:
 
:
 

K 	! 	! 	! 	! \	! OC O O O \O
A A A4  R R R0   % % % [% " "# "# " " " \"H mC mS mS m m m \m^ s s s WZ    \F F F F F C6 C6 \C6J j j \jXGM GM GMR   \vD vD vDp  (& & &$% % %N& & &.8" 8" 8"t& & & &* f f \fP+Q +Q +Q +QZC C CC C C
C C CC C CC C C` ` `
    G G G G G G Gr,   r   )osr   cmf.includecmfr   
cmf.fieldsr   cmf.utilr	   r   r   bs4r
   mathr   r  r  r  r   r   r,   r*   <module>r      s                    # # # # # #       				                   NG NG NG NG NG,* NG NG NG NG NGr,   