diff --git a/CHANGELOG_DEV.md b/CHANGELOG_DEV.md index 1ad5933783..10b61c12a5 100644 --- a/CHANGELOG_DEV.md +++ b/CHANGELOG_DEV.md @@ -1,6 +1,7 @@ 1.12.0-beta.2 (Unreleased) ----------------------------- - Enh #5788: Limit picker results for country filter on "People" page +- Fix #5779: Fix user settings updating on disabled visibility "Guest" 1.12.0-beta.1 (June 27, 2022) ----------------------------- diff --git a/protected/humhub/modules/user/models/User.php b/protected/humhub/modules/user/models/User.php index b0109a32cc..7304b5d252 100644 --- a/protected/humhub/modules/user/models/User.php +++ b/protected/humhub/modules/user/models/User.php @@ -159,7 +159,7 @@ class User extends ContentContainerActiveRecord implements IdentityInterface, Se }], [['created_by', 'updated_by'], 'integer'], [['status'], 'in', 'range' => array_keys(self::getStatusOptions())], - [['visibility'], 'in', 'range' => array_keys(self::getVisibilityOptions())], + [['visibility'], 'in', 'range' => array_keys(self::getVisibilityOptions()), 'on' => Profile::SCENARIO_EDIT_ADMIN], [['tagsField', 'blockedUsersField'], 'safe'], [['guid'], 'string', 'max' => 45], [['time_zone'], 'validateTimeZone'], diff --git a/protected/humhub/modules/user/models/forms/AccountSettings.php b/protected/humhub/modules/user/models/forms/AccountSettings.php index 1d7398289a..cfdc9ceb84 100644 --- a/protected/humhub/modules/user/models/forms/AccountSettings.php +++ b/protected/humhub/modules/user/models/forms/AccountSettings.php @@ -8,15 +8,17 @@ namespace humhub\modules\user\models\forms; +use humhub\modules\user\helpers\AuthHelper; use humhub\modules\user\models\User; use Yii; +use yii\base\Model; /** * Form Model for changing basic account settings * * @since 0.9 */ -class AccountSettings extends \yii\base\Model +class AccountSettings extends Model { public $tags; @@ -36,7 +38,8 @@ class AccountSettings extends \yii\base\Model [['show_introduction_tour'], 'boolean'], [['timeZone'], 'in', 'range' => \DateTimeZone::listIdentifiers()], ['language', 'in', 'range' => array_keys(Yii::$app->i18n->getAllowedLanguages())], - ['visibility', 'in', 'range' => array_keys(User::getVisibilityOptions(false))], + ['visibility', 'in', 'range' => array_keys($this->getVisibilityOptions()), + 'when' => function (self $model) {return $model->isVisibilityEditable();}], ]; } @@ -62,4 +65,42 @@ class AccountSettings extends \yii\base\Model ]; } + public function getTags(): array + { + return is_array($this->tags) ? $this->tags : []; + } + + public function isHiddenUser(): bool + { + return Yii::$app->user->getIdentity()->visibility == User::VISIBILITY_HIDDEN; + } + + public function isVisibilityViewable(): bool + { + return AuthHelper::isGuestAccessEnabled(); + } + + public function isVisibilityEditable(): bool + { + return Yii::$app->user->isAdmin() || + ($this->isVisibilityViewable() && !$this->isHiddenUser()); + } + + public function getVisibilityOptions(): array + { + $options = [ + User::VISIBILITY_REGISTERED_ONLY => Yii::t('UserModule.account', 'Registered users only'), + ]; + + if (AuthHelper::isGuestAccessEnabled()) { + $options[User::VISIBILITY_ALL] = Yii::t('UserModule.account', 'Visible for all (also unregistered users)'); + } + + if ($this->isHiddenUser() || Yii::$app->user->isAdmin()) { + $options[User::VISIBILITY_HIDDEN] = Yii::t('AdminModule.user', 'Invisible'); + } + + return $options; + } + } diff --git a/protected/humhub/modules/user/views/account/editSettings.php b/protected/humhub/modules/user/views/account/editSettings.php index ebcbe1db3d..f909075ead 100644 --- a/protected/humhub/modules/user/views/account/editSettings.php +++ b/protected/humhub/modules/user/views/account/editSettings.php @@ -2,10 +2,8 @@ use humhub\libs\TimezoneHelper; use humhub\modules\content\widgets\ContainerTagPicker; -use humhub\modules\user\helpers\AuthHelper; use humhub\modules\ui\form\widgets\ActiveForm; use humhub\modules\user\models\forms\AccountSettings; -use humhub\modules\user\models\User; use humhub\modules\user\widgets\UserPickerField; /* @var AccountSettings $model */ @@ -24,10 +22,9 @@ use humhub\modules\user\widgets\UserPickerField; field($model, 'timeZone')->dropDownList(TimezoneHelper::generateList(true), ['data-ui-select2' => '']); ?> - - field($model, 'visibility')->dropDownList([ - User::VISIBILITY_REGISTERED_ONLY => Yii::t('UserModule.account', 'Registered users only'), - User::VISIBILITY_ALL => Yii::t('UserModule.account', 'Visible for all (also unregistered users)'), +isVisibilityViewable()): ?> + field($model, 'visibility')->dropDownList($model->getVisibilityOptions(), [ + 'disabled' => !$model->isVisibilityEditable() ]); ?>