]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Admin/Summary.php
post/thread views are renamed, search bugs fixed
[friendica.git] / src / Module / Admin / Summary.php
index 50b513bfcf5e7e592fe204cbb5f37f843ef16027..c232b5be5a3a51703c1f1bec5d3c055ee81ee2b1 100644 (file)
@@ -1,10 +1,28 @@
 <?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
 
 namespace Friendica\Module\Admin;
 
 use Friendica\Core\Addon;
-use Friendica\Core\Config;
-use Friendica\Core\L10n;
+use Friendica\Core\Config\Cache;
 use Friendica\Core\Logger;
 use Friendica\Core\Renderer;
 use Friendica\Core\Update;
@@ -12,14 +30,12 @@ use Friendica\Database\DBA;
 use Friendica\Database\DBStructure;
 use Friendica\DI;
 use Friendica\Model\Register;
-use Friendica\Module\BaseAdminModule;
+use Friendica\Module\BaseAdmin;
 use Friendica\Network\HTTPException\InternalServerErrorException;
 use Friendica\Util\ConfigFileLoader;
 use Friendica\Util\DateTimeFormat;
-use Friendica\Util\FileSystem;
-use Friendica\Util\Network;
 
-class Summary extends BaseAdminModule
+class Summary extends BaseAdmin
 {
        public static function content(array $parameters = [])
        {
@@ -29,32 +45,55 @@ class Summary extends BaseAdminModule
 
                // are there MyISAM tables in the DB? If so, trigger a warning message
                $warningtext = [];
+
+               $templateEngine = Renderer::getTemplateEngine();
+               $errors = [];
+               $templateEngine->testInstall($errors);
+               foreach ($errors as $error) {
+                       $warningtext[] = DI::l10n()->t('Template engine (%s) error: %s', $templateEngine::$name, $error);
+               }
+
                if (DBA::count(['information_schema' => 'tables'], ['engine' => 'myisam', 'table_schema' => DBA::databaseName()])) {
                        $warningtext[] = DI::l10n()->t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php bin/console.php dbstructure toinnodb</tt> of your Friendica installation for an automatic conversion.<br />', 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
                }
 
-               // Check if github.com/friendica/master/VERSION is higher then
-               // the local version of Friendica. Check is opt-in, source may be master or devel branch
-               if (Config::get('system', 'check_new_version_url', 'none') != 'none') {
-                       $gitversion = Config::get('system', 'git_friendica_version');
+               // are there InnoDB tables in Antelope in the DB? If so, trigger a warning message
+               if (DBA::count(['information_schema' => 'tables'], ['ENGINE' => 'InnoDB', 'ROW_FORMAT' => ['COMPACT', 'REDUNDANT'], 'table_schema' => DBA::databaseName()])) {
+                       $warningtext[] = DI::l10n()->t('Your DB still runs with InnoDB tables in the Antelope file format. You should change the file format to Barracuda. Friendica is using features that are not provided by the Antelope format. See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php bin/console.php dbstructure toinnodb</tt> of your Friendica installation for an automatic conversion.<br />', 'https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html');
+               }
+
+               // Avoid the database error 1615 "Prepared statement needs to be re-prepared", see https://github.com/friendica/friendica/issues/8550
+               $table_definition_cache = DBA::getVariable('table_definition_cache');
+               $table_open_cache = DBA::getVariable('table_open_cache');
+               if (!empty($table_definition_cache) && !empty($table_open_cache)) {
+                       $suggested_definition_cache = min(400 + round($table_open_cache / 2, 1), 2000);
+                       if ($suggested_definition_cache > $table_definition_cache) {
+                               $warningtext[] = DI::l10n()->t('Your table_definition_cache is too low (%d). This can lead to the database error "Prepared statement needs to be re-prepared". Please set it at least to %d (or -1 for autosizing). See <a href="%s">here</a> for more information.<br />', $table_definition_cache, $suggested_definition_cache, 'https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_table_definition_cache');
+                       }
+               }
+
+               // Check if github.com/friendica/stable/VERSION is higher then
+               // the local version of Friendica. Check is opt-in, source may be stable or develop branch
+               if (DI::config()->get('system', 'check_new_version_url', 'none') != 'none') {
+                       $gitversion = DI::config()->get('system', 'git_friendica_version');
                        if (version_compare(FRIENDICA_VERSION, $gitversion) < 0) {
                                $warningtext[] = DI::l10n()->t('There is a new version of Friendica available for download. Your current version is %1$s, upstream version is %2$s', FRIENDICA_VERSION, $gitversion);
                        }
                }
 
-               if (Config::get('system', 'dbupdate', DBStructure::UPDATE_NOT_CHECKED) == DBStructure::UPDATE_NOT_CHECKED) {
-                       DBStructure::update($a->getBasePath(), false, true);
+               if (DI::config()->get('system', 'dbupdate', DBStructure::UPDATE_NOT_CHECKED) == DBStructure::UPDATE_NOT_CHECKED) {
+                       DBStructure::performUpdate();
                }
 
-               if (Config::get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) {
+               if (DI::config()->get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) {
                        $warningtext[] = DI::l10n()->t('The database update failed. Please run "php bin/console.php dbstructure update" from the command line and have a look at the errors that might appear.');
                }
 
-               if (Config::get('system', 'update') == Update::FAILED) {
+               if (DI::config()->get('system', 'update') == Update::FAILED) {
                        $warningtext[] = DI::l10n()->t('The last update failed. Please run "php bin/console.php dbstructure update" from the command line and have a look at the errors that might appear. (Some of the errors are possibly inside the logfile.)');
                }
 
-               $last_worker_call = Config::get('system', 'last_worker_execution', false);
+               $last_worker_call = DI::config()->get('system', 'last_worker_execution', false);
                if (!$last_worker_call) {
                        $warningtext[] = DI::l10n()->t('The worker was never executed. Please check your database structure!');
                } elseif ((strtotime(DateTimeFormat::utcNow()) - strtotime($last_worker_call)) > 60 * 60) {
@@ -78,8 +117,8 @@ class Summary extends BaseAdminModule
                }
 
                // Check logfile permission
-               if (Config::get('system', 'debugging')) {
-                       $file = Config::get('system', 'logfile');
+               if (DI::config()->get('system', 'debugging')) {
+                       $file = DI::config()->get('system', 'logfile');
 
                        $fileSystem = DI::fs();
 
@@ -94,7 +133,7 @@ class Summary extends BaseAdminModule
                                $warningtext[] = DI::l10n()->t('The logfile \'%s\' is not usable. No logging possible (error: \'%s\')', $file, $exception->getMessage());
                        }
 
-                       $file = Config::get('system', 'dlogfile');
+                       $file = DI::config()->get('system', 'dlogfile');
 
                        try {
                                if (!empty($file)) {
@@ -104,7 +143,6 @@ class Summary extends BaseAdminModule
                                                throw new InternalServerErrorException('Stream is null.');
                                        }
                                }
-
                        } catch (\Throwable $exception) {
                                $warningtext[] = DI::l10n()->t('The debug logfile \'%s\' is not usable. No logging possible (error: \'%s\')', $file, $exception->getMessage());
                        }
@@ -112,12 +150,12 @@ class Summary extends BaseAdminModule
 
                // check legacy basepath settings
                $configLoader = new ConfigFileLoader($a->getBasePath());
-               $configCache = new Config\Cache\ConfigCache();
+               $configCache = new Cache();
                $configLoader->setupCache($configCache);
                $confBasepath = $configCache->get('system', 'basepath');
                $currBasepath = DI::config()->get('system', 'basepath');
                if ($confBasepath !== $currBasepath || !is_dir($currBasepath)) {
-                       if (is_dir($confBasepath) && Config::set('system', 'basepath', $confBasepath)) {
+                       if (is_dir($confBasepath) && DI::config()->set('system', 'basepath', $confBasepath)) {
                                DI::logger()->info('Friendica\'s system.basepath was updated successfully.', [
                                        'from' => $currBasepath,
                                        'to'   => $confBasepath,
@@ -161,7 +199,7 @@ class Summary extends BaseAdminModule
                }
                DBA::close($pageFlagsCountStmt);
 
-               Logger::log('accounts: ' . print_r($accounts, true), Logger::DATA);
+               Logger::debug('accounts', ['accounts' => $accounts]);
 
                $pending = Register::getPendingCount();
 
@@ -198,7 +236,7 @@ class Summary extends BaseAdminModule
                        '$version' => [DI::l10n()->t('Version'), FRIENDICA_VERSION],
                        '$platform' => FRIENDICA_PLATFORM,
                        '$codename' => FRIENDICA_CODENAME,
-                       '$build' => Config::get('system', 'build'),
+                       '$build' => DI::config()->get('system', 'build'),
                        '$addons' => [DI::l10n()->t('Active addons'), Addon::getEnabledList()],
                        '$serversettings' => $server_settings,
                        '$warningtext' => $warningtext
@@ -208,7 +246,7 @@ class Summary extends BaseAdminModule
        private static function checkSelfHostMeta()
        {
                // Fetch the host-meta to check if this really is a vital server
-               return Network::curl(DI::baseUrl()->get() . '/.well-known/host-meta')->isSuccess();
+               return DI::httpRequest()->get(DI::baseUrl()->get() . '/.well-known/host-meta')->isSuccess();
        }
 
 }