Add acp trophy search result provider
authorJoshua Rüsweg <josh@bastelstu.be>
Thu, 2 Aug 2018 14:12:01 +0000 (16:12 +0200)
committerJoshua Rüsweg <josh@bastelstu.be>
Thu, 2 Aug 2018 14:12:01 +0000 (16:12 +0200)
Closes #2600

com.woltlab.wcf/acpSearchProvider.xml
wcfsetup/install/files/lib/system/search/acp/TrophyACPSearchResultProvider.class.php [new file with mode: 0644]
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index c970bbe0dd0bf730bbcc38bb68104256d2df1bee..0d548f88f767912de851838f689c7cc3d02c096a 100644 (file)
@@ -33,5 +33,9 @@
                        <classname>wcf\system\search\acp\ArticleACPSearchResultProvider</classname>
                        <showorder>8</showorder>
                </acpsearchprovider>
+               <acpsearchprovider name="com.woltlab.wcf.trophy">
+                       <classname>wcf\system\search\acp\TrophyACPSearchResultProvider</classname>
+                       <showorder>9</showorder>
+               </acpsearchprovider>
        </import>
 </data>
diff --git a/wcfsetup/install/files/lib/system/search/acp/TrophyACPSearchResultProvider.class.php b/wcfsetup/install/files/lib/system/search/acp/TrophyACPSearchResultProvider.class.php
new file mode 100644 (file)
index 0000000..664b9c7
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+namespace wcf\system\search\acp;
+use wcf\data\trophy\Trophy;
+use wcf\system\database\util\PreparedStatementConditionBuilder;
+use wcf\system\request\LinkHandler;
+use wcf\system\WCF;
+
+/**
+ * ACP search result provider implementation for trophies.
+ * 
+ * @author     Joshua Ruesweg
+ * @copyright  2001-2018 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\System\Search\Acp
+ */
+class TrophyACPSearchResultProvider implements IACPSearchResultProvider {
+       /**
+        * @inheritDoc
+        */
+       public function search($query) {
+               if (!MODULE_TROPHY || !WCF::getSession()->getPermission('admin.trophy.canManageTrophy')) {
+                       return [];
+               }
+               
+               $results = [];
+               
+               // search by language item
+               $conditions = new PreparedStatementConditionBuilder();
+               $conditions->add("languageID = ?", [WCF::getLanguage()->languageID]);
+               $conditions->add("languageItem LIKE ?", ['wcf.user.trophy.title%']);
+               $conditions->add("languageItemValue LIKE ?", ['%'.$query.'%']);
+               
+               $sql = "SELECT          languageItem
+                       FROM            wcf".WCF_N."_language_item
+                       ".$conditions;
+               $statement = WCF::getDB()->prepareStatement($sql);
+               $statement->execute($conditions->getParameters());
+               
+               $trophyIDs = [];
+               while ($row = $statement->fetchArray()) {
+                       $trophyIDs[] = str_replace('wcf.user.trophy.title', '', $row['languageItem']);
+               }
+               
+               $conditions = new PreparedStatementConditionBuilder(false);
+               if (!empty($trophyIDs)) {
+                       $conditions->add("trophyID IN (?)", [$trophyIDs]);
+               }
+               
+               $sql = "SELECT  *
+                       FROM    wcf".WCF_N."_trophy
+                       WHERE   title LIKE ?
+                               ".(!empty($conditions->getParameters()) ? "OR ".$conditions : "");
+               $statement = WCF::getDB()->prepareStatement($sql);
+               $statement->execute(array_merge([
+                       '%'.$query.'%'
+               ], $conditions->getParameters()));
+               
+               /** @var Trophy $trophy */
+               while ($trophy = $statement->fetchObject(Trophy::class)) {
+                       $results[] = new ACPSearchResult($trophy->getTitle(), LinkHandler::getInstance()->getLink('TrophyEdit', [
+                               'id' => $trophy->trophyID
+                       ]));
+               }
+               
+               return $results;
+       }
+}
index 07c41f895dac8ebb746b26714674355c1d82f680..95fcec091cc094b1131ca595af93226826b2049e 100644 (file)
@@ -1813,6 +1813,7 @@ Als Benachrichtigungs-URL in der Konfiguration der sofortigen Zahlungsbestätigu
                <item name="wcf.acp.search.provider.com.woltlab.wcf.page"><![CDATA[Seiten]]></item>
                <item name="wcf.acp.search.provider.com.woltlab.wcf.article"><![CDATA[Artikel]]></item>
                <item name="wcf.acp.search.provider.com.woltlab.wcf.box"><![CDATA[Boxen]]></item>
+               <item name="wcf.acp.search.provider.com.woltlab.wcf.trophy"><![CDATA[Trophäen]]></item>
                <item name="wcf.acp.search.result.subtitle"><![CDATA[{implode from=$pieces item=piece glue=' » '}{$piece|language}{/implode}]]></item>
        </category>
        
index af2ee72c66ee4c7c80c76681b24cb6ce620ebbd1..ab7b956fb062ef167cb3577ec8e08adc3c40d09c 100644 (file)
@@ -1752,6 +1752,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.search.provider.com.woltlab.wcf.page"><![CDATA[Pages]]></item>
                <item name="wcf.acp.search.provider.com.woltlab.wcf.article"><![CDATA[Articles]]></item>
                <item name="wcf.acp.search.provider.com.woltlab.wcf.box"><![CDATA[Boxes]]></item>
+               <item name="wcf.acp.search.provider.com.woltlab.wcf.trophy"><![CDATA[Trophies]]></item>
                <item name="wcf.acp.search.result.subtitle"><![CDATA[{implode from=$pieces item=piece glue=' » '}{$piece|language}{/implode}]]></item>
        </category>