/** * @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.group.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(); while ($row = $statement->fetchArray()) { // ignore descriptions if (substr($row['languageItem'], -12) == '.description') { continue; } $itemName = preg_replace('~^([a-z]+)\\.acp\\.group\\.option\\.~', '', $row['languageItem']); $languageItems[$itemName] = $row['languageItemValue']; } if (empty($languageItems)) { return array(); } $conditions = new PreparedStatementConditionBuilder(); $conditions->add("optionName IN (?)", array(array_keys($languageItems))); $sql = "SELECT\toptionID, optionName, categoryName, permissions, options\n\t\t\tFROM\twcf" . WCF_N . "_user_group_option\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); // don't use a limit here $statement->execute($conditions->getParameters()); $optionCategories = UserGroupOptionCacheBuilder::getInstance()->getData(array(), 'categories'); while ($userGroupOption = $statement->fetchObject('wcf\\data\\user\\group\\option\\UserGroupOption')) { // category is not accessible if (!$this->isValid($userGroupOption->categoryName)) { continue; } // option is not accessible if (!$this->validate($userGroupOption)) { continue; } $link = LinkHandler::getInstance()->getLink('UserGroupOption', array('id' => $userGroupOption->optionID)); $categoryName = $userGroupOption->categoryName; $parentCategories = array(); while (isset($optionCategories[$categoryName])) { array_unshift($parentCategories, 'wcf.acp.group.option.category.' . $optionCategories[$categoryName]->categoryName); $categoryName = $optionCategories[$categoryName]->parentCategoryName; } $results[] = new ACPSearchResult($languageItems[$userGroupOption->optionName], $link, WCF::getLanguage()->getDynamicVariable('wcf.acp.search.result.subtitle', array('pieces' => $parentCategories))); } return $results; }
/** * @see \wcf\system\SingletonFactory::init() */ protected function init() { $this->usersOnlyPermissions = UserGroupOptionCacheBuilder::getInstance()->getData(array(), 'usersOnlyOptions'); }
/** * @see \wcf\data\IEditableCachedObject::resetCache() */ public static function resetCache() { UserGroupOptionCacheBuilder::getInstance()->reset(); }