3 * @copyright Copyright (C) 2010-2021, the Friendica project
5 * @license GNU AGPL version 3 or any later version
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as
9 * published by the Free Software Foundation, either version 3 of the
10 * License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 namespace Friendica\Module;
24 use Friendica\BaseModule;
25 use Friendica\Core\Addon;
26 use Friendica\Core\Renderer;
27 use Friendica\Core\Session;
29 use Friendica\Network\HTTPException;
31 require_once 'boot.php';
34 * This abstract module is meant to be extended by all modules that are reserved to administrator users.
36 * It performs a blanket permission check in all the module methods as long as the relevant `parent::method()` is
37 * called in the inheriting module.
39 * Additionally, it puts together the administration page aside with all the administration links.
41 * @package Friendica\Module
43 abstract class BaseAdmin extends BaseModule
46 * @param bool $interactive
47 * @throws HTTPException\ForbiddenException
48 * @throws HTTPException\InternalServerErrorException
50 public static function checkAdminAccess(bool $interactive = false)
54 notice(DI::l10n()->t('Please login to continue.'));
55 Session::set('return_path', DI::args()->getQueryString());
56 DI::baseUrl()->redirect('login');
58 throw new HTTPException\UnauthorizedException(DI::l10n()->t('Please login to continue.'));
62 if (!is_site_admin()) {
63 throw new HTTPException\ForbiddenException(DI::l10n()->t('You don\'t have access to administration pages.'));
66 if (!empty($_SESSION['submanage'])) {
67 throw new HTTPException\ForbiddenException(DI::l10n()->t('Submanaged account can\'t access the administration pages. Please log back in as the main account.'));
71 public static function content(array $parameters = [])
73 self::checkAdminAccess(true);
76 DI::page()['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/settings_head.tpl'), []);
82 // array(url, name, extra css classes)
83 // not part of $aside to make the template more adjustable
85 'information' => [DI::l10n()->t('Information'), [
86 'overview' => ['admin' , DI::l10n()->t('Overview') , 'overview'],
87 'federation' => ['admin/federation' , DI::l10n()->t('Federation Statistics') , 'federation']
89 'configuration' => [DI::l10n()->t('Configuration'), [
90 'site' => ['admin/site' , DI::l10n()->t('Site') , 'site'],
91 'users' => ['admin/users' , DI::l10n()->t('Users') , 'users'],
92 'addons' => ['admin/addons' , DI::l10n()->t('Addons') , 'addons'],
93 'themes' => ['admin/themes' , DI::l10n()->t('Themes') , 'themes'],
94 'features' => ['admin/features' , DI::l10n()->t('Additional features') , 'features'],
95 'tos' => ['admin/tos' , DI::l10n()->t('Terms of Service') , 'tos'],
97 'database' => [DI::l10n()->t('Database'), [
98 'dbsync' => ['admin/dbsync' , DI::l10n()->t('DB updates') , 'dbsync'],
99 'deferred' => ['admin/queue/deferred', DI::l10n()->t('Inspect Deferred Workers'), 'deferred'],
100 'workerqueue' => ['admin/queue' , DI::l10n()->t('Inspect worker Queue') , 'workerqueue'],
102 'tools' => [DI::l10n()->t('Tools'), [
103 'contactblock' => ['admin/blocklist/contact', DI::l10n()->t('Contact Blocklist') , 'contactblock'],
104 'blocklist' => ['admin/blocklist/server' , DI::l10n()->t('Server Blocklist') , 'blocklist'],
105 'deleteitem' => ['admin/item/delete' , DI::l10n()->t('Delete Item') , 'deleteitem'],
107 'logs' => [DI::l10n()->t('Logs'), [
108 'logsconfig' => ['admin/logs/', DI::l10n()->t('Logs') , 'logs'],
109 'logsview' => ['admin/logs/view' , DI::l10n()->t('View Logs') , 'viewlogs'],
111 'diagnostics' => [DI::l10n()->t('Diagnostics'), [
112 'phpinfo' => ['admin/phpinfo' , DI::l10n()->t('PHP Info') , 'phpinfo'],
113 'probe' => ['probe' , DI::l10n()->t('probe address') , 'probe'],
114 'webfinger' => ['webfinger' , DI::l10n()->t('check webfinger') , 'webfinger'],
115 'itemsource' => ['admin/item/source' , DI::l10n()->t('Item Source') , 'itemsource'],
116 'babel' => ['babel' , DI::l10n()->t('Babel') , 'babel'],
117 'debug/ap' => ['debug/ap' , DI::l10n()->t('ActivityPub Conversion') , 'debug/ap'],
121 $t = Renderer::getMarkupTemplate('admin/aside.tpl');
122 DI::page()['aside'] .= Renderer::replaceMacros($t, [
123 '$admin' => ['addons_admin' => Addon::getAdminList()],
124 '$subpages' => $aside_sub,
125 '$admtxt' => DI::l10n()->t('Admin'),
126 '$plugadmtxt' => DI::l10n()->t('Addon Features'),
127 '$h_pending' => DI::l10n()->t('User registrations waiting for confirmation'),
128 '$admurl' => 'admin/'