/bitrix/modules/iblock/classes/general/prop_html.php
PHP | 359 lines | 322 code | 30 blank | 7 comment | 61 complexity | b228a39dd8697ac279145aa265a15a18 MD5 | raw file
Possible License(s): Apache-2.0
- <?
- use Bitrix\Main\Loader,
- Bitrix\Main\Localization\Loc,
- Bitrix\Iblock;
- Loc::loadMessages(__FILE__);
- class CIBlockPropertyHTML
- {
- const USER_TYPE = 'HTML';
- public static function GetUserTypeDescription()
- {
- return array(
- "PROPERTY_TYPE" => Iblock\PropertyTable::TYPE_STRING,
- "USER_TYPE" => self::USER_TYPE,
- "DESCRIPTION" => Loc::getMessage("IBLOCK_PROP_HTML_DESC"),
- "GetPublicViewHTML" => array(__CLASS__, "GetPublicViewHTML"),
- "GetPublicEditHTML" => array(__CLASS__, "GetPublicEditHTML"),
- "GetAdminListViewHTML" => array(__CLASS__, "GetAdminListViewHTML"),
- "GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"),
- "ConvertToDB" => array(__CLASS__, "ConvertToDB"),
- "ConvertFromDB" => array(__CLASS__, "ConvertFromDB"),
- "GetLength" =>array(__CLASS__, "GetLength"),
- "PrepareSettings" =>array(__CLASS__, "PrepareSettings"),
- "GetSettingsHTML" =>array(__CLASS__, "GetSettingsHTML"),
- );
- }
- public static function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
- {
- if (!is_array($value["VALUE"]))
- $value = static::ConvertFromDB($arProperty, $value);
- $ar = $value["VALUE"];
- if (!empty($ar) && is_array($ar))
- {
- if (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'CSV_EXPORT')
- return '['.$ar["TYPE"].']'.$ar["TEXT"];
- elseif (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'SIMPLE_TEXT')
- return ($ar["TYPE"] == 'HTML' ? strip_tags($ar["TEXT"]) : $ar["TEXT"]);
- else
- return FormatText($ar["TEXT"], $ar["TYPE"]);
- }
- return '';
- }
- public static function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
- {
- if(!is_array($value["VALUE"]))
- $value = static::ConvertFromDB($arProperty, $value);
- $ar = $value["VALUE"];
- if($ar)
- return htmlspecialcharsEx($ar["TYPE"].":".$ar["TEXT"]);
- else
- return " ";
- }
- public static function GetPublicEditHTML($arProperty, $value, $strHTMLControlName)
- {
- if (!Loader::includeModule("fileman"))
- return Loc::getMessage("IBLOCK_PROP_HTML_NOFILEMAN_ERROR");
- if (!is_array($value["VALUE"]))
- $value = static::ConvertFromDB($arProperty, $value);
- $settings = static::PrepareSettings($arProperty);
- $id = preg_replace("/[^a-z0-9]/i", '', $strHTMLControlName['VALUE']);
- ob_start();
- echo '<input type="hidden" name="'.$strHTMLControlName["VALUE"].'[TYPE]" value="html">';
- $LHE = new CHTMLEditor;
- $LHE->Show(array(
- 'name' => $strHTMLControlName["VALUE"].'[TEXT]',
- 'id' => $id,
- 'inputName' => $strHTMLControlName["VALUE"].'[TEXT]',
- 'content' => $value["VALUE"]['TEXT'],
- 'width' => '100%',
- 'minBodyWidth' => 350,
- 'normalBodyWidth' => 555,
- 'height' => '200',
- 'bAllowPhp' => false,
- 'limitPhpAccess' => false,
- 'autoResize' => true,
- 'autoResizeOffset' => 40,
- 'useFileDialogs' => false,
- 'saveOnBlur' => true,
- 'showTaskbars' => false,
- 'showNodeNavi' => false,
- 'askBeforeUnloadPage' => true,
- 'bbCode' => false,
- 'actionUrl' => '/bitrix/tools/html_editor_action.php',
- 'siteId' => SITE_ID,
- 'setFocusAfterShow' => false,
- 'controlsMap' => array(
- array('id' => 'Bold', 'compact' => true, 'sort' => 80),
- array('id' => 'Italic', 'compact' => true, 'sort' => 90),
- array('id' => 'Underline', 'compact' => true, 'sort' => 100),
- array('id' => 'Strikeout', 'compact' => true, 'sort' => 110),
- array('id' => 'RemoveFormat', 'compact' => true, 'sort' => 120),
- array('id' => 'Color', 'compact' => true, 'sort' => 130),
- array('id' => 'FontSelector', 'compact' => false, 'sort' => 135),
- array('id' => 'FontSize', 'compact' => false, 'sort' => 140),
- array('separator' => true, 'compact' => false, 'sort' => 145),
- array('id' => 'OrderedList', 'compact' => true, 'sort' => 150),
- array('id' => 'UnorderedList', 'compact' => true, 'sort' => 160),
- array('id' => 'AlignList', 'compact' => false, 'sort' => 190),
- array('separator' => true, 'compact' => false, 'sort' => 200),
- array('id' => 'InsertLink', 'compact' => true, 'sort' => 210),
- array('id' => 'InsertImage', 'compact' => false, 'sort' => 220),
- array('id' => 'InsertVideo', 'compact' => true, 'sort' => 230),
- array('id' => 'InsertTable', 'compact' => false, 'sort' => 250),
- array('separator' => true, 'compact' => false, 'sort' => 290),
- array('id' => 'Fullscreen', 'compact' => false, 'sort' => 310),
- array('id' => 'More', 'compact' => true, 'sort' => 400)
- ),
- ));
- $s = ob_get_contents();
- ob_end_clean();
- return $s;
- }
- public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
- {
- $strHTMLControlName["VALUE"] = htmlspecialcharsEx($strHTMLControlName["VALUE"]);
- if (!is_array($value["VALUE"]))
- $value = static::ConvertFromDB($arProperty, $value);
- $ar = $value["VALUE"];
- if (strtolower($ar["TYPE"]) != "text")
- $ar["TYPE"] = "html";
- else
- $ar["TYPE"] = "text";
- $settings = static::PrepareSettings($arProperty);
- ob_start();
- ?><table width="100%"><?
- if($strHTMLControlName["MODE"]=="FORM_FILL" && COption::GetOptionString("iblock", "use_htmledit", "Y")=="Y" && Loader::includeModule("fileman")):
- ?><tr>
- <td colspan="2" align="center">
- <input type="hidden" name="<?=$strHTMLControlName["VALUE"]?>" value="">
- <?
- $text_name = preg_replace("/([^a-z0-9])/is", "_", $strHTMLControlName["VALUE"]."[TEXT]");
- $text_type = preg_replace("/([^a-z0-9])/is", "_", $strHTMLControlName["VALUE"]."[TYPE]");
- CFileMan::AddHTMLEditorFrame($text_name, htmlspecialcharsBx($ar["TEXT"]), $text_type, strtolower($ar["TYPE"]), $settings['height'], "N", 0, "", "");
- ?>
- </td>
- </tr>
- <?else:?>
- <tr>
- <td align="right"><?echo Loc::getMessage("IBLOCK_DESC_TYPE")?></td>
- <td align="left">
- <input type="radio" name="<?=$strHTMLControlName["VALUE"]?>[TYPE]" id="<?=$strHTMLControlName["VALUE"]?>[TYPE][TEXT]" value="text" <?if($ar["TYPE"]!="html")echo " checked"?>>
- <label for="<?=$strHTMLControlName["VALUE"]?>[TYPE][TEXT]"><?echo Loc::getMessage("IBLOCK_DESC_TYPE_TEXT")?></label> /
- <input type="radio" name="<?=$strHTMLControlName["VALUE"]?>[TYPE]" id="<?=$strHTMLControlName["VALUE"]?>[TYPE][HTML]" value="html"<?if($ar["TYPE"]=="html")echo " checked"?>>
- <label for="<?=$strHTMLControlName["VALUE"]?>[TYPE][HTML]"><?echo Loc::getMessage("IBLOCK_DESC_TYPE_HTML")?></label>
- </td>
- </tr>
- <tr>
- <td colspan="2" align="center"><textarea cols="60" rows="10" name="<?=$strHTMLControlName["VALUE"]?>[TEXT]" style="width:100%"><?=htmlspecialcharsEx($ar["TEXT"])?></textarea></td>
- </tr>
- <?endif;
- if (($arProperty["WITH_DESCRIPTION"]=="Y") && ('' != trim($strHTMLControlName["DESCRIPTION"]))):?>
- <tr>
- <td colspan="2">
- <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>
- </td>
- </tr>
- <?endif;?>
- </table>
- <?
- $return = ob_get_contents();
- ob_end_clean();
- return $return;
- }
- public static function ConvertToDB($arProperty, $value)
- {
- global $DB;
- $return = false;
- if (!is_array($value))
- {
- $value = static::getValueFromString($value, true);
- }
- elseif (isset($value['VALUE']) && !is_array($value['VALUE']))
- {
- $value['VALUE'] = static::getValueFromString($value['VALUE'], false);
- }
- $defaultValue = isset($value['DEFAULT_VALUE']) && $value['DEFAULT_VALUE'] === true;
- if(
- is_array($value)
- && array_key_exists("VALUE", $value)
- )
- {
- $text = trim($value["VALUE"]["TEXT"]);
- $len = strlen($text);
- if ($len > 0 || $defaultValue)
- {
- if ($DB->type === "MYSQL")
- $limit = 63200;
- else
- $limit = 1950;
- if ($len > $limit)
- $value["VALUE"]["TEXT"] = substr($text, 0, $limit);
- $val = static::CheckArray($value["VALUE"], $defaultValue);
- if (is_array($val))
- {
- $return = array(
- "VALUE" => serialize($val),
- );
- if (trim($value["DESCRIPTION"]) != '')
- $return["DESCRIPTION"] = trim($value["DESCRIPTION"]);
- }
- }
- }
- return $return;
- }
- public static function ConvertFromDB($arProperty, $value)
- {
- $return = false;
- if (!is_array($value["VALUE"]))
- {
- $return = array(
- "VALUE" => unserialize($value["VALUE"]),
- );
- if ($return['VALUE'] === false && strlen($value['VALUE']) > 0)
- {
- $return = array(
- "VALUE" => array(
- 'TEXT' => $value["VALUE"],
- 'TYPE' => 'TEXT'
- )
- );
- }
- if($value["DESCRIPTION"])
- $return["DESCRIPTION"] = trim($value["DESCRIPTION"]);
- }
- return $return;
- }
- /**
- * Check value.
- *
- * @param bool|array $arFields Current value.
- * @param bool $defaultValue Is default value.
- * @return array|bool
- */
- public static function CheckArray($arFields = false, $defaultValue = false)
- {
- $defaultValue = ($defaultValue === true);
- if (!is_array($arFields))
- {
- $return = false;
- if (CheckSerializedData($arFields))
- $return = unserialize($arFields);
- }
- else
- {
- $return = $arFields;
- }
- if ($return)
- {
- if (is_set($return, "TEXT") && ((strlen(trim($return["TEXT"])) > 0) || $defaultValue))
- {
- $return["TYPE"] = strtoupper($return["TYPE"]);
- if (($return["TYPE"] != "TEXT") && ($return["TYPE"] != "HTML"))
- $return["TYPE"] = "HTML";
- }
- else
- {
- $return = false;
- }
- }
- return $return;
- }
- public static function GetLength($arProperty, $value)
- {
- if(is_array($value) && isset($value["VALUE"]["TEXT"]))
- return strlen(trim($value["VALUE"]["TEXT"]));
- else
- return 0;
- }
- public static function PrepareSettings($arProperty)
- {
- $height = 0;
- if (isset($arProperty["USER_TYPE_SETTINGS"]["height"]))
- $height = (int)$arProperty["USER_TYPE_SETTINGS"]["height"];
- if ($height <= 0)
- $height = 200;
- return array(
- "height" => $height,
- );
- }
- public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
- {
- $arPropertyFields = array(
- "HIDE" => array("ROW_COUNT", "COL_COUNT"),
- );
- $height = 0;
- if (isset($arProperty["USER_TYPE_SETTINGS"]["height"]))
- $height = (int)$arProperty["USER_TYPE_SETTINGS"]["height"];
- if($height <= 0)
- $height = 200;
- return '
- <tr valign="top">
- <td>'.Loc::getMessage("IBLOCK_PROP_HTML_SETTING_HEIGHT").':</td>
- <td><input type="text" size="5" name="'.$strHTMLControlName["NAME"].'[height]" value="'.$height.'">px</td>
- </tr>
- ';
- }
- protected static function getValueFromString($value, $getFull = false)
- {
- $getFull = ($getFull === true);
- $valueType = 'HTML';
- $value = (string)$value;
- if ($value !== '')
- {
- $prefix = strtoupper(substr($value, 0, 6));
- $isText = $prefix == '[TEXT]';
- if ($prefix == '[HTML]' || $isText)
- {
- if ($isText)
- $valueType = 'TEXT';
- $value = substr($value, 6);
- }
- }
- if ($getFull)
- {
- return array(
- 'VALUE' => array(
- 'TEXT' => $value,
- 'TYPE' => $valueType
- )
- );
- }
- else
- {
- return array(
- 'TEXT' => $value,
- 'TYPE' => $valueType
- );
- }
- }
- }