%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/learning/classes/general/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/learning/classes/general/clearnsharedargmanager.php |
<?php /** * This class can be used by other modules in bitrix kernel. * BEFORE using this class, this comment must be updated to * maintain external class dependencies. * * Currently depended modules: * learning * tasks * ------ * * @access protected */ class CLearnSharedArgManager { protected $parsedOptions = NULL; /** * @param array of options to be checked and processed (by setting default values and type casting) * @param array of parameters, describes options checking and processing rules * * @example of $arParseParams * $arArgManagerParams = array( * 'includeInactiveEdges' => array('type' => 'boolean', // allowed are: boolean, integer, strictly_castable_to_integer, string * 'mandatory' => true/false, // is element mandatory * 'default_value' => true), * 'includeActiveEdges' => array('type' => 'boolean', * 'mandatory' => true/false, * 'default_value' => true), * ); * */ public function __construct ($arOptions, $arParseParams) { $this->CheckParseParams ($arParseParams); $this->parsedOptions = $this->ParseOptions ($arOptions, $arParseParams); } public function GetParsedOptions() { if ($this->parsedOptions === NULL) throw new Exception(); return ($this->parsedOptions); } public static function StaticParser ($arOptions, $arParseParams) { try { $oArgManager = new CLearnSharedArgManager ($arOptions, $arParseParams); $rc = $oArgManager->GetParsedOptions(); unset ($oArgManager); } catch (Exception $e) { throw new LearnException ( 'EA_PARAMS: ArgManager at line: ' . $e->GetLine(), LearnException::EXC_ERR_ALL_PARAMS); } return ($rc); } protected function ParseOptions ($arOptions, $arParseParams) { if ( ! is_array($arOptions) ) throw new Exception(); $arParsedOptions = array(); foreach ($arParseParams as $paramName => $arParamData) { // If option cannot be omitted - check it if ($arParamData['mandatory']) { if ( ! array_key_exists($paramName, $arOptions) ) throw new Exception(); } else // option can be omitted, so can be default value { if ( ! array_key_exists($paramName, $arOptions) ) { if (array_key_exists('default_value', $arParamData)) $arOptions[$paramName] = $arParamData['default_value']; } } // now, check and cast (if should) type of value in $arOptions[$paramName] switch ($arParamData['type']) { case 'boolean': if ( ! in_array($arOptions[$paramName], array(true, false), true) ) throw new Exception(); break; case 'string': if ( ! is_string($arOptions[$paramName]) ) throw new Exception(); break; case 'integer': if ( ! is_int($arOptions[$paramName]) ) throw new Exception(); break; case 'strictly_castable_to_integer': if ( ! is_numeric($arOptions[$paramName]) ) throw new Exception(); if ( ! is_int($arOptions[$paramName] + 0) ) throw new Exception(); $arOptions[$paramName] = (int) ($arOptions[$paramName] + 0); break; default: throw new Exception(); break; } $arParsedOptions[$paramName] = $arOptions[$paramName]; unset ($arOptions[$paramName]); } // Ensure that there is no more options if (count($arOptions) > 0) throw new Exception('there is unprocessed options'); return ($arParsedOptions); } protected function CheckParseParams ($arParseParams) { if ( ! is_array($arParseParams) ) throw new Exception(); $arMandatoryFields = array ( 'type' => array('boolean', 'integer', 'strictly_castable_to_integer', 'string'), 'mandatory' => array(true, false) ); foreach ($arParseParams as $key => $element) { if ( ! is_array($element) ) throw new Exception(); // check mandatory fields foreach ($arMandatoryFields as $mandatoryField => $mandatoryFieldAllowedValues) { if ( ! array_key_exists($mandatoryField, $element) ) throw new Exception(); // check allowed values if (is_array($mandatoryFieldAllowedValues)) if ( ! in_array($element[$mandatoryField], $mandatoryFieldAllowedValues, true) ) throw new Exception(); } // if exists $element['default_value'] => $element['mandatory'] must be FALSE // because if mandatory is TRUE => value must be set and no default value available if (array_key_exists('default_value', $element) && ($element['mandatory'] !== false)) throw new Exception('"default_value" incompatibily with enabled "mandatory" flag'); } } }