<?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
*
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();
$a = DI::app();
if (!empty($_POST['republish_directory'])) {
- Worker::add(PRIORITY_LOW, 'Directory');
+ Worker::add(Worker::PRIORITY_LOW, 'Directory');
return;
}
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);
$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);
// 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() != "") {
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);
DI::baseUrl()->redirect('admin/site' . $active_panel);
}
- public function content(): string
+ protected function content(array $request = []): string
{
parent::content();
/* 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 */
$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');
'$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...
'$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.')],
'$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).')],
'$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.')],