/** * Get NBFrameObjectHandler Children Class Singleton Instance * * @param string $className * @param string $dirName * @param string $origDirName * @return NBFrameObjectHandler */ function &getHandler($className, &$environment) { static $sHandlerArr; static $sNullLanguageManager = null; $ret = false; $dirName = ''; $classPath = str_replace('.', '/', basename($className)); $classBaseName = basename($classPath); $classOffset = dirname('/' . $classPath); if ($classOffset == '/') { $classOffset = ''; } $classOffsetName = str_replace('/', '.', dirname($classPath)); if (preg_match('/^NBFrame\\.(.*)/', $className, $match)) { $key = $className; } else { if (!empty($environment)) { $dirName = $environment->getDirName(); $key = $environment->prefix($className); } else { $key = $className; } } $handlerClassName = $classBaseName . 'Handler'; if (!isset($sHandlerArr[$key])) { if (preg_match('/^NBFrame\\.(.*)/', $className, $match)) { NBFrame::using('Object'); NBFrame::using('ObjectHandler'); $className = $match[1]; NBFrame::using($className); $classBaseName = 'NBFrame' . $classBaseName; $handlerClassName = $classBaseName . 'Handler'; } else { if (!empty($environment) && !class_exists($handlerClassName)) { NBFrame::using('Object'); NBFrame::using('ObjectHandler'); $fileName = $environment->findFile($className . '.class.php', 'class'); if ($fileName) { require_once $fileName; } } } if (class_exists($dirName . '_' . $handlerClassName)) { // This handler may be Module custom handler ($sHandlerArr[$key] =& new $dirName()) . '_' . $handlerClassName($GLOBALS['xoopsDB']); $handler =& $sHandlerArr[$key]; } else { if (class_exists($handlerClassName)) { $sHandlerArr[$key] =& new $handlerClassName($GLOBALS['xoopsDB']); $handler =& $sHandlerArr[$key]; } else { if (preg_match('/^realname\\.(\\w+)/i', $className, $match)) { // Automatic Creating Handler Class with Table Names $handlerClassName = 'NBFrameRealTable' . $handlerClassName; $entityClassName = 'NBFrameRealTable' . $classBaseName; $sHandlerArr[$key] =& new NBFrameObjectHandler($GLOBALS['xoopsDB']); $handler =& $sHandlerArr[$key]; $handler->setTableBaseName($match[1]); $handler->mUseModuleTablePrefix = false; $handler->mClassName = $handlerClassName; $handler->mEntityClassName = $entityClassName; } } } if ($handler && !empty($environment)) { if ($handler->mUseModuleTablePrefix) { $handler->setTableBaseName($dirName . '_' . $handler->getTableBaseName()); } $handler->mEnvironment =& NBFrame::makeClone($environment); $handler->mLanguageManager =& $handler->mEnvironment->getLanguageManager(); } else { if (empty($sNullLanguageManager)) { NBFrame::using('Language'); $sNullLanguageManager =& new NBFrameLanguage(NBFrame::null()); } $handler->mLanguageManager =& $sNullLanguageManager; } } else { $handler =& $sHandlerArr[$key]; } return $handler; }
function NBFrameBase(&$environment) { $this->mEnvironment =& NBFrame::makeClone($environment); $this->mLanguage =& $this->mEnvironment->getLanguageManager(); }