1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
prop_html.php
См. документацию.
1<?php
2
7
9{
12
13 public const VALUE_TYPE_TEXT = 'TEXT';
14 public const VALUE_TYPE_HTML = 'HTML';
15
16 public static function GetUserTypeDescription(): array
17 {
18 return [
19 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_STRING,
21 'DESCRIPTION' => Loc::getMessage('IBLOCK_PROP_HTML_DESC'),
22 'GetPublicViewHTML' => [__CLASS__, 'GetPublicViewHTML'],
23 'GetPublicEditHTML' => [__CLASS__, 'GetPublicEditHTML'],
24 'GetAdminListViewHTML' => [__CLASS__, 'GetAdminListViewHTML'],
25 'GetPropertyFieldHtml' => [__CLASS__, 'GetPropertyFieldHtml'],
26 'ConvertToDB' => [__CLASS__, 'ConvertToDB'],
27 'ConvertFromDB' => [__CLASS__, 'ConvertFromDB'],
28 'GetLength' => [__CLASS__, 'GetLength'],
29 'PrepareSettings' => [__CLASS__, 'PrepareSettings'],
30 'GetSettingsHTML' => [__CLASS__, 'GetSettingsHTML'],
31 'GetUIFilterProperty' => [__CLASS__, 'GetUIFilterProperty'],
32 ];
33 }
34
35 public static function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
36 {
37 if (!is_array($value["VALUE"]))
38 $value = static::ConvertFromDB($arProperty, $value);
39 $ar = $value['VALUE'] ?? '';
40 if (!empty($ar) && is_array($ar))
41 {
42 if (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'CSV_EXPORT')
43 return '['.$ar["TYPE"].']'.$ar["TEXT"];
44 elseif (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'SIMPLE_TEXT')
45 return ($ar["TYPE"] === self::VALUE_TYPE_HTML ? strip_tags($ar["TEXT"]) : $ar["TEXT"]);
46 else
47 return FormatText($ar["TEXT"], $ar["TYPE"]);
48 }
49
50 return '';
51 }
52
53 public static function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
54 {
55 if(!is_array($value["VALUE"]))
56 $value = static::ConvertFromDB($arProperty, $value);
57 $ar = $value["VALUE"];
58 if($ar)
59 return htmlspecialcharsEx($ar["TYPE"].":".$ar["TEXT"]);
60 else
61 return "&nbsp;";
62 }
63
64 public static function GetPublicEditHTML($arProperty, $value, $strHTMLControlName)
65 {
66 if (!Loader::includeModule("fileman"))
67 return Loc::getMessage("IBLOCK_PROP_HTML_NOFILEMAN_ERROR");
68
69 if (!is_array($value["VALUE"]))
70 $value = static::ConvertFromDB($arProperty, $value);
71
72 if (isset($strHTMLControlName["MODE"]) && $strHTMLControlName["MODE"]=="SIMPLE")
73 {
74 return '<input type="hidden" name="'.$strHTMLControlName["VALUE"].'[TYPE]" value="html">'
75 .'<textarea cols="60" rows="10" name="'.$strHTMLControlName["VALUE"].'[TEXT]" style="width:100%">'.htmlspecialcharsEx($value["VALUE"]["TEXT"]).'</textarea>';
76 }
77
78 $id = preg_replace("/[^a-z0-9]/i", '', $strHTMLControlName['VALUE']);
79
80 ob_start();
81 echo '<input type="hidden" name="'.$strHTMLControlName["VALUE"].'[TYPE]" value="html">';
82 $LHE = new CHTMLEditor;
83 $LHE->Show(array(
84 'name' => $strHTMLControlName["VALUE"].'[TEXT]',
85 'id' => $id,
86 'inputName' => $strHTMLControlName["VALUE"].'[TEXT]',
87 'content' => $value['VALUE']['TEXT'] ?? '',
88 'width' => '100%',
89 'minBodyWidth' => 350,
90 'normalBodyWidth' => 555,
91 'height' => '200',
92 'bAllowPhp' => false,
93 'limitPhpAccess' => false,
94 'autoResize' => true,
95 'autoResizeOffset' => 40,
96 'useFileDialogs' => false,
97 'saveOnBlur' => true,
98 'showTaskbars' => false,
99 'showNodeNavi' => false,
100 'askBeforeUnloadPage' => true,
101 'bbCode' => false,
102 'actionUrl' => '/bitrix/tools/html_editor_action.php',
103 'siteId' => SITE_ID,
104 'setFocusAfterShow' => false,
105 'controlsMap' => array(
106 array('id' => 'Bold', 'compact' => true, 'sort' => 80),
107 array('id' => 'Italic', 'compact' => true, 'sort' => 90),
108 array('id' => 'Underline', 'compact' => true, 'sort' => 100),
109 array('id' => 'Strikeout', 'compact' => true, 'sort' => 110),
110 array('id' => 'RemoveFormat', 'compact' => true, 'sort' => 120),
111 array('id' => 'Color', 'compact' => true, 'sort' => 130),
112 array('id' => 'FontSelector', 'compact' => false, 'sort' => 135),
113 array('id' => 'FontSize', 'compact' => false, 'sort' => 140),
114 array('separator' => true, 'compact' => false, 'sort' => 145),
115 array('id' => 'OrderedList', 'compact' => true, 'sort' => 150),
116 array('id' => 'UnorderedList', 'compact' => true, 'sort' => 160),
117 array('id' => 'AlignList', 'compact' => false, 'sort' => 190),
118 array('separator' => true, 'compact' => false, 'sort' => 200),
119 array('id' => 'InsertLink', 'compact' => true, 'sort' => 210),
120 array('id' => 'InsertImage', 'compact' => false, 'sort' => 220),
121 array('id' => 'InsertVideo', 'compact' => true, 'sort' => 230),
122 array('id' => 'InsertTable', 'compact' => false, 'sort' => 250),
123 array('separator' => true, 'compact' => false, 'sort' => 290),
124 array('id' => 'Fullscreen', 'compact' => false, 'sort' => 310),
125 array('id' => 'More', 'compact' => true, 'sort' => 400)
126 ),
127 ));
128 $s = ob_get_contents();
129 ob_end_clean();
130 return $s;
131 }
132
133 public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
134 {
135 if (!is_array($arProperty))
136 {
137 $arProperty = [];
138 }
139 $arProperty['WITH_DESCRIPTION'] = ($arProperty['WITH_DESCRIPTION'] ?? 'N') === 'Y' ? 'Y' : 'N';
140
141 if (!is_array($strHTMLControlName))
142 {
143 $strHTMLControlName = [];
144 }
145
146 $strHTMLControlName['VALUE'] ??= '';
147 $strHTMLControlName['DESCRIPTION'] ??= '';
148 if (!is_string($strHTMLControlName['DESCRIPTION']))
149 {
150 $strHTMLControlName['DESCRIPTION'] = '';
151 }
152
153 $strHTMLControlName["VALUE"] = htmlspecialcharsEx($strHTMLControlName["VALUE"]);
154 if (!is_array($value["VALUE"]))
155 {
156 $value = static::ConvertFromDB($arProperty, $value);
157 }
158 $ar = $value["VALUE"] ?? self::getEmptyValue();
159
160 if (mb_strtolower($ar["TYPE"]) != "text")
161 $ar["TYPE"] = "html";
162 else
163 $ar["TYPE"] = "text";
164
165 $settings = static::PrepareSettings($arProperty);
166
167 ob_start();
168 ?><table width="100%"><?
169 if (
170 isset($strHTMLControlName['MODE'])
171 && $strHTMLControlName['MODE'] === 'FORM_FILL'
172 && Main\Config\Option::get('iblock', 'use_htmledit') === "Y"
173 && Loader::includeModule('fileman')
174 ):
175 ?><tr>
176 <td colspan="2" align="center">
177 <input type="hidden" name="<?=$strHTMLControlName["VALUE"]?>" value="">
178 <?
179 $text_name = preg_replace("/([^a-z0-9])/is", "_", $strHTMLControlName["VALUE"]."[TEXT]");
180 $text_type = preg_replace("/([^a-z0-9])/is", "_", $strHTMLControlName["VALUE"]."[TYPE]");
182 $text_name,
183 htmlspecialcharsBx($ar["TEXT"]),
184 $text_type,
185 mb_strtolower($ar["TYPE"]),
186 $settings['height'],
187 "N",
188 0,
189 "",
190 ""
191 );
192 ?>
193 </td>
194 </tr>
195 <?else:?>
196 <tr>
197 <td align="right"><?echo Loc::getMessage("IBLOCK_DESC_TYPE")?></td>
198 <td align="left">
199 <input type="radio" name="<?=$strHTMLControlName["VALUE"]?>[TYPE]" id="<?=$strHTMLControlName["VALUE"]?>[TYPE][TEXT]" value="text" <?if($ar["TYPE"]!="html")echo " checked"?>>
200 <label for="<?=$strHTMLControlName["VALUE"]?>[TYPE][TEXT]"><?echo Loc::getMessage("IBLOCK_DESC_TYPE_TEXT")?></label> /
201 <input type="radio" name="<?=$strHTMLControlName["VALUE"]?>[TYPE]" id="<?=$strHTMLControlName["VALUE"]?>[TYPE][HTML]" value="html"<?if($ar["TYPE"]=="html")echo " checked"?>>
202 <label for="<?=$strHTMLControlName["VALUE"]?>[TYPE][HTML]"><?echo Loc::getMessage("IBLOCK_DESC_TYPE_HTML")?></label>
203 </td>
204 </tr>
205 <tr>
206 <td colspan="2" align="center"><textarea cols="60" rows="10" name="<?=$strHTMLControlName["VALUE"]?>[TEXT]" style="width:100%"><?=htmlspecialcharsEx($ar["TEXT"])?></textarea></td>
207 </tr>
208 <?endif;
209 if (
210 $arProperty['WITH_DESCRIPTION'] === 'Y'
211 && $strHTMLControlName['DESCRIPTION'] !== ''
212 ):
213 ?>
214 <tr>
215 <td colspan="2">
216 <span title="<?echo Loc::getMessage("IBLOCK_PROP_HTML_DESCRIPTION_TITLE")?>"><?echo Loc::getMessage("IBLOCK_PROP_HTML_DESCRIPTION_LABEL")?>:<input type="text" name="<?=$strHTMLControlName["DESCRIPTION"]?>" value="<?=$value["DESCRIPTION"]?>" size="18"></span>
217 </td>
218 </tr>
219 <?endif;?>
220 </table>
221 <?
222 $return = ob_get_contents();
223 ob_end_clean();
224
225 return $return;
226 }
227
228 public static function ConvertToDB($arProperty, $value)
229 {
230 global $DB;
231
232 $return = false;
233
234 if (!is_array($value))
235 {
236 $value = static::getValueFromString($value, true);
237 }
238 elseif (isset($value['VALUE']) && !is_array($value['VALUE']))
239 {
240 $value['VALUE'] = static::getValueFromString($value['VALUE'], false);
241 }
242 $defaultValue = isset($value['DEFAULT_VALUE']) && $value['DEFAULT_VALUE'] === true;
243
244 if(
245 is_array($value)
246 && array_key_exists('VALUE', $value)
247 )
248 {
249 if (
250 isset($value['VALUE']['TEXT'])
251 && !is_scalar($value['VALUE']['TEXT'])
252 )
253 {
254 $value['VALUE']['TEXT'] =
255 is_object($value['VALUE']['TEXT']) && method_exists($value['VALUE']['TEXT'], '__toString')
256 ? (string)$value['VALUE']['TEXT']
257 : ''
258 ;
259 }
260 $value['VALUE']['TEXT'] ??= '';
261 $value['VALUE']['TEXT'] = trim($value['VALUE']['TEXT']);
262 if (Loader::includeModule('bitrix24'))
263 {
264 $sanitizer = new \CBXSanitizer();
265 $sanitizer->setLevel(\CBXSanitizer::SECURE_LEVEL_LOW);
266 $sanitizer->ApplyDoubleEncode(false);
267 $value['VALUE']['TEXT'] = $sanitizer->SanitizeHtml($value['VALUE']['TEXT']);
268 }
269 $len = mb_strlen($value['VALUE']['TEXT']);
270 if ($len > 0 || $defaultValue)
271 {
272 if ($DB->type === 'MYSQL')
273 {
274 $limit = 63200;
275 }
276 else
277 {
278 $limit = 1950;
279 }
280
281 if ($len > $limit)
282 {
283 $value['VALUE']['TEXT'] = mb_substr($value['VALUE']['TEXT'], 0, $limit);
284 }
285
286 $val = static::CheckArray($value['VALUE'], $defaultValue);
287 if (is_array($val))
288 {
289 $return = array(
290 'VALUE' => serialize($val),
291 );
292 if (isset($value['DESCRIPTION']) && is_string($value['DESCRIPTION']))
293 {
294 $value['DESCRIPTION'] = trim($value['DESCRIPTION']);
295 if ($value['DESCRIPTION'] !== '')
296 {
297 $return['DESCRIPTION'] = $value['DESCRIPTION'];
298 }
299 }
300 }
301 }
302 }
303
304 return $return;
305 }
306
307 public static function ConvertFromDB($arProperty, $value)
308 {
309 $return = false;
310 if (!is_array($value['VALUE']))
311 {
312 $value['VALUE'] = (string)$value['VALUE'];
313 if ($value['VALUE'] !== '')
314 {
315 if (
316 CheckSerializedData($value['VALUE'])
317 && str_contains($value['VALUE'], 'TEXT')
318 && str_contains($value['VALUE'], 'TYPE')
319 )
320 {
321 $return = [
322 'VALUE' => unserialize($value['VALUE'], ['allowed_classes' => false]),
323 ];
324 if ($return['VALUE'] === false)
325 {
326 $return = [
327 'VALUE' => [
328 'TEXT' => $value['VALUE'],
329 'TYPE' => self::VALUE_TYPE_TEXT,
330 ]
331 ];
332 }
333 }
334 else
335 {
336 $return = [
337 'VALUE' => [
338 'TEXT' => $value['VALUE'],
339 'TYPE' => self::VALUE_TYPE_TEXT,
340 ]
341 ];
342 }
343 }
344 if (isset($value['DESCRIPTION']))
345 {
346 $value['DESCRIPTION'] = (string)$value['DESCRIPTION'];
347 if ($value['DESCRIPTION'] !== '')
348 {
349 if (!is_array($return))
350 {
351 $return = [
352 "VALUE" => null,
353 ];
354 }
355 $return["DESCRIPTION"] = trim($value["DESCRIPTION"]);
356 }
357 }
358 }
359
360 return $return;
361 }
362
370 public static function CheckArray($arFields = false, $defaultValue = false)
371 {
372 $defaultValue = ($defaultValue === true);
373 if (!is_array($arFields))
374 {
375 $return = false;
376 if (is_string($arFields) && $arFields !== '' && CheckSerializedData($arFields))
377 {
378 $return = unserialize($arFields, ['allowed_classes' => false]);
379 }
380 }
381 else
382 {
383 $return = $arFields;
384 }
385
386 if ($return)
387 {
388 if (array_key_exists('TEXT', $return) && ((trim((string)$return['TEXT']) !== '') || $defaultValue))
389 {
390 $return['TYPE'] = mb_strtoupper($return['TYPE']);
391 if (($return['TYPE'] !== self::VALUE_TYPE_TEXT) && ($return['TYPE'] !== self::VALUE_TYPE_HTML))
392 {
393 $return['TYPE'] = self::VALUE_TYPE_HTML;
394 }
395 }
396 else
397 {
398 $return = false;
399 }
400 }
401
402 return $return;
403 }
404
405 public static function GetLength($arProperty, $value)
406 {
407 if (is_array($value) && isset($value['VALUE']['TEXT']))
408 {
409 return mb_strlen(trim((string)$value['VALUE']['TEXT']));
410 }
411 else
412 {
413 return 0;
414 }
415 }
416
417 public static function PrepareSettings($arProperty)
418 {
419 $height = 0;
420 if (isset($arProperty['USER_TYPE_SETTINGS']['height']))
421 {
422 $height = (int)$arProperty['USER_TYPE_SETTINGS']['height'];
423 }
424 if ($height <= 0)
425 {
426 $height = 200;
427 }
428
429 return [
430 'height' => $height,
431 ];
432 }
433
434 public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
435 {
436 $arPropertyFields = [
437 'HIDE' => [
438 'ROW_COUNT',
439 'COL_COUNT',
440 'MULTIPLE',
441 ],
442 ];
443
444 $settings = static::PrepareSettings($arProperty);
445
446 $height = $settings['height'];
447
448 return '
449 <tr valign="top">
450 <td>'.Loc::getMessage("IBLOCK_PROP_HTML_SETTING_HEIGHT").':</td>
451 <td><input type="text" size="5" name="'.$strHTMLControlName["NAME"].'[height]" value="'.$height.'">px</td>
452 </tr>
453 ';
454 }
455
462 public static function GetUIFilterProperty($property, $strHTMLControlName, &$fields)
463 {
464 $fields['type'] = 'string';
465 $fields['operators'] = array(
466 'default' => '%'
467 );
468 $fields['filterable'] = '?';
469 }
470
471 protected static function getValueFromString($value, $getFull = false)
472 {
473 $getFull = ($getFull === true);
474 $valueType = self::VALUE_TYPE_HTML;
475 $value = (string)$value;
476 if ($value !== '')
477 {
478 $prefix = mb_strtoupper(mb_substr($value, 0, 6));
479 $isText = $prefix == '[TEXT]';
480 if ($prefix == '[HTML]' || $isText)
481 {
482 if ($isText)
483 $valueType = self::VALUE_TYPE_TEXT;
484 $value = mb_substr($value, 6);
485 }
486 }
487 if ($getFull)
488 {
489 return array(
490 'VALUE' => array(
491 'TEXT' => $value,
492 'TYPE' => $valueType
493 )
494 );
495 }
496 else
497 {
498 return array(
499 'TEXT' => $value,
500 'TYPE' => $valueType
501 );
502 }
503 }
504
505 private static function getEmptyValue(): array
506 {
507 return [
508 'TEXT' => '',
509 'TYPE' => self::VALUE_TYPE_TEXT,
510 ];
511 }
512}
if($_SERVER $defaultValue['REQUEST_METHOD']==="GET" &&!empty($RestoreDefaults) && $bizprocPerms==="W" &&check_bitrix_sessid())
Определения options.php:32
const USER_TYPE_HTML
Определения propertytable.php:79
const TYPE_STRING
Определения propertytable.php:65
Определения loader.php:13
static includeModule($moduleName)
Определения loader.php:67
const SECURE_LEVEL_LOW
Определения sanitizer.php:30
static AddHTMLEditorFrame( $strTextFieldName, $strTextValue, $strTextTypeFieldName, $strTextTypeValue, $arSize=Array("height"=>350), $CONVERT_FOR_WORKFLOW="N", $WORKFLOW_DOCUMENT_ID=0, $NEW_DOCUMENT_PATH="", $textarea_field="", $site=false, $bWithoutPHP=true, $arTaskbars=false, $arAdditionalParams=Array())
Определения fileman.php:1321
Определения html_editor.php:14
Show($arParams)
Определения html_editor.php:593
Определения prop_html.php:9
static GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
Определения prop_html.php:35
static CheckArray($arFields=false, $defaultValue=false)
Определения prop_html.php:370
static PrepareSettings($arProperty)
Определения prop_html.php:417
static GetUIFilterProperty($property, $strHTMLControlName, &$fields)
Определения prop_html.php:462
static GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
Определения prop_html.php:434
static GetPublicEditHTML($arProperty, $value, $strHTMLControlName)
Определения prop_html.php:64
static GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
Определения prop_html.php:133
const VALUE_TYPE_HTML
Определения prop_html.php:14
static GetUserTypeDescription()
Определения prop_html.php:16
static GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
Определения prop_html.php:53
static ConvertFromDB($arProperty, $value)
Определения prop_html.php:307
const VALUE_TYPE_TEXT
Определения prop_html.php:13
const USER_TYPE
Определения prop_html.php:11
static getValueFromString($value, $getFull=false)
Определения prop_html.php:471
static ConvertToDB($arProperty, $value)
Определения prop_html.php:228
static GetLength($arProperty, $value)
Определения prop_html.php:405
$arFields
Определения dblapprove.php:5
bx popup label bx width30 PAGE_NEW_MENU_NAME text width
Определения file_new.php:677
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
global $DB
Определения cron_frame.php:29
endif
Определения csv_new_setup.php:990
CheckSerializedData($str, $max_depth=200)
Определения tools.php:4949
FormatText($strText, $strTextType="text")
Определения tools.php:2675
htmlspecialcharsEx($str)
Определения tools.php:2685
$settings
Определения product_settings.php:43
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
<? endif;?> window document title
Определения prolog_main_admin.php:76
$ar
Определения options.php:199
font style
Определения invoice.php:442
font size
Определения invoice.php:442
text align
Определения template.php:556
$val
Определения options.php:1793
const SITE_ID
Определения sonet_set_content_view.php:12
$fields
Определения yandex_run.php:501