1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
wiki_parser.php
См. документацию.
1<?
2
4
6{
7 public $arNowiki = array();
8 public $arCode = array();
9 public $arLink = array();
10 public $arLinkExists = array();
11 public $arFile = array();
13
14 private $postUrl = "";
15 private $textType = "";
16
17 function __construct()
18 {
19
20 }
21
22 function Parse($text, $type = 'text', $arFile = array(), $arParams = array())
23 {
24 $type = $this->textType = ($type == 'html' ? 'html' : 'text');
25 $this->arNowiki = array();
26 $this->arLink = array();
27 $this->arLinkExists = array();
28 $this->arFile = $arFile;
29 $this->arVersionFile = array();
30 // An array can be either array (23,45,67), and array ('file_name' => 'file_path'), if this version of the document in the history of
31 if (!is_array($this->arFile))
32 $this->arFile = array();
33 foreach ($this->arFile as $_k => $file)
34 {
35 if (!is_numeric($file) && !is_numeric($_k))
36 {
37 $this->arVersionFile[$_k] = $file;
38 unset($this->arFile[$_k]);
39 }
40 }
41 reset($this->arFile);
42
43 if(isset($arParams["POST_URL"]))
44 $this->postUrl = (CMain::IsHTTPS() ? "https://" : "http://").$_SERVER["HTTP_HOST"].$arParams["POST_URL"];
45
46 // cut code
47 $text = preg_replace_callback("/(\{\{\{(.*)\}\}\})/imsUu", array(&$this, '_codeCallback'), $text);
48 $text = preg_replace_callback("/(\[CODE\](.*)\[\/CODE\])/imsUu", array(&$this, '_codeCallback'), $text);
49
50 // cut nowiki
51 $text = preg_replace_callback('/(<nowiki>(.*)<\/nowiki>)/isUu', array(&$this, '_noWikiCallback'), $text);
52
53 #if($this->textType == "html")
54 # $text = CWikiUtils::htmlspecialchars_decode($text);
55
56 // bi
57 $text = str_replace("&#039;&#039;&#039;", "'''", $text);
58 $text = str_replace("&#039;&#039;", "''", $text);
59 $text = preg_replace(
60 array(
61 '/\'{3}(.*)\'{2}(.+)\'{2}(.*)\'{3}/imUu',
62 '/\'{3}(.+)\'{3}/imUu',
63 '/\'{2}(.+)\'{2}/imUu'
64 ),
65 array(
66 '<b>\\1<i>\\2</i>\\3</b>',
67 '<b>\\1</b>',
68 '<i>\\1</i>'
69 ),
70 $text);
71
72 // hr
73 $text = preg_replace( '/-----*/u', '\\1<hr />', $text );
74
75 // Header
76 for($i = 6; $i >= 1; $i--)
77 {
78 $_H = str_repeat('=', $i);
79 $text = preg_replace('/^\s*'.$_H.'(.+?)'.$_H.'\s*$/miUu', '<H'.$i.'>\\1</H'.$i.'>', $text);
80 }
81
82
83 // Internal link & categories
85
86 // External link
87 $text = preg_replace_callback('/\[((http|https|ftp)(.+))( (.+))?\]/iUu', array(&$this, '_processExternalLinkCallback'), $text);
88
89
90 // images and other files
91 $text = preg_replace_callback('/\[?\[(:)?(File|'.GetMessage('FILE_NAME').'):(.+)\]\]?/iUu', array(&$this, '_processFileCallback'), $text);
92
93 // TOC
94 $text = $this->processToc($text);
95
96 // Paste nowiki
97 if (!empty($this->arNowiki))
98 $text = preg_replace_callback('/(##NOWIKI(\d+)##)/isUu', array(&$this, '_noWikiReturnCallback'), $text);
99
100
101 $text = preg_replace_callback('/(##NOWIKI(\d+)##)/isUu', array(&$this, '_noWikiReturn2Callback'), $text);
102
103 if ($type == 'text')
104 {
105 $text = preg_replace("/(<\s*\/?(h(\d+)|li|ul|ol|p|table|tbody|td|tr|hr|div|span)\s*>)\s*(<\s*br\s*\/*\s*>){0,1}(\s*(\r*\n)\s*){1,2}/ism", "$1##NN##", $text);
106 $text = preg_replace("/(<\s*(ul)\s*>)\s*(<\s*br\s*\/*\s*>){0,1}(\s*(\r*\n)\s*){1,2}/ism", "$1##NN##", $text);
107 $text = preg_replace("/<\s*br\s*\/*\s*>\s*(\r*\n)/ismU", "##BR##", $text);
109 $text = preg_replace("/##NN##/ismU","\n", $text);
110 $text = preg_replace("/##BR##/ismU","<br />\n", $text);
111 }
112
113 // Paste code
114 $text = preg_replace_callback('/(##CODE(\d+)##)/isUu', array(&$this, '_codeReturnCallback'), $text);
115
116 // $text .= '<div style="clear:both"></div>';
117
118 return $text;
119 }
120
121 static function NToBr($text)
122 {
123 $ret = preg_replace("/(<\s*br\s*\/*\s*>)*\s*(\r)*\n/ism", "<br />\n",$text);
124 return $ret;
125 }
126
127 static function BrToN($text)
128 {
129 $ret = preg_replace("/<\s*br\s*\/*>((\r)*\n)*/ism", "\n",$text);
130 return $ret;
131 }
132
133 static function Clear($text)
134 {
135 $arWhiteTags = array(
136 'a' => array('href', 'title','name','style','id','class','shape','coords','alt','target'),
137 'b' => array('style','id','class'),
138 'br' => array('style','id','class'),
139 'big' => array('style','id','class'),
140 'caption' => array('style','id','class'),
141 'code' => array('style','id','class'),
142 'color' => array(),
143 'del' => array('title','style','id','class'),
144 'div' => array('title','style','id','class','align'),
145 'dt' => array('style','id','class'),
146 'dd' => array('style','id','class'),
147 'font' => array('color','size','face','style','id','class'),
148 'h1' => array('id','class','align'),
149 'h2' => array('id','class','align'),
150 'h3' => array('id','class','align'),
151 'h4' => array('id','class','align'),
152 'h5' => array('id','class','align'),
153 'h6' => array('id','class','align'),
154 'hr' => array('style','id','class'),
155 'i' => array('style','id','class'),
156 'img' => array('src','alt','height','width','title'),
157 'ins' => array('title','style','id','class'),
158 'li' => array('style','id','class'),
159 'list' => array(),
160 'map' => array('shape','coords','href','alt','title','style','id','class','name'),
161 'nowiki' => array(),
162 'ol' => array('style','id','class'),
163 'p' => array('style','id','class','align'),
164 'pre' => array('style','id','class'),
165 's' => array('style','id','class'),
166 'small' => array('style','id','class'),
167 'strong' => array('style','id','class'),
168 'span' => array('title','style','id','class','align'),
169 'sub' =>array('style','id','class'),
170 'sup' =>array('style','id','class'),
171 'table' => array('border','width','style','id','class','cellspacing','cellpadding'),
172 'tbody' => array('align','valign','style','id','class'),
173 'td' => array('width','height','style','id','class','align','valign','colspan','rowspan'),
174 'tfoot' => array('align','valign','style','id','class','align','valign'),
175 'th' => array('width','height','style','id','class','colspan','rowspan'),
176 'thead' => array('align','valign','style','id','class'),
177 'tr' => array('align','valign','style','id','class'),
178 'ul' => array('style','id','class'),
179 'blockquote' => array(),
180 'u' => array('style','id','class')
181 );
182
183 /* TODO:erase CBXSanitizer::SetTags($arWhiteTags);
184 $text=CBXSanitizer::Sanitize($text,'CUSTOM',true,true); */
185
186 $Sanitizer = new CBXSanitizer;
187 $Sanitizer->AddTags($arWhiteTags);
188
189 //TODO: delete condition, after main update
190 if(method_exists($Sanitizer,"ApplyDoubleEncode"))
191 $Sanitizer->ApplyDoubleEncode(false);
192
193 $text = $Sanitizer->SanitizeHtml($text);
194
195 return $text;
196 }
197
199 {
200 static $sImageAlign = '';
201 $bLink = false;
202 if ($matches[1] == ':')
203 $bLink = true;
204
205 // if the internal file then get it
206 $sFile = $sFileName = $sPath = CWikiUtils::htmlspecialcharsback(trim($matches[3]));
207 $bOur = false;
208
209 if (is_numeric($sFile) && in_array($sFile, $this->arFile))
210 {
211 $arFile = CFile::GetFileArray($sFile);
212 if ($arFile != false)
213 {
214 $bOur = true;
215 $sPath = $arFile['SRC'];
216 $sFileName = $arFile['ORIGINAL_NAME'];
217 }
218 }
219 else if (isset($this->arVersionFile[mb_strtolower($sFile)]))
220 {
221 $sPath = $this->arVersionFile[mb_strtolower($sFile)];
222 $sFileName = $sFile;
223 }
224 else if (!empty($this->arFile))
225 {
227 '@ID' => implode(',', $this->arFile)
228 );
229
230 $rsFile = CFile::GetList(array(), $arFilter);
231 while($arFile = $rsFile->Fetch())
232 {
233 if ($arFile['ORIGINAL_NAME'] == $sFile)
234 {
235 $bOur = true;
236 $sFile = $arFile['ID'];
237
238 $sPath = CFile::GetFileSRC($arFile);
239 $sFileName = $arFile['ORIGINAL_NAME'];
240 break;
241 }
242 }
243 }
244
245 // if the image is processed as a picture
246 $sName = bx_basename($sPath);
247
248 if (CFile::IsImage($sName))
249 {
250 if ($bOur)
251 {
252 $imageFile = CFile::MakeFileArray($sPath);
253 $checkRes = CFile::CheckImageFile($imageFile);
254
255 if($checkRes != null)
256 return $checkRes;
257
258 if ($bLink)
259 $sReturn = '<a href="'.htmlspecialcharsbx($sPath).'" title="'.($s = htmlspecialcharsbx($sFileName)).'">'.$s.'</a>';
260 else
261 {
262 $sReturn = CFile::ShowImage($sFile,
263 COption::GetOptionString('wiki', 'image_max_width', 600),
264 COption::GetOptionString('wiki', 'image_max_height', 600),
265 'border="0" align="'.$sImageAlign.'"'
266 );
267 }
268 }
269 else
270 {
271 if ($bLink)
272 $sReturn = '<a href="'.htmlspecialcharsbx($sPath).'" title="'.($s = htmlspecialcharsbx($sName)).'">'.$s.'</a>';
273 else
274 $sReturn = '<img src="'.htmlspecialcharsbx($sPath).'" alt="'.htmlspecialcharsbx($sFileName).'"/>';
275 }
276 }
277 else if (mb_strpos($sPath, 'http://') === 0)
278 $sReturn = ' [ <a href="'.htmlspecialcharsbx($sFile).'" title="'.GetMessage('FILE_FILE_DOWNLOAD').'">'.GetMessage('FILE_DOWNLOAD').'</a> ] ';
279 // otherwise the file
280 else
281 $sReturn = '['.GetMessage('FILE_NAME').':'.htmlspecialcharsbx((is_numeric($sFile) || empty($sFileName) ? $sFile : $sFileName)).']';
282
283 return $sReturn;
284 }
285
287 {
288 $sLink = trim($matches[1]);
289 $sName = $sTitle = $sLink;
290
291 $matches[5] = isset($matches[5]) ? trim($matches[5]) : '';
292 if (!empty($matches[5]))
293 $sTitle = trim($matches[5]);
294 $sTitle = strip_tags($sTitle);
295
296 $sReturn = '<a href="'.htmlspecialcharsbx($sLink).'" title="'.htmlspecialcharsbx($sName).'">'.$sTitle.'</a>';
297 return $sReturn;
298 }
299
301 {
302 global $APPLICATION, $arParams;
303 $text = preg_replace_callback('/\[\[(.+)(\|(.*))?\]\]/iUu', array(&$this, '_processInternalLinkPrepareCallback'), $text);
304 $text = preg_replace('/(##Category##)(\s)*((\r*)\n)*/',"", $text);
305 // check pages for exists
306 if (!empty($this->arLink))
307 {
308 $arFilter = array();
309 $arFilter['=NAME'] = $this->arLink;
310 $arFilter['IBLOCK_ID'] = $arParams['IBLOCK_ID'];
311 $arFilter['ACTIVE'] = 'Y';
312 $arFilter['CHECK_PERMISSIONS'] = 'N';
314 $arFilter['SUBSECTION'] = CWikiSocnet::$iCatId;
315 $rsElement = CIBlockElement::GetList(array(), $arFilter, false, false, Array());
316 while($obElement = $rsElement->GetNextElement())
317 {
318 $arFields = $obElement->GetFields();
319 $this->arLinkExists[] = mb_strtolower(CWikiUtils::htmlspecialcharsback($arFields['NAME'], true));
320 }
321 }
322
323 $text = preg_replace_callback('/(##LINK(\d+)##)/isUu', array(&$this, '_processInternalLinkCallback'), $text);
324
325 return $text;
326 }
327
329 {
330 $sLink = trim($matches[1]);
331 $sName = $sTitle = $sLink;
332 $sCatName = '';
333 $matches[3] = isset($matches[3]) ? trim($matches[3]) : '';
334
335 if (!empty($matches[3]))
336 $sName = $sTitle = $matches[3];
337 else
338 {
339 if (CWikiUtils::IsCategoryPage($sName, $sCatName))
340 return '##Category##';
341 }
342
343 $sTitle = strip_tags($sTitle);
344 $i = count($this->arLink);
345 $this->arLink[] = CWikiUtils::htmlspecialcharsback($matches[1], true);
346 $sReturn = '<a ##LINK'.$i.'## title="'.$sTitle.'">'.$sName.'</a>';
347 return $sReturn;
348 }
349
351 {
352 global $arParams;
353
354 $sReturn = '';
355 if (in_array(mb_strtolower($this->arLink[$matches[2]]), $this->arLinkExists))
356 {
357 $sURL = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST'],
358 array(
359 'wiki_name' => rawurlencode($this->arLink[$matches[2]]),
360 'group_id' => CWikiSocnet::$iSocNetId
361 )
362 );
363 $sReturn = 'href="'.$sURL.'"';
364 }
365 else
366 {
367 $sURL = CHTTP::urlAddParams(
368 CComponentEngine::MakePathFromTemplate(
369 $arParams['PATH_TO_POST_EDIT'],
370 array(
371 'wiki_name' => rawurlencode($this->arLink[$matches[2]]),
372 'group_id' => CWikiSocnet::$iSocNetId
373 )
374 ),
375 $arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'N' ? array($arParams['OPER_VAR'] => 'edit') : array()
376 );
377
378 $sReturn = 'href="'.$sURL.'" class="wiki_red"';
379 }
380
381 return $sReturn;
382 }
383
385 {
386 $matches = array();
387 $sToc = '';
388 if (preg_match_all('/<H(?<level>\d)(?<parameters>.*)>(?<innerHtml>.*)<\/H\g<level>>/isUu', $text, $matches, PREG_SET_ORDER))
389 {
390 if (count($matches) > 4)
391 {
392 $iCurrentToc = 1;
393 // work level TOC
394 $iCurrentTocLevel = 0;
395 // previous user defined level of TOC
396 $iRealPrevItemTocLevel = 1;
397 // previous working level of TOC
398 $iPrevItemTocLevel = 0;
399 // current user defined the level of TOC
400 $iRealItemTocLevel = 1;
401
402 $bfirst = true;
403 $aNumToc = array();
404 foreach ($matches as $_m => $arMatch)
405 {
406 $iRealItemTocLevel = (int)$arMatch['level'];
407 $sItemToc = trim($arMatch['innerHtml']);
408 // normalize levels
409 if ($bfirst && $iRealPrevItemTocLevel < $iRealItemTocLevel)
410 $iItemTocLevel = 1;
411 else if ($iCurrentTocLevel == 1 && $iRealItemTocLevel < $iRealPrevItemTocLevel)
412 $iItemTocLevel = $iCurrentTocLevel;
413 else if ($iRealItemTocLevel > $iRealPrevItemTocLevel)
414 $iItemTocLevel = $iCurrentTocLevel + 1;
415 else if ($iRealItemTocLevel < $iRealPrevItemTocLevel)
416 {
417 $_delta = $iRealPrevItemTocLevel - $iRealItemTocLevel;
418 $iItemTocLevel = $iCurrentTocLevel - $_delta;
419 if ($iItemTocLevel < 1)
420 $iItemTocLevel = 1;
421 }
422 else
423 $iItemTocLevel = $iCurrentTocLevel;
424
425 // create a numbering of TOC
426 $iCurrentNumTocLevel = $bfirst ? 1 : $iItemTocLevel;
427 $aNumToc[$iCurrentNumTocLevel] = !isset($aNumToc[$iCurrentNumTocLevel]) ? 1 : $aNumToc[$iCurrentNumTocLevel] + 1;
428 if ($iItemTocLevel < $iPrevItemTocLevel)
429 {
430 for ($i = $iItemTocLevel + 1; $i <= $iPrevItemTocLevel; $i++)
431 unset($aNumToc[$i]);
432 }
433
434 // build a TOC
435 if ($iItemTocLevel > $iCurrentTocLevel || empty($sToc))
436 {
437 $iCurrentTocLevel++;
438 $sToc .= '<ul>';
439 }
440 else if ($iItemTocLevel < $iCurrentTocLevel)
441 {
442 if ($iItemTocLevel <= 0)
443 $iItemTocLevel = 1;
444
445 if ($iCurrentTocLevel > 1)
446 {
447 for ($i = 0; $i < ($iCurrentTocLevel - $iItemTocLevel); $i++)
448 $sToc .= '</ul>';
449 }
450 else
451 $sToc .= '</ul>';
452
453 if ($iCurrentTocLevel > 1)
454 $iCurrentTocLevel = $iItemTocLevel;
455
456 }
457
458 $iRealPrevItemTocLevel = $iRealItemTocLevel;
459 $iPrevItemTocLevel = $iItemTocLevel;
460 $bfirst = false;
461 $sNumToc = implode('.', $aNumToc);
462 $sItemTocId = str_replace(array('%', '+', '.F2', '..'), array('.', '.', '_', '.'), rawurlencode($sItemToc.$sNumToc));
463 $sToc .= '<li><a href="';
464
465 if($this->postUrl) //http://jabber.bx/view.php?id=28203
466 $sToc.= $this->postUrl;
467
468 $sToc .= '#'.$sItemTocId.'">'.$sNumToc.' '.strip_tags($sItemToc).'</a></li>';
469 $matches[$_m]['innerHtml'] = $sItemToc;
470 $matches[$_m]['tocId'] = $sItemTocId;
471 }
472
473 for ($i = $iCurrentTocLevel; $i > 0; $i--)
474 $sToc .= '</ul>';
475
476 $bfirst = true;
477 foreach ($matches as $arMatch)
478 {
479 $sReplase = '<H'.$arMatch['level'].$arMatch['parameters'].'><span id="'.$arMatch['tocId'].'">'.$arMatch['innerHtml'].'</span></H'.$arMatch['level'].'>';
480 if ($bfirst)
481 $sReplase = $sToc.'<br/>'.$sReplase;
482 // so as not to replace all of the same titles
483 $text = preg_replace('/'.preg_quote($arMatch[0], '/').'/u', $sReplase, $text, 1);
484 $bfirst = false;
485 }
486 }
487 }
488
489 return $text;
490 }
491
493 {
494 $codeText = "";
495 $i = count($this->arCode);
496 $codeText = $matches[2];
497
498 if($this->textType == "html")
499 $codeText = CWikiUtils::htmlspecialchars_decode($codeText);
500
501 $this->arCode[] = $codeText;
502
503 return '##CODE'.$i.'##';
504 }
505
507 {
508 $i = count($this->arNowiki);
509 $this->arNowiki[] = $matches[2];
510
511 return '##NOWIKI'.$i.'##';
512 }
513
515 {
516 return '<pre><code>'.$this->arCode[$matches[2]].'</code></pre>';
517 }
518
520 {
521 return $this->arNowiki[$matches[2]];
522 }
523
525 {
526 return '<nowiki>'.htmlspecialcharsbx($this->arNowiki[$matches[2]]).'</nowiki>';
527
528 }
529
530 function parseBeforeSave($text, &$arCat = array(), $nameTemplate = "")
531 {
532 $userLogin = CWikiUtils::GetUserLogin(array(), $nameTemplate);
533
534 //$text = preg_replace_callback('/(<nowiki>(.*)<\/nowiki>)/isUu', array(&$this, '_noWikiCallback'), $text);
535
536 // Subscribe
537 $text = preg_replace( '/--~~~~*/u', '\\1--'.$userLogin.' '.ConvertTimeStamp(false, 'FULL'), $text );
538
539 // Category
540 $matches = array();
541 $textWithoutNowiki = preg_replace('/(<nowiki>(.*)<\/nowiki>)/isUu', '', $text);
542 if (preg_match_all('/\[\[(Category|'.GetMessage('CATEGORY_NAME').'):(.+)\]\]/iUu', $textWithoutNowiki, $matches))
543 $arCat = array_unique($matches[2]);
544
545 //$text = preg_replace_callback('/(##NOWIKI(\d+)##)/isUu', array(&$this, '_noWikiReturn2Callback'), $text);
546
547 return $text;
548 }
549
551 {
552 // delete Category
553 $text = preg_replace('/\[\[(Category|'.GetMessage('CATEGORY_NAME').'):(.+)\]\]/iUu', '', $text);
554 // delete Files
555 $text = preg_replace('/\[?\[(:)?(File|'.GetMessage('FILE_NAME').'):(.+)\]\]?/iUu', '', $text);
556 // delete External Links
557 $text = preg_replace('/\[((http|https|ftp)(.+))( (.+))?\]/iUu', '\\1\\2 \\5', $text);
558 // delete Internal Links
559 $text = preg_replace('/\[\[(.+(?!:))(\|(.*))?\]\]/iUu', '\\1\\2', $text);
560
561 // delete Headers
562 for($i = 6; $i >= 1; $i--)
563 {
564 $_H = str_repeat('=', $i);
565 $text = preg_replace('/'.$_H.'(.*?)'.$_H.'/miUu', '\\1', $text);
566 }
567
568 return $text;
569 }
570
571}
572
573?>
$arParams
Определения access_dialog.php:21
$type
Определения options.php:106
global $APPLICATION
Определения include.php:80
Определения sanitizer.php:23
AddTags($arTags)
Определения sanitizer.php:136
static urlAddParams($url, $add_params, $options=[])
Определения http.php:521
Определения wiki_parser.php:6
$arCode
Определения wiki_parser.php:8
__construct()
Определения wiki_parser.php:17
_processFileCallback($matches)
Определения wiki_parser.php:198
_codeReturnCallback($matches)
Определения wiki_parser.php:514
processInternalLink($text)
Определения wiki_parser.php:300
_noWikiReturnCallback($matches)
Определения wiki_parser.php:519
_processExternalLinkCallback($matches)
Определения wiki_parser.php:286
_noWikiReturn2Callback($matches)
Определения wiki_parser.php:524
Parse($text, $type='text', $arFile=array(), $arParams=array())
Определения wiki_parser.php:22
parseForSearch($text)
Определения wiki_parser.php:550
$arVersionFile
Определения wiki_parser.php:12
_processInternalLinkCallback($matches)
Определения wiki_parser.php:350
_codeCallback($matches)
Определения wiki_parser.php:492
$arLink
Определения wiki_parser.php:9
$arLinkExists
Определения wiki_parser.php:10
_noWikiCallback($matches)
Определения wiki_parser.php:506
$arNowiki
Определения wiki_parser.php:7
static BrToN($text)
Определения wiki_parser.php:127
static NToBr($text)
Определения wiki_parser.php:121
processToc($text)
Определения wiki_parser.php:384
parseBeforeSave($text, &$arCat=array(), $nameTemplate="")
Определения wiki_parser.php:530
$arFile
Определения wiki_parser.php:11
_processInternalLinkPrepareCallback($matches)
Определения wiki_parser.php:328
static Clear($text)
Определения wiki_parser.php:133
static IsSocNet()
Определения wiki_socnet.php:97
static $iCatId
Определения wiki_socnet.php:13
static $iSocNetId
Определения wiki_socnet.php:17
static htmlspecialchars_decode($str)
Определения wiki_utils.php:409
static GetUserLogin($arUserData=array(), $nameTemplate="")
Определения wiki_utils.php:372
static IsCategoryPage($NAME, &$CATEGORY_NAME)
Определения wiki_utils.php:291
static htmlspecialcharsback($str, $end=true)
Определения wiki_utils.php:399
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
bx_basename($path, $ext="")
Определения tools.php:3269
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$text
Определения template_pdf.php:79
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$matches
Определения index.php:22
$arFilter
Определения user_search.php:106