/** * @see wcf\data\IEditableCachedObject::resetCache() */ public static function resetCache() { // reset cache OptionCacheBuilder::getInstance()->reset(); // reset options.inc.php files self::rebuild(); }
/** * @see \wcf\system\search\acp\IACPSearchResultProvider::search() */ public function search($query) { $results = array(); // search by language item $conditions = new PreparedStatementConditionBuilder(); $conditions->add("languageID = ?", array(WCF::getLanguage()->languageID)); $conditions->add("languageItem LIKE ?", array('wcf.acp.option.%')); $conditions->add("languageItemValue LIKE ?", array('%' . $query . '%')); $sql = "SELECT\t\tlanguageItem, languageItemValue\n\t\t\tFROM\t\twcf" . WCF_N . "_language_item\n\t\t\t" . $conditions . "\n\t\t\tORDER BY\tlanguageItemValue ASC"; $statement = WCF::getDB()->prepareStatement($sql); // don't use a limit here $statement->execute($conditions->getParameters()); $languageItems = array(); $optionNames = array(); while ($row = $statement->fetchArray()) { $optionName = preg_replace('~^([a-z]+)\\.acp\\.option\\.~', '', $row['languageItem']); $languageItems[$optionName] = $row['languageItemValue']; $optionNames[] = $optionName; } if (empty($optionNames)) { return array(); } $conditions = new PreparedStatementConditionBuilder(); $conditions->add("optionName IN (?)", array($optionNames)); $sql = "SELECT\toptionName, categoryName, options, permissions, hidden\n\t\t\tFROM\twcf" . WCF_N . "_option\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); // don't use a limit here $statement->execute($conditions->getParameters()); $optionCategories = OptionCacheBuilder::getInstance()->getData(array(), 'categories'); while ($option = $statement->fetchObject('wcf\\data\\option\\Option')) { // category is not accessible if (!$this->isValid($option->categoryName)) { continue; } // option is not accessible if (!$this->validate($option) || $option->hidden) { continue; } $link = LinkHandler::getInstance()->getLink('Option', array('id' => $this->getCategoryID($this->getTopCategory($option->categoryName)->parentCategoryName)), 'optionName=' . $option->optionName . '#' . $this->getCategoryName($option->categoryName)); $categoryName = $option->categoryName; $parentCategories = array(); while (isset($optionCategories[$categoryName])) { array_unshift($parentCategories, 'wcf.acp.option.category.' . $optionCategories[$categoryName]->categoryName); $categoryName = $optionCategories[$categoryName]->parentCategoryName; } $results[] = new ACPSearchResult($languageItems[$option->optionName], $link, WCF::getLanguage()->getDynamicVariable('wcf.acp.search.result.subtitle', array('pieces' => $parentCategories))); } return $results; }