%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/asd.iblock/classes/general/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/asd.iblock/classes/general/iblock_prop_section.php |
<?php IncludeModuleLangFile(__FILE__); define('ASD_UT_SECTION', 'SASDSection'); class CASDiblockPropSection { const VIEW_MODE_SELECT = 0; const VIEW_MODE_WINDOW = 1; protected static $cache = array(); protected static $treeCache = null; public static function GetUserTypeDescription() { return array( 'PROPERTY_TYPE' => 'N', 'USER_TYPE' => ASD_UT_SECTION, 'DESCRIPTION' => GetMessage('ASD_UT_SECTION_DESCR'), 'CheckFields' => array(__CLASS__, 'CheckFields'), 'ConvertToDB' => array(__CLASS__, 'ConvertToDB'), 'ConvertFromDB' => array(__CLASS__, 'ConvertFromDB'), 'GetPropertyFieldHtml' => array(__CLASS__, 'GetPropertyFieldHtml'), 'GetAdminListViewHTML' => array(__CLASS__,'GetAdminListViewHTML'), 'GetPublicViewHTML' => array(__CLASS__, 'GetPublicViewHTML'), 'GetAdminFilterHTML' => array(__CLASS__,'GetAdminFilterHTML'), 'GetSettingsHTML' => array(__CLASS__,'GetSettingsHTML'), 'PrepareSettings' => array(__CLASS__,'PrepareSettings') ); } protected static function GetTree($intIBlockID, $intMaxLevel) { if (self::$treeCache === null) { $arFilter = array('IBLOCK_ID' => $intIBlockID); if ($intMaxLevel > 0) { $arFilter['<=DEPTH_LEVEL'] = $intMaxLevel; } $rsSections = CIBlockSection::GetList( array('LEFT_MARGIN' => 'ASC'), $arFilter, false, array('ID', 'NAME', 'IBLOCK_ID', 'DEPTH_LEVEL') ); while ($arSection = $rsSections->Fetch()) { self::$treeCache[] = $arSection; self::$cache[$arSection['ID']] = $arSection; } } } protected static function GetValue($intIBlockID, $intSectionID) { $strResult = ''; if (isset($intSectionID)) { if (!isset(self::$cache[$intSectionID])) { $rsSections = CIBlockSection::GetList( array(), array('ID' => $intSectionID, 'IBLOCK_ID' => $intIBlockID), false, array('ID', 'IBLOCK_ID', 'NAME', 'DEPTH_LEVEL') ); if ($arSection = $rsSections->Fetch()) { self::$cache[$intSectionID] = $arSection; } } if (isset(self::$cache[$intSectionID])) { $strResult = self::$cache[$intSectionID]['NAME']; } } return $strResult; } public static function CheckFields($arProperty, $value) { $arResult = array(); if (isset($value['VALUE']) && !empty($value['VALUE']) && !empty($arProperty['IBLOCK_ID'])) { if (!isset(self::$cache[$value['VALUE']])) { $rsSections = CIBlockSection::GetList( array(), array('ID' => $value['VALUE']), false, array('ID', 'IBLOCK_ID', 'NAME', 'DEPTH_LEVEL') ); if ($arSection = $rsSections->Fetch()) { self::$cache[$value['VALUE']] = $arSection; } } if (isset(self::$cache[$value['VALUE']])) { if (self::$cache[$value['VALUE']]['IBLOCK_ID'] != $arProperty['IBLOCK_ID']) { $arResult[] = GetMessage('ASD_UT_SECTION_NO_PARENT_IBLOCK'); } } } return $arResult; } public function ConvertToDB($arProperty, $value) { if (isset($value['VALUE']) && $value['VALUE']>0) { $value['VALUE'] = intval($value['VALUE']); } return $value; } public static function ConvertFromDB($arProperty, $value) { if (isset($value['VALUE'])) { $value['VALUE'] = intval($value['VALUE']); } return $value; } public static function GetPropertyFieldHtml($arProperty, $arValue, $strHTMLControlName) { $strResult = ''; $arSettings = self::PrepareSettings($arProperty); if ( $arSettings['VIEW_MODE'] == self::VIEW_MODE_SELECT || (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'EDIT_FORM') ) { if (self::$treeCache === null) { self::GetTree($arProperty['IBLOCK_ID'], $arSettings['MAX_LEVEL']); } ob_start(); ?> <select name="<? echo $strHTMLControlName["VALUE"]; ?>" id="<? echo $strHTMLControlName["VALUE"]; ?>"> <option value=""><? echo GetMessage('ASD_UT_SECTION_MESS_TOP_LEVEL'); ?></option> <? foreach (self::$treeCache as $arSection) { ?> <option value="<? echo $arSection['ID']; ?>"<? echo ($arSection['ID'] == $arValue['VALUE'] ? ' selected' : ''); ?>><? echo str_repeat(' . ', $arSection['DEPTH_LEVEL']-1).htmlspecialcharsex($arSection['NAME']); ?></option><? } ?> </select> <? $strResult = ob_get_contents(); ob_end_clean(); } elseif ($arSettings['VIEW_MODE'] == self::VIEW_MODE_WINDOW) { ob_start(); $strItemID = preg_replace("/[^a-zA-Z0-9_]/", "x", $strHTMLControlName['VALUE']); $strLink = '/bitrix/admin/iblock_section_search.php?lang='.LANGUAGE_ID.'&IBLOCK_ID='.$arProperty['IBLOCK_ID'].'&n='.$strItemID; if ($arValue['VALUE'] == 0) { ?><input type="text" id="<? echo $strItemID; ?>" name="<? echo htmlspecialcharsbx($strHTMLControlName['VALUE']); ?>" value="" size="5"> <input type="button" value="..." onclick="jsUtils.OpenWindow('<? echo $strLink; ?>', 900, 700);"> <span id="sp_<? echo $strItemID; ?>"></span> <? } else { $strName = self::GetValue($arProperty['IBLOCK_ID'], $arValue['VALUE']); ?><input type="text" id="<? echo $strItemID; ?>" name="<? echo htmlspecialcharsbx($strHTMLControlName['VALUE']); ?>" value="<? echo $arValue['VALUE']; ?>" size="5"> <input type="button" value="..." onclick="jsUtils.OpenWindow('<? echo $strLink; ?>', 900, 700);"> <span id="sp_<? echo $strItemID; ?>"><? echo htmlspecialcharsex($strName); ?></span> <? } $strResult = ob_get_contents(); ob_end_clean(); } return $strResult; } public static function GetAdminListViewHTML($arProperty, $arValue, $strHTMLControlName) { $strResult = ''; $strName = self::GetValue($arProperty['IBLOCK_ID'], $arValue['VALUE']); if ($strName != '') { $strResult = htmlspecialcharsbx($strName). ' [<a href="'. htmlspecialcharsbx(CIBlock::GetAdminSectionEditLink($arProperty['IBLOCK_ID'], $arValue['VALUE'])). '" title="'.GetMessage("IBEL_A_SEC_EDIT").'">'.$arValue['VALUE'].'</a>]'; } return $strResult; } public static function GetPublicViewHTML($arProperty, $arValue, $strHTMLControlName) { $strResult= self::GetValue($arProperty['IBLOCK_ID'], $arValue['VALUE']); if ($strResult != '') { $strResult = htmlspecialcharsbx($strResult); } return $strResult; } public static function GetAdminFilterHTML($arProperty, $strHTMLControlName) { $strResult = ''; ob_start(); $strItemID = preg_replace("/[^a-zA-Z0-9_]/", "x", $strHTMLControlName['VALUE']); $strLink = '/bitrix/admin/iblock_section_search.php?lang='.LANGUAGE_ID.'&IBLOCK_ID='.$arProperty['IBLOCK_ID'].'&n='.$strItemID; $strValue = ''; if (isset($GLOBALS[$strHTMLControlName['VALUE']])) $strValue = $GLOBALS[$strHTMLControlName['VALUE']]; if ($strValue == 0) { ?><input type="text" id="<? echo $strItemID; ?>" name="<? echo htmlspecialcharsbx($strHTMLControlName['VALUE']); ?>" value="" size="5"> <input type="button" value="..." onclick="jsUtils.OpenWindow('<? echo $strLink; ?>', 900, 700);"> <span id="sp_<? echo $strItemID; ?>"></span> <? } else { $strName = self::GetValue($arProperty['IBLOCK_ID'], $strValue); ?><input type="text" id="<? echo $strItemID; ?>" name="<? echo htmlspecialcharsbx($strHTMLControlName['VALUE']); ?>" value="<? echo $strValue; ?>" size="5"> <input type="button" value="..." onclick="jsUtils.OpenWindow('<? echo $strLink; ?>', 900, 700);"> <span id="sp_<? echo $strItemID; ?>"><? echo htmlspecialcharsex($strName); ?></span> <? } $strResult = ob_get_contents(); ob_end_clean(); return $strResult; } public static function GetSettingsHTML($arFields, $strHTMLControlName, &$arPropertyFields) { $arPropertyFields = array( 'USER_TYPE_SETTINGS_TITLE' => GetMessage('ASD_UT_SECTION_SETTING_TITLE'), ); $arSettings = self::PrepareSettings($arFields); return '<tr> <td>'.GetMessage('ASD_UT_SECTION_SETTING_VIEW_MODE').'</td> <td>'.SelectBoxFromArray( $strHTMLControlName['NAME'].'[VIEW_MODE]', array( 'REFERENCE' => array( GetMessage('ASD_UT_SECTION_SETTING_VIEW_MODE_SELECT'), GetMessage('ASD_UT_SECTION_SETTING_VIEW_MODE_WINDOW') ), 'REFERENCE_ID' => array( self::VIEW_MODE_SELECT, self::VIEW_MODE_WINDOW ) ), $arSettings['VIEW_MODE'] ).'</td> </tr> <tr> <td>'.GetMessage('ASD_UT_SECTION_SETTING_MAX_LEVEL').'</td> <td><input type="text" name="'.$strHTMLControlName['NAME'].'[MAX_LEVEL]" value="'.$arSettings['MAX_LEVEL'].'"> '.GetMessage('ASD_UT_SECTION_SETTING_MAX_LEVEL_DESCR').'</td> </tr>'; } public static function PrepareSettings($arFields) { $intViewMode = self::VIEW_MODE_SELECT; $intMaxLevel = 0; if (isset($arFields['USER_TYPE_SETTINGS'])) { if (isset($arFields['USER_TYPE_SETTINGS']['VIEW_MODE'])) { $intViewMode = intval($arFields['USER_TYPE_SETTINGS']['VIEW_MODE']); if ($intViewMode != self::VIEW_MODE_WINDOW) { $intViewMode = self::VIEW_MODE_SELECT; } } if (isset($arFields['USER_TYPE_SETTINGS']['MAX_LEVEL'])) { $intMaxLevel = intval($arFields['USER_TYPE_SETTINGS']['MAX_LEVEL']); } if ($intMaxLevel < 0) { $intMaxLevel = 0; } } return array( 'VIEW_MODE' => $intViewMode, 'MAX_LEVEL' => $intMaxLevel ); } }