]> git.mxchange.org Git - friendica.git/commitdiff
Fix EOL and EOF in Admin modules
authorHypolite Petovan <hypolite@mrpetovan.com>
Thu, 2 May 2019 04:01:43 +0000 (00:01 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Thu, 2 May 2019 13:55:50 +0000 (09:55 -0400)
19 files changed:
src/Module/Admin/Addons/Details.php
src/Module/Admin/Addons/Index.php
src/Module/Admin/Blocklist/Contact.php
src/Module/Admin/Blocklist/Server.php
src/Module/Admin/DBSync.php
src/Module/Admin/Features.php
src/Module/Admin/Item/Delete.php
src/Module/Admin/Logs/Settings.php
src/Module/Admin/Logs/View.php
src/Module/Admin/PhpInfo.php
src/Module/Admin/Queue.php
src/Module/Admin/Site.php
src/Module/Admin/Summary.php
src/Module/Admin/Themes/Details.php
src/Module/Admin/Themes/Embed.php
src/Module/Admin/Themes/Index.php
src/Module/Admin/Tos.php
src/Module/Admin/Users.php
src/Module/BaseAdminModule.php

index 25e538122ce214fa960e52f322a44080139b5f3a..33e7c7a00cce9694b6f60a019e9081a3177a3a64 100644 (file)
-<?php\r
-\r
-namespace Friendica\Module\Admin\Addons;\r
-\r
-use Friendica\Content\Text\Markdown;\r
-use Friendica\Core\Addon;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-\r
-class Details extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               $a = self::getApp();\r
-\r
-               if ($a->argc > 2) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $addon = $a->argv[2];\r
-                       $addon = Strings::sanitizeFilePathItem($addon);\r
-                       if (is_file('addon/' . $addon . '/' . $addon . '.php')) {\r
-                               include_once 'addon/' . $addon . '/' . $addon . '.php';\r
-                               if (function_exists($addon . '_addon_admin_post')) {\r
-                                       $func = $addon . '_addon_admin_post';\r
-                                       $func($a);\r
-                               }\r
-\r
-                               $a->internalRedirect('admin/addons/' . $addon);\r
-                       }\r
-               }\r
-\r
-               $a->internalRedirect('admin/addons');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               $addons_admin = Addon::getAdminList();\r
-\r
-               if ($a->argc > 2) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $addon = $a->argv[2];\r
-                       $addon = Strings::sanitizeFilePathItem($addon);\r
-                       if (!is_file("addon/$addon/$addon.php")) {\r
-                               notice(L10n::t('Item not found.'));\r
-                               $a->internalRedirect('admin/addons');\r
-                       }\r
-\r
-                       if (defaults($_GET, 'action', '') == 'toggle') {\r
-                               parent::checkFormSecurityTokenRedirectOnError('/admin/addons', 'admin_themes', 't');\r
-\r
-                               // Toggle addon status\r
-                               if (Addon::isEnabled($addon)) {\r
-                                       Addon::uninstall($addon);\r
-                                       info(L10n::t('Addon %s disabled.', $addon));\r
-                               } else {\r
-                                       Addon::install($addon);\r
-                                       info(L10n::t('Addon %s enabled.', $addon));\r
-                               }\r
-\r
-                               Addon::saveEnabledList();\r
-\r
-                               $a->internalRedirect('admin/addons/' . $addon);\r
-                       }\r
-\r
-                       // display addon details\r
-                       if (Addon::isEnabled($addon)) {\r
-                               $status = 'on';\r
-                               $action = L10n::t('Disable');\r
-                       } else {\r
-                               $status = 'off';\r
-                               $action = L10n::t('Enable');\r
-                       }\r
-\r
-                       $readme = null;\r
-                       if (is_file("addon/$addon/README.md")) {\r
-                               $readme = Markdown::convert(file_get_contents("addon/$addon/README.md"), false);\r
-                       } elseif (is_file("addon/$addon/README")) {\r
-                               $readme = '<pre>' . file_get_contents("addon/$addon/README") . '</pre>';\r
-                       }\r
-\r
-                       $admin_form = '';\r
-                       if (array_key_exists($addon, $addons_admin)) {\r
-                               require_once "addon/$addon/$addon.php";\r
-                               $func = $addon . '_addon_admin';\r
-                               $func($a, $admin_form);\r
-                       }\r
-\r
-                       $t = Renderer::getMarkupTemplate('admin/addons/details.tpl');\r
-\r
-                       return Renderer::replaceMacros($t, [\r
-                               '$title' => L10n::t('Administration'),\r
-                               '$page' => L10n::t('Addons'),\r
-                               '$toggle' => L10n::t('Toggle'),\r
-                               '$settings' => L10n::t('Settings'),\r
-                               '$baseurl' => $a->getBaseURL(true),\r
-\r
-                               '$addon' => $addon,\r
-                               '$status' => $status,\r
-                               '$action' => $action,\r
-                               '$info' => Addon::getInfo($addon),\r
-                               '$str_author' => L10n::t('Author: '),\r
-                               '$str_maintainer' => L10n::t('Maintainer: '),\r
-\r
-                               '$admin_form' => $admin_form,\r
-                               '$function' => 'addons',\r
-                               '$screenshot' => '',\r
-                               '$readme' => $readme,\r
-\r
-                               '$form_security_token' => parent::getFormSecurityToken('admin_themes'),\r
-                       ]);\r
-               }\r
-\r
-               $a->internalRedirect('admin/addons');\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin\Addons;
+
+use Friendica\Content\Text\Markdown;
+use Friendica\Core\Addon;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class Details extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               $a = self::getApp();
+
+               if ($a->argc > 2) {
+                       // @TODO: Replace with parameter from router
+                       $addon = $a->argv[2];
+                       $addon = Strings::sanitizeFilePathItem($addon);
+                       if (is_file('addon/' . $addon . '/' . $addon . '.php')) {
+                               include_once 'addon/' . $addon . '/' . $addon . '.php';
+                               if (function_exists($addon . '_addon_admin_post')) {
+                                       $func = $addon . '_addon_admin_post';
+                                       $func($a);
+                               }
+
+                               $a->internalRedirect('admin/addons/' . $addon);
+                       }
+               }
+
+               $a->internalRedirect('admin/addons');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               $addons_admin = Addon::getAdminList();
+
+               if ($a->argc > 2) {
+                       // @TODO: Replace with parameter from router
+                       $addon = $a->argv[2];
+                       $addon = Strings::sanitizeFilePathItem($addon);
+                       if (!is_file("addon/$addon/$addon.php")) {
+                               notice(L10n::t('Item not found.'));
+                               $a->internalRedirect('admin/addons');
+                       }
+
+                       if (defaults($_GET, 'action', '') == 'toggle') {
+                               parent::checkFormSecurityTokenRedirectOnError('/admin/addons', 'admin_themes', 't');
+
+                               // Toggle addon status
+                               if (Addon::isEnabled($addon)) {
+                                       Addon::uninstall($addon);
+                                       info(L10n::t('Addon %s disabled.', $addon));
+                               } else {
+                                       Addon::install($addon);
+                                       info(L10n::t('Addon %s enabled.', $addon));
+                               }
+
+                               Addon::saveEnabledList();
+
+                               $a->internalRedirect('admin/addons/' . $addon);
+                       }
+
+                       // display addon details
+                       if (Addon::isEnabled($addon)) {
+                               $status = 'on';
+                               $action = L10n::t('Disable');
+                       } else {
+                               $status = 'off';
+                               $action = L10n::t('Enable');
+                       }
+
+                       $readme = null;
+                       if (is_file("addon/$addon/README.md")) {
+                               $readme = Markdown::convert(file_get_contents("addon/$addon/README.md"), false);
+                       } elseif (is_file("addon/$addon/README")) {
+                               $readme = '<pre>' . file_get_contents("addon/$addon/README") . '</pre>';
+                       }
+
+                       $admin_form = '';
+                       if (array_key_exists($addon, $addons_admin)) {
+                               require_once "addon/$addon/$addon.php";
+                               $func = $addon . '_addon_admin';
+                               $func($a, $admin_form);
+                       }
+
+                       $t = Renderer::getMarkupTemplate('admin/addons/details.tpl');
+
+                       return Renderer::replaceMacros($t, [
+                               '$title' => L10n::t('Administration'),
+                               '$page' => L10n::t('Addons'),
+                               '$toggle' => L10n::t('Toggle'),
+                               '$settings' => L10n::t('Settings'),
+                               '$baseurl' => $a->getBaseURL(true),
+
+                               '$addon' => $addon,
+                               '$status' => $status,
+                               '$action' => $action,
+                               '$info' => Addon::getInfo($addon),
+                               '$str_author' => L10n::t('Author: '),
+                               '$str_maintainer' => L10n::t('Maintainer: '),
+
+                               '$admin_form' => $admin_form,
+                               '$function' => 'addons',
+                               '$screenshot' => '',
+                               '$readme' => $readme,
+
+                               '$form_security_token' => parent::getFormSecurityToken('admin_themes'),
+                       ]);
+               }
+
+               $a->internalRedirect('admin/addons');
+       }
+}
index 9df486c10e3cbbe0721f6d26c34f89be965ddead..2fa39d8e406da598dca8141a80791bdcf95ea16c 100644 (file)
@@ -1,62 +1,62 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin\Addons;\r
-\r
-use Friendica\Core\Addon;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-\r
-class Index extends BaseAdminModule\r
-{\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               // reload active themes\r
-               if (!empty($_GET['action'])) {\r
-                       parent::checkFormSecurityTokenRedirectOnError('/admin/addons', 'admin_addons', 't');\r
-\r
-                       switch ($_GET['action']) {\r
-                               case 'reload':\r
-                                       Addon::reload();\r
-                                       info('Addons reloaded');\r
-                                       break;\r
-\r
-                               case 'toggle' :\r
-                                       $addon = defaults($_GET, 'addon', '');\r
-                                       if (Addon::isEnabled($addon)) {\r
-                                               Addon::uninstall($addon);\r
-                                               info(L10n::t('Addon %s disabled.', $addon));\r
-                                       } elseif (Addon::install($addon)) {\r
-                                               info(L10n::t('Addon %s enabled.', $addon));\r
-                                       } else {\r
-                                               info(L10n::t('Addon %s failed to install.', $addon));\r
-                                       }\r
-\r
-                                       break;\r
-\r
-                       }\r
-\r
-                       $a->internalRedirect('admin/addons');\r
-               }\r
-\r
-               $addons = Addon::getAvailableList();\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/addons/index.tpl');\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('Addons'),\r
-                       '$submit' => L10n::t('Save Settings'),\r
-                       '$reload' => L10n::t('Reload active addons'),\r
-                       '$baseurl' => $a->getBaseURL(true),\r
-                       '$function' => 'addons',\r
-                       '$addons' => $addons,\r
-                       '$pcount' => count($addons),\r
-                       '$noplugshint' => L10n::t('There are currently no addons available on your node. You can find the official addon repository at %1$s and might find other interesting addons in the open addon registry at %2$s', 'https://github.com/friendica/friendica-addons', 'http://addons.friendi.ca'),\r
-                       '$form_security_token' => parent::getFormSecurityToken('admin_addons'),\r
-               ]);\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin\Addons;
+
+use Friendica\Core\Addon;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+
+class Index extends BaseAdminModule
+{
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               // reload active themes
+               if (!empty($_GET['action'])) {
+                       parent::checkFormSecurityTokenRedirectOnError('/admin/addons', 'admin_addons', 't');
+
+                       switch ($_GET['action']) {
+                               case 'reload':
+                                       Addon::reload();
+                                       info('Addons reloaded');
+                                       break;
+
+                               case 'toggle' :
+                                       $addon = defaults($_GET, 'addon', '');
+                                       if (Addon::isEnabled($addon)) {
+                                               Addon::uninstall($addon);
+                                               info(L10n::t('Addon %s disabled.', $addon));
+                                       } elseif (Addon::install($addon)) {
+                                               info(L10n::t('Addon %s enabled.', $addon));
+                                       } else {
+                                               info(L10n::t('Addon %s failed to install.', $addon));
+                                       }
+
+                                       break;
+
+                       }
+
+                       $a->internalRedirect('admin/addons');
+               }
+
+               $addons = Addon::getAvailableList();
+
+               $t = Renderer::getMarkupTemplate('admin/addons/index.tpl');
+               return Renderer::replaceMacros($t, [
+                       '$title' => L10n::t('Administration'),
+                       '$page' => L10n::t('Addons'),
+                       '$submit' => L10n::t('Save Settings'),
+                       '$reload' => L10n::t('Reload active addons'),
+                       '$baseurl' => $a->getBaseURL(true),
+                       '$function' => 'addons',
+                       '$addons' => $addons,
+                       '$pcount' => count($addons),
+                       '$noplugshint' => L10n::t('There are currently no addons available on your node. You can find the official addon repository at %1$s and might find other interesting addons in the open addon registry at %2$s', 'https://github.com/friendica/friendica-addons', 'http://addons.friendi.ca'),
+                       '$form_security_token' => parent::getFormSecurityToken('admin_addons'),
+               ]);
+       }
+}
index 214a30cff7d2e8b53dbc609efbabb3f02a3add5c..1ec6e00df0d879a3aa2819ba89fec296aecbf6a5 100644 (file)
@@ -1,86 +1,86 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin\Blocklist;\r
-\r
-use Friendica\Content\Pager;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Database\DBA;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Model;\r
-\r
-class Contact extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               $contact_url = defaults($_POST, 'contact_url', '');\r
-               $contacts    = defaults($_POST, 'contacts', []);\r
-\r
-               parent::checkFormSecurityTokenRedirectOnError('/admin/blocklist/contact', 'admin_contactblock');\r
-\r
-               if (!empty($_POST['page_contactblock_block'])) {\r
-                       $contact_id = Model\Contact::getIdForURL($contact_url);\r
-                       if ($contact_id) {\r
-                               Model\Contact::block($contact_id);\r
-                               notice(L10n::t('The contact has been blocked from the node'));\r
-                       } else {\r
-                               notice(L10n::t("Could not find any contact entry for this URL \x28%s\x29", $contact_url));\r
-                       }\r
-               }\r
-\r
-               if (!empty($_POST['page_contactblock_unblock'])) {\r
-                       foreach ($contacts as $uid) {\r
-                               Model\Contact::unblock($uid);\r
-                       }\r
-                       notice(L10n::tt("%s contact unblocked", "%s contacts unblocked", count($contacts)));\r
-               }\r
-\r
-               self::getApp()->internalRedirect('admin/blocklist/contact');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               $condition = ['uid' => 0, 'blocked' => true];\r
-\r
-               $total = DBA::count('contact', $condition);\r
-\r
-               $pager = new Pager($a->query_string, 30);\r
-\r
-               $contacts = Model\Contact::select([], $condition, ['limit' => [$pager->getStart(), $pager->getItemsPerPage()]]);\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/blocklist/contact.tpl');\r
-               $o = Renderer::replaceMacros($t, [\r
-                       // strings //\r
-                       '$title'       => L10n::t('Administration'),\r
-                       '$page'        => L10n::t('Remote Contact Blocklist'),\r
-                       '$description' => L10n::t('This page allows you to prevent any message from a remote contact to reach your node.'),\r
-                       '$submit'      => L10n::t('Block Remote Contact'),\r
-                       '$select_all'  => L10n::t('select all'),\r
-                       '$select_none' => L10n::t('select none'),\r
-                       '$block'       => L10n::t('Block'),\r
-                       '$unblock'     => L10n::t('Unblock'),\r
-                       '$no_data'     => L10n::t('No remote contact is blocked from this node.'),\r
-\r
-                       '$h_contacts'  => L10n::t('Blocked Remote Contacts'),\r
-                       '$h_newblock'  => L10n::t('Block New Remote Contact'),\r
-                       '$th_contacts' => [L10n::t('Photo'), L10n::t('Name'), L10n::t('Address'), L10n::t('Profile URL')],\r
-\r
-                       '$form_security_token' => parent::getFormSecurityToken("admin_contactblock"),\r
-\r
-                       // values //\r
-                       '$baseurl'    => $a->getBaseURL(true),\r
-\r
-                       '$contacts'   => $contacts,\r
-                       '$total_contacts' => L10n::tt('%s total blocked contact', '%s total blocked contacts', $total),\r
-                       '$paginate'   => $pager->renderFull($total),\r
-                       '$contacturl' => ['contact_url', L10n::t("Profile URL"), '', L10n::t("URL of the remote contact to block.")],\r
-               ]);\r
-               return $o;\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin\Blocklist;
+
+use Friendica\Content\Pager;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Database\DBA;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Model;
+
+class Contact extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               $contact_url = defaults($_POST, 'contact_url', '');
+               $contacts    = defaults($_POST, 'contacts', []);
+
+               parent::checkFormSecurityTokenRedirectOnError('/admin/blocklist/contact', 'admin_contactblock');
+
+               if (!empty($_POST['page_contactblock_block'])) {
+                       $contact_id = Model\Contact::getIdForURL($contact_url);
+                       if ($contact_id) {
+                               Model\Contact::block($contact_id);
+                               notice(L10n::t('The contact has been blocked from the node'));
+                       } else {
+                               notice(L10n::t("Could not find any contact entry for this URL \x28%s\x29", $contact_url));
+                       }
+               }
+
+               if (!empty($_POST['page_contactblock_unblock'])) {
+                       foreach ($contacts as $uid) {
+                               Model\Contact::unblock($uid);
+                       }
+                       notice(L10n::tt("%s contact unblocked", "%s contacts unblocked", count($contacts)));
+               }
+
+               self::getApp()->internalRedirect('admin/blocklist/contact');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               $condition = ['uid' => 0, 'blocked' => true];
+
+               $total = DBA::count('contact', $condition);
+
+               $pager = new Pager($a->query_string, 30);
+
+               $contacts = Model\Contact::select([], $condition, ['limit' => [$pager->getStart(), $pager->getItemsPerPage()]]);
+
+               $t = Renderer::getMarkupTemplate('admin/blocklist/contact.tpl');
+               $o = Renderer::replaceMacros($t, [
+                       // strings //
+                       '$title'       => L10n::t('Administration'),
+                       '$page'        => L10n::t('Remote Contact Blocklist'),
+                       '$description' => L10n::t('This page allows you to prevent any message from a remote contact to reach your node.'),
+                       '$submit'      => L10n::t('Block Remote Contact'),
+                       '$select_all'  => L10n::t('select all'),
+                       '$select_none' => L10n::t('select none'),
+                       '$block'       => L10n::t('Block'),
+                       '$unblock'     => L10n::t('Unblock'),
+                       '$no_data'     => L10n::t('No remote contact is blocked from this node.'),
+
+                       '$h_contacts'  => L10n::t('Blocked Remote Contacts'),
+                       '$h_newblock'  => L10n::t('Block New Remote Contact'),
+                       '$th_contacts' => [L10n::t('Photo'), L10n::t('Name'), L10n::t('Address'), L10n::t('Profile URL')],
+
+                       '$form_security_token' => parent::getFormSecurityToken("admin_contactblock"),
+
+                       // values //
+                       '$baseurl'    => $a->getBaseURL(true),
+
+                       '$contacts'   => $contacts,
+                       '$total_contacts' => L10n::tt('%s total blocked contact', '%s total blocked contacts', $total),
+                       '$paginate'   => $pager->renderFull($total),
+                       '$contacturl' => ['contact_url', L10n::t("Profile URL"), '', L10n::t("URL of the remote contact to block.")],
+               ]);
+               return $o;
+       }
+}
index 2d5f97893768d734d4d3ed773d31e0bf1835eb8a..754d1aad512494695a36c5514a04cde8dd992ee7 100644 (file)
@@ -1,92 +1,92 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin\Blocklist;\r
-\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-\r
-class Server extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               if (empty($_POST['page_blocklist_save']) && empty($_POST['page_blocklist_edit'])) {\r
-                       return;\r
-               }\r
-\r
-               parent::checkFormSecurityTokenRedirectOnError('/admin/blocklist/server', 'admin_blocklist');\r
-\r
-               if (!empty($_POST['page_blocklist_save'])) {\r
-                       //  Add new item to blocklist\r
-                       $blocklist = Config::get('system', 'blocklist');\r
-                       $blocklist[] = [\r
-                               'domain' => Strings::escapeTags(trim($_POST['newentry_domain'])),\r
-                               'reason' => Strings::escapeTags(trim($_POST['newentry_reason']))\r
-                       ];\r
-                       Config::set('system', 'blocklist', $blocklist);\r
-                       info(L10n::t('Server added to blocklist.') . EOL);\r
-               } else {\r
-                       // Edit the entries from blocklist\r
-                       $blocklist = [];\r
-                       foreach ($_POST['domain'] as $id => $domain) {\r
-                               // Trimming whitespaces as well as any lingering slashes\r
-                               $domain = Strings::escapeTags(trim($domain, "\x00..\x1F/"));\r
-                               $reason = Strings::escapeTags(trim($_POST['reason'][$id]));\r
-                               if (empty($_POST['delete'][$id])) {\r
-                                       $blocklist[] = [\r
-                                               'domain' => $domain,\r
-                                               'reason' => $reason\r
-                                       ];\r
-                               }\r
-                       }\r
-                       Config::set('system', 'blocklist', $blocklist);\r
-                       info(L10n::t('Site blocklist updated.') . EOL);\r
-               }\r
-\r
-               self::getApp()->internalRedirect('admin/blocklist/server');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               $blocklist = Config::get('system', 'blocklist');\r
-               $blocklistform = [];\r
-               if (is_array($blocklist)) {\r
-                       foreach ($blocklist as $id => $b) {\r
-                               $blocklistform[] = [\r
-                                       'domain' => ["domain[$id]", L10n::t('Blocked domain'), $b['domain'], '', L10n::t('The blocked domain'), 'required', '', ''],\r
-                                       'reason' => ["reason[$id]", L10n::t("Reason for the block"), $b['reason'], L10n::t('The reason why you blocked this domain.') . '(' . $b['domain'] . ')', 'required', '', ''],\r
-                                       'delete' => ["delete[$id]", L10n::t("Delete domain") . ' (' . $b['domain'] . ')', false, L10n::t("Check to delete this entry from the blocklist")]\r
-                               ];\r
-                       }\r
-               }\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/blocklist/server.tpl');\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('Server Blocklist'),\r
-                       '$intro' => L10n::t('This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server.'),\r
-                       '$public' => L10n::t('The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily.'),\r
-                       '$addtitle' => L10n::t('Add new entry to block list'),\r
-                       '$newdomain' => ['newentry_domain', L10n::t('Server Domain'), '', L10n::t('The domain of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''],\r
-                       '$newreason' => ['newentry_reason', L10n::t('Block reason'), '', L10n::t('The reason why you blocked this domain.'), 'required', '', ''],\r
-                       '$submit' => L10n::t('Add Entry'),\r
-                       '$savechanges' => L10n::t('Save changes to the blocklist'),\r
-                       '$currenttitle' => L10n::t('Current Entries in the Blocklist'),\r
-                       '$thurl' => L10n::t('Blocked domain'),\r
-                       '$threason' => L10n::t('Reason for the block'),\r
-                       '$delentry' => L10n::t('Delete entry from blocklist'),\r
-                       '$entries' => $blocklistform,\r
-                       '$baseurl' => $a->getBaseURL(true),\r
-                       '$confirm_delete' => L10n::t('Delete entry from blocklist?'),\r
-                       '$form_security_token' => parent::getFormSecurityToken("admin_blocklist")\r
-               ]);\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin\Blocklist;
+
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class Server extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               if (empty($_POST['page_blocklist_save']) && empty($_POST['page_blocklist_edit'])) {
+                       return;
+               }
+
+               parent::checkFormSecurityTokenRedirectOnError('/admin/blocklist/server', 'admin_blocklist');
+
+               if (!empty($_POST['page_blocklist_save'])) {
+                       //  Add new item to blocklist
+                       $blocklist = Config::get('system', 'blocklist');
+                       $blocklist[] = [
+                               'domain' => Strings::escapeTags(trim($_POST['newentry_domain'])),
+                               'reason' => Strings::escapeTags(trim($_POST['newentry_reason']))
+                       ];
+                       Config::set('system', 'blocklist', $blocklist);
+                       info(L10n::t('Server added to blocklist.') . EOL);
+               } else {
+                       // Edit the entries from blocklist
+                       $blocklist = [];
+                       foreach ($_POST['domain'] as $id => $domain) {
+                               // Trimming whitespaces as well as any lingering slashes
+                               $domain = Strings::escapeTags(trim($domain, "\x00..\x1F/"));
+                               $reason = Strings::escapeTags(trim($_POST['reason'][$id]));
+                               if (empty($_POST['delete'][$id])) {
+                                       $blocklist[] = [
+                                               'domain' => $domain,
+                                               'reason' => $reason
+                                       ];
+                               }
+                       }
+                       Config::set('system', 'blocklist', $blocklist);
+                       info(L10n::t('Site blocklist updated.') . EOL);
+               }
+
+               self::getApp()->internalRedirect('admin/blocklist/server');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               $blocklist = Config::get('system', 'blocklist');
+               $blocklistform = [];
+               if (is_array($blocklist)) {
+                       foreach ($blocklist as $id => $b) {
+                               $blocklistform[] = [
+                                       'domain' => ["domain[$id]", L10n::t('Blocked domain'), $b['domain'], '', L10n::t('The blocked domain'), 'required', '', ''],
+                                       'reason' => ["reason[$id]", L10n::t("Reason for the block"), $b['reason'], L10n::t('The reason why you blocked this domain.') . '(' . $b['domain'] . ')', 'required', '', ''],
+                                       'delete' => ["delete[$id]", L10n::t("Delete domain") . ' (' . $b['domain'] . ')', false, L10n::t("Check to delete this entry from the blocklist")]
+                               ];
+                       }
+               }
+
+               $t = Renderer::getMarkupTemplate('admin/blocklist/server.tpl');
+               return Renderer::replaceMacros($t, [
+                       '$title' => L10n::t('Administration'),
+                       '$page' => L10n::t('Server Blocklist'),
+                       '$intro' => L10n::t('This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server.'),
+                       '$public' => L10n::t('The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily.'),
+                       '$addtitle' => L10n::t('Add new entry to block list'),
+                       '$newdomain' => ['newentry_domain', L10n::t('Server Domain'), '', L10n::t('The domain of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''],
+                       '$newreason' => ['newentry_reason', L10n::t('Block reason'), '', L10n::t('The reason why you blocked this domain.'), 'required', '', ''],
+                       '$submit' => L10n::t('Add Entry'),
+                       '$savechanges' => L10n::t('Save changes to the blocklist'),
+                       '$currenttitle' => L10n::t('Current Entries in the Blocklist'),
+                       '$thurl' => L10n::t('Blocked domain'),
+                       '$threason' => L10n::t('Reason for the block'),
+                       '$delentry' => L10n::t('Delete entry from blocklist'),
+                       '$entries' => $blocklistform,
+                       '$baseurl' => $a->getBaseURL(true),
+                       '$confirm_delete' => L10n::t('Delete entry from blocklist?'),
+                       '$form_security_token' => parent::getFormSecurityToken("admin_blocklist")
+               ]);
+       }
+}
index 69001b9ce4640ce29dd236b794499a14250204a9..4c29eea34f550e15bb64c72dcc457096dc93c054 100644 (file)
-<?php\r
-\r
-namespace Friendica\Module\Admin;\r
-\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Core\Update;\r
-use Friendica\Database\DBA;\r
-use Friendica\Database\DBStructure;\r
-use Friendica\Module\BaseAdminModule;\r
-\r
-class DBSync extends BaseAdminModule\r
-{\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               $o = '';\r
-\r
-               if ($a->argc > 3 && $a->argv[2] === 'mark') {\r
-                       // @TODO: Replace with parameter from router\r
-                       $update = intval($a->argv[3]);\r
-                       if ($update) {\r
-                               Config::set('database', 'update_' . $update, 'success');\r
-                               $curr = Config::get('system', 'build');\r
-                               if (intval($curr) == $update) {\r
-                                       Config::set('system', 'build', intval($curr) + 1);\r
-                               }\r
-                               info(L10n::t('Update has been marked successful') . EOL);\r
-                       }\r
-                       $a->internalRedirect('admin/dbsync');\r
-               }\r
-\r
-               if ($a->argc > 2) {\r
-                       if ($a->argv[2] === 'check') {\r
-                               // @TODO Seems like a similar logic like Update::check()\r
-                               $retval = DBStructure::update($a->getBasePath(), false, true);\r
-                               if ($retval === '') {\r
-                                       $o .= L10n::t("Database structure update %s was successfully applied.", DB_UPDATE_VERSION) . "<br />";\r
-                                       Config::set('database', 'last_successful_update', DB_UPDATE_VERSION);\r
-                                       Config::set('database', 'last_successful_update_time', time());\r
-                               } else {\r
-                                       $o .= L10n::t("Executing of database structure update %s failed with error: %s", DB_UPDATE_VERSION, $retval) . "<br />";\r
-                               }\r
-                               if ($a->argv[2] === 'check') {\r
-                                       return $o;\r
-                               }\r
-                       } elseif (intval($a->argv[2])) {\r
-                               require_once 'update.php';\r
-\r
-                               // @TODO: Replace with parameter from router\r
-                               $update = intval($a->argv[2]);\r
-\r
-                               $func = 'update_' . $update;\r
-\r
-                               if (function_exists($func)) {\r
-                                       $retval = $func();\r
-\r
-                                       if ($retval === Update::FAILED) {\r
-                                               $o .= L10n::t("Executing %s failed with error: %s", $func, $retval);\r
-                                       } elseif ($retval === Update::SUCCESS) {\r
-                                               $o .= L10n::t('Update %s was successfully applied.', $func);\r
-                                               Config::set('database', $func, 'success');\r
-                                       } else {\r
-                                               $o .= L10n::t('Update %s did not return a status. Unknown if it succeeded.', $func);\r
-                                       }\r
-                               } else {\r
-                                       $o .= L10n::t('There was no additional update function %s that needed to be called.', $func) . "<br />";\r
-                                       Config::set('database', $func, 'success');\r
-                               }\r
-\r
-                               return $o;\r
-                       }\r
-               }\r
-\r
-               $failed = [];\r
-               $configStmt = DBA::select('config', ['k', 'v'], ['cat' => 'database']);\r
-               while ($config = DBA::fetch($configStmt)) {\r
-                       $upd = intval(substr($config['k'], 7));\r
-                       if ($upd >= 1139 && $config['v'] != 'success') {\r
-                               $failed[] = $upd;\r
-                       }\r
-               }\r
-\r
-               if (!count($failed)) {\r
-                       $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/dbsync/structure_check.tpl'), [\r
-                               '$base' => $a->getBaseURL(true),\r
-                               '$banner' => L10n::t('No failed updates.'),\r
-                               '$check' => L10n::t('Check database structure'),\r
-                       ]);\r
-               } else {\r
-                       $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/dbsync/failed_updates.tpl'), [\r
-                               '$base' => $a->getBaseURL(true),\r
-                               '$banner' => L10n::t('Failed Updates'),\r
-                               '$desc' => L10n::t('This does not include updates prior to 1139, which did not return a status.'),\r
-                               '$mark' => L10n::t("Mark success \x28if update was manually applied\x29"),\r
-                               '$apply' => L10n::t('Attempt to execute this update step automatically'),\r
-                               '$failed' => $failed\r
-                       ]);\r
-               }\r
-\r
-               return $o;\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin;
+
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Core\Update;
+use Friendica\Database\DBA;
+use Friendica\Database\DBStructure;
+use Friendica\Module\BaseAdminModule;
+
+class DBSync extends BaseAdminModule
+{
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               $o = '';
+
+               if ($a->argc > 3 && $a->argv[2] === 'mark') {
+                       // @TODO: Replace with parameter from router
+                       $update = intval($a->argv[3]);
+                       if ($update) {
+                               Config::set('database', 'update_' . $update, 'success');
+                               $curr = Config::get('system', 'build');
+                               if (intval($curr) == $update) {
+                                       Config::set('system', 'build', intval($curr) + 1);
+                               }
+                               info(L10n::t('Update has been marked successful') . EOL);
+                       }
+                       $a->internalRedirect('admin/dbsync');
+               }
+
+               if ($a->argc > 2) {
+                       if ($a->argv[2] === 'check') {
+                               // @TODO Seems like a similar logic like Update::check()
+                               $retval = DBStructure::update($a->getBasePath(), false, true);
+                               if ($retval === '') {
+                                       $o .= L10n::t("Database structure update %s was successfully applied.", DB_UPDATE_VERSION) . "<br />";
+                                       Config::set('database', 'last_successful_update', DB_UPDATE_VERSION);
+                                       Config::set('database', 'last_successful_update_time', time());
+                               } else {
+                                       $o .= L10n::t("Executing of database structure update %s failed with error: %s", DB_UPDATE_VERSION, $retval) . "<br />";
+                               }
+                               if ($a->argv[2] === 'check') {
+                                       return $o;
+                               }
+                       } elseif (intval($a->argv[2])) {
+                               require_once 'update.php';
+
+                               // @TODO: Replace with parameter from router
+                               $update = intval($a->argv[2]);
+
+                               $func = 'update_' . $update;
+
+                               if (function_exists($func)) {
+                                       $retval = $func();
+
+                                       if ($retval === Update::FAILED) {
+                                               $o .= L10n::t("Executing %s failed with error: %s", $func, $retval);
+                                       } elseif ($retval === Update::SUCCESS) {
+                                               $o .= L10n::t('Update %s was successfully applied.', $func);
+                                               Config::set('database', $func, 'success');
+                                       } else {
+                                               $o .= L10n::t('Update %s did not return a status. Unknown if it succeeded.', $func);
+                                       }
+                               } else {
+                                       $o .= L10n::t('There was no additional update function %s that needed to be called.', $func) . "<br />";
+                                       Config::set('database', $func, 'success');
+                               }
+
+                               return $o;
+                       }
+               }
+
+               $failed = [];
+               $configStmt = DBA::select('config', ['k', 'v'], ['cat' => 'database']);
+               while ($config = DBA::fetch($configStmt)) {
+                       $upd = intval(substr($config['k'], 7));
+                       if ($upd >= 1139 && $config['v'] != 'success') {
+                               $failed[] = $upd;
+                       }
+               }
+
+               if (!count($failed)) {
+                       $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/dbsync/structure_check.tpl'), [
+                               '$base' => $a->getBaseURL(true),
+                               '$banner' => L10n::t('No failed updates.'),
+                               '$check' => L10n::t('Check database structure'),
+                       ]);
+               } else {
+                       $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/dbsync/failed_updates.tpl'), [
+                               '$base' => $a->getBaseURL(true),
+                               '$banner' => L10n::t('Failed Updates'),
+                               '$desc' => L10n::t('This does not include updates prior to 1139, which did not return a status.'),
+                               '$mark' => L10n::t("Mark success \x28if update was manually applied\x29"),
+                               '$apply' => L10n::t('Attempt to execute this update step automatically'),
+                               '$failed' => $failed
+                       ]);
+               }
+
+               return $o;
+       }
+}
index cb9acf4eb1acdbab8d70dfe66673df18fd8aec2d..328e7e68b57c1e2d91d5c3fa32df7972a995d6be 100644 (file)
@@ -1,74 +1,74 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin;\r
-\r
-use Friendica\Content\Feature;\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-\r
-class Features extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               parent::checkFormSecurityTokenRedirectOnError('/admin/features', 'admin_manage_features');\r
-\r
-               $features = Feature::get(false);\r
-\r
-               foreach ($features as $fname => $fdata) {\r
-                       foreach (array_slice($fdata, 1) as $f) {\r
-                               $feature = $f[0];\r
-                               $feature_state = 'feature_' . $feature;\r
-                               $featurelock = 'featurelock_' . $feature;\r
-\r
-                               if (!empty($_POST[$feature_state])) {\r
-                                       $val = intval($_POST[$feature_state]);\r
-                               } else {\r
-                                       $val = 0;\r
-                               }\r
-                               Config::set('feature', $feature, $val);\r
-\r
-                               if (!empty($_POST[$featurelock])) {\r
-                                       Config::set('feature_lock', $feature, $val);\r
-                               } else {\r
-                                       Config::delete('feature_lock', $feature);\r
-                               }\r
-                       }\r
-               }\r
-\r
-               self::getApp()->internalRedirect('admin/features');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $arr = [];\r
-               $features = Feature::get(false);\r
-\r
-               foreach ($features as $fname => $fdata) {\r
-                       $arr[$fname] = [];\r
-                       $arr[$fname][0] = $fdata[0];\r
-                       foreach (array_slice($fdata, 1) as $f) {\r
-                               $set = Config::get('feature', $f[0], $f[3]);\r
-                               $arr[$fname][1][] = [\r
-                                       ['feature_' . $f[0], $f[1], $set, $f[2], [L10n::t('Off'), L10n::t('On')]],\r
-                                       ['featurelock_' . $f[0], L10n::t('Lock feature %s', $f[1]), (($f[4] !== false) ? "1" : ''), '', [L10n::t('Off'), L10n::t('On')]]\r
-                               ];\r
-                       }\r
-               }\r
-\r
-               $tpl = Renderer::getMarkupTemplate('admin/features.tpl');\r
-               $o = Renderer::replaceMacros($tpl, [\r
-                       '$form_security_token' => parent::getFormSecurityToken("admin_manage_features"),\r
-                       '$title' => L10n::t('Manage Additional Features'),\r
-                       '$features' => $arr,\r
-                       '$submit' => L10n::t('Save Settings'),\r
-               ]);\r
-\r
-               return $o;\r
-       }\r
-}
\ No newline at end of file
+<?php
+
+namespace Friendica\Module\Admin;
+
+use Friendica\Content\Feature;
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+
+class Features extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               parent::checkFormSecurityTokenRedirectOnError('/admin/features', 'admin_manage_features');
+
+               $features = Feature::get(false);
+
+               foreach ($features as $fname => $fdata) {
+                       foreach (array_slice($fdata, 1) as $f) {
+                               $feature = $f[0];
+                               $feature_state = 'feature_' . $feature;
+                               $featurelock = 'featurelock_' . $feature;
+
+                               if (!empty($_POST[$feature_state])) {
+                                       $val = intval($_POST[$feature_state]);
+                               } else {
+                                       $val = 0;
+                               }
+                               Config::set('feature', $feature, $val);
+
+                               if (!empty($_POST[$featurelock])) {
+                                       Config::set('feature_lock', $feature, $val);
+                               } else {
+                                       Config::delete('feature_lock', $feature);
+                               }
+                       }
+               }
+
+               self::getApp()->internalRedirect('admin/features');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $arr = [];
+               $features = Feature::get(false);
+
+               foreach ($features as $fname => $fdata) {
+                       $arr[$fname] = [];
+                       $arr[$fname][0] = $fdata[0];
+                       foreach (array_slice($fdata, 1) as $f) {
+                               $set = Config::get('feature', $f[0], $f[3]);
+                               $arr[$fname][1][] = [
+                                       ['feature_' . $f[0], $f[1], $set, $f[2], [L10n::t('Off'), L10n::t('On')]],
+                                       ['featurelock_' . $f[0], L10n::t('Lock feature %s', $f[1]), (($f[4] !== false) ? "1" : ''), '', [L10n::t('Off'), L10n::t('On')]]
+                               ];
+                       }
+               }
+
+               $tpl = Renderer::getMarkupTemplate('admin/features.tpl');
+               $o = Renderer::replaceMacros($tpl, [
+                       '$form_security_token' => parent::getFormSecurityToken("admin_manage_features"),
+                       '$title' => L10n::t('Manage Additional Features'),
+                       '$features' => $arr,
+                       '$submit' => L10n::t('Save Settings'),
+               ]);
+
+               return $o;
+       }
+}
index 9a9c9209b6f9c991ea6d5f701d1f68ff3b8174ca..766e65c9a0eeccc38c2b9060fd7a2901869c61d3 100644 (file)
@@ -1,55 +1,55 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin\Item;\r
-\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Model\Item;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-\r
-class Delete extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               if (empty($_POST['page_deleteitem_submit'])) {\r
-                       return;\r
-               }\r
-\r
-               parent::checkFormSecurityTokenRedirectOnError('/admin/item/delete', 'admin_deleteitem');\r
-\r
-               if (!empty($_POST['page_deleteitem_submit'])) {\r
-                       $guid = trim(Strings::escapeTags($_POST['deleteitemguid']));\r
-                       // The GUID should not include a "/", so if there is one, we got an URL\r
-                       // and the last part of it is most likely the GUID.\r
-                       if (strpos($guid, '/')) {\r
-                               $guid = substr($guid, strrpos($guid, '/') + 1);\r
-                       }\r
-                       // Now that we have the GUID, drop those items, which will also delete the\r
-                       // associated threads.\r
-                       Item::delete(['guid' => $guid]);\r
-               }\r
-\r
-               info(L10n::t('Item marked for deletion.') . EOL);\r
-               self::getApp()->internalRedirect('admin/item/delete');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/item/delete.tpl');\r
-\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('Delete Item'),\r
-                       '$submit' => L10n::t('Delete this Item'),\r
-                       '$intro1' => L10n::t('On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted.'),\r
-                       '$intro2' => L10n::t('You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456.'),\r
-                       '$deleteitemguid' => ['deleteitemguid', L10n::t("GUID"), '', L10n::t("The GUID of the item you want to delete."), 'required', 'autofocus'],\r
-                       '$form_security_token' => parent::getFormSecurityToken("admin_deleteitem")\r
-               ]);\r
-       }\r
-}
\ No newline at end of file
+<?php
+
+namespace Friendica\Module\Admin\Item;
+
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Model\Item;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class Delete extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               if (empty($_POST['page_deleteitem_submit'])) {
+                       return;
+               }
+
+               parent::checkFormSecurityTokenRedirectOnError('/admin/item/delete', 'admin_deleteitem');
+
+               if (!empty($_POST['page_deleteitem_submit'])) {
+                       $guid = trim(Strings::escapeTags($_POST['deleteitemguid']));
+                       // The GUID should not include a "/", so if there is one, we got an URL
+                       // and the last part of it is most likely the GUID.
+                       if (strpos($guid, '/')) {
+                               $guid = substr($guid, strrpos($guid, '/') + 1);
+                       }
+                       // Now that we have the GUID, drop those items, which will also delete the
+                       // associated threads.
+                       Item::delete(['guid' => $guid]);
+               }
+
+               info(L10n::t('Item marked for deletion.') . EOL);
+               self::getApp()->internalRedirect('admin/item/delete');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $t = Renderer::getMarkupTemplate('admin/item/delete.tpl');
+
+               return Renderer::replaceMacros($t, [
+                       '$title' => L10n::t('Administration'),
+                       '$page' => L10n::t('Delete Item'),
+                       '$submit' => L10n::t('Delete this Item'),
+                       '$intro1' => L10n::t('On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted.'),
+                       '$intro2' => L10n::t('You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456.'),
+                       '$deleteitemguid' => ['deleteitemguid', L10n::t("GUID"), '', L10n::t("The GUID of the item you want to delete."), 'required', 'autofocus'],
+                       '$form_security_token' => parent::getFormSecurityToken("admin_deleteitem")
+               ]);
+       }
+}
index c42c5402cab2714b0d6343bc68af10ae19af2b8e..d55618454f1a86c1cb5e4610eb81cc2db75d5f79 100644 (file)
@@ -1,74 +1,74 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin\Logs;\r
-\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-use Psr\Log\LogLevel;\r
-\r
-class Settings extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               if (!empty($_POST['page_logs'])) {\r
-                       parent::checkFormSecurityTokenRedirectOnError('/admin/logs', 'admin_logs');\r
-\r
-                       $logfile   = (!empty($_POST['logfile']) ? Strings::escapeTags(trim($_POST['logfile'])) : '');\r
-                       $debugging = !empty($_POST['debugging']);\r
-                       $loglevel  = defaults($_POST, 'loglevel', LogLevel::ERROR);\r
-\r
-                       Config::set('system', 'logfile', $logfile);\r
-                       Config::set('system', 'debugging', $debugging);\r
-                       Config::set('system', 'loglevel', $loglevel);\r
-               }\r
-\r
-               info(L10n::t("Log settings updated."));\r
-               self::getApp()->internalRedirect('admin/logs');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               $log_choices = [\r
-                       LogLevel::ERROR   => 'Error',\r
-                       LogLevel::WARNING => 'Warning',\r
-                       LogLevel::NOTICE  => 'Notice',\r
-                       LogLevel::INFO    => 'Info',\r
-                       LogLevel::DEBUG   => 'Debug',\r
-               ];\r
-\r
-               if (ini_get('log_errors')) {\r
-                       $phplogenabled = L10n::t('PHP log currently enabled.');\r
-               } else {\r
-                       $phplogenabled = L10n::t('PHP log currently disabled.');\r
-               }\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/logs/settings.tpl');\r
-\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('Logs'),\r
-                       '$submit' => L10n::t('Save Settings'),\r
-                       '$clear' => L10n::t('Clear'),\r
-                       '$baseurl' => $a->getBaseURL(true),\r
-                       '$logname' => Config::get('system', 'logfile'),\r
-                       // see /help/smarty3-templates#1_1 on any Friendica node\r
-                       '$debugging' => ['debugging', L10n::t("Enable Debugging"), Config::get('system', 'debugging'), ""],\r
-                       '$logfile' => ['logfile', L10n::t("Log file"), Config::get('system', 'logfile'), L10n::t("Must be writable by web server. Relative to your Friendica top-level directory.")],\r
-                       '$loglevel' => ['loglevel', L10n::t("Log level"), Config::get('system', 'loglevel'), "", $log_choices],\r
-                       '$form_security_token' => parent::getFormSecurityToken("admin_logs"),\r
-                       '$phpheader' => L10n::t("PHP logging"),\r
-                       '$phphint' => L10n::t("To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."),\r
-                       '$phplogcode' => "error_reporting(E_ERROR | E_WARNING | E_PARSE);\nini_set('error_log','php.out');\nini_set('log_errors','1');\nini_set('display_errors', '1');",\r
-                       '$phplogenabled' => $phplogenabled,\r
-               ]);\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin\Logs;
+
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+use Psr\Log\LogLevel;
+
+class Settings extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               if (!empty($_POST['page_logs'])) {
+                       parent::checkFormSecurityTokenRedirectOnError('/admin/logs', 'admin_logs');
+
+                       $logfile   = (!empty($_POST['logfile']) ? Strings::escapeTags(trim($_POST['logfile'])) : '');
+                       $debugging = !empty($_POST['debugging']);
+                       $loglevel  = defaults($_POST, 'loglevel', LogLevel::ERROR);
+
+                       Config::set('system', 'logfile', $logfile);
+                       Config::set('system', 'debugging', $debugging);
+                       Config::set('system', 'loglevel', $loglevel);
+               }
+
+               info(L10n::t("Log settings updated."));
+               self::getApp()->internalRedirect('admin/logs');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               $log_choices = [
+                       LogLevel::ERROR   => 'Error',
+                       LogLevel::WARNING => 'Warning',
+                       LogLevel::NOTICE  => 'Notice',
+                       LogLevel::INFO    => 'Info',
+                       LogLevel::DEBUG   => 'Debug',
+               ];
+
+               if (ini_get('log_errors')) {
+                       $phplogenabled = L10n::t('PHP log currently enabled.');
+               } else {
+                       $phplogenabled = L10n::t('PHP log currently disabled.');
+               }
+
+               $t = Renderer::getMarkupTemplate('admin/logs/settings.tpl');
+
+               return Renderer::replaceMacros($t, [
+                       '$title' => L10n::t('Administration'),
+                       '$page' => L10n::t('Logs'),
+                       '$submit' => L10n::t('Save Settings'),
+                       '$clear' => L10n::t('Clear'),
+                       '$baseurl' => $a->getBaseURL(true),
+                       '$logname' => Config::get('system', 'logfile'),
+                       // see /help/smarty3-templates#1_1 on any Friendica node
+                       '$debugging' => ['debugging', L10n::t("Enable Debugging"), Config::get('system', 'debugging'), ""],
+                       '$logfile' => ['logfile', L10n::t("Log file"), Config::get('system', 'logfile'), L10n::t("Must be writable by web server. Relative to your Friendica top-level directory.")],
+                       '$loglevel' => ['loglevel', L10n::t("Log level"), Config::get('system', 'loglevel'), "", $log_choices],
+                       '$form_security_token' => parent::getFormSecurityToken("admin_logs"),
+                       '$phpheader' => L10n::t("PHP logging"),
+                       '$phphint' => L10n::t("To temporarily enable logging of PHP errors and warnings you can prepend the following to the index.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."),
+                       '$phplogcode' => "error_reporting(E_ERROR | E_WARNING | E_PARSE);\nini_set('error_log','php.out');\nini_set('log_errors','1');\nini_set('display_errors', '1');",
+                       '$phplogenabled' => $phplogenabled,
+               ]);
+       }
+}
index 45b19bfacf6fe14f018dc9f988ad7820d537ae15..b66a6781e50836cc9dbfb5a32606dc0a8e0fe1c0 100644 (file)
@@ -1,52 +1,52 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin\Logs;\r
-\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-\r
-class View extends BaseAdminModule\r
-{\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/logs/view.tpl');\r
-               $f = Config::get('system', 'logfile');\r
-               $data = '';\r
-\r
-               if (!file_exists($f)) {\r
-                       $data = L10n::t('Error trying to open <strong>%1$s</strong> log file.\r\n<br/>Check to see if file %1$s exist and is readable.', $f);\r
-               } else {\r
-                       $fp = fopen($f, 'r');\r
-                       if (!$fp) {\r
-                               $data = L10n::t('Couldn\'t open <strong>%1$s</strong> log file.\r\n<br/>Check to see if file %1$s is readable.', $f);\r
-                       } else {\r
-                               $fstat = fstat($fp);\r
-                               $size = $fstat['size'];\r
-                               if ($size != 0) {\r
-                                       if ($size > 5000000 || $size < 0) {\r
-                                               $size = 5000000;\r
-                                       }\r
-                                       $seek = fseek($fp, 0 - $size, SEEK_END);\r
-                                       if ($seek === 0) {\r
-                                               $data = Strings::escapeHtml(fread($fp, $size));\r
-                                               while (!feof($fp)) {\r
-                                                       $data .= Strings::escapeHtml(fread($fp, 4096));\r
-                                               }\r
-                                       }\r
-                               }\r
-                               fclose($fp);\r
-                       }\r
-               }\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('View Logs'),\r
-                       '$data' => $data,\r
-                       '$logname' => Config::get('system', 'logfile')\r
-               ]);\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin\Logs;
+
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class View extends BaseAdminModule
+{
+       public static function content()
+       {
+               parent::content();
+
+               $t = Renderer::getMarkupTemplate('admin/logs/view.tpl');
+               $f = Config::get('system', 'logfile');
+               $data = '';
+
+               if (!file_exists($f)) {
+                       $data = L10n::t('Error trying to open <strong>%1$s</strong> log file.\r\n<br/>Check to see if file %1$s exist and is readable.', $f);
+               } else {
+                       $fp = fopen($f, 'r');
+                       if (!$fp) {
+                               $data = L10n::t('Couldn\'t open <strong>%1$s</strong> log file.\r\n<br/>Check to see if file %1$s is readable.', $f);
+                       } else {
+                               $fstat = fstat($fp);
+                               $size = $fstat['size'];
+                               if ($size != 0) {
+                                       if ($size > 5000000 || $size < 0) {
+                                               $size = 5000000;
+                                       }
+                                       $seek = fseek($fp, 0 - $size, SEEK_END);
+                                       if ($seek === 0) {
+                                               $data = Strings::escapeHtml(fread($fp, $size));
+                                               while (!feof($fp)) {
+                                                       $data .= Strings::escapeHtml(fread($fp, 4096));
+                                               }
+                                       }
+                               }
+                               fclose($fp);
+                       }
+               }
+               return Renderer::replaceMacros($t, [
+                       '$title' => L10n::t('Administration'),
+                       '$page' => L10n::t('View Logs'),
+                       '$data' => $data,
+                       '$logname' => Config::get('system', 'logfile')
+               ]);
+       }
+}
index 2d0e9c1d5a42cf9c356147a05787fa2f89f5bb8d..b912117dc1446aff732bf5430f904048f5ebaa27 100644 (file)
@@ -1,16 +1,16 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin;\r
-\r
-use Friendica\Module\BaseAdminModule;\r
-\r
-class PhpInfo extends BaseAdminModule\r
-{\r
-       public static function rawContent()\r
-       {\r
-               parent::rawContent();\r
-\r
-               phpinfo();\r
-               exit();\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin;
+
+use Friendica\Module\BaseAdminModule;
+
+class PhpInfo extends BaseAdminModule
+{
+       public static function rawContent()
+       {
+               parent::rawContent();
+
+               phpinfo();
+               exit();
+       }
+}
index 705529166cf32f2d679c3dfc6dcda40359589ad2..748a12a6a6332eee33a64e1733263545afc57a58 100644 (file)
@@ -1,66 +1,66 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin;\r
-\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Database\DBA;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Arrays;\r
-use Friendica\Util\DateTimeFormat;\r
-\r
-/**\r
- * @brief Admin Inspect Queue Page\r
- *\r
- * Generates a page for the admin to have a look into the current queue of\r
- * worker jobs. Shown are the parameters for the job and its priority.\r
- *\r
- * @return string\r
- */\r
-class Queue extends BaseAdminModule\r
-{\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               // @TODO: Replace with parameter from router\r
-               $deferred = $a->argc > 2 && $a->argv[2] == 'deferred';\r
-\r
-               // get jobs from the workerqueue table\r
-               if ($deferred) {\r
-                       $condition = ["NOT `done` AND `next_try` > ?", DateTimeFormat::utcNow()];\r
-                       $sub_title = L10n::t('Inspect Deferred Worker Queue');\r
-                       $info = L10n::t("This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time.");\r
-               } else {\r
-                       $condition = ["NOT `done` AND `next_try` < ?", DateTimeFormat::utcNow()];\r
-                       $sub_title = L10n::t('Inspect Worker Queue');\r
-                       $info = L10n::t('This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you\'ve set up during install.');\r
-               }\r
-\r
-               $entries = DBA::select('workerqueue', ['id', 'parameter', 'created', 'priority'], $condition, ['order' => ['priority']]);\r
-\r
-               $r = [];\r
-               while ($entry = DBA::fetch($entries)) {\r
-                       // fix GH-5469. ref: src/Core/Worker.php:217\r
-                       $entry['parameter'] = Arrays::recursiveImplode(json_decode($entry['parameter'], true), ': ');\r
-                       $entry['created'] = DateTimeFormat::local($entry['created']);\r
-                       $r[] = $entry;\r
-               }\r
-               DBA::close($entries);\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/queue.tpl');\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => $sub_title,\r
-                       '$count' => count($r),\r
-                       '$id_header' => L10n::t('ID'),\r
-                       '$param_header' => L10n::t('Job Parameters'),\r
-                       '$created_header' => L10n::t('Created'),\r
-                       '$prio_header' => L10n::t('Priority'),\r
-                       '$info' => $info,\r
-                       '$entries' => $r,\r
-               ]);\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module\Admin;
+
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Database\DBA;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Arrays;
+use Friendica\Util\DateTimeFormat;
+
+/**
+ * @brief Admin Inspect Queue Page
+ *
+ * Generates a page for the admin to have a look into the current queue of
+ * worker jobs. Shown are the parameters for the job and its priority.
+ *
+ * @return string
+ */
+class Queue extends BaseAdminModule
+{
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               // @TODO: Replace with parameter from router
+               $deferred = $a->argc > 2 && $a->argv[2] == 'deferred';
+
+               // get jobs from the workerqueue table
+               if ($deferred) {
+                       $condition = ["NOT `done` AND `next_try` > ?", DateTimeFormat::utcNow()];
+                       $sub_title = L10n::t('Inspect Deferred Worker Queue');
+                       $info = L10n::t("This page lists the deferred worker jobs. This are jobs that couldn't be executed at the first time.");
+               } else {
+                       $condition = ["NOT `done` AND `next_try` < ?", DateTimeFormat::utcNow()];
+                       $sub_title = L10n::t('Inspect Worker Queue');
+                       $info = L10n::t('This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you\'ve set up during install.');
+               }
+
+               $entries = DBA::select('workerqueue', ['id', 'parameter', 'created', 'priority'], $condition, ['order' => ['priority']]);
+
+               $r = [];
+               while ($entry = DBA::fetch($entries)) {
+                       // fix GH-5469. ref: src/Core/Worker.php:217
+                       $entry['parameter'] = Arrays::recursiveImplode(json_decode($entry['parameter'], true), ': ');
+                       $entry['created'] = DateTimeFormat::local($entry['created']);
+                       $r[] = $entry;
+               }
+               DBA::close($entries);
+
+               $t = Renderer::getMarkupTemplate('admin/queue.tpl');
+               return Renderer::replaceMacros($t, [
+                       '$title' => L10n::t('Administration'),
+                       '$page' => $sub_title,
+                       '$count' => count($r),
+                       '$id_header' => L10n::t('ID'),
+                       '$param_header' => L10n::t('Job Parameters'),
+                       '$created_header' => L10n::t('Created'),
+                       '$prio_header' => L10n::t('Priority'),
+                       '$info' => $info,
+                       '$entries' => $r,
+               ]);
+       }
+}
index 05ca16a16f75597a1affa1d78cd9a1e87cf0676b..37507ca9964f6171814a9bbecbe9fce4a53cfd14 100644 (file)
@@ -39,6 +39,7 @@ class Site extends BaseAdminModule
                }
 
                // relocate
