]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Admin/Site.php
All references to boot.php are now removed
[friendica.git] / src / Module / Admin / Site.php
index 27623880aeb6f6035d65680d43346df262e036cf..3a0ac5d003cba2a8f7421fda85d8d2040b77c689 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -32,18 +32,15 @@ use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\User;
 use Friendica\Module\BaseAdmin;
+use Friendica\Module\Conversation\Community;
 use Friendica\Module\Register;
 use Friendica\Protocol\Relay;
 use Friendica\Util\BasePath;
 use Friendica\Util\EMailer\MailBuilder;
-use Friendica\Util\Strings;
-use Friendica\Worker\Delivery;
-
-require_once __DIR__ . '/../../../boot.php';
 
 class Site extends BaseAdmin
 {
-       public function post()
+       protected function post(array $request = [])
        {
                self::checkAdminAccess();
 
@@ -52,7 +49,7 @@ class Site extends BaseAdmin
                $a = DI::app();
 
                if (!empty($_POST['republish_directory'])) {
-                       Worker::add(PRIORITY_LOW, 'Directory');
+                       Worker::add(Worker::PRIORITY_LOW, 'Directory');
                        return;
                }
 
@@ -60,74 +57,6 @@ class Site extends BaseAdmin
                        return;
                }
 
-               // 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, "/");
-
-                       $parsed = @parse_url($new_url);
-                       if (!is_array($parsed) || empty($parsed['host']) || empty($parsed['scheme'])) {
-                               notice(DI::l10n()->t("Can not parse base url. Must have at least <scheme>://<domain>"));
-                               DI::baseUrl()->redirect('admin/site');
-                       }
-
-                       /* steps:
-                        * replace all "baseurl" to "new_url" in config, profile, term, items and contacts
-                        * send relocate for every local user
-                        * */
-
-                       $old_url = DI::baseUrl()->get(true);
-
-                       // Generate host names for relocation the addresses in the format user@address.tld
-                       $new_host = str_replace("http://", "@", Strings::normaliseLink($new_url));
-                       $old_host = str_replace("http://", "@", Strings::normaliseLink($old_url));
-
-                       function update_table(App $a, $table_name, $fields, $old_url, $new_url)
-                       {
-                               $dbold = DBA::escape($old_url);
-                               $dbnew = DBA::escape($new_url);
-
-                               $upd = [];
-                               foreach ($fields as $f) {
-                                       $upd[] = "`$f` = REPLACE(`$f`, '$dbold', '$dbnew')";
-                               }
-
-                               $upds = implode(", ", $upd);
-
-                               $r = DBA::e(sprintf("UPDATE %s SET %s;", $table_name, $upds));
-                               if (!DBA::isResult($r)) {
-                                       notice("Failed updating '$table_name': " . DBA::errorMessage());
-                                       DI::baseUrl()->redirect('admin/site');
-                               }
-                       }
-
-                       // update tables
-                       // update profile links in the format "http://server.tld"
-                       update_table($a, "profile", ['photo', 'thumb'], $old_url, $new_url);
-                       update_table($a, "contact", ['photo', 'thumb', 'micro', 'url', 'nurl', 'alias', 'request', 'notify', 'poll', 'confirm', 'poco', 'avatar'], $old_url, $new_url);
-                       update_table($a, "post-content", ['body'], $old_url, $new_url);
-
-                       // update profile addresses in the format "user@server.tld"
-                       update_table($a, "contact", ['addr'], $old_host, $new_host);
-
-                       // update config
-                       DI::config()->set('system', 'url', $new_url);
-                       DI::baseUrl()->saveByURL($new_url);
-
-                       // send relocate
-                       $usersStmt = DBA::select('user', ['uid'], ['account_removed' => false, 'account_expired' => false]);
-                       while ($user = DBA::fetch($usersStmt)) {
-                               Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, $user['uid']);
-                       }
-                       DBA::close($usersStmt);
-
-                       info(DI::l10n()->t("Relocation started. Could take a while to complete."));
-
-                       DI::baseUrl()->redirect('admin/site');
-               }
-               // end relocate
-
                $sitename         = (!empty($_POST['sitename'])         ? trim($_POST['sitename'])      : '');
                $sender_email     = (!empty($_POST['sender_email'])     ? trim($_POST['sender_email'])  : '');
                $banner           = (!empty($_POST['banner'])           ? trim($_POST['banner'])                             : false);
@@ -201,6 +130,7 @@ class Site extends BaseAdmin
                $temppath               = (!empty($_POST['temppath'])               ? trim($_POST['temppath'])   : '');
                $singleuser             = (!empty($_POST['singleuser'])             ? trim($_POST['singleuser']) : '');
                $only_tag_search        = !empty($_POST['only_tag_search']);
+               $compute_group_counts   = !empty($_POST['compute_group_counts']);
                $check_new_version_url  = (!empty($_POST['check_new_version_url'])  ? trim($_POST['check_new_version_url']) : 'none');
 
                $worker_queues    = (!empty($_POST['worker_queues'])                ? intval($_POST['worker_queues'])                 : 10);
