/**
  * @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;
 }
Example #2
0
 /**
  * @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();
 }