PageRenderTime 32ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/bitrix/modules/iblock/classes/general/prop_html.php

https://bitbucket.org/alex_poluektov/itech_test
PHP | 359 lines | 322 code | 30 blank | 7 comment | 61 complexity | b228a39dd8697ac279145aa265a15a18 MD5 | raw file
Possible License(s): Apache-2.0
  1. <?
  2. use Bitrix\Main\Loader,
  3. Bitrix\Main\Localization\Loc,
  4. Bitrix\Iblock;
  5. Loc::loadMessages(__FILE__);
  6. class CIBlockPropertyHTML
  7. {
  8. const USER_TYPE = 'HTML';
  9. public static function GetUserTypeDescription()
  10. {
  11. return array(
  12. "PROPERTY_TYPE" => Iblock\PropertyTable::TYPE_STRING,
  13. "USER_TYPE" => self::USER_TYPE,
  14. "DESCRIPTION" => Loc::getMessage("IBLOCK_PROP_HTML_DESC"),
  15. "GetPublicViewHTML" => array(__CLASS__, "GetPublicViewHTML"),
  16. "GetPublicEditHTML" => array(__CLASS__, "GetPublicEditHTML"),
  17. "GetAdminListViewHTML" => array(__CLASS__, "GetAdminListViewHTML"),
  18. "GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"),
  19. "ConvertToDB" => array(__CLASS__, "ConvertToDB"),
  20. "ConvertFromDB" => array(__CLASS__, "ConvertFromDB"),
  21. "GetLength" =>array(__CLASS__, "GetLength"),
  22. "PrepareSettings" =>array(__CLASS__, "PrepareSettings"),
  23. "GetSettingsHTML" =>array(__CLASS__, "GetSettingsHTML"),
  24. );
  25. }
  26. public static function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
  27. {
  28. if (!is_array($value["VALUE"]))
  29. $value = static::ConvertFromDB($arProperty, $value);
  30. $ar = $value["VALUE"];
  31. if (!empty($ar) && is_array($ar))
  32. {
  33. if (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'CSV_EXPORT')
  34. return '['.$ar["TYPE"].']'.$ar["TEXT"];
  35. elseif (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'SIMPLE_TEXT')
  36. return ($ar["TYPE"] == 'HTML' ? strip_tags($ar["TEXT"]) : $ar["TEXT"]);
  37. else
  38. return FormatText($ar["TEXT"], $ar["TYPE"]);
  39. }
  40. return '';
  41. }
  42. public static function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
  43. {
  44. if(!is_array($value["VALUE"]))
  45. $value = static::ConvertFromDB($arProperty, $value);
  46. $ar = $value["VALUE"];
  47. if($ar)
  48. return htmlspecialcharsEx($ar["TYPE"].":".$ar["TEXT"]);
  49. else
  50. return "&nbsp;";
  51. }
  52. public static function GetPublicEditHTML($arProperty, $value, $strHTMLControlName)
  53. {
  54. if (!Loader::includeModule("fileman"))
  55. return Loc::getMessage("IBLOCK_PROP_HTML_NOFILEMAN_ERROR");
  56. if (!is_array($value["VALUE"]))
  57. $value = static::ConvertFromDB($arProperty, $value);
  58. $settings = static::PrepareSettings($arProperty);
  59. $id = preg_replace("/[^a-z0-9]/i", '', $strHTMLControlName['VALUE']);
  60. ob_start();
  61. echo '<input type="hidden" name="'.$strHTMLControlName["VALUE"].'[TYPE]" value="html">';
  62. $LHE = new CHTMLEditor;
  63. $LHE->Show(array(
  64. 'name' => $strHTMLControlName["VALUE"].'[TEXT]',
  65. 'id' => $id,
  66. 'inputName' => $strHTMLControlName["VALUE"].'[TEXT]',
  67. 'content' => $value["VALUE"]['TEXT'],
  68. 'width' => '100%',
  69. 'minBodyWidth' => 350,
  70. 'normalBodyWidth' => 555,
  71. 'height' => '200',
  72. 'bAllowPhp' => false,
  73. 'limitPhpAccess' => false,
  74. 'autoResize' => true,
  75. 'autoResizeOffset' => 40,
  76. 'useFileDialogs' => false,
  77. 'saveOnBlur' => true,
  78. 'showTaskbars' => false,
  79. 'showNodeNavi' => false,
  80. 'askBeforeUnloadPage' => true,
  81. 'bbCode' => false,
  82. 'actionUrl' => '/bitrix/tools/html_editor_action.php',
  83. 'siteId' => SITE_ID,
  84. 'setFocusAfterShow' => false,
  85. 'controlsMap' => array(
  86. array('id' => 'Bold', 'compact' => true, 'sort' => 80),
  87. array('id' => 'Italic', 'compact' => true, 'sort' => 90),
  88. array('id' => 'Underline', 'compact' => true, 'sort' => 100),
  89. array('id' => 'Strikeout', 'compact' => true, 'sort' => 110),
  90. array('id' => 'RemoveFormat', 'compact' => true, 'sort' => 120),
  91. array('id' => 'Color', 'compact' => true, 'sort' => 130),
  92. array('id' => 'FontSelector', 'compact' => false, 'sort' => 135),
  93. array('id' => 'FontSize', 'compact' => false, 'sort' => 140),
  94. array('separator' => true, 'compact' => false, 'sort' => 145),
  95. array('id' => 'OrderedList', 'compact' => true, 'sort' => 150),
  96. array('id' => 'UnorderedList', 'compact' => true, 'sort' => 160),
  97. array('id' => 'AlignList', 'compact' => false, 'sort' => 190),
  98. array('separator' => true, 'compact' => false, 'sort' => 200),
  99. array('id' => 'InsertLink', 'compact' => true, 'sort' => 210),
  100. array('id' => 'InsertImage', 'compact' => false, 'sort' => 220),
  101. array('id' => 'InsertVideo', 'compact' => true, 'sort' => 230),
  102. array('id' => 'InsertTable', 'compact' => false, 'sort' => 250),
  103. array('separator' => true, 'compact' => false, 'sort' => 290),
  104. array('id' => 'Fullscreen', 'compact' => false, 'sort' => 310),
  105. array('id' => 'More', 'compact' => true, 'sort' => 400)
  106. ),
  107. ));
  108. $s = ob_get_contents();
  109. ob_end_clean();
  110. return $s;
  111. }
  112. public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
  113. {
  114. $strHTMLControlName["VALUE"] = htmlspecialcharsEx($strHTMLControlName["VALUE"]);
  115. if (!is_array($value["VALUE"]))
  116. $value = static::ConvertFromDB($arProperty, $value);
  117. $ar = $value["VALUE"];
  118. if (strtolower($ar["TYPE"]) != "text")
  119. $ar["TYPE"] = "html";
  120. else
  121. $ar["TYPE"] = "text";
  122. $settings = static::PrepareSettings($arProperty);
  123. ob_start();
  124. ?><table width="100%"><?
  125. if($strHTMLControlName["MODE"]=="FORM_FILL" && COption::GetOptionString("iblock", "use_htmledit", "Y")=="Y" && Loader::includeModule("fileman")):
  126. ?><tr>
  127. <td colspan="2" align="center">
  128. <input type="hidden" name="<?=$strHTMLControlName["VALUE"]?>" value="">
  129. <?
  130. $text_name = preg_replace("/([^a-z0-9])/is", "_", $strHTMLControlName["VALUE"]."[TEXT]");
  131. $text_type = preg_replace("/([^a-z0-9])/is", "_", $strHTMLControlName["VALUE"]."[TYPE]");
  132. CFileMan::AddHTMLEditorFrame($text_name, htmlspecialcharsBx($ar["TEXT"]), $text_type, strtolower($ar["TYPE"]), $settings['height'], "N", 0, "", "");
  133. ?>
  134. </td>
  135. </tr>
  136. <?else:?>
  137. <tr>
  138. <td align="right"><?echo Loc::getMessage("IBLOCK_DESC_TYPE")?></td>
  139. <td align="left">
  140. <input type="radio" name="<?=$strHTMLControlName["VALUE"]?>[TYPE]" id="<?=$strHTMLControlName["VALUE"]?>[TYPE][TEXT]" value="text" <?if($ar["TYPE"]!="html")echo " checked"?>>
  141. <label for="<?=$strHTMLControlName["VALUE"]?>[TYPE][TEXT]"><?echo Loc::getMessage("IBLOCK_DESC_TYPE_TEXT")?></label> /
  142. <input type="radio" name="<?=$strHTMLControlName["VALUE"]?>[TYPE]" id="<?=$strHTMLControlName["VALUE"]?>[TYPE][HTML]" value="html"<?if($ar["TYPE"]=="html")echo " checked"?>>
  143. <label for="<?=$strHTMLControlName["VALUE"]?>[TYPE][HTML]"><?echo Loc::getMessage("IBLOCK_DESC_TYPE_HTML")?></label>
  144. </td>
  145. </tr>
  146. <tr>
  147. <td colspan="2" align="center"><textarea cols="60" rows="10" name="<?=$strHTMLControlName["VALUE"]?>[TEXT]" style="width:100%"><?=htmlspecialcharsEx($ar["TEXT"])?></textarea></td>
  148. </tr>
  149. <?endif;
  150. if (($arProperty["WITH_DESCRIPTION"]=="Y") && ('' != trim($strHTMLControlName["DESCRIPTION"]))):?>
  151. <tr>
  152. <td colspan="2">
  153. <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>
  154. </td>
  155. </tr>
  156. <?endif;?>
  157. </table>
  158. <?
  159. $return = ob_get_contents();
  160. ob_end_clean();
  161. return $return;
  162. }
  163. public static function ConvertToDB($arProperty, $value)
  164. {
  165. global $DB;
  166. $return = false;
  167. if (!is_array($value))
  168. {
  169. $value = static::getValueFromString($value, true);
  170. }
  171. elseif (isset($value['VALUE']) && !is_array($value['VALUE']))
  172. {
  173. $value['VALUE'] = static::getValueFromString($value['VALUE'], false);
  174. }
  175. $defaultValue = isset($value['DEFAULT_VALUE']) && $value['DEFAULT_VALUE'] === true;
  176. if(
  177. is_array($value)
  178. && array_key_exists("VALUE", $value)
  179. )
  180. {
  181. $text = trim($value["VALUE"]["TEXT"]);
  182. $len = strlen($text);
  183. if ($len > 0 || $defaultValue)
  184. {
  185. if ($DB->type === "MYSQL")
  186. $limit = 63200;
  187. else
  188. $limit = 1950;
  189. if ($len > $limit)
  190. $value["VALUE"]["TEXT"] = substr($text, 0, $limit);
  191. $val = static::CheckArray($value["VALUE"], $defaultValue);
  192. if (is_array($val))
  193. {
  194. $return = array(
  195. "VALUE" => serialize($val),
  196. );
  197. if (trim($value["DESCRIPTION"]) != '')
  198. $return["DESCRIPTION"] = trim($value["DESCRIPTION"]);
  199. }
  200. }
  201. }
  202. return $return;
  203. }
  204. public static function ConvertFromDB($arProperty, $value)
  205. {
  206. $return = false;
  207. if (!is_array($value["VALUE"]))
  208. {
  209. $return = array(
  210. "VALUE" => unserialize($value["VALUE"]),
  211. );
  212. if ($return['VALUE'] === false && strlen($value['VALUE']) > 0)
  213. {
  214. $return = array(
  215. "VALUE" => array(
  216. 'TEXT' => $value["VALUE"],
  217. 'TYPE' => 'TEXT'
  218. )
  219. );
  220. }
  221. if($value["DESCRIPTION"])
  222. $return["DESCRIPTION"] = trim($value["DESCRIPTION"]);
  223. }
  224. return $return;
  225. }
  226. /**
  227. * Check value.
  228. *
  229. * @param bool|array $arFields Current value.
  230. * @param bool $defaultValue Is default value.
  231. * @return array|bool
  232. */
  233. public static function CheckArray($arFields = false, $defaultValue = false)
  234. {
  235. $defaultValue = ($defaultValue === true);
  236. if (!is_array($arFields))
  237. {
  238. $return = false;
  239. if (CheckSerializedData($arFields))
  240. $return = unserialize($arFields);
  241. }
  242. else
  243. {
  244. $return = $arFields;
  245. }
  246. if ($return)
  247. {
  248. if (is_set($return, "TEXT") && ((strlen(trim($return["TEXT"])) > 0) || $defaultValue))
  249. {
  250. $return["TYPE"] = strtoupper($return["TYPE"]);
  251. if (($return["TYPE"] != "TEXT") && ($return["TYPE"] != "HTML"))
  252. $return["TYPE"] = "HTML";
  253. }
  254. else
  255. {
  256. $return = false;
  257. }
  258. }
  259. return $return;
  260. }
  261. public static function GetLength($arProperty, $value)
  262. {
  263. if(is_array($value) && isset($value["VALUE"]["TEXT"]))
  264. return strlen(trim($value["VALUE"]["TEXT"]));
  265. else
  266. return 0;
  267. }
  268. public static function PrepareSettings($arProperty)
  269. {
  270. $height = 0;
  271. if (isset($arProperty["USER_TYPE_SETTINGS"]["height"]))
  272. $height = (int)$arProperty["USER_TYPE_SETTINGS"]["height"];
  273. if ($height <= 0)
  274. $height = 200;
  275. return array(
  276. "height" => $height,
  277. );
  278. }
  279. public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
  280. {
  281. $arPropertyFields = array(
  282. "HIDE" => array("ROW_COUNT", "COL_COUNT"),
  283. );
  284. $height = 0;
  285. if (isset($arProperty["USER_TYPE_SETTINGS"]["height"]))
  286. $height = (int)$arProperty["USER_TYPE_SETTINGS"]["height"];
  287. if($height <= 0)
  288. $height = 200;
  289. return '
  290. <tr valign="top">
  291. <td>'.Loc::getMessage("IBLOCK_PROP_HTML_SETTING_HEIGHT").':</td>
  292. <td><input type="text" size="5" name="'.$strHTMLControlName["NAME"].'[height]" value="'.$height.'">px</td>
  293. </tr>
  294. ';
  295. }
  296. protected static function getValueFromString($value, $getFull = false)
  297. {
  298. $getFull = ($getFull === true);
  299. $valueType = 'HTML';
  300. $value = (string)$value;
  301. if ($value !== '')
  302. {
  303. $prefix = strtoupper(substr($value, 0, 6));
  304. $isText = $prefix == '[TEXT]';
  305. if ($prefix == '[HTML]' || $isText)
  306. {
  307. if ($isText)
  308. $valueType = 'TEXT';
  309. $value = substr($value, 6);
  310. }
  311. }
  312. if ($getFull)
  313. {
  314. return array(
  315. 'VALUE' => array(
  316. 'TEXT' => $value,
  317. 'TYPE' => $valueType
  318. )
  319. );
  320. }
  321. else
  322. {
  323. return array(
  324. 'TEXT' => $value,
  325. 'TYPE' => $valueType
  326. );
  327. }
  328. }
  329. }