/** * 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; }
public function checkBlacklistedText($boardId) { $filters = kxEnv::Get("cache:filters:spamfilters"); /*$filters = $this->db->select("filter") ->fields("filter") ->condition("filter_type", 2, ">=") ->orderBy("filter_type", "DESC") ->execute() ->fetchAll();*/ $reported = 0; if (isset($filters)) { foreach ($filters as $filter) { if ((!$filter->filter_boards || in_array($boardId, unserialize($filter->filter_boards))) && (!$filter->filter_regex && stripos($this->request['message'], $filter->filter_word) !== false) || $filter->filter_regex && preg_match($filter->filter_word, $this->request['message'])) { // They included blacklisted text in their post. What do we do? if ($filter->filter_type & 8) { // Ban them if they have the ban flag set on this filter $punishment = unserialize($filter->filter_punishment); kxBans::banUser($_SERVER['REMOTE_ADDR'], 'board.php', 1, $punishment['banlength'], $filter->filter_boards, _gettext('Posting blacklisted text.') . ' (' . $filter . ')', $this->request['message']); } if ($filter->filter_type & 4) { // Stop the post from happening if the delete flag is set kxFunc::showError(sprintf(_gettext('Blacklisted text ( %s ) detected.'), $filter)); } if ($filter->filter_type & 2 && !$reported) { // Report flag is set, report the post $reported = 1; // TODO add this later } } } } }