/** * @see \wcf\data\ISearchAction::getSearchResultList() */ public function getSearchResultList() { $data = array(); $results = ACPSearchHandler::getInstance()->search($this->parameters['data']['searchString']); foreach ($results as $resultList) { $items = array(); foreach ($resultList as $item) { $items[] = array('link' => $item->getLink(), 'subtitle' => $item->getSubtitle(), 'title' => $item->getTitle()); } foreach ($items as $key => &$item) { $double = false; foreach ($items as $key2 => $item2) { if ($key != $key2 && !strcasecmp($item['title'], $item2['title'])) { $double = true; break; } } if (!$double) { unset($item['subtitle']); } } unset($item); $data[] = array('items' => $items, 'title' => $resultList->getTitle()); } return $data; }
/** * @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)); // filter by language item $languageItemsConditions = ''; $languageItemsParameters = array(); foreach (ACPSearchHandler::getInstance()->getAbbreviations('.acp.menu.link.%') as $abbreviation) { if (!empty($languageItemsConditions)) { $languageItemsConditions .= " OR "; } $languageItemsConditions .= "languageItem LIKE ?"; $languageItemsParameters[] = $abbreviation; } $conditions->add("(" . $languageItemsConditions . ")", $languageItemsParameters); $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()) { $languageItems[$row['languageItem']] = $row['languageItemValue']; } if (empty($languageItems)) { return array(); } $conditions = new PreparedStatementConditionBuilder(); $conditions->add("menuItem IN (?)", array(array_keys($languageItems))); $conditions->add("menuItemController <> ''"); $sql = "SELECT\t*\n\t\t\tFROM\twcf" . WCF_N . "_acp_menu_item\n\t\t\t" . $conditions; $statement = WCF::getDB()->prepareStatement($sql); // don't use a limit here $statement->execute($conditions->getParameters()); $menuItems = ACPMenu::getInstance()->menuItemList; while ($menuItem = $statement->fetchObject('wcf\\data\\acp\\menu\\item\\ACPMenuItem')) { // only valid menu items exist in TreeMenu::$menuItemList, // so no need to call AbstractACPSearchResultProvider::validate() if (!isset($menuItems[$menuItem->menuItem])) { continue; } $parentMenuItem = $menuItem->parentMenuItem; $parentMenuItems = array(); while ($parentMenuItem && isset($menuItems[$parentMenuItem])) { array_unshift($parentMenuItems, $parentMenuItem); $parentMenuItem = $menuItems[$parentMenuItem]->parentMenuItem; } $results[] = new ACPSearchResult($languageItems[$menuItem->menuItem], $menuItem->getLink(), WCF::getLanguage()->getDynamicVariable('wcf.acp.search.result.subtitle', array('pieces' => $parentMenuItems))); } return $results; }
/** * @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("languageItemValue LIKE ?", array($query.'%')); // filter by language item $languageItemsConditions = ''; $languageItemsParameters = array(); foreach (ACPSearchHandler::getInstance()->getAbbreviations('.acp.menu.link.%') as $abbreviation) { if (!empty($languageItemsConditions)) $languageItemsConditions .= " OR "; $languageItemsConditions .= "languageItem LIKE ?"; $languageItemsParameters[] = $abbreviation; } $conditions->add("(".$languageItemsConditions.")", $languageItemsParameters); $sql = "SELECT languageItem, languageItemValue FROM wcf".WCF_N."_language_item ".$conditions." ORDER BY languageItemValue ASC"; $statement = WCF::getDB()->prepareStatement($sql); // don't use a limit here $statement->execute($conditions->getParameters()); $languageItems = array(); while ($row = $statement->fetchArray()) { $languageItems[$row['languageItem']] = $row['languageItemValue']; } if (empty($languageItems)) { return array(); } $conditions = new PreparedStatementConditionBuilder(); $conditions->add("menuItem IN (?)", array(array_keys($languageItems))); $conditions->add("menuItemLink <> ''"); $sql = "SELECT menuItem, menuItemLink, permissions, options FROM wcf".WCF_N."_acp_menu_item ".$conditions; $statement = WCF::getDB()->prepareStatement($sql); // don't use a limit here $statement->execute($conditions->getParameters()); while ($menuItem = $statement->fetchObject('wcf\data\acp\menu\item\ACPMenuItem')) { if (!$this->validate($menuItem)) { continue; } $results[] = new ACPSearchResult($languageItems[$menuItem->menuItem], $menuItem->getLink()); } return $results; }
/** * @see wcf\data\ISearchAction::getSearchResultList() */ public function getSearchResultList() { $data = array(); $results = ACPSearchHandler::getInstance()->search($this->parameters['data']['searchString']); foreach ($results as $resultList) { $items = array(); foreach ($resultList as $item) { $items[] = array( 'link' => $item->getLink(), 'title' => $item->getTitle() ); } $data[] = array( 'items' => $items, 'title' => $resultList->getTitle() ); } return $data; }
/** * @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("languageItemValue LIKE ?", array($query.'%')); // filter by language item $languageItemsConditions = ''; $languageItemsParameters = array(); foreach (ACPSearchHandler::getInstance()->getAbbreviations('.acp.group.option.%') as $abbreviation) { if (!empty($languageItemsConditions)) $languageItemsConditions .= " OR "; $languageItemsConditions .= "languageItem LIKE ?"; $languageItemsParameters[] = $abbreviation; } $conditions->add("(".$languageItemsConditions.")", $languageItemsParameters); $sql = "SELECT languageItem, languageItemValue FROM wcf".WCF_N."_language_item ".$conditions." ORDER BY languageItemValue 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 optionID, optionName, categoryName, permissions, options FROM wcf".WCF_N."_user_group_option ".$conditions; $statement = WCF::getDB()->prepareStatement($sql); // don't use a limit here $statement->execute($conditions->getParameters()); 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)); $results[] = new ACPSearchResult($languageItems[$userGroupOption->optionName], $link); } return $results; }