X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fclass_BaseFrameworkSystem.php;h=4205170200d1e544d6e3dfe34aa55a21350f6222;hp=026a06baebf2432e4f1c4691cc7e754512d6fcfd;hb=3cbaa685d35683473f2a13107999108344df2aa7;hpb=5fe6764d12630921081846f51473fc8b9b930289 diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index 026a06ba..42051702 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -218,6 +218,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $communicatorInstance = NULL; + /** + * State instance + */ + private $stateInstance = NULL; + /** * Thousands separator */ @@ -258,6 +263,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $controllerName = ''; + /** + * Name of used protocol + */ + private $protocolName = 'invalid'; + /** * Array with bitmasks and such for pack/unpack methods to support both * 32-bit and 64-bit systems @@ -346,9 +356,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { const EXCEPTION_FATAL_ERROR = 0x035; const EXCEPTION_FILE_NOT_FOUND = 0x036; const EXCEPTION_ASSERTION_FAILED = 0x037; - const EXCEPTION_FILE_CANNOT_BE_READ = 0x038; - const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x039; - const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x03a; + const EXCEPTION_FILE_NOT_REACHABLE = 0x038; + const EXCEPTION_FILE_CANNOT_BE_READ = 0x039; + const EXCEPTION_FILE_CANNOT_BE_WRITTEN = 0x03a; + const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x03b; + const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x03c; /** * Hexadecimal->Decimal translation array @@ -473,10 +485,13 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Init argument string $argsString = ''; - // Is it empty or an array? - if (empty($args)) { + // Is it NULL, empty or an array? + if (is_null($args)) { // No arguments $argsString = 'NULL'; + } elseif (empty($args)) { + // Empty arguments + $argsString = '(empty)'; } elseif (is_array($args)) { // Some arguments are there foreach ($args as $arg) { @@ -1528,6 +1543,25 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $this->communicatorInstance = $communicatorInstance; } + /** + * Setter for state instance + * + * @param $stateInstance A Stateable instance + * @return void + */ + public final function setStateInstance (Stateable $stateInstance) { + $this->stateInstance = $stateInstance; + } + + /** + * Getter for state instance + * + * @return $stateInstance A Stateable instance + */ + public final function getStateInstance () { + return $this->stateInstance; + } + /** * Setter for command name * @@ -1566,6 +1600,25 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { return $this->controllerName; } + /** + * Getter for protocol name + * + * @return $protocolName Name of used protocol + */ + public final function getProtocolName () { + return $this->protocolName; + } + + /** + * Setter for protocol name + * + * @param $protocolName Name of used protocol + * @return void + */ + protected final function setProtocolName ($protocolName) { + $this->protocolName = $protocolName; + } + /** * Checks whether an object equals this object. You should overwrite this * method to implement own equality checks @@ -1889,12 +1942,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $str The string, what ever it is needs to be converted * @return $className Generated class name */ - public function convertToClassName ($str) { + public static final function convertToClassName ($str) { // Init class name $className = ''; // Convert all dashes in underscores - $str = $this->convertDashesToUnderscores($str); + $str = self::convertDashesToUnderscores($str); // Now use that underscores to get classname parts for hungarian style foreach (explode('_', $str) as $strPart) { @@ -1912,7 +1965,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @param $str The string with maybe dashes inside * @return $str The converted string with no dashed, but underscores */ - public final function convertDashesToUnderscores ($str) { + public static final function convertDashesToUnderscores ($str) { // Convert them all $str = str_replace('-', '_', $str); @@ -2082,7 +2135,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { //* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput($fieldName.':
'.print_r($fieldArray, TRUE).'
'); // Convert dashes to underscore - $fieldName2 = $this->convertDashesToUnderscores($fieldName); + $fieldName2 = self::convertDashesToUnderscores($fieldName); // Does the field exist? if ($this->isFieldSet($fieldName)) { @@ -2122,7 +2175,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . $this->__toString() . ':' . __LINE__ . '] fieldName=' . $fieldName . ',fieldArray=
'.print_r($fieldArray, TRUE).'
'); // Convert dashes to underscore - $fieldName = $this->convertDashesToUnderscores($fieldName); + $fieldName = self::convertDashesToUnderscores($fieldName); // Determine it $isSet = isset($fieldArray[$fieldName]); @@ -2146,7 +2199,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $configEntry = $resultInstance->getUpdateInstance()->getWrapperConfigEntry(); // Create object instance - $wrapperInstance = ObjectFactory::createObjectByConfiguredName($configEntry); + $wrapperInstance = DatabaseWrapperFactory::createWrapperByConfiguredName($configEntry); // Yes, then send the whole result to the database layer $wrapperInstance->doUpdateByResult($this->getResultInstance()); @@ -3225,6 +3278,58 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { //* NOISY-DEBUG */ self::createDebugInstance(__CLASS__)->debugOutput('packed=' . $packed . ' - EXIT!'); return $packed; } + + /** + * Checks whether the given file/path is in open_basedir(). This does not + * gurantee that the file is actually readable and/or writeable. If you need + * such gurantee then please use isReadableFile() instead. + * + * @param $filePathName Name of the file/path to be checked + * @return $isReachable Whether it is within open_basedir() + */ + public static function isReachableFilePath ($filePathName) { + // Is not reachable by default + $isReachable = FALSE; + + // Get open_basedir parameter + $openBaseDir = ini_get('open_basedir'); + + // Is it set? + if (!empty($openBaseDir)) { + // Check all entries + foreach (explode(PATH_SEPARATOR, $openBaseDir) as $dir) { + // Check on existence + if (substr($filePathName, 0, strlen($dir)) == $dir) { + // Is reachable + $isReachable = TRUE; + } // END - if + } // END - foreach + } else { + // If open_basedir is not set, all is allowed + $isReachable = TRUE; + } + + // Return status + return $isReachable; + } + + /** + * Checks whether the give file is within open_basedir() (done by + * isReachableFilePath()), is actually a file and is readable. + * + * @param $fileName Name of the file to be checked + * @return $isReadable Whether the file is readable (and therefor exists) + */ + public static function isReadableFile ($fileName) { + // Default is not readable + $isReadable = FALSE; + + // Is within parameters, so check if it is a file and readable + $isReadable = ((self::isReachableFilePath($fileName)) && (file_exists($fileName)) && (is_file($fileName)) && (is_readable($fileName))); + + // Return status + return $isReadable; + } } // [EOF]