From 7371070cde4d5e0821935c587f81b2d6d9a0628e Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 29 Oct 2023 19:43:44 +0000 Subject: [PATCH] Issue 13511: Ensure stattic community user settings --- database.sql | 2 +- src/Model/User.php | 29 +++++++++++++++++++++++++++++ src/Module/Settings/Account.php | 30 +++++------------------------- static/dbstructure.config.php | 2 +- update.php | 11 +++++++++++ 5 files changed, 47 insertions(+), 27 deletions(-) diff --git a/database.sql b/database.sql index a6e29826b..5c999da23 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2023.09-rc (Giant Rhubarb) --- DB_UPDATE_VERSION 1538 +-- DB_UPDATE_VERSION 1539 -- ------------------------------------------ diff --git a/src/Model/User.php b/src/Model/User.php index 18fecf080..d774a6454 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -343,6 +343,35 @@ class User return DBA::selectFirst('user', $fields, ['nickname' => $nickname]); } + /** + * Set static settings for community user accounts + * + * @param integer $uid + * @return void + */ + public static function setCommunityUserSettings(int $uid) + { + $user = self::getById($uid, ['account-type', 'page-flags']); + if ($user['account-type'] != User::ACCOUNT_TYPE_COMMUNITY) { + return; + } + + DI::pConfig()->set($uid, 'system', 'unlisted', true); + + $fields = [ + 'allow_cid' => '', + 'allow_gid' => $user['page-flags'] == User::PAGE_FLAGS_PRVGROUP ? '<' . Circle::FOLLOWERS . '>' : '', + 'deny_cid' => '', + 'deny_gid' => '', + 'blockwall' => true, + 'hidewall' => true, + ]; + + User::update($fields, $uid); + + Profile::update(['hide-friends' => true], $uid); + } + /** * Returns the user id of a given profile URL * diff --git a/src/Module/Settings/Account.php b/src/Module/Settings/Account.php index 8ff00addb..70d1bddc3 100644 --- a/src/Module/Settings/Account.php +++ b/src/Module/Settings/Account.php @@ -199,6 +199,7 @@ class Account extends BaseSettings DI::sysmsg()->addNotice(DI::l10n()->t('Settings were not updated.')); } + User::setCommunityUserSettings(DI::userSession()->getLocalUserId()); DI::baseUrl()->redirect($redirectUrl); } @@ -321,37 +322,16 @@ class Account extends BaseSettings $page_flags = User::PAGE_FLAGS_COMMUNITY; } - $fields = []; - $profile_fields = []; - - if ($account_type == User::ACCOUNT_TYPE_COMMUNITY) { - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'unlisted', true); - - $fields = [ - 'allow_cid' => '', - 'allow_gid' => $page_flags == User::PAGE_FLAGS_PRVGROUP ? - '<' . Circle::FOLLOWERS . '>' - : '', - 'deny_cid' => '', - 'deny_gid' => '', - 'blockwall' => true, - 'blocktags' => true, - ]; - - $profile_fields = [ - 'hide-friends' => true, - ]; - } - - $fields = array_merge($fields, [ + $fields = [ 'page-flags' => $page_flags, 'account-type' => $account_type, - ]); + ]; - if (!User::update($fields, DI::userSession()->getLocalUserId()) || !empty($profile_fields) && !Profile::update($profile_fields, DI::userSession()->getLocalUserId())) { + if (!User::update($fields, DI::userSession()->getLocalUserId())) { DI::sysmsg()->addNotice(DI::l10n()->t('Settings were not updated.')); } + User::setCommunityUserSettings(DI::userSession()->getLocalUserId()); DI::baseUrl()->redirect($redirectUrl); } diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index e97d1ea1c..e0f98e97f 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -56,7 +56,7 @@ use Friendica\Database\DBA; // This file is required several times during the test in DbaDefinition which justifies this condition if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1538); + define('DB_UPDATE_VERSION', 1539); } return [ diff --git a/update.php b/update.php index f04a4d5c5..ce22a28d1 100644 --- a/update.php +++ b/update.php @@ -1398,5 +1398,16 @@ function update_1535() } DI::config()->delete('system', 'compute_group_counts'); + return Update::SUCCESS; +} + +function update_1539() +{ + $users = DBA::select('user', ['uid'], ['account-type' => User::ACCOUNT_TYPE_COMMUNITY]); + while ($user = DBA::fetch($users)) { + User::setCommunityUserSettings($user['uid']); + } + DBA::close($users); + return Update::SUCCESS; } \ No newline at end of file