mirror of
https://github.com/friendica/friendica
synced 2024-11-10 07:42:53 +00:00
Move admin summary to src/Module
- Add BaseAdminModule class - Add Module\Admin\Summary class - Add Route for Admin\Summary module - Remove admin_page_summary() in mod/admin - Remove $showwarning variable from admin/summary.tpl
This commit is contained in:
parent
1b32270237
commit
6387a77b52
6 changed files with 229 additions and 135 deletions
133
mod/admin.php
133
mod/admin.php
|
@ -298,8 +298,6 @@ function admin_content(App $a)
|
|||
default:
|
||||
notice(L10n::t("Item not found."));
|
||||
}
|
||||
} else {
|
||||
$o = admin_page_summary($a);
|
||||
}
|
||||
|
||||
if ($a->isAjax()) {
|
||||
|
@ -837,137 +835,6 @@ function admin_page_workerqueue(App $a, $deferred)
|
|||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Admin Summary Page
|
||||
*
|
||||
* The summary page is the "start page" of the admin panel. It gives the admin
|
||||
* a first overview of the open adminastrative tasks.
|
||||
*
|
||||
* The returned string contains the HTML content of the generated page.
|
||||
*
|
||||
* @param App $a
|
||||
* @return string
|
||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||
*/
|
||||
function admin_page_summary(App $a)
|
||||
{
|
||||
// are there MyISAM tables in the DB? If so, trigger a warning message
|
||||
$r = q("SELECT `engine` FROM `information_schema`.`tables` WHERE `engine` = 'myisam' AND `table_schema` = '%s' LIMIT 1", DBA::escape(DBA::databaseName()));
|
||||
$showwarning = false;
|
||||
$warningtext = [];
|
||||
if (DBA::isResult($r)) {
|
||||
$showwarning = true;
|
||||
$warningtext[] = 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');
|
||||
if (version_compare(FRIENDICA_VERSION, $gitversion) < 0) {
|
||||
$warningtext[] = 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);
|
||||
$showwarning = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (Config::get('system', 'dbupdate', DBStructure::UPDATE_NOT_CHECKED) == DBStructure::UPDATE_NOT_CHECKED) {
|
||||
DBStructure::update($a->getBasePath(), false, true);
|
||||
}
|
||||
if (Config::get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) {
|
||||
$showwarning = true;
|
||||
$warningtext[] = 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) {
|
||||
$showwarning = true;
|
||||
$warningtext[] = 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);
|
||||
if (!$last_worker_call) {
|
||||
$showwarning = true;
|
||||
$warningtext[] = L10n::t('The worker was never executed. Please check your database structure!');
|
||||
} elseif ((strtotime(DateTimeFormat::utcNow()) - strtotime($last_worker_call)) > 60 * 60) {
|
||||
$showwarning = true;
|
||||
$warningtext[] = L10n::t('The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings.', $last_worker_call);
|
||||
}
|
||||
|
||||
// Legacy config file warning
|
||||
if (file_exists('.htconfig.php')) {
|
||||
$showwarning = true;
|
||||
$warningtext[] = L10n::t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from <code>.htconfig.php</code>. See <a href="%s">the Config help page</a> for help with the transition.', $a->getBaseURL() . '/help/Config');
|
||||
}
|
||||
if (file_exists('config/local.ini.php')) {
|
||||
$showwarning = true;
|
||||
$warningtext[] = L10n::t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from <code>config/local.ini.php</code>. See <a href="%s">the Config help page</a> for help with the transition.', $a->getBaseURL() . '/help/Config');
|
||||
}
|
||||
|
||||
// Check server vitality
|
||||
if (!admin_page_server_vital()) {
|
||||
$showwarning = true;
|
||||
$well_known = $a->getBaseURL() . '/.well-known/host-meta';
|
||||
$warningtext[] = L10n::t('<a href="%s">%s</a> is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See <a href="%s">the installation page</a> for help.',
|
||||
$well_known, $well_known, $a->getBaseURL() . '/help/Install');
|
||||
}
|
||||
|
||||
$r = q("SELECT `page-flags`, COUNT(`uid`) AS `count` FROM `user` GROUP BY `page-flags`");
|
||||
$accounts = [
|
||||
[L10n::t('Normal Account'), 0],
|
||||
[L10n::t('Automatic Follower Account'), 0],
|
||||
[L10n::t('Public Forum Account'), 0],
|
||||
[L10n::t('Automatic Friend Account'), 0],
|
||||
[L10n::t('Blog Account'), 0],
|
||||
[L10n::t('Private Forum Account'), 0]
|
||||
];
|
||||
|
||||
$users = 0;
|
||||
foreach ($r as $u) {
|
||||
$accounts[$u['page-flags']][1] = $u['count'];
|
||||
$users += $u['count'];
|
||||
}
|
||||
|
||||
Logger::log('accounts: ' . print_r($accounts, true), Logger::DATA);
|
||||
|
||||
$pending = Register::getPendingCount();
|
||||
|
||||
$deferred = DBA::count('workerqueue', ["`executed` <= ? AND NOT `done` AND `next_try` > ?",
|
||||
DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);
|
||||
|
||||
$workerqueue = DBA::count('workerqueue', ["`executed` <= ? AND NOT `done` AND `next_try` < ?",
|
||||
DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);
|
||||
|
||||
// We can do better, but this is a quick queue status
|
||||
|
||||
$queues = ['label' => L10n::t('Message queues'), 'deferred' => $deferred, 'workerq' => $workerqueue];
|
||||
|
||||
|
||||
$r = q("SHOW variables LIKE 'max_allowed_packet'");
|
||||
$max_allowed_packet = (($r) ? $r[0]['Value'] : 0);
|
||||
|
||||
$server_settings = ['label' => L10n::t('Server Settings'),
|
||||
'php' => ['upload_max_filesize' => ini_get('upload_max_filesize'),
|
||||
'post_max_size' => ini_get('post_max_size'),
|
||||
'memory_limit' => ini_get('memory_limit')],
|
||||
'mysql' => ['max_allowed_packet' => $max_allowed_packet]];
|
||||
|
||||
$t = Renderer::getMarkupTemplate('admin/summary.tpl');
|
||||
return Renderer::replaceMacros($t, [
|
||||
'$title' => L10n::t('Administration'),
|
||||
'$page' => L10n::t('Summary'),
|
||||
'$queues' => $queues,
|
||||
'$users' => [L10n::t('Registered users'), $users],
|
||||
'$accounts' => $accounts,
|
||||
'$pending' => [L10n::t('Pending registrations'), $pending],
|
||||
'$version' => [L10n::t('Version'), FRIENDICA_VERSION],
|
||||
'$baseurl' => System::baseUrl(),
|
||||
'$platform' => FRIENDICA_PLATFORM,
|
||||
'$codename' => FRIENDICA_CODENAME,
|
||||
'$build' => Config::get('system', 'build'),
|
||||
'$addons' => [L10n::t('Active addons'), Addon::getEnabledList()],
|
||||
'$serversettings' => $server_settings,
|
||||
'$showwarning' => $showwarning,
|
||||
'$warningtext' => $warningtext
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Process send data from Admin Site Page
|
||||
*
|
||||
|
|
|
@ -117,6 +117,10 @@ class Router
|
|||
$this->routeCollector->addRoute(['GET'], '/tos', Module\Tos::class);
|
||||
$this->routeCollector->addRoute(['GET'], '/webfinger', Module\WebFinger::class);
|
||||
$this->routeCollector->addRoute(['GET'], '/xrd', Module\Xrd::class);
|
||||
|
||||
$this->routeCollector->addGroup('/admin', function (RouteCollector $collector) {
|
||||
$collector->addRoute(['GET'] , '[/]' , Module\Admin\Summary::class);
|
||||
});
|
||||
}
|
||||
|
||||
public function __construct(RouteCollector $routeCollector = null)
|
||||
|
|
149
src/Module/Admin/Summary.php
Normal file
149
src/Module/Admin/Summary.php
Normal file
|
@ -0,0 +1,149 @@
|
|||
<?php
|
||||
|
||||
namespace Friendica\Module\Admin;
|
||||
|
||||
use Friendica\Core\Addon;
|
||||
use Friendica\Core\Config;
|
||||
use Friendica\Core\L10n;
|
||||
use Friendica\Core\Logger;
|
||||
use Friendica\Core\Renderer;
|
||||
use Friendica\Core\System;
|
||||
use Friendica\Core\Update;
|
||||
use Friendica\Database\DBA;
|
||||
use Friendica\Database\DBStructure;
|
||||
use Friendica\Model\Register;
|
||||
use Friendica\Module\BaseAdminModule;
|
||||
use Friendica\Util\DateTimeFormat;
|
||||
use Friendica\Util\Network;
|
||||
|
||||
class Summary extends BaseAdminModule
|
||||
{
|
||||
public static function content()
|
||||
{
|
||||
parent::content();
|
||||
|
||||
$a = self::getApp();
|
||||
|
||||
// are there MyISAM tables in the DB? If so, trigger a warning message
|
||||
$warningtext = [];
|
||||
if (DBA::count('`information_schema`.`tables`', ['engine' => 'myisam', 'table_schema' => DBA::databaseName()])) {
|
||||
$warningtext[] = 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');
|
||||
if (version_compare(FRIENDICA_VERSION, $gitversion) < 0) {
|
||||
$warningtext[] = 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 (Config::get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) {
|
||||
$warningtext[] = 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) {
|
||||
$warningtext[] = 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);
|
||||
if (!$last_worker_call) {
|
||||
$warningtext[] = L10n::t('The worker was never executed. Please check your database structure!');
|
||||
} elseif ((strtotime(DateTimeFormat::utcNow()) - strtotime($last_worker_call)) > 60 * 60) {
|
||||
$warningtext[] = L10n::t('The last worker execution was on %s UTC. This is older than one hour. Please check your crontab settings.', $last_worker_call);
|
||||
}
|
||||
|
||||
// Legacy config file warning
|
||||
if (file_exists('.htconfig.php')) {
|
||||
$warningtext[] = L10n::t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from <code>.htconfig.php</code>. See <a href="%s">the Config help page</a> for help with the transition.', $a->getBaseURL() . '/help/Config');
|
||||
}
|
||||
|
||||
if (file_exists('config/local.ini.php')) {
|
||||
$warningtext[] = L10n::t('Friendica\'s configuration now is stored in config/local.config.php, please copy config/local-sample.config.php and move your config from <code>config/local.ini.php</code>. See <a href="%s">the Config help page</a> for help with the transition.', $a->getBaseURL() . '/help/Config');
|
||||
}
|
||||
|
||||
// Check server vitality
|
||||
if (!self::checkSelfHostMeta()) {
|
||||
$well_known = $a->getBaseURL() . '/.well-known/host-meta';
|
||||
$warningtext[] = L10n::t('<a href="%s">%s</a> is not reachable on your system. This is a severe configuration issue that prevents server to server communication. See <a href="%s">the installation page</a> for help.',
|
||||
$well_known, $well_known, $a->getBaseURL() . '/help/Install');
|
||||
}
|
||||
|
||||
$accounts = [
|
||||
[L10n::t('Normal Account'), 0],
|
||||
[L10n::t('Automatic Follower Account'), 0],
|
||||
[L10n::t('Public Forum Account'), 0],
|
||||
[L10n::t('Automatic Friend Account'), 0],
|
||||
[L10n::t('Blog Account'), 0],
|
||||
[L10n::t('Private Forum Account'), 0]
|
||||
];
|
||||
|
||||
$users = 0;
|
||||
$pageFlagsCountStmt = DBA::p('SELECT `page-flags`, COUNT(`uid`) AS `count` FROM `user` GROUP BY `page-flags`');
|
||||
while ($pageFlagsCount = DBA::fetch($pageFlagsCountStmt)) {
|
||||
$accounts[$pageFlagsCount['page-flags']][1] = $pageFlagsCount['count'];
|
||||
$users += $pageFlagsCount['count'];
|
||||
}
|
||||
DBA::close($pageFlagsCountStmt);
|
||||
|
||||
Logger::log('accounts: ' . print_r($accounts, true), Logger::DATA);
|
||||
|
||||
$pending = Register::getPendingCount();
|
||||
|
||||
$queue = DBA::count('queue', []);
|
||||
|
||||
$deferred = DBA::count('workerqueue', ['`executed` <= ? AND NOT `done` AND `next_try` > ?',
|
||||
DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);
|
||||
|
||||
$workerqueue = DBA::count('workerqueue', ['`executed` <= ? AND NOT `done` AND `next_try` < ?',
|
||||
DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);
|
||||
|
||||
// We can do better, but this is a quick queue status
|
||||
$queues = ['label' => L10n::t('Message queues'), 'queue' => $queue, 'deferred' => $deferred, 'workerq' => $workerqueue];
|
||||
|
||||
$variables = DBA::toArray(DBA::p('SHOW variables LIKE "max_allowed_packet"'));
|
||||
$max_allowed_packet = $variables ? $variables[0]['Value'] : 0;
|
||||
|
||||
$server_settings = [
|
||||
'label' => L10n::t('Server Settings'),
|
||||
'php' => [
|
||||
'upload_max_filesize' => ini_get('upload_max_filesize'),
|
||||
'post_max_size' => ini_get('post_max_size'),
|
||||
'memory_limit' => ini_get('memory_limit')
|
||||
],
|
||||
'mysql' => [
|
||||
'max_allowed_packet' => $max_allowed_packet
|
||||
]
|
||||
];
|
||||
|
||||
$t = Renderer::getMarkupTemplate('admin/summary.tpl');
|
||||
return Renderer::replaceMacros($t, [
|
||||
'$title' => L10n::t('Administration'),
|
||||
'$page' => L10n::t('Summary'),
|
||||
'$queues' => $queues,
|
||||
'$users' => [L10n::t('Registered users'), $users],
|
||||
'$accounts' => $accounts,
|
||||
'$pending' => [L10n::t('Pending registrations'), $pending],
|
||||
'$version' => [L10n::t('Version'), FRIENDICA_VERSION],
|
||||
'$baseurl' => System::baseUrl(),
|
||||
'$platform' => FRIENDICA_PLATFORM,
|
||||
'$codename' => FRIENDICA_CODENAME,
|
||||
'$build' => Config::get('system', 'build'),
|
||||
'$addons' => [L10n::t('Active addons'), Addon::getEnabledList()],
|
||||
'$serversettings' => $server_settings,
|
||||
'$warningtext' => $warningtext
|
||||
]);
|
||||
}
|
||||
|
||||
private static function checkSelfHostMeta()
|
||||
{
|
||||
// Fetch the host-meta to check if this really is a vital server
|
||||
return Network::curl(System::baseUrl() . '/.well-known/host-meta')->isSuccess();
|
||||
}
|
||||
|
||||
}
|
74
src/Module/BaseAdminModule.php
Normal file
74
src/Module/BaseAdminModule.php
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace Friendica\Module;
|
||||
|
||||
use Friendica\BaseModule;
|
||||
use Friendica\Core\L10n;
|
||||
use Friendica\Core\Renderer;
|
||||
use Friendica\Database\DBA;
|
||||
|
||||
class BaseAdminModule extends BaseModule
|
||||
{
|
||||
public static function post()
|
||||
{
|
||||
if (!is_site_admin()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// do not allow a page manager to access the admin panel at all.
|
||||
if (!empty($_SESSION['submanage'])) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public static function content()
|
||||
{
|
||||
if (!is_site_admin()) {
|
||||
return Login::form();
|
||||
}
|
||||
|
||||
if (!empty($_SESSION['submanage'])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$a = self::getApp();
|
||||
|
||||
// APC deactivated, since there are problems with PHP 5.5
|
||||
//if (function_exists("apc_delete")) {
|
||||
// $toDelete = new APCIterator('user', APC_ITER_VALUE);
|
||||
// apc_delete($toDelete);
|
||||
//}
|
||||
// Header stuff
|
||||
$a->page['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/settings_head.tpl'), []);
|
||||
|
||||
/*
|
||||
* Side bar links
|
||||
*/
|
||||
|
||||
// array(url, name, extra css classes)
|
||||
// not part of $aside to make the template more adjustable
|
||||
$aside_sub = [
|
||||
'information' => [L10n::t('Information'), [
|
||||
'overview' => ['admin' , L10n::t('Overview') , 'overview'],
|
||||
]],
|
||||
];
|
||||
|
||||
$addons_admin = [];
|
||||
$addonsAdminStmt = DBA::select('addon', ['name'], ['plugin_admin' => 1], ['order' => ['name']]);
|
||||
foreach (DBA::toArray($addonsAdminStmt) as $addon) {
|
||||
$addons_admin[] = ['admin/addons/' . $addon['name'], $addon['name'], 'addon'];
|
||||
}
|
||||
|
||||
$t = Renderer::getMarkupTemplate('admin/aside.tpl');
|
||||
$a->page['aside'] .= Renderer::replaceMacros($t, [
|
||||
'$admin' => ['addons_admin' => $addons_admin],
|
||||
'$subpages' => $aside_sub,
|
||||
'$admtxt' => L10n::t('Admin'),
|
||||
'$plugadmtxt' => L10n::t('Addon Features'),
|
||||
'$h_pending' => L10n::t('User registrations waiting for confirmation'),
|
||||
'$admurl' => 'admin/'
|
||||
]);
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
<div id='adminpage'>
|
||||
<h1>{{$title}} - {{$page}}</h1>
|
||||
{{if $showwarning}}
|
||||
{{if $warningtext|count}}
|
||||
<div id="admin-warning-message-wrapper">
|
||||
{{foreach $warningtext as $wt}}
|
||||
<p class="warning-message">{{$wt nofilter}}</p>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div id='adminpage-summery' class="adminpage generic-page-wrapper">
|
||||
<h1>{{$title}} - {{$page}}</h1>
|
||||
|
||||
{{if $showwarning}}
|
||||
{{if $warningtext|count}}
|
||||
<div id="admin-warning-message-wrapper" class="alert alert-warning">
|
||||
{{foreach $warningtext as $wt}}
|
||||
<p>{{$wt nofilter}}</p>
|
||||
|
|
Loading…
Reference in a new issue