@@ -216,7 +146,7 @@ class Site extends BaseAdmin
                // Has the directory url changed? If yes, then resubmit the existing profiles there
                if ($global_directory != DI::config()->get('system', 'directory') && ($global_directory != '')) {
                        DI::config()->set('system', 'directory', $global_directory);
-                       Worker::add(PRIORITY_LOW, 'Directory');
+                       Worker::add(Worker::PRIORITY_LOW, 'Directory');
                }
 
                if (DI::baseUrl()->getUrlPath() != "") {
@@ -371,6 +301,7 @@ class Site extends BaseAdmin
                DI::config()->set('system', 'temppath', $temppath);
 
                DI::config()->set('system', 'only_tag_search'  , $only_tag_search);
+               DI::config()->set('system', 'compute_group_counts', $compute_group_counts);
 
                DI::config()->set('system', 'worker_queues'    , $worker_queues);
                DI::config()->set('system', 'worker_fastlane'  , $worker_fastlane);
@@ -384,7 +315,7 @@ class Site extends BaseAdmin
                DI::baseUrl()->redirect('admin/site' . $active_panel);
        }
 
-       public function content(): string
+       protected function content(array $request = []): string
        {
                parent::content();
 
@@ -429,11 +360,11 @@ class Site extends BaseAdmin
 
                /* Community page style */
                $community_page_style_choices = [
-                       CP_NO_INTERNAL_COMMUNITY => DI::l10n()->t('No community page for local users'),
-                       CP_NO_COMMUNITY_PAGE => DI::l10n()->t('No community page'),
-                       CP_USERS_ON_SERVER => DI::l10n()->t('Public postings from users of this site'),
-                       CP_GLOBAL_COMMUNITY => DI::l10n()->t('Public postings from the federated network'),
-                       CP_USERS_AND_GLOBAL => DI::l10n()->t('Public postings from local users and the federated network')
+                       Community::DISABLED         => DI::l10n()->t('No community page'),
+                       Community::DISABLED_VISITOR => DI::l10n()->t('No community page for visitors'),
+                       Community::LOCAL            => DI::l10n()->t('Public postings from users of this site'),
+                       Community::GLOBAL           => DI::l10n()->t('Public postings from the federated network'),
+                       Community::LOCAL_AND_GLOBAL => DI::l10n()->t('Public postings from local users and the federated network')
                ];
 
                /* get user names to make the install a personal install of X */
@@ -450,7 +381,7 @@ class Site extends BaseAdmin
                $banner = DI::config()->get('system', 'banner');
 
                if ($banner == false) {
-                       $banner = '<a href="https://friendi.ca"><img id="logo-img" src="images/friendica-32.png" alt="logo" /></a><span id="logo-text"><a href="https://friendi.ca">Friendica</a></span>';
+                       $banner = '<a href="https://friendi.ca"><img id="logo-img" width="32" height="32" src="images/friendica.svg" alt="logo" /></a><span id="logo-text"><a href="https://friendi.ca">Friendica</a></span>';
                }
 
                $email_banner = DI::config()->get('system', 'email_banner');
@@ -512,8 +443,9 @@ class Site extends BaseAdmin
                        '$no_relay_list'     => DI::l10n()->t('The system is not subscribed to any relays at the moment.'),
                        '$relay_list_title'  => DI::l10n()->t('The system is currently subscribed to the following relays:'),
                        '$relay_list'        => Relay::getList(['url']),
-                       '$relocate'          => DI::l10n()->t('Relocate Instance'),
-                       '$relocate_warning'  => DI::l10n()->t('<strong>Warning!</strong> Advanced function. Could make this server unreachable.'),
+                       '$relocate'          => DI::l10n()->t('Relocate Node'),
+                       '$relocate_msg'      => DI::l10n()->t('Relocating your node enables you to change the DNS domain of this node and keep all the existing users and posts. This process takes a while and can only be started from the relocate console command like this:'),
+                       '$relocate_cmd'      => DI::l10n()->t('(Friendica directory)# bin/console relocate https://newdomain.com'),
                        '$baseurl'           => DI::baseUrl()->get(true),
 
                        // name, label, value, help string, extra data...
@@ -526,7 +458,7 @@ class Site extends BaseAdmin
                        '$touch_icon'       => ['touch_icon', DI::l10n()->t('Touch icon'), DI::config()->get('system', 'touch_icon'), DI::l10n()->t('Link to an icon that will be used for tablets and mobiles.')],
                        '$additional_info'  => ['additional_info', DI::l10n()->t('Additional Info'), $additional_info, DI::l10n()->t('For public servers: you can add additional information here that will be listed at %s/servers.', Search::getGlobalDirectory())],
                        '$language'         => ['language', DI::l10n()->t('System language'), DI::config()->get('system', 'language'), '', $lang_choices],
-                       '$theme'            => ['theme', DI::l10n()->t('System theme'), DI::config()->get('system', 'theme'), DI::l10n()->t('Default system theme - may be over-ridden by user profiles - <a href="/admin/themes" id="cnftheme">Change default theme settings</a>'), $theme_choices],
+                       '$theme'            => ['theme', DI::l10n()->t('System theme'), DI::config()->get('system', 'theme'), DI::l10n()->t('Default system theme - may be over-ridden by user profiles - <a href="%s" id="cnftheme">Change default theme settings</a>', DI::baseUrl()->get(true) . '/admin/themes'), $theme_choices],
                        '$theme_mobile'     => ['theme_mobile', DI::l10n()->t('Mobile system theme'), DI::config()->get('system', 'mobile-theme', '---'), DI::l10n()->t('Theme for mobile devices'), $theme_choices_mobile],
                        '$ssl_policy'       => ['ssl_policy', DI::l10n()->t('SSL link policy'), DI::config()->get('system', 'ssl_policy'), DI::l10n()->t('Determines whether generated links should be forced to use SSL'), $ssl_choices],
                        '$force_ssl'        => ['force_ssl', DI::l10n()->t('Force SSL'), DI::config()->get('system', 'force_ssl'), DI::l10n()->t('Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.')],
@@ -570,8 +502,8 @@ class Site extends BaseAdmin
                        '$diaspora_not_able'      => DI::l10n()->t('Diaspora support can\'t be enabled because Friendica was installed into a sub directory.'),
                        '$diaspora_enabled'       => ['diaspora_enabled', DI::l10n()->t('Enable Diaspora support'), DI::config()->get('system', 'diaspora_enabled', $diaspora_able), DI::l10n()->t('Enable built-in Diaspora network compatibility for communicating with diaspora servers.')],
                        '$verifyssl'              => ['verifyssl', DI::l10n()->t('Verify SSL'), DI::config()->get('system', 'verifyssl'), DI::l10n()->t('If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.')],
-                       '$proxyuser'              => ['proxyuser', DI::l10n()->t('Proxy user'), DI::config()->get('system', 'proxyuser'), ''],
-                       '$proxy'                  => ['proxy', DI::l10n()->t('Proxy URL'), DI::config()->get('system', 'proxy'), ''],
+                       '$proxyuser'              => ['proxyuser', DI::l10n()->t('Proxy user'), DI::config()->get('system', 'proxyuser'), DI::l10n()->t('User name for the proxy server.')],
+                       '$proxy'                  => ['proxy', DI::l10n()->t('Proxy URL'), DI::config()->get('system', 'proxy'), DI::l10n()->t('If you want to use a proxy server that Friendica should use to connect to the network, put the URL of the proxy here.')],
                        '$timeout'                => ['timeout', DI::l10n()->t('Network timeout'), DI::config()->get('system', 'curl_timeout'), DI::l10n()->t('Value is in seconds. Set to 0 for unlimited (not recommended).')],
                        '$maxloadavg'             => ['maxloadavg', DI::l10n()->t('Maximum Load Average'), DI::config()->get('system', 'maxloadavg'), DI::l10n()->t('Maximum system load before delivery and poll processes are deferred - default %d.', 20)],
                        '$min_memory'             => ['min_memory', DI::l10n()->t('Minimal Memory'), DI::config()->get('system', 'min_memory'), DI::l10n()->t('Minimal free memory in MB for the worker. Needs access to /proc/meminfo - default 0 (deactivated).')],
@@ -600,8 +532,7 @@ class Site extends BaseAdmin
                        '$max_display_comments'   => ['max_display_comments', DI::l10n()->t('Maximum numbers of comments per post on the display page'), DI::config()->get('system', 'max_display_comments'), DI::l10n()->t('How many comments should be shown on the single view for each post? Default value is 1000.')],
                        '$temppath'               => ['temppath', DI::l10n()->t('Temp path'), DI::config()->get('system', 'temppath'), DI::l10n()->t('If you have a restricted system where the webserver can\'t access the system temp path, enter another path here.')],
                        '$only_tag_search'        => ['only_tag_search', DI::l10n()->t('Only search in tags'), DI::config()->get('system', 'only_tag_search'), DI::l10n()->t('On large systems the text search can slow down the system extremely.')],
-
-                       '$relocate_url'           => ['relocate_url', DI::l10n()->t('New base url'), DI::baseUrl()->get(), DI::l10n()->t('Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users.')],
+                       '$compute_group_counts'   => ['compute_group_counts', DI::l10n()->t('Generate counts per contact group when calculating network count'), DI::config()->get('system', 'compute_group_counts'), DI::l10n()->t('On systems with users that heavily use contact groups the query can be very expensive.')],
 
                        '$worker_queues'          => ['worker_queues', DI::l10n()->t('Maximum number of parallel workers'), DI::config()->get('system', 'worker_queues'), DI::l10n()->t('On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.', 5, 20, 10)],
                        '$worker_fastlane'        => ['worker_fastlane', DI::l10n()->t('Enable fastlane'), DI::config()->get('system', 'worker_fastlane'), DI::l10n()->t('When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority.')],