public static function initialize($environment, $configdir) { if (self::$instance instanceof self) { return; } $configuration = array(); // Load config foreach (self::getConfigFiles($configdir) as $configfile) { $configuration = array_merge_recursive(array_reduce(array_intersect_key(self::loadConfigFile($configfile), array_flip(array('all', $environment))), array('self', 'mergeWrapper')), $configuration); } // Set our instance, load kxConfig self::$instance = new self($environment, new kxConfig($configuration)); // Add any classes we want added to the autoloader. foreach (kxEnv::get('kx:autoload:load') as $repo => $opts) { kxEnv::set(sprintf('kx:autoload:repository:%s:id', $repo), kxAutoload::registerRepository(sprintf('%s/%s/%s', KX_ROOT, 'application/lib', $opts['path']), array('prefix' => $opts['prefix']))); } // Set up our input, remove any magic quotes if (is_array($_POST) and !empty($_POST)) { foreach ($_POST as $BUTTER => $TOAST) { // Skip arrays if (!is_array($TOAST)) { $_POST[$BUTTER] = kxFunc::strip_magic($TOAST); } } } // Clean up all of our input (cookies, get/post requests, etc) kxFunc::cleanInput($_GET); kxFunc::cleanInput($_POST); kxFunc::cleanInput($_COOKIE); kxFunc::cleanInput($_REQUEST); //Okay NOW let's parse our input $input = kxFunc::parseInput($_GET, array()); // Allow $_POST to overwrite $_GET self::$request = kxFunc::parseInput($_POST, $input) + self::$request; // Grab our app $_application = preg_replace("/[^a-zA-Z0-9\\-\\_]/", "", isset($_REQUEST['app']) && trim($_REQUEST['app']) ? $_REQUEST['app'] : "core"); // Make sure we get (hopefully) a string if (is_array($_application)) { $_application = array_shift($_application); } define('KX_CURRENT_APP', $_application); kxEnv::$current_application = KX_CURRENT_APP; kxEnv::$current_module = isset(self::$request['module']) ? self::$request['module'] : ''; kxEnv::$current_section = isset(self::$request['section']) ? self::$request['section'] : ''; // Cleanup kxEnv::$current_module = kxFunc::alphaNum(kxEnv::$current_module); kxEnv::$current_section = kxFunc::alphaNum(kxEnv::$current_section); // Load the cache self::$cache = kxCache::instance(); }
/** * Retreive our command * * @access public * @param object kxEnv reference * @return object */ public function getCmd(kxEnv $environment) { $module = kxEnv::$current_module; $section = kxEnv::$current_section; // No module? if (!$module) { if (IN_MANAGE && !isset(kxEnv::$request['app'])) { $module = 'index'; } else { // Get the first module in the DB $module = kxDB::getInstance()->select("modules")->fields("modules", array("module_file"))->condition("module_application", KX_CURRENT_APP)->condition("module_manage", IN_MANAGE)->orderBy("module_position")->execute()->fetchField(); } } $moduledir = kxFunc::getAppDir(KX_CURRENT_APP) . '/modules/' . self::$class_dir . '/' . $module . '/'; // No section? if (!$section) { if (file_exists($moduledir . 'default_section.php')) { $defaultSection = ""; require $moduledir . 'default_section.php'; if ($defaultSection) { $section = $defaultSection; } } } // Are we in manage? if (IN_MANAGE) { // Load the logging class here because we'll probably need it anyway in pretty much any manage function require_once kxFunc::getAppDir('core') . '/classes/logging.php'; $environment->set('kx:classes:core:logging:id', new logging($environment)); $validSession = kxFunc::getManageSession(); if ((!isset($environment::$request['module']) || isset($environment::$request['module']) && $environment::$request['module'] != 'login') && !$validSession) { // Force login if we have an invalid session $environment::$request['module'] = 'login'; kxEnv::$current_module = 'login'; require_once kxFunc::getAppDir('core') . "/modules/manage/login/login.php"; $login = new manage_core_login_login($environment); $login->execute($environment); exit; } } // Ban check ( may as well do it here before we do any further processing) $boardName = ""; if (KX_CURRENT_APP == "core" && $module == "post" && $section == "post") { if (isset($environment->request) && isset($environment->request['board'])) { $boardName = $environment->{$request}['board']; } } kxBans::banCheck($_SERVER['REMOTE_ADDR'], $boardName); $className = self::$class_dir . '_' . KX_CURRENT_APP . '_' . $module . '_' . $section; if (file_exists($moduledir . $section . '.php')) { require_once $moduledir . $section . '.php'; } if (class_exists($className)) { $cmd_class = new ReflectionClass($className); if ($cmd_class->isSubClassOf(self::$baseCmd)) { return $cmd_class->newInstance(); } else { throw new kxException("{$section} in {$module} does not exist!"); } } //If we somehow made it here, let's just use the default command return clone self::$defaultCmd; }