+               // @TODO This file could benefit from moving this feature away in a Module\Admin\Relocate class for example
                if (!empty($_POST['relocate']) && !empty($_POST['relocate_url']) && $_POST['relocate_url'] != "") {
                        $new_url = $_POST['relocate_url'];
                        $new_url = rtrim($new_url, "/");
index 8529c7142c344ce949c28a3dff9121af32d42fb6..a78a6b8d7c033d890a93157f0229884a1f704c0d 100644 (file)
-<?php\r
-\r
-namespace Friendica\Module\Admin;\r
-\r
-use Friendica\Core\Addon;\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Logger;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Core\Update;\r
-use Friendica\Database\DBA;\r
-use Friendica\Database\DBStructure;\r
-use Friendica\Model\Register;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\DateTimeFormat;\r
-use Friendica\Util\Network;\r
-\r
-class Summary extends BaseAdminModule\r
-{\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               // are there MyISAM tables in the DB? If so, trigger a warning message\r
-               $warningtext = [];\r
-               if (DBA::count('`information_schema`.`tables`', ['engine' => 'myisam', 'table_schema' => DBA::databaseName()])) {\r
-                       $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');\r
-               }\r
-\r
-               // Check if github.com/friendica/master/VERSION is higher then\r
-               // the local version of Friendica. Check is opt-in, source may be master or devel branch\r
-               if (Config::get('system', 'check_new_version_url', 'none') != 'none') {\r
-                       $gitversion = Config::get('system', 'git_friendica_version');\r
-                       if (version_compare(FRIENDICA_VERSION, $gitversion) < 0) {\r
-                               $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);\r
-                       }\r
-               }\r
-\r
-               if (Config::get('system', 'dbupdate', DBStructure::UPDATE_NOT_CHECKED) == DBStructure::UPDATE_NOT_CHECKED) {\r
-                       DBStructure::update($a->getBasePath(), false, true);\r
-               }\r
-\r
-               if (Config::get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) {\r
-                       $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.');\r
-               }\r
-\r
-               if (Config::get('system', 'update') == Update::FAILED) {\r
-                       $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.)');\r
-               }\r
-\r
-               $last_worker_call = Config::get('system', 'last_worker_execution', false);\r
-               if (!$last_worker_call) {\r
-                       $warningtext[] = L10n::t('The worker was never executed. Please check your database structure!');\r
-               } elseif ((strtotime(DateTimeFormat::utcNow()) - strtotime($last_worker_call)) > 60 * 60) {\r
-                       $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);\r
-               }\r
-\r
-               // Legacy config file warning\r
-               if (file_exists('.htconfig.php')) {\r
-                       $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');\r
-               }\r
-\r
-               if (file_exists('config/local.ini.php')) {\r
-                       $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');\r
-               }\r
-\r
-               // Check server vitality\r
-               if (!self::checkSelfHostMeta()) {\r
-                       $well_known = $a->getBaseURL() . '/.well-known/host-meta';\r
-                       $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.',\r
-                               $well_known, $well_known, $a->getBaseURL() . '/help/Install');\r
-               }\r
-\r
-               $accounts = [\r
-                       [L10n::t('Normal Account'), 0],\r
-                       [L10n::t('Automatic Follower Account'), 0],\r
-                       [L10n::t('Public Forum Account'), 0],\r
-                       [L10n::t('Automatic Friend Account'), 0],\r
-                       [L10n::t('Blog Account'), 0],\r
-                       [L10n::t('Private Forum Account'), 0]\r
-               ];\r
-\r
-               $users = 0;\r
-               $pageFlagsCountStmt = DBA::p('SELECT `page-flags`, COUNT(`uid`) AS `count` FROM `user` GROUP BY `page-flags`');\r
-               while ($pageFlagsCount = DBA::fetch($pageFlagsCountStmt)) {\r
-                       $accounts[$pageFlagsCount['page-flags']][1] = $pageFlagsCount['count'];\r
-                       $users += $pageFlagsCount['count'];\r
-               }\r
-               DBA::close($pageFlagsCountStmt);\r
-\r
-               Logger::log('accounts: ' . print_r($accounts, true), Logger::DATA);\r
-\r
-               $pending = Register::getPendingCount();\r
-\r
-               $queue = DBA::count('queue', []);\r
-\r
-               $deferred = DBA::count('workerqueue', ['`executed` <= ? AND NOT `done` AND `next_try` > ?',\r
-                       DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);\r
-\r
-               $workerqueue = DBA::count('workerqueue', ['`executed` <= ? AND NOT `done` AND `next_try` < ?',\r
-                       DBA::NULL_DATETIME, DateTimeFormat::utcNow()]);\r
-\r
-               // We can do better, but this is a quick queue status\r
-               $queues = ['label' => L10n::t('Message queues'), 'queue' => $queue, 'deferred' => $deferred, 'workerq' => $workerqueue];\r
-\r
-               $variables = DBA::toArray(DBA::p('SHOW variables LIKE "max_allowed_packet"'));\r
-               $max_allowed_packet = $variables ? $variables[0]['Value'] : 0;\r
-\r
-               $server_settings = [\r
-                       'label' => L10n::t('Server Settings'),\r
-                       'php' => [\r
-                               'upload_max_filesize' => ini_get('upload_max_filesize'),\r
-                               'post_max_size' => ini_get('post_max_size'),\r
-                               'memory_limit' => ini_get('memory_limit')\r
-                       ],\r
-                       'mysql' => [\r
-                               'max_allowed_packet' => $max_allowed_packet\r
-                       ]\r
-               ];\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/summary.tpl');\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('Summary'),\r
-                       '$queues' => $queues,\r
-                       '$users' => [L10n::t('Registered users'), $users],\r
-                       '$accounts' => $accounts,\r
-                       '$pending' => [L10n::t('Pending registrations'), $pending],\r
-                       '$version' => [L10n::t('Version'), FRIENDICA_VERSION],\r
-                       '$platform' => FRIENDICA_PLATFORM,\r
-                       '$codename' => FRIENDICA_CODENAME,\r
-                       '$build' => Config::get('system', 'build'),\r
-                       '$addons' => [L10n::t('Active addons'), Addon::getEnabledList()],\r
-                       '$serversettings' => $server_settings,\r
-                       '$warningtext' => $warningtext\r
-               ]);\r
-       }\r
-\r
-       private static function checkSelfHostMeta()\r
-       {\r
-               // Fetch the host-meta to check if this really is a vital server\r
-               return Network::curl(self::getApp()->getBaseURL() . '/.well-known/host-meta')->isSuccess();\r
-       }\r
-\r
-}
\ No newline at end of file
+<?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\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],
+                       '$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(self::getApp()->getBaseURL() . '/.well-known/host-meta')->isSuccess();
+       }
+
+}
index d8a2d2139d403a64a68a577e9d012a1f1ef1d7a5..3750e96070ad9fd7514f63f34c8adc1c3f49ef76 100644 (file)
-<?php\r
-\r
-namespace Friendica\Module\Admin\Themes;\r
-\r
-use Friendica\Content\Text\Markdown;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Core\Theme;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-\r
-class Details extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               $a = self::getApp();\r
-\r
-               if ($a->argc > 2) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $theme = $a->argv[2];\r
-                       $theme = Strings::sanitizeFilePathItem($theme);\r
-                       if (is_file("view/theme/$theme/config.php")) {\r
-                               require_once "view/theme/$theme/config.php";\r
-\r
-                               if (function_exists('theme_admin_post')) {\r
-                                       theme_admin_post($a);\r
-                               }\r
-                       }\r
-\r
-                       info(L10n::t('Theme settings updated.'));\r
-\r
-                       if ($a->isAjax()) {\r
-                               return;\r
-                       }\r
-\r
-                       $a->internalRedirect('admin/themes/' . $theme);\r
-               }\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               if ($a->argc > 2) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $theme = $a->argv[2];\r
-                       $theme = Strings::sanitizeFilePathItem($theme);\r
-                       if (!is_dir("view/theme/$theme")) {\r
-                               notice(L10n::t("Item not found."));\r
-                               return '';\r
-                       }\r
-\r
-                       $isEnabled = in_array($theme, Theme::getAllowedList());\r
-                       if ($isEnabled) {\r
-                               $status = "on";\r
-                               $action = L10n::t("Disable");\r
-                       } else {\r
-                               $status = "off";\r
-                               $action = L10n::t("Enable");\r
-                       }\r
-\r
-                       if (!empty($_GET['action']) && $_GET['action'] == 'toggle') {\r
-                               parent::checkFormSecurityTokenRedirectOnError('/admin/themes', 'admin_themes', 't');\r
-\r
-                               if ($isEnabled) {\r
-                                       Theme::uninstall($theme);\r
-                                       info(L10n::t('Theme %s disabled.', $theme));\r
-                               } elseif (Theme::install($theme)) {\r
-                                       info(L10n::t('Theme %s successfully enabled.', $theme));\r
-                               } else {\r
-                                       info(L10n::t('Theme %s failed to install.', $theme));\r
-                               }\r
-\r
-                               $a->internalRedirect('admin/themes/' . $theme);\r
-                       }\r
-\r
-                       $readme = null;\r
-                       if (is_file("view/theme/$theme/README.md")) {\r
-                               $readme = Markdown::convert(file_get_contents("view/theme/$theme/README.md"), false);\r
-                       } elseif (is_file("view/theme/$theme/README")) {\r
-                               $readme = "<pre>" . file_get_contents("view/theme/$theme/README") . "</pre>";\r
-                       }\r
-\r
-                       $admin_form = '';\r
-                       if (is_file("view/theme/$theme/config.php")) {\r
-                               require_once "view/theme/$theme/config.php";\r
-\r
-                               if (function_exists('theme_admin')) {\r
-                                       $admin_form = '<iframe onload="resizeIframe(this);" src="/admin/themes/' . $theme . '/embed?mode=minimal" width="100%" height="600px" frameborder="no"></iframe>';\r
-                               }\r
-                       }\r
-\r
-                       $screenshot = [Theme::getScreenshot($theme), L10n::t('Screenshot')];\r
-                       if (!stristr($screenshot[0], $theme)) {\r
-                               $screenshot = null;\r
-                       }\r
-\r
-                       $t = Renderer::getMarkupTemplate('admin/addons/details.tpl');\r
-                       return Renderer::replaceMacros($t, [\r
-                               '$title' => L10n::t('Administration'),\r
-                               '$page' => L10n::t('Themes'),\r
-                               '$toggle' => L10n::t('Toggle'),\r
-                               '$settings' => L10n::t('Settings'),\r
-                               '$baseurl' => $a->getBaseURL(true),\r
-                               '$addon' => $theme,\r
-                               '$status' => $status,\r
-                               '$action' => $action,\r
-                               '$info' => Theme::getInfo($theme),\r
-                               '$function' => 'themes',\r
-                               '$admin_form' => $admin_form,\r
-                               '$str_author' => L10n::t('Author: '),\r
-                               '$str_maintainer' => L10n::t('Maintainer: '),\r
-                               '$screenshot' => $screenshot,\r
-                               '$readme' => $readme,\r
-\r
-                               '$form_security_token' => parent::getFormSecurityToken("admin_themes"),\r
-                       ]);\r
-               }\r
-\r
-               $a->internalRedirect('admin/themes');\r
-       }\r
-}
\ No newline at end of file
+<?php
+
+namespace Friendica\Module\Admin\Themes;
+
+use Friendica\Content\Text\Markdown;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Core\Theme;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class Details extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               $a = self::getApp();
+
+               if ($a->argc > 2) {
+                       // @TODO: Replace with parameter from router
+                       $theme = $a->argv[2];
+                       $theme = Strings::sanitizeFilePathItem($theme);
+                       if (is_file("view/theme/$theme/config.php")) {
+                               require_once "view/theme/$theme/config.php";
+
+                               if (function_exists('theme_admin_post')) {
+                                       theme_admin_post($a);
+                               }
+                       }
+
+                       info(L10n::t('Theme settings updated.'));
+
+                       if ($a->isAjax()) {
+                               return;
+                       }
+
+                       $a->internalRedirect('admin/themes/' . $theme);
+               }
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               if ($a->argc > 2) {
+                       // @TODO: Replace with parameter from router
+                       $theme = $a->argv[2];
+                       $theme = Strings::sanitizeFilePathItem($theme);
+                       if (!is_dir("view/theme/$theme")) {
+                               notice(L10n::t("Item not found."));
+                               return '';
+                       }
+
+                       $isEnabled = in_array($theme, Theme::getAllowedList());
+                       if ($isEnabled) {
+                               $status = "on";
+                               $action = L10n::t("Disable");
+                       } else {
+                               $status = "off";
+                               $action = L10n::t("Enable");
+                       }
+
+                       if (!empty($_GET['action']) && $_GET['action'] == 'toggle') {
+                               parent::checkFormSecurityTokenRedirectOnError('/admin/themes', 'admin_themes', 't');
+
+                               if ($isEnabled) {
+                                       Theme::uninstall($theme);
+                                       info(L10n::t('Theme %s disabled.', $theme));
+                               } elseif (Theme::install($theme)) {
+                                       info(L10n::t('Theme %s successfully enabled.', $theme));
+                               } else {
+                                       info(L10n::t('Theme %s failed to install.', $theme));
+                               }
+
+                               $a->internalRedirect('admin/themes/' . $theme);
+                       }
+
+                       $readme = null;
+                       if (is_file("view/theme/$theme/README.md")) {
+                               $readme = Markdown::convert(file_get_contents("view/theme/$theme/README.md"), false);
+                       } elseif (is_file("view/theme/$theme/README")) {
+                               $readme = "<pre>" . file_get_contents("view/theme/$theme/README") . "</pre>";
+                       }
+
+                       $admin_form = '';
+                       if (is_file("view/theme/$theme/config.php")) {
+                               require_once "view/theme/$theme/config.php";
+
+                               if (function_exists('theme_admin')) {
+                                       $admin_form = '<iframe onload="resizeIframe(this);" src="/admin/themes/' . $theme . '/embed?mode=minimal" width="100%" height="600px" frameborder="no"></iframe>';
+                               }
+                       }
+
+                       $screenshot = [Theme::getScreenshot($theme), L10n::t('Screenshot')];
+                       if (!stristr($screenshot[0], $theme)) {
+                               $screenshot = null;
+                       }
+
+                       $t = Renderer::getMarkupTemplate('admin/addons/details.tpl');
+                       return Renderer::replaceMacros($t, [
+                               '$title' => L10n::t('Administration'),
+                               '$page' => L10n::t('Themes'),
+                               '$toggle' => L10n::t('Toggle'),
+                               '$settings' => L10n::t('Settings'),
+                               '$baseurl' => $a->getBaseURL(true),
+                               '$addon' => $theme,
+                               '$status' => $status,
+                               '$action' => $action,
+                               '$info' => Theme::getInfo($theme),
+                               '$function' => 'themes',
+                               '$admin_form' => $admin_form,
+                               '$str_author' => L10n::t('Author: '),
+                               '$str_maintainer' => L10n::t('Maintainer: '),
+                               '$screenshot' => $screenshot,
+                               '$readme' => $readme,
+
+                               '$form_security_token' => parent::getFormSecurityToken("admin_themes"),
+                       ]);
+               }
+
+               $a->internalRedirect('admin/themes');
+       }
+}
index 4ca2a4e7ad71433e72f829d9086a6a93a2f46ecf..dc41d11a485a3c802f5fb25ec5b1af34aaafc950 100644 (file)
@@ -1,90 +1,90 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin\Themes;\r
-\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-\r
-class Embed extends BaseAdminModule\r
-{\r
-       public static function init()\r
-       {\r
-               $a = self::getApp();\r
-\r
-               if ($a->argc > 2) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $theme = $a->argv[2];\r
-                       $theme = Strings::sanitizeFilePathItem($theme);\r
-                       if (is_file("view/theme/$theme/config.php")) {\r
-                               $a->setCurrentTheme($theme);\r
-                       }\r
-               }\r
-       }\r
-\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               $a = self::getApp();\r
-\r
-               if ($a->argc > 2) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $theme = $a->argv[2];\r
-                       $theme = Strings::sanitizeFilePathItem($theme);\r
-                       if (is_file("view/theme/$theme/config.php")) {\r
-                               self::checkFormSecurityTokenRedirectOnError('/admin/themes/' . $theme . '/embed?mode=minimal', 'admin_theme_settings');\r
-\r
-                               require_once "view/theme/$theme/config.php";\r
-\r
-                               if (function_exists('theme_admin_post')) {\r
-                                       theme_admin_post($a);\r
-                               }\r
-                       }\r
-\r
-                       info(L10n::t('Theme settings updated.'));\r
-\r
-                       if ($a->isAjax()) {\r
-                               return;\r
-                       }\r
-\r
-                       $a->internalRedirect('admin/themes/' . $theme . '/embed?mode=minimal');\r
-               }\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               if ($a->argc > 2) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $theme = $a->argv[2];\r
-                       $theme = Strings::sanitizeFilePathItem($theme);\r
-                       if (!is_dir("view/theme/$theme")) {\r
-                               notice(L10n::t('Unknown theme.'));\r
-                               return '';\r
-                       }\r
-\r
-                       $admin_form = '';\r
-                       if (is_file("view/theme/$theme/config.php")) {\r
-                               require_once "view/theme/$theme/config.php";\r
-\r
-                               if (function_exists('theme_admin')) {\r
-                                       $admin_form = theme_admin($a);\r
-                               }\r
-                       }\r
-\r
-                       $t = Renderer::getMarkupTemplate('admin/addons/embed.tpl');\r
-                       return Renderer::replaceMacros($t, [\r
-                               '$action' => '/admin/themes/' . $theme . '/embed?mode=minimal',\r
-                               '$form' => $admin_form,\r
-                               '$form_security_token' => parent::getFormSecurityToken("admin_theme_settings"),\r
-                       ]);\r
-               }\r
-\r
-               return '';\r
-       }\r
-}
\ No newline at end of file
+<?php
+
+namespace Friendica\Module\Admin\Themes;
+
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class Embed extends BaseAdminModule
+{
+       public static function init()
+       {
+               $a = self::getApp();
+
+               if ($a->argc > 2) {
+                       // @TODO: Replace with parameter from router
+                       $theme = $a->argv[2];
+                       $theme = Strings::sanitizeFilePathItem($theme);
+                       if (is_file("view/theme/$theme/config.php")) {
+                               $a->setCurrentTheme($theme);
+                       }
+               }
+       }
+
+       public static function post()
+       {
+               parent::post();
+
+               $a = self::getApp();
+
+               if ($a->argc > 2) {
+                       // @TODO: Replace with parameter from router
+                       $theme = $a->argv[2];
+                       $theme = Strings::sanitizeFilePathItem($theme);
+                       if (is_file("view/theme/$theme/config.php")) {
+                               self::checkFormSecurityTokenRedirectOnError('/admin/themes/' . $theme . '/embed?mode=minimal', 'admin_theme_settings');
+
+                               require_once "view/theme/$theme/config.php";
+
+                               if (function_exists('theme_admin_post')) {
+                                       theme_admin_post($a);
+                               }
+                       }
+
+                       info(L10n::t('Theme settings updated.'));
+
+                       if ($a->isAjax()) {
+                               return;
+                       }
+
+                       $a->internalRedirect('admin/themes/' . $theme . '/embed?mode=minimal');
+               }
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               if ($a->argc > 2) {
+                       // @TODO: Replace with parameter from router
+                       $theme = $a->argv[2];
+                       $theme = Strings::sanitizeFilePathItem($theme);
+                       if (!is_dir("view/theme/$theme")) {
+                               notice(L10n::t('Unknown theme.'));
+                               return '';
+                       }
+
+                       $admin_form = '';
+                       if (is_file("view/theme/$theme/config.php")) {
+                               require_once "view/theme/$theme/config.php";
+
+                               if (function_exists('theme_admin')) {
+                                       $admin_form = theme_admin($a);
+                               }
+                       }
+
+                       $t = Renderer::getMarkupTemplate('admin/addons/embed.tpl');
+                       return Renderer::replaceMacros($t, [
+                               '$action' => '/admin/themes/' . $theme . '/embed?mode=minimal',
+                               '$form' => $admin_form,
+                               '$form_security_token' => parent::getFormSecurityToken("admin_theme_settings"),
+                       ]);
+               }
+
+               return '';
+       }
+}
index 62c775bf04251cd2319949a94032bd6ae6fe4fb5..71a91919bd26e389b07ac27cce7aae17f5bcd59b 100644 (file)
-<?php\r
-\r
-namespace Friendica\Module\Admin\Themes;\r
-\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Core\Theme;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-\r
-class Index extends BaseAdminModule\r
-{\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               $allowed_themes = Theme::getAllowedList();\r
-\r
-               // reload active themes\r
-               if (!empty($_GET['action'])) {\r
-                       parent::checkFormSecurityTokenRedirectOnError($a->getBaseURL() . '/admin/themes', 'admin_themes', 't');\r
-\r
-                       switch ($_GET['action']) {\r
-                               case 'reload':\r
-                                       foreach ($allowed_themes as $theme) {\r
-                                               Theme::uninstall($theme['name']);\r
-                                               Theme::install($theme['name']);\r
-                                       }\r
-\r
-                                       info('Themes reloaded');\r
-                                       break;\r
-\r
-                               case 'toggle' :\r
-                                       $theme = defaults($_GET, 'addon', '');\r
-                                       if ($theme) {\r
-                                               $theme = Strings::sanitizeFilePathItem($theme);\r
-                                               if (!is_dir("view/theme/$theme")) {\r
-                                                       notice(L10n::t('Item not found.'));\r
-                                                       return '';\r
-                                               }\r
-\r
-                                               if (in_array($theme, Theme::getAllowedList())) {\r
-                                                       Theme::uninstall($theme);\r
-                                                       info(L10n::t('Theme %s disabled.', $theme));\r
-                                               } elseif (Theme::install($theme)) {\r
-                                                       info(L10n::t('Theme %s successfully enabled.', $theme));\r
-                                               } else {\r
-                                                       info(L10n::t('Theme %s failed to install.', $theme));\r
-                                               }\r
-                                       }\r
-\r
-                                       break;\r
-\r
-                       }\r
-\r
-                       $a->internalRedirect('admin/themes');\r
-               }\r
-\r
-               $themes = [];\r
-               $files = glob('view/theme/*');\r
-               if (is_array($files)) {\r
-                       foreach ($files as $file) {\r
-                               $theme = basename($file);\r
-\r
-                               // Is there a style file?\r
-                               $theme_files = glob('view/theme/' . $theme . '/style.*');\r
-\r
-                               // If not then quit\r
-                               if (count($theme_files) == 0) {\r
-                                       continue;\r
-                               }\r
-\r
-                               $is_experimental = intval(file_exists($file . '/experimental'));\r
-                               $is_supported = 1 - (intval(file_exists($file . '/unsupported')));\r
-                               $is_allowed = intval(in_array($theme, $allowed_themes));\r
-\r
-                               if ($is_allowed || $is_supported || Config::get('system', 'show_unsupported_themes')) {\r
-                                       $themes[] = ['name' => $theme, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed];\r
-                               }\r
-                       }\r
-               }\r
-\r
-               $addons = [];\r
-               foreach ($themes as $theme) {\r
-                       $addons[] = [$theme['name'], (($theme['allowed']) ? 'on' : 'off'), Theme::getInfo($theme['name'])];\r
-               }\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/addons/index.tpl');\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title'               => L10n::t('Administration'),\r
-                       '$page'                => L10n::t('Themes'),\r
-                       '$submit'              => L10n::t('Save Settings'),\r
-                       '$reload'              => L10n::t('Reload active themes'),\r
-                       '$baseurl'             => $a->getBaseURL(true),\r
-                       '$function'            => 'themes',\r
-                       '$addons'              => $addons,\r
-                       '$pcount'              => count($themes),\r
-                       '$noplugshint'         => L10n::t('No themes found on the system. They should be placed in %1$s', '<code>/view/themes</code>'),\r
-                       '$experimental'        => L10n::t('[Experimental]'),\r
-                       '$unsupported'         => L10n::t('[Unsupported]'),\r
-                       '$form_security_token' => parent::getFormSecurityToken('admin_themes'),\r
-               ]);\r
-       }\r
-}
\ No newline at end of file
+<?php
+
+namespace Friendica\Module\Admin\Themes;
+
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Core\Theme;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class Index extends BaseAdminModule
+{
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               $allowed_themes = Theme::getAllowedList();
+
+               // reload active themes
+               if (!empty($_GET['action'])) {
+                       parent::checkFormSecurityTokenRedirectOnError($a->getBaseURL() . '/admin/themes', 'admin_themes', 't');
+
+                       switch ($_GET['action']) {
+                               case 'reload':
+                                       foreach ($allowed_themes as $theme) {
+                                               Theme::uninstall($theme['name']);
+                                               Theme::install($theme['name']);
+                                       }
+
+                                       info('Themes reloaded');
+                                       break;
+
+                               case 'toggle' :
+                                       $theme = defaults($_GET, 'addon', '');
+                                       if ($theme) {
+                                               $theme = Strings::sanitizeFilePathItem($theme);
+                                               if (!is_dir("view/theme/$theme")) {
+                                                       notice(L10n::t('Item not found.'));
+                                                       return '';
+                                               }
+
+                                               if (in_array($theme, Theme::getAllowedList())) {
+                                                       Theme::uninstall($theme);
+                                                       info(L10n::t('Theme %s disabled.', $theme));
+                                               } elseif (Theme::install($theme)) {
+                                                       info(L10n::t('Theme %s successfully enabled.', $theme));
+                                               } else {
+                                                       info(L10n::t('Theme %s failed to install.', $theme));
+                                               }
+                                       }
+
+                                       break;
+
+                       }
+
+                       $a->internalRedirect('admin/themes');
+               }
+
+               $themes = [];
+               $files = glob('view/theme/*');
+               if (is_array($files)) {
+                       foreach ($files as $file) {
+                               $theme = basename($file);
+
+                               // Is there a style file?
+                               $theme_files = glob('view/theme/' . $theme . '/style.*');
+
+                               // If not then quit
+                               if (count($theme_files) == 0) {
+                                       continue;
+                               }
+
+                               $is_experimental = intval(file_exists($file . '/experimental'));
+                               $is_supported = 1 - (intval(file_exists($file . '/unsupported')));
+                               $is_allowed = intval(in_array($theme, $allowed_themes));
+
+                               if ($is_allowed || $is_supported || Config::get('system', 'show_unsupported_themes')) {
+                                       $themes[] = ['name' => $theme, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed];
+                               }
+                       }
+               }
+
+               $addons = [];
+               foreach ($themes as $theme) {
+                       $addons[] = [$theme['name'], (($theme['allowed']) ? 'on' : 'off'), Theme::getInfo($theme['name'])];
+               }
+
+               $t = Renderer::getMarkupTemplate('admin/addons/index.tpl');
+               return Renderer::replaceMacros($t, [
+                       '$title'               => L10n::t('Administration'),
+                       '$page'                => L10n::t('Themes'),
+                       '$submit'              => L10n::t('Save Settings'),
+                       '$reload'              => L10n::t('Reload active themes'),
+                       '$baseurl'             => $a->getBaseURL(true),
+                       '$function'            => 'themes',
+                       '$addons'              => $addons,
+                       '$pcount'              => count($themes),
+                       '$noplugshint'         => L10n::t('No themes found on the system. They should be placed in %1$s', '<code>/view/themes</code>'),
+                       '$experimental'        => L10n::t('[Experimental]'),
+                       '$unsupported'         => L10n::t('[Unsupported]'),
+                       '$form_security_token' => parent::getFormSecurityToken('admin_themes'),
+               ]);
+       }
+}
index efab22f8ef0ef37521d3a86cb40245803b0105d8..4eb6e3426c477358567d034f87dbf2667709e5b4 100644 (file)
@@ -1,53 +1,53 @@
-<?php\r
-\r
-namespace Friendica\Module\Admin;\r
-\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Module\BaseAdminModule;\r
-\r
-class Tos extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               parent::checkFormSecurityTokenRedirectOnError('/admin/tos', 'admin_tos');\r
-\r
-               if (empty($_POST['page_tos'])) {\r
-                       return;\r
-               }\r
-\r
-               $displaytos = !empty($_POST['displaytos']);\r
-               $displayprivstatement = !empty($_POST['displayprivstatement']);\r
-               $tostext = (!empty($_POST['tostext']) ? strip_tags(trim($_POST['tostext'])) : '');\r
-\r
-               Config::set('system', 'tosdisplay', $displaytos);\r
-               Config::set('system', 'tosprivstatement', $displayprivstatement);\r
-               Config::set('system', 'tostext', $tostext);\r
-\r
-               info(L10n::t('The Terms of Service settings have been updated.'));\r
-\r
-               self::getApp()->internalRedirect('admin/tos');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $tos = new \Friendica\Module\Tos();\r
-               $t = Renderer::getMarkupTemplate('admin/tos.tpl');\r
-               return Renderer::replaceMacros($t, [\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('Terms of Service'),\r
-                       '$displaytos' => ['displaytos', L10n::t('Display Terms of Service'), Config::get('system', 'tosdisplay'), L10n::t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')],\r
-                       '$displayprivstatement' => ['displayprivstatement', L10n::t('Display Privacy Statement'), Config::get('system', 'tosprivstatement'), L10n::t('Show some informations regarding the needed information to operate the node according e.g. to <a href="%s" target="_blank">EU-GDPR</a>.', 'https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')],\r
-                       '$preview' => L10n::t('Privacy Statement Preview'),\r
-                       '$privtext' => $tos->privacy_complete,\r
-                       '$tostext' => ['tostext', L10n::t('The Terms of Service'), Config::get('system', 'tostext'), L10n::t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')],\r
-                       '$form_security_token' => parent::getFormSecurityToken('admin_tos'),\r
-                       '$submit' => L10n::t('Save Settings'),\r
-               ]);\r
-       }\r
-}
\ No newline at end of file
+<?php
+
+namespace Friendica\Module\Admin;
+
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Module\BaseAdminModule;
+
+class Tos extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               parent::checkFormSecurityTokenRedirectOnError('/admin/tos', 'admin_tos');
+
+               if (empty($_POST['page_tos'])) {
+                       return;
+               }
+
+               $displaytos = !empty($_POST['displaytos']);
+               $displayprivstatement = !empty($_POST['displayprivstatement']);
+               $tostext = (!empty($_POST['tostext']) ? strip_tags(trim($_POST['tostext'])) : '');
+
+               Config::set('system', 'tosdisplay', $displaytos);
+               Config::set('system', 'tosprivstatement', $displayprivstatement);
+               Config::set('system', 'tostext', $tostext);
+
+               info(L10n::t('The Terms of Service settings have been updated.'));
+
+               self::getApp()->internalRedirect('admin/tos');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $tos = new \Friendica\Module\Tos();
+               $t = Renderer::getMarkupTemplate('admin/tos.tpl');
+               return Renderer::replaceMacros($t, [
+                       '$title' => L10n::t('Administration'),
+                       '$page' => L10n::t('Terms of Service'),
+                       '$displaytos' => ['displaytos', L10n::t('Display Terms of Service'), Config::get('system', 'tosdisplay'), L10n::t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')],
+                       '$displayprivstatement' => ['displayprivstatement', L10n::t('Display Privacy Statement'), Config::get('system', 'tosprivstatement'), L10n::t('Show some informations regarding the needed information to operate the node according e.g. to <a href="%s" target="_blank">EU-GDPR</a>.', 'https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')],
+                       '$preview' => L10n::t('Privacy Statement Preview'),
+                       '$privtext' => $tos->privacy_complete,
+                       '$tostext' => ['tostext', L10n::t('The Terms of Service'), Config::get('system', 'tostext'), L10n::t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')],
+                       '$form_security_token' => parent::getFormSecurityToken('admin_tos'),
+                       '$submit' => L10n::t('Save Settings'),
+               ]);
+       }
+}
index 4d25f4f8937cbf9c472ec1ac8ea600b2bab3316a..d9852e98d0488fbc9159cfb79761234981aef799 100644 (file)
-<?php\r
-\r
-namespace Friendica\Module\Admin;\r
-\r
-use Friendica\Content\Pager;\r
-use Friendica\Core\Config;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Database\DBA;\r
-use Friendica\Model\Register;\r
-use Friendica\Model\User;\r
-use Friendica\Module\BaseAdminModule;\r
-use Friendica\Util\Strings;\r
-use Friendica\Util\Temporal;\r
-\r
-class Users extends BaseAdminModule\r
-{\r
-       public static function post()\r
-       {\r
-               parent::post();\r
-\r
-               $a = self::getApp();\r
-\r
-               $pending     = defaults($_POST, 'pending'          , []);\r
-               $users       = defaults($_POST, 'user'             , []);\r
-               $nu_name     = defaults($_POST, 'new_user_name'    , '');\r
-               $nu_nickname = defaults($_POST, 'new_user_nickname', '');\r
-               $nu_email    = defaults($_POST, 'new_user_email'   , '');\r
-               $nu_language = Config::get('system', 'language');\r
-\r
-               parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users');\r
-\r
-               if ($nu_name !== '' && $nu_email !== '' && $nu_nickname !== '') {\r
-                       try {\r
-                               $result = User::create([\r
-                                       'username' => $nu_name,\r
-                                       'email' => $nu_email,\r
-                                       'nickname' => $nu_nickname,\r
-                                       'verified' => 1,\r
-                                       'language' => $nu_language\r
-                               ]);\r
-                       } catch (\Exception $ex) {\r
-                               notice($ex->getMessage());\r
-                               return;\r
-                       }\r
-\r
-                       $user = $result['user'];\r
-                       $preamble = Strings::deindent(L10n::t('\r
-                       Dear %1$s,\r
-                               the administrator of %2$s has set up an account for you.'));\r
-                       $body = Strings::deindent(L10n::t('\r
-                       The login details are as follows:\r
-\r
-                       Site Location:  %1$s\r
-                       Login Name:             %2$s\r
-                       Password:               %3$s\r
-\r
-                       You may change your password from your account "Settings" page after logging\r
-                       in.\r
-\r
-                       Please take a few moments to review the other account settings on that page.\r
-\r
-                       You may also wish to add some basic information to your default profile\r
-                       (on the "Profiles" page) so that other people can easily find you.\r
-\r
-                       We recommend setting your full name, adding a profile photo,\r
-                       adding some profile "keywords" (very useful in making new friends) - and\r
-                       perhaps what country you live in; if you do not wish to be more specific\r
-                       than that.\r
-\r
-                       We fully respect your right to privacy, and none of these items are necessary.\r
-                       If you are new and do not know anybody here, they may help\r
-                       you to make some new and interesting friends.\r
-\r
-                       If you ever want to delete your account, you can do so at %1$s/removeme\r
-\r
-                       Thank you and welcome to %4$s.'));\r
-\r
-                       $preamble = sprintf($preamble, $user['username'], Config::get('config', 'sitename'));\r
-                       $body = sprintf($body, $a->getBaseURL(), $user['nickname'], $result['password'], Config::get('config', 'sitename'));\r
-\r
-                       notification([\r
-                               'type'     => SYSTEM_EMAIL,\r
-                               'language' => $user['language'],\r
-                               'to_name'  => $user['username'],\r
-                               'to_email' => $user['email'],\r
-                               'uid'      => $user['uid'],\r
-                               'subject'  => L10n::t('Registration details for %s', Config::get('config', 'sitename')),\r
-                               'preamble' => $preamble,\r
-                               'body'     => $body]);\r
-               }\r
-\r
-               if (!empty($_POST['page_users_block'])) {\r
-                       DBA::update('user', ['blocked' => 1], ['uid' => $users]);\r
-                       notice(L10n::tt('%s user blocked', '%s users blocked', count($users)));\r
-               }\r
-\r
-               if (!empty($_POST['page_users_unblock'])) {\r
-                       DBA::update('user', ['blocked' => 0], ['uid' => $users]);\r
-                       notice(L10n::tt('%s user unblocked', '%s users unblocked', count($users)));\r
-               }\r
-\r
-               if (!empty($_POST['page_users_delete'])) {\r
-                       foreach ($users as $uid) {\r
-                               if (local_user() != $uid) {\r
-                                       User::remove($uid);\r
-                               } else {\r
-                                       notice(L10n::t('You can\'t remove yourself'));\r
-                               }\r
-                       }\r
-\r
-                       notice(L10n::tt('%s user deleted', '%s users deleted', count($users)));\r
-               }\r
-\r
-               if (!empty($_POST['page_users_approve'])) {\r
-                       require_once 'mod/regmod.php';\r
-                       foreach ($pending as $hash) {\r
-                               user_allow($hash);\r
-                       }\r
-               }\r
-\r
-               if (!empty($_POST['page_users_deny'])) {\r
-                       require_once 'mod/regmod.php';\r
-                       foreach ($pending as $hash) {\r
-                               user_deny($hash);\r
-                       }\r
-               }\r
-\r
-               $a->internalRedirect('admin/users');\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               parent::content();\r
-\r
-               $a = self::getApp();\r
-\r
-               if ($a->argc > 3) {\r
-                       // @TODO: Replace with parameter from router\r
-                       $action = $a->argv[2];\r
-                       $uid = $a->argv[3];\r
-                       $user = DBA::selectFirst('user', ['username', 'blocked'], ['uid' => $uid]);\r
-                       if (!DBA::isResult($user)) {\r
-                               notice('User not found' . EOL);\r
-                               $a->internalRedirect('admin/users');\r
-                               return ''; // NOTREACHED\r
-                       }\r
-\r
-                       switch ($action) {\r
-                               case 'delete':\r
-                                       if (local_user() != $uid) {\r
-                                               parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');\r
-                                               // delete user\r
-                                               User::remove($uid);\r
-\r
-                                               notice(L10n::t('User "%s" deleted', $user['username']));\r
-                                       } else {\r
-                                               notice(L10n::t('You can\'t remove yourself'));\r
-                                       }\r
-                                       break;\r
-                               case 'block':\r
-                                       parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');\r
-                                       DBA::update('user', ['blocked' => 1], ['uid' => $uid]);\r
-                                       notice(L10n::t('User "%s" blocked', $user['username']));\r
-                                       break;\r
-                               case 'unblock':\r
-                                       parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');\r
-                                       DBA::update('user', ['blocked' => 0], ['uid' => $uid]);\r
-                                       notice(L10n::t('User "%s" unblocked', $user['username']));\r
-                                       break;\r
-                       }\r
-\r
-                       $a->internalRedirect('admin/users');\r
-               }\r
-\r
-               /* get pending */\r
-               $pending = Register::getPending();\r
-\r
-               $pager = new Pager($a->query_string, 100);\r
-\r
-               /* ordering */\r
-               $valid_orders = [\r
-                       'contact.name',\r
-                       'user.email',\r
-                       'user.register_date',\r
-                       'user.login_date',\r
-                       'lastitem_date',\r
-                       'user.page-flags'\r
-               ];\r
-\r
-               $order = 'contact.name';\r
-               $order_direction = '+';\r
-               if (!empty($_GET['o'])) {\r
-                       $new_order = $_GET['o'];\r
-                       if ($new_order[0] === '-') {\r
-                               $order_direction = '-';\r
-                               $new_order = substr($new_order, 1);\r
-                       }\r
-\r
-                       if (in_array($new_order, $valid_orders)) {\r
-                               $order = $new_order;\r
-                       }\r
-               }\r
-               $sql_order = '`' . str_replace('.', '`.`', $order) . '`';\r
-               $sql_order_direction = ($order_direction === '+') ? 'ASC' : 'DESC';\r
-\r
-               $usersStmt = DBA::p("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date`\r
-                               FROM `user`\r
-                               INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`\r
-                               WHERE `user`.`verified`\r
-                               ORDER BY $sql_order $sql_order_direction LIMIT ?, ?", $pager->getStart(), $pager->getItemsPerPage()\r
-               );\r
-               $users = DBA::toArray($usersStmt);\r
-\r
-               $adminlist = explode(',', str_replace(' ', '', Config::get('config', 'admin_email')));\r
-               $_setup_users = function ($e) use ($adminlist) {\r
-                       $page_types = [\r
-                               User::PAGE_FLAGS_NORMAL    => L10n::t('Normal Account Page'),\r
-                               User::PAGE_FLAGS_SOAPBOX   => L10n::t('Soapbox Page'),\r
-                               User::PAGE_FLAGS_COMMUNITY => L10n::t('Public Forum'),\r
-                               User::PAGE_FLAGS_FREELOVE  => L10n::t('Automatic Friend Page'),\r
-                               User::PAGE_FLAGS_PRVGROUP  => L10n::t('Private Forum')\r
-                       ];\r
-                       $account_types = [\r
-                               User::ACCOUNT_TYPE_PERSON       => L10n::t('Personal Page'),\r
-                               User::ACCOUNT_TYPE_ORGANISATION => L10n::t('Organisation Page'),\r
-                               User::ACCOUNT_TYPE_NEWS         => L10n::t('News Page'),\r
-                               User::ACCOUNT_TYPE_COMMUNITY    => L10n::t('Community Forum'),\r
-                               User::ACCOUNT_TYPE_RELAY        => L10n::t('Relay'),\r
-                       ];\r
-\r
-                       $e['page_flags_raw'] = $e['page-flags'];\r
-                       $e['page-flags'] = $page_types[$e['page-flags']];\r
-\r
-                       $e['account_type_raw'] = ($e['page_flags_raw'] == 0) ? $e['account-type'] : -1;\r
-                       $e['account-type'] = ($e['page_flags_raw'] == 0) ? $account_types[$e['account-type']] : '';\r
-\r
-                       $e['register_date'] = Temporal::getRelativeDate($e['register_date']);\r
-                       $e['login_date'] = Temporal::getRelativeDate($e['login_date']);\r
-                       $e['lastitem_date'] = Temporal::getRelativeDate($e['lastitem_date']);\r
-                       $e['is_admin'] = in_array($e['email'], $adminlist);\r
-                       $e['is_deletable'] = (intval($e['uid']) != local_user());\r
-                       $e['deleted'] = ($e['account_removed'] ? Temporal::getRelativeDate($e['account_expires_on']) : False);\r
-\r
-                       return $e;\r
-               };\r
-\r
-               $tmp_users = array_map($_setup_users, $users);\r
-\r
-               // Get rid of dashes in key names, Smarty3 can't handle them\r
-               // and extracting deleted users\r
-\r
-               $deleted = [];\r
-               $users = [];\r
-               foreach ($tmp_users as $user) {\r
-                       foreach ($user as $k => $v) {\r
-                               $newkey = str_replace('-', '_', $k);\r
-                               $user[$newkey] = $v;\r
-                       }\r
-\r
-                       if ($user['deleted']) {\r
-                               $deleted[] = $user;\r
-                       } else {\r
-                               $users[] = $user;\r
-                       }\r
-               }\r
-\r
-               $th_users = array_map(null, [L10n::t('Name'), L10n::t('Email'), L10n::t('Register date'), L10n::t('Last login'), L10n::t('Last item'), L10n::t('Type')], $valid_orders);\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/users.tpl');\r
-               $o = Renderer::replaceMacros($t, [\r
-                       // strings //\r
-                       '$title' => L10n::t('Administration'),\r
-                       '$page' => L10n::t('Users'),\r
-                       '$submit' => L10n::t('Add User'),\r
-                       '$select_all' => L10n::t('select all'),\r
-                       '$h_pending' => L10n::t('User registrations waiting for confirm'),\r
-                       '$h_deleted' => L10n::t('User waiting for permanent deletion'),\r
-                       '$th_pending' => [L10n::t('Request date'), L10n::t('Name'), L10n::t('Email')],\r
-                       '$no_pending' => L10n::t('No registrations.'),\r
-                       '$pendingnotetext' => L10n::t('Note from the user'),\r
-                       '$approve' => L10n::t('Approve'),\r
-                       '$deny' => L10n::t('Deny'),\r
-                       '$delete' => L10n::t('Delete'),\r
-                       '$block' => L10n::t('Block'),\r
-                       '$blocked' => L10n::t('User blocked'),\r
-                       '$unblock' => L10n::t('Unblock'),\r
-                       '$siteadmin' => L10n::t('Site admin'),\r
-                       '$accountexpired' => L10n::t('Account expired'),\r
-\r
-                       '$h_users' => L10n::t('Users'),\r
-                       '$h_newuser' => L10n::t('New User'),\r
-                       '$th_deleted' => [L10n::t('Name'), L10n::t('Email'), L10n::t('Register date'), L10n::t('Last login'), L10n::t('Last item'), L10n::t('Permanent deletion')],\r
-                       '$th_users' => $th_users,\r
-                       '$order_users' => $order,\r
-                       '$order_direction_users' => $order_direction,\r
-\r
-                       '$confirm_delete_multi' => L10n::t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),\r
-                       '$confirm_delete' => L10n::t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),\r
-\r
-                       '$form_security_token' => parent::getFormSecurityToken('admin_users'),\r
-\r
-                       // values //\r
-                       '$baseurl' => $a->getBaseURL(true),\r
-\r
-                       '$pending' => $pending,\r
-                       'deleted' => $deleted,\r
-                       '$users' => $users,\r
-                       '$newusername' => ['new_user_name', L10n::t('Name'), '', L10n::t('Name of the new user.')],\r
-                       '$newusernickname' => ['new_user_nickname', L10n::t('Nickname'), '', L10n::t('Nickname of the new user.')],\r
-                       '$newuseremail' => ['new_user_email', L10n::t('Email'), '', L10n::t('Email address of the new user.'), '', '', 'email'],\r
-               ]);\r
-\r
-               $o .= $pager->renderFull(DBA::count('user'));\r
-\r
-               return $o;\r
-       }\r
-}
\ No newline at end of file
+<?php
+
+namespace Friendica\Module\Admin;
+
+use Friendica\Content\Pager;
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Database\DBA;
+use Friendica\Model\Register;
+use Friendica\Model\User;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+use Friendica\Util\Temporal;
+
+class Users extends BaseAdminModule
+{
+       public static function post()
+       {
+               parent::post();
+
+               $a = self::getApp();
+
+               $pending     = defaults($_POST, 'pending'          , []);
+               $users       = defaults($_POST, 'user'             , []);
+               $nu_name     = defaults($_POST, 'new_user_name'    , '');
+               $nu_nickname = defaults($_POST, 'new_user_nickname', '');
+               $nu_email    = defaults($_POST, 'new_user_email'   , '');
+               $nu_language = Config::get('system', 'language');
+
+               parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users');
+
+               if ($nu_name !== '' && $nu_email !== '' && $nu_nickname !== '') {
+                       try {
+                               $result = User::create([
+                                       'username' => $nu_name,
+                                       'email' => $nu_email,
+                                       'nickname' => $nu_nickname,
+                                       'verified' => 1,
+                                       'language' => $nu_language
+                               ]);
+                       } catch (\Exception $ex) {
+                               notice($ex->getMessage());
+                               return;
+                       }
+
+                       $user = $result['user'];
+                       $preamble = Strings::deindent(L10n::t('
+                       Dear %1$s,
+                               the administrator of %2$s has set up an account for you.'));
+                       $body = Strings::deindent(L10n::t('
+                       The login details are as follows:
+
+                       Site Location:  %1$s
+                       Login Name:             %2$s
+                       Password:               %3$s
+
+                       You may change your password from your account "Settings" page after logging
+                       in.
+
+                       Please take a few moments to review the other account settings on that page.
+
+                       You may also wish to add some basic information to your default profile
+                       (on the "Profiles" page) so that other people can easily find you.
+
+                       We recommend setting your full name, adding a profile photo,
+                       adding some profile "keywords" (very useful in making new friends) - and
+                       perhaps what country you live in; if you do not wish to be more specific
+                       than that.
+
+                       We fully respect your right to privacy, and none of these items are necessary.
+                       If you are new and do not know anybody here, they may help
+                       you to make some new and interesting friends.
+
+                       If you ever want to delete your account, you can do so at %1$s/removeme
+
+                       Thank you and welcome to %4$s.'));
+
+                       $preamble = sprintf($preamble, $user['username'], Config::get('config', 'sitename'));
+                       $body = sprintf($body, $a->getBaseURL(), $user['nickname'], $result['password'], Config::get('config', 'sitename'));
+
+                       notification([
+                               'type'     => SYSTEM_EMAIL,
+                               'language' => $user['language'],
+                               'to_name'  => $user['username'],
+                               'to_email' => $user['email'],
+                               'uid'      => $user['uid'],
+                               'subject'  => L10n::t('Registration details for %s', Config::get('config', 'sitename')),
+                               'preamble' => $preamble,
+                               'body'     => $body]);
+               }
+
+               if (!empty($_POST['page_users_block'])) {
+                       DBA::update('user', ['blocked' => 1], ['uid' => $users]);
+                       notice(L10n::tt('%s user blocked', '%s users blocked', count($users)));
+               }
+
+               if (!empty($_POST['page_users_unblock'])) {
+                       DBA::update('user', ['blocked' => 0], ['uid' => $users]);
+                       notice(L10n::tt('%s user unblocked', '%s users unblocked', count($users)));
+               }
+
+               if (!empty($_POST['page_users_delete'])) {
+                       foreach ($users as $uid) {
+                               if (local_user() != $uid) {
+                                       User::remove($uid);
+                               } else {
+                                       notice(L10n::t('You can\'t remove yourself'));
+                               }
+                       }
+
+                       notice(L10n::tt('%s user deleted', '%s users deleted', count($users)));
+               }
+
+               if (!empty($_POST['page_users_approve'])) {
+                       require_once 'mod/regmod.php';
+                       foreach ($pending as $hash) {
+                               user_allow($hash);
+                       }
+               }
+
+               if (!empty($_POST['page_users_deny'])) {
+                       require_once 'mod/regmod.php';
+                       foreach ($pending as $hash) {
+                               user_deny($hash);
+                       }
+               }
+
+               $a->internalRedirect('admin/users');
+       }
+
+       public static function content()
+       {
+               parent::content();
+
+               $a = self::getApp();
+
+               if ($a->argc > 3) {
+                       // @TODO: Replace with parameter from router
+                       $action = $a->argv[2];
+                       $uid = $a->argv[3];
+                       $user = DBA::selectFirst('user', ['username', 'blocked'], ['uid' => $uid]);
+                       if (!DBA::isResult($user)) {
+                               notice('User not found' . EOL);
+                               $a->internalRedirect('admin/users');
+                               return ''; // NOTREACHED
+                       }
+
+                       switch ($action) {
+                               case 'delete':
+                                       if (local_user() != $uid) {
+                                               parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
+                                               // delete user
+                                               User::remove($uid);
+
+                                               notice(L10n::t('User "%s" deleted', $user['username']));
+                                       } else {
+                                               notice(L10n::t('You can\'t remove yourself'));
+                                       }
+                                       break;
+                               case 'block':
+                                       parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
+                                       DBA::update('user', ['blocked' => 1], ['uid' => $uid]);
+                                       notice(L10n::t('User "%s" blocked', $user['username']));
+                                       break;
+                               case 'unblock':
+                                       parent::checkFormSecurityTokenRedirectOnError('/admin/users', 'admin_users', 't');
+                                       DBA::update('user', ['blocked' => 0], ['uid' => $uid]);
+                                       notice(L10n::t('User "%s" unblocked', $user['username']));
+                                       break;
+                       }
+
+                       $a->internalRedirect('admin/users');
+               }
+
+               /* get pending */
+               $pending = Register::getPending();
+
+               $pager = new Pager($a->query_string, 100);
+
+               /* ordering */
+               $valid_orders = [
+                       'contact.name',
+                       'user.email',
+                       'user.register_date',
+                       'user.login_date',
+                       'lastitem_date',
+                       'user.page-flags'
+               ];
+
+               $order = 'contact.name';
+               $order_direction = '+';
+               if (!empty($_GET['o'])) {
+                       $new_order = $_GET['o'];
+                       if ($new_order[0] === '-') {
+                               $order_direction = '-';
+                               $new_order = substr($new_order, 1);
+                       }
+
+                       if (in_array($new_order, $valid_orders)) {
+                               $order = $new_order;
+                       }
+               }
+               $sql_order = '`' . str_replace('.', '`.`', $order) . '`';
+               $sql_order_direction = ($order_direction === '+') ? 'ASC' : 'DESC';
+
+               $usersStmt = DBA::p("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date`
+                               FROM `user`
+                               INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
+                               WHERE `user`.`verified`
+                               ORDER BY $sql_order $sql_order_direction LIMIT ?, ?", $pager->getStart(), $pager->getItemsPerPage()
+               );
+               $users = DBA::toArray($usersStmt);
+
+               $adminlist = explode(',', str_replace(' ', '', Config::get('config', 'admin_email')));
+               $_setup_users = function ($e) use ($adminlist) {
+                       $page_types = [
+                               User::PAGE_FLAGS_NORMAL    => L10n::t('Normal Account Page'),
+                               User::PAGE_FLAGS_SOAPBOX   => L10n::t('Soapbox Page'),
+                               User::PAGE_FLAGS_COMMUNITY => L10n::t('Public Forum'),
+                               User::PAGE_FLAGS_FREELOVE  => L10n::t('Automatic Friend Page'),
+                               User::PAGE_FLAGS_PRVGROUP  => L10n::t('Private Forum')
+                       ];
+                       $account_types = [
+                               User::ACCOUNT_TYPE_PERSON       => L10n::t('Personal Page'),
+                               User::ACCOUNT_TYPE_ORGANISATION => L10n::t('Organisation Page'),
+                               User::ACCOUNT_TYPE_NEWS         => L10n::t('News Page'),
+                               User::ACCOUNT_TYPE_COMMUNITY    => L10n::t('Community Forum'),
+                               User::ACCOUNT_TYPE_RELAY        => L10n::t('Relay'),
+                       ];
+
+                       $e['page_flags_raw'] = $e['page-flags'];
+                       $e['page-flags'] = $page_types[$e['page-flags']];
+
+                       $e['account_type_raw'] = ($e['page_flags_raw'] == 0) ? $e['account-type'] : -1;
+                       $e['account-type'] = ($e['page_flags_raw'] == 0) ? $account_types[$e['account-type']] : '';
+
+                       $e['register_date'] = Temporal::getRelativeDate($e['register_date']);
+                       $e['login_date'] = Temporal::getRelativeDate($e['login_date']);
+                       $e['lastitem_date'] = Temporal::getRelativeDate($e['lastitem_date']);
+                       $e['is_admin'] = in_array($e['email'], $adminlist);
+                       $e['is_deletable'] = (intval($e['uid']) != local_user());
+                       $e['deleted'] = ($e['account_removed'] ? Temporal::getRelativeDate($e['account_expires_on']) : False);
+
+                       return $e;
+               };
+
+               $tmp_users = array_map($_setup_users, $users);
+
+               // Get rid of dashes in key names, Smarty3 can't handle them
+               // and extracting deleted users
+
+               $deleted = [];
+               $users = [];
+               foreach ($tmp_users as $user) {
+                       foreach ($user as $k => $v) {
+                               $newkey = str_replace('-', '_', $k);
+                               $user[$newkey] = $v;
+                       }
+
+                       if ($user['deleted']) {
+                               $deleted[] = $user;
+                       } else {
+                               $users[] = $user;
+                       }
+               }
+
+               $th_users = array_map(null, [L10n::t('Name'), L10n::t('Email'), L10n::t('Register date'), L10n::t('Last login'), L10n::t('Last item'), L10n::t('Type')], $valid_orders);
+
+               $t = Renderer::getMarkupTemplate('admin/users.tpl');
+               $o = Renderer::replaceMacros($t, [
+                       // strings //
+                       '$title' => L10n::t('Administration'),
+                       '$page' => L10n::t('Users'),
+                       '$submit' => L10n::t('Add User'),
+                       '$select_all' => L10n::t('select all'),
+                       '$h_pending' => L10n::t('User registrations waiting for confirm'),
+                       '$h_deleted' => L10n::t('User waiting for permanent deletion'),
+                       '$th_pending' => [L10n::t('Request date'), L10n::t('Name'), L10n::t('Email')],
+                       '$no_pending' => L10n::t('No registrations.'),
+                       '$pendingnotetext' => L10n::t('Note from the user'),
+                       '$approve' => L10n::t('Approve'),
+                       '$deny' => L10n::t('Deny'),
+                       '$delete' => L10n::t('Delete'),
+                       '$block' => L10n::t('Block'),
+                       '$blocked' => L10n::t('User blocked'),
+                       '$unblock' => L10n::t('Unblock'),
+                       '$siteadmin' => L10n::t('Site admin'),
+                       '$accountexpired' => L10n::t('Account expired'),
+
+                       '$h_users' => L10n::t('Users'),
+                       '$h_newuser' => L10n::t('New User'),
+                       '$th_deleted' => [L10n::t('Name'), L10n::t('Email'), L10n::t('Register date'), L10n::t('Last login'), L10n::t('Last item'), L10n::t('Permanent deletion')],
+                       '$th_users' => $th_users,
+                       '$order_users' => $order,
+                       '$order_direction_users' => $order_direction,
+
+                       '$confirm_delete_multi' => L10n::t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),
+                       '$confirm_delete' => L10n::t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),
+
+                       '$form_security_token' => parent::getFormSecurityToken('admin_users'),
+
+                       // values //
+                       '$baseurl' => $a->getBaseURL(true),
+
+                       '$pending' => $pending,
+                       'deleted' => $deleted,
+                       '$users' => $users,
+                       '$newusername' => ['new_user_name', L10n::t('Name'), '', L10n::t('Name of the new user.')],
+                       '$newusernickname' => ['new_user_nickname', L10n::t('Nickname'), '', L10n::t('Nickname of the new user.')],
+                       '$newuseremail' => ['new_user_email', L10n::t('Email'), '', L10n::t('Email address of the new user.'), '', '', 'email'],
+               ]);
+
+               $o .= $pager->renderFull(DBA::count('user'));
+
+               return $o;
+       }
+}
index 5e56bd8d71a2d30f2763b4d37432b573255687ce..dd89bcb6c769d88c815748b5805ffb47a51759e0 100644 (file)
-<?php\r
-\r
-namespace Friendica\Module;\r
-\r
-use Friendica\BaseModule;\r
-use Friendica\Core\Addon;\r
-use Friendica\Core\L10n;\r
-use Friendica\Core\Renderer;\r
-use Friendica\Core\System;\r
-use Friendica\Database\DBA;\r
-\r
-abstract class BaseAdminModule extends BaseModule\r
-{\r
-       public static function post()\r
-       {\r
-               if (!is_site_admin()) {\r
-                       return;\r
-               }\r
-\r
-               // do not allow a page manager to access the admin panel at all.\r
-               if (!empty($_SESSION['submanage'])) {\r
-                       return;\r
-               }\r
-       }\r
-\r
-       public static function rawContent()\r
-       {\r
-               if (!is_site_admin()) {\r
-                       System::httpExit(403);\r
-               }\r
-\r
-               if (!empty($_SESSION['submanage'])) {\r
-                       System::httpExit(403);\r
-               }\r
-\r
-               return '';\r
-       }\r
-\r
-       public static function content()\r
-       {\r
-               if (!is_site_admin()) {\r
-                       return Login::form();\r
-               }\r
-\r
-               if (!empty($_SESSION['submanage'])) {\r
-                       return '';\r
-               }\r
-\r
-               $a = self::getApp();\r
-\r
-               // APC deactivated, since there are problems with PHP 5.5\r
-               //if (function_exists("apc_delete")) {\r
-               // $toDelete = new APCIterator('user', APC_ITER_VALUE);\r
-               // apc_delete($toDelete);\r
-               //}\r
-               // Header stuff\r
-               $a->page['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/settings_head.tpl'), []);\r
-\r
-               /*\r
-                * Side bar links\r
-                */\r
-\r
-               // array(url, name, extra css classes)\r
-               // not part of $aside to make the template more adjustable\r
-               $aside_sub = [\r
-                       'information' => [L10n::t('Information'), [\r
-                               'overview'     => ['admin'             , L10n::t('Overview')                , 'overview'],\r
-                               'federation'   => ['admin/federation'  , L10n::t('Federation Statistics')   , 'federation']\r
-                       ]],\r
-                       'configuration' => [L10n::t('Configuration'), [\r
-                               'site'         => ['admin/site'        , L10n::t('Site')                    , 'site'],\r
-                               'users'        => ['admin/users'       , L10n::t('Users')                   , 'users'],\r
-                               'addons'       => ['admin/addons'      , L10n::t('Addons')                  , 'addons'],\r
-                               'themes'       => ['admin/themes'      , L10n::t('Themes')                  , 'themes'],\r
-                               'features'     => ['admin/features'    , L10n::t('Additional features')     , 'features'],\r
-                               'tos'          => ['admin/tos'         , L10n::t('Terms of Service')        , 'tos'],\r
-                       ]],\r
-                       'database' => [L10n::t('Database'), [\r
-                               'dbsync'       => ['admin/dbsync'      , L10n::t('DB updates')              , 'dbsync'],\r
-                               'deferred'     => ['admin/queue/deferred', L10n::t('Inspect Deferred Workers'), 'deferred'],\r
-                               'workerqueue'  => ['admin/queue'       , L10n::t('Inspect worker Queue')    , 'workerqueue'],\r
-                       ]],\r
-                       'tools' => [L10n::t('Tools'), [\r
-                               'contactblock' => ['admin/blocklist/contact', L10n::t('Contact Blocklist')  , 'contactblock'],\r
-                               'blocklist'    => ['admin/blocklist/server' , L10n::t('Server Blocklist')   , 'blocklist'],\r
-                               'deleteitem'   => ['admin/item/delete' , L10n::t('Delete Item')             , 'deleteitem'],\r
-                       ]],\r
-                       'logs' => [L10n::t('Logs'), [\r
-                               'logsconfig'   => ['admin/logs/', L10n::t('Logs')                           , 'logs'],\r
-                               'logsview'     => ['admin/logs/view'    , L10n::t('View Logs')              , 'viewlogs'],\r
-                       ]],\r
-                       'diagnostics' => [L10n::t('Diagnostics'), [\r
-                               'phpinfo'      => ['admin/phpinfo'           , L10n::t('PHP Info')          , 'phpinfo'],\r
-                               'probe'        => ['probe'             , L10n::t('probe address')           , 'probe'],\r
-                               'webfinger'    => ['webfinger'         , L10n::t('check webfinger')         , 'webfinger'],\r
-                               'itemsource'   => ['admin/item/source' , L10n::t('Item Source')             , 'itemsource'],\r
-                               'babel'        => ['babel'             , L10n::t('Babel')                   , 'babel'],\r
-                       ]],\r
-               ];\r
-\r
-               $t = Renderer::getMarkupTemplate('admin/aside.tpl');\r
-               $a->page['aside'] .= Renderer::replaceMacros($t, [\r
-                       '$admin' => ['addons_admin' => Addon::getAdminList()],\r
-                       '$subpages' => $aside_sub,\r
-                       '$admtxt' => L10n::t('Admin'),\r
-                       '$plugadmtxt' => L10n::t('Addon Features'),\r
-                       '$h_pending' => L10n::t('User registrations waiting for confirmation'),\r
-                       '$admurl' => 'admin/'\r
-               ]);\r
-\r
-               return '';\r
-       }\r
-}\r
+<?php
+
+namespace Friendica\Module;
+
+use Friendica\BaseModule;
+use Friendica\Core\Addon;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Core\System;
+
+/**
+ * This abstract module is meant to be extended by all modules that are reserved to administrator users.
+ *
+ * It performs a blanket permission check in all the module methods as long as the relevant `parent::method()` is
+ * called in the inheriting module.
+ *
+ * Additionally, it puts together the administration page aside with all the administration links.
+ *
+ * @package Friendica\Module
+ */
+abstract 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 rawContent()
+       {
+               if (!is_site_admin()) {
+                       System::httpExit(403);
+               }
+
+               if (!empty($_SESSION['submanage'])) {
+                       System::httpExit(403);
+               }
+
+               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'],
+                               'federation'   => ['admin/federation'  , L10n::t('Federation Statistics')   , 'federation']
+                       ]],
+                       'configuration' => [L10n::t('Configuration'), [
+                               'site'         => ['admin/site'        , L10n::t('Site')                    , 'site'],
+                               'users'        => ['admin/users'       , L10n::t('Users')                   , 'users'],
+                               'addons'       => ['admin/addons'      , L10n::t('Addons')                  , 'addons'],
+                               'themes'       => ['admin/themes'      , L10n::t('Themes')                  , 'themes'],
+                               'features'     => ['admin/features'    , L10n::t('Additional features')     , 'features'],
+                               'tos'          => ['admin/tos'         , L10n::t('Terms of Service')        , 'tos'],
+                       ]],
+                       'database' => [L10n::t('Database'), [
+                               'dbsync'       => ['admin/dbsync'      , L10n::t('DB updates')              , 'dbsync'],
+                               'deferred'     => ['admin/queue/deferred', L10n::t('Inspect Deferred Workers'), 'deferred'],
+                               'workerqueue'  => ['admin/queue'       , L10n::t('Inspect worker Queue')    , 'workerqueue'],
+                       ]],
+                       'tools' => [L10n::t('Tools'), [
+                               'contactblock' => ['admin/blocklist/contact', L10n::t('Contact Blocklist')  , 'contactblock'],
+                               'blocklist'    => ['admin/blocklist/server' , L10n::t('Server Blocklist')   , 'blocklist'],
+                               'deleteitem'   => ['admin/item/delete' , L10n::t('Delete Item')             , 'deleteitem'],
+                       ]],
+                       'logs' => [L10n::t('Logs'), [
+                               'logsconfig'   => ['admin/logs/', L10n::t('Logs')                           , 'logs'],
+                               'logsview'     => ['admin/logs/view'    , L10n::t('View Logs')              , 'viewlogs'],
+                       ]],
+                       'diagnostics' => [L10n::t('Diagnostics'), [
+                               'phpinfo'      => ['admin/phpinfo'           , L10n::t('PHP Info')          , 'phpinfo'],
+                               'probe'        => ['probe'             , L10n::t('probe address')           , 'probe'],
+                               'webfinger'    => ['webfinger'         , L10n::t('check webfinger')         , 'webfinger'],
+                               'itemsource'   => ['admin/item/source' , L10n::t('Item Source')             , 'itemsource'],
+                               'babel'        => ['babel'             , L10n::t('Babel')                   , 'babel'],
+                       ]],
+               ];
+
+               $t = Renderer::getMarkupTemplate('admin/aside.tpl');
+               $a->page['aside'] .= Renderer::replaceMacros($t, [
+                       '$admin' => ['addons_admin' => Addon::getAdminList()],
+                       '$subpages' => $aside_sub,
+                       '$admtxt' => L10n::t('Admin'),
+                       '$plugadmtxt' => L10n::t('Addon Features'),
+                       '$h_pending' => L10n::t('User registrations waiting for confirmation'),
+                       '$admurl' => 'admin/'
+               ]);
+
+               return '';
+       }
+}