/**
  * @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;
	}
Ejemplo n.º 4
0
	/**
	 * @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;
	}