-<?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');
+ }
+}
-<?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'),
+ ]);
+ }
+}
-<?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;
+ }
+}
-<?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")
+ ]);
+ }
+}
-<?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;
+ }
+}
-<?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;
+ }
+}
-<?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")
+ ]);
+ }
+}
-<?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,
+ ]);
+ }
+}
-<?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')
+ ]);
+ }
+}
-<?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();
+ }
+}
-<?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,
+ ]);
+ }
+}
}
// 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, "/");
-<?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();
+ }
+
+}
-<?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');
+ }
+}
-<?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 '';
+ }
+}
-<?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'),
+ ]);
+ }
+}
-<?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'),
+ ]);
+ }
+}
-<?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;
+ }
+}
-<?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 '';
+ }
+}