Check the search table engines on ACP's IndexPage
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 23 Dec 2020 11:50:35 +0000 (12:50 +0100)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 23 Dec 2020 11:50:35 +0000 (12:50 +0100)
see #3404

wcfsetup/install/files/acp/templates/index.tpl
wcfsetup/install/files/lib/acp/page/IndexPage.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 6c7d8c8aefa38dd2463db0b272e22114257760f3..90f20740152348902d9441591806de8f2bbd5ba4 100644 (file)
        <p class="error">{lang}wcf.acp.index.recaptchaWithoutKey{/lang}</p>
 {/if}
 
+{if $nonInnoDbSearch}
+       <p class="error">{lang}wcf.acp.index.nonInnoDbSearch{/lang}</p>
+{/if}
+
 {if !VISITOR_USE_TINY_BUILD}
        <p class="info">{lang}wcf.acp.index.tinyBuild{/lang}</p>
 {/if}
index abf2564d9443c8ace31097986aa1db9daf69cbdf..fdced3969b4ec8795f672d97444a13bc0eb4d6cb 100755 (executable)
@@ -2,6 +2,7 @@
 namespace wcf\acp\page;
 use wcf\data\user\User;
 use wcf\data\devtools\missing\language\item\DevtoolsMissingLanguageItemList;
+use wcf\data\object\type\ObjectTypeCache;
 use wcf\page\AbstractPage;
 use wcf\system\application\ApplicationHandler;
 use wcf\system\cache\builder\OptionCacheBuilder;
@@ -9,6 +10,7 @@ use wcf\system\database\util\PreparedStatementConditionBuilder;
 use wcf\system\io\RemoteFile;
 use wcf\system\package\PackageInstallationDispatcher;
 use wcf\system\request\LinkHandler;
+use wcf\system\search\SearchIndexManager;
 use wcf\system\WCF;
 
 /**
@@ -100,6 +102,23 @@ class IndexPage extends AbstractPage {
                        );
                }
                
+               $objectTypes = ObjectTypeCache::getInstance()->getObjectTypes('com.woltlab.wcf.searchableObjectType');
+               $tableNames = [];
+               foreach ($objectTypes as $objectType) {
+                       $tableNames[] = SearchIndexManager::getTableName($objectType->objectType);
+               }
+               $conditionBuilder = new PreparedStatementConditionBuilder(true);
+               $conditionBuilder->add('TABLE_NAME IN (?)', [$tableNames]);
+               $conditionBuilder->add('TABLE_SCHEMA = ?', [WCF::getDB()->getDatabaseName()]);
+               $conditionBuilder->add('ENGINE <> ?', ['InnoDB']);
+               
+               $sql = "SELECT          COUNT(*)
+                       FROM            INFORMATION_SCHEMA.TABLES
+                       ". $conditionBuilder;
+               $statement = WCF::getDB()->prepareStatement($sql);
+               $statement->execute($conditionBuilder->getParameters());
+               $nonInnoDbSearch = $statement->fetchSingleColumn() > 0;
+               
                $evaluationExpired = $evaluationPending = [];
                foreach (ApplicationHandler::getInstance()->getApplications() as $application) {
                        if ($application->getPackage()->package === 'com.woltlab.wcf') {
@@ -148,6 +167,7 @@ class IndexPage extends AbstractPage {
                WCF::getTPL()->assign([
                        'recaptchaWithoutKey' => $recaptchaWithoutKey,
                        'recaptchaKeyLink' => $recaptchaKeyLink,
+                       'nonInnoDbSearch' => $nonInnoDbSearch,
                        'server' => $this->server,
                        'usersAwaitingApproval' => $usersAwaitingApproval,
                        'evaluationExpired' => $evaluationExpired,
index 440005ea6ff682b42cc2882bc7b3e704fb7f5fc8..7ad6aa850fea7ff605d2452e5a42e1104b62df2b 100644 (file)
@@ -943,6 +943,7 @@ ACHTUNG: Die oben genannten Meldungen sind stark gekürzt. Sie können Details z
                <item name="wcf.acp.index.tinyBuild"><![CDATA[Die Seitenbeschleunigung für Gäste verbessert die Ladezeiten für Besucher und Suchmaschinen, es wird empfohlen diese <a href="{link controller='Option' id=1 optionName="visitor_use_tiny_build"}#category_module.system{/link}">zu aktivieren</a>.]]></item>
                <item name="wcf.acp.index.recaptchaWithoutKey"><![CDATA[Die Nutzung von reCAPTCHA ohne einen individuellen Website-Schlüssel wird von Google nicht mehr unterstützt.<br><br>Für eine weitere Nutzung {if LANGUAGE_USE_INFORMAL_VARIANT}musst du{else}müssen Sie{/if} <a href="{$recaptchaKeyLink}">einen Schlüssel in den Optionen hinterlegen</a>, unterhalb des Eingabefeldes befindet sich eine Anleitung zum Anfordern des Schlüssels.]]></item>
                <item name="wcf.acp.index.missingLanguageItems"><![CDATA[Es wurden fehlende Sprachvariablen protokolliert (zuletzt: {@$missingLanguageItemsMTime|time}). {if LANGUAGE_USE_INFORMAL_VARIANT}Überprüfe{else}Überprüfen Sie{/if} die <a href="{link controller='DevtoolsMissingLanguageItemList'}{/link}">Liste der fehlenden Texte</a> für weitere Informationen.]]></item>
+               <item name="wcf.acp.index.nonInnoDbSearch"><![CDATA[Nicht alle Tabellen benutzen die Storage-Engine InnoDB. Details {if LANGUAGE_USE_INFORMAL_VARIANT}findest du{else}finden Sie{/if} in der <a href="{link controller='SystemCheck'}{/link}">Systemüberprüfung</a>.]]></item>
        </category>
        <category name="wcf.acp.label">
                <item name="wcf.acp.label.add"><![CDATA[Label hinzufügen]]></item>
index f7e0332f4537717f01e12f878eddee9d227ba4b0..72f42ff92aae93e5504273b640011fb9e8622856 100644 (file)
@@ -920,6 +920,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.index.tinyBuild"><![CDATA[The accelerated guest view improves the page responsiveness and loading times for both visitors and search engines alike, please consider <a href="{link controller='Option' id=1 optionName="visitor_use_tiny_build"}#category_module.system{/link}">enabling it</a>.]]></item>
                <item name="wcf.acp.index.recaptchaWithoutKey"><![CDATA[Using reCAPTCHA without an individual website key is no longer supported by Google.<br><br>For further use you need to <a href="{$recaptchaKeyLink}">provide a key in your options</a>, please follow the instructions below the input field to obtain a key.]]></item>
                <item name="wcf.acp.index.missingLanguageItems"><![CDATA[Missing language items have been detected (last time: {@$missingLanguageItemsMTime|time}). Check the <a href="{link controller='DevtoolsMissingLanguageItemList'}{/link}">list of missing phrases</a> for more information.]]></item>
+               <item name="wcf.acp.index.nonInnoDbSearch"><![CDATA[Not all tables are using the InnoDB storage engine. You can find details in the <a href="{link controller='SystemCheck'}{/link}">System Check</a>.]]></item>
        </category>
        <category name="wcf.acp.label">
                <item name="wcf.acp.label.add"><![CDATA[Add Label]]></item>