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
{
$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);
$enable_multi_reg = !empty($_POST['enable_multi_reg']);
$enable_openid = !empty($_POST['enable_openid']);
$enable_regfullname = !empty($_POST['enable_regfullname']);
+ $register_notification = !empty($_POST['register_notification']);
$community_page_style = (!empty($_POST['community_page_style']) ? intval(trim($_POST['community_page_style'])) : 0);
$max_author_posts_community_page = (!empty($_POST['max_author_posts_community_page']) ? intval(trim($_POST['max_author_posts_community_page'])) : 0);
$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', 'block_extended_register', !$enable_multi_reg);
DI::config()->set('system', 'no_openid' , !$enable_openid);
DI::config()->set('system', 'no_regfullname' , !$enable_regfullname);
+ DI::config()->set('system', 'register_notification' , $register_notification);
DI::config()->set('system', 'community_page_style' , $community_page_style);
DI::config()->set('system', 'max_author_posts_community_page', $max_author_posts_community_page);
DI::config()->set('system', 'verifyssl' , $verifyssl);
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);
/* Installed langs */
$lang_choices = DI::l10n()->getAvailableLanguages();
- if (strlen(DI::config()->get('system', 'directory_submit_url')) &&
- !strlen(DI::config()->get('system', 'directory'))) {
+ if (DI::config()->get('system', 'directory_submit_url') &&
+ !DI::config()->get('system', 'directory')) {
DI::config()->set('system', 'directory', dirname(DI::config()->get('system', 'directory_submit_url')));
DI::config()->delete('system', 'directory_submit_url');
}
/* 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 */
'$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...
'$show_help' => ['show_help', DI::l10n()->t('Show help entry from navigation menu'), !DI::config()->get('system', 'hide_help'), DI::l10n()->t('Displays the menu entry for the Help pages from the navigation menu. It is always accessible by calling /help directly.')],
'$singleuser' => ['singleuser', DI::l10n()->t('Single user instance'), DI::config()->get('system', 'singleuser', '---'), DI::l10n()->t('Make this instance multi-user or single-user for the named user'), $user_names],
- '$maximagesize' => ['maximagesize', DI::l10n()->t('Maximum image size'), DI::config()->get('system', 'maximagesize'), DI::l10n()->t('Maximum size in bytes of uploaded images. Default is 0, which means no limits.')],
+ '$maximagesize' => ['maximagesize', DI::l10n()->t('Maximum image size'), DI::config()->get('system', 'maximagesize'), DI::l10n()->t('Maximum size in bytes of uploaded images. Default is 0, which means no limits. Be aware that this setting does not affect server-side upload limits.')],
'$maximagelength' => ['maximagelength', DI::l10n()->t('Maximum image length'), DI::config()->get('system', 'max_image_length'), DI::l10n()->t('Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.')],
'$jpegimagequality' => ['jpegimagequality', DI::l10n()->t('JPEG image quality'), DI::config()->get('system', 'jpeg_quality'), DI::l10n()->t('Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality.')],
'$enable_multi_reg' => ['enable_multi_reg', DI::l10n()->t('Enable multiple registrations'), !DI::config()->get('system', 'block_extended_register'), DI::l10n()->t('Enable users to register additional accounts for use as pages.')],
'$enable_openid' => ['enable_openid', DI::l10n()->t('Enable OpenID'), !DI::config()->get('system', 'no_openid'), DI::l10n()->t('Enable OpenID support for registration and logins.')],
'$enable_regfullname' => ['enable_regfullname', DI::l10n()->t('Enable Fullname check'), !DI::config()->get('system', 'no_regfullname'), DI::l10n()->t('Enable check to only allow users to register with a space between the first name and the last name in their full name.')],
+ '$register_notification' => ['register_notification', DI::l10n()->t('Email administrators on new registration'), DI::config()->get('system', 'register_notification'), DI::l10n()->t('If enabled and the system is set to an open registration, an email for each new registration is sent to the administrators.')],
'$community_page_style' => ['community_page_style', DI::l10n()->t('Community pages for visitors'), DI::config()->get('system', 'community_page_style'), DI::l10n()->t('Which community pages should be available for visitors. Local users always see both pages.'), $community_page_style_choices],
'$max_author_posts_community_page' => ['max_author_posts_community_page', DI::l10n()->t('Posts per user on community page'), DI::config()->get('system', 'max_author_posts_community_page'), DI::l10n()->t('The maximum number of posts per user on the community page. (Not valid for "Global Community")')],
'$mail_able' => function_exists('imap_open'),
'$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.')],