groups: Restrict creating groups to non limited plans.

This commit is contained in:
Shubham Padia
2024-11-11 08:58:44 +00:00
committed by Tim Abbott
parent 6e0913d742
commit cccf1eacb1
5 changed files with 37 additions and 4 deletions

View File

@@ -23,6 +23,7 @@ import * as overlays from "./overlays.ts";
import * as people from "./people.ts"; import * as people from "./people.ts";
import * as scroll_util from "./scroll_util.ts"; import * as scroll_util from "./scroll_util.ts";
import * as settings_components from "./settings_components.ts"; import * as settings_components from "./settings_components.ts";
import * as settings_config from "./settings_config.ts";
import * as settings_data from "./settings_data.ts"; import * as settings_data from "./settings_data.ts";
import * as settings_org from "./settings_org.ts"; import * as settings_org from "./settings_org.ts";
import {current_user, realm} from "./state_data.ts"; import {current_user, realm} from "./state_data.ts";
@@ -837,6 +838,10 @@ export function setup_page(callback) {
function populate_and_fill() { function populate_and_fill() {
const template_data = { const template_data = {
can_create_user_groups: settings_data.user_can_create_user_groups(), can_create_user_groups: settings_data.user_can_create_user_groups(),
zulip_plan_is_not_limited: realm.zulip_plan_is_not_limited,
upgrade_text_for_wide_organization_logo: realm.upgrade_text_for_wide_organization_logo,
is_business_type_org:
realm.realm_org_type === settings_config.all_org_type_values.business.code,
max_user_group_name_length, max_user_group_name_length,
}; };

View File

@@ -92,6 +92,12 @@
position: relative; position: relative;
top: -5px; top: -5px;
} }
&:disabled {
/* Replicate disabled values */
cursor: not-allowed;
opacity: 0.5;
}
} }
#create_user_group_description, #create_user_group_description,
@@ -365,8 +371,7 @@ h4.user_group_setting_subsection_title {
.left .no-streams-to-show, .left .no-streams-to-show,
.left .no-groups-to-show, .left .no-groups-to-show,
.right .nothing-selected .create-stream-button-container, .right .nothing-selected .create-stream-button-container {
.right .nothing-selected .create-group-button-container {
display: block; display: block;
text-align: center; text-align: center;
font-size: 1em; font-size: 1em;
@@ -397,6 +402,18 @@ h4.user_group_setting_subsection_title {
.create-group-button-container { .create-group-button-container {
margin-top: calc(45vh - 134px); margin-top: calc(45vh - 134px);
text-align: center;
.settings-empty-option-text {
color: hsl(0deg 0% 67%);
}
.upgrade-or-sponsorship-tip,
.upgrade-tip {
/* Center tip in parent container */
margin-left: auto;
margin-right: auto;
}
} }
} }

View File

@@ -12,7 +12,7 @@
<div class="list-toggler-container"> <div class="list-toggler-container">
<div id="add_new_user_group"> <div id="add_new_user_group">
{{#if can_create_user_groups}} {{#if can_create_user_groups}}
<button class="create_user_group_button create_user_group_plus_button"> <button class="create_user_group_button create_user_group_plus_button" {{#if (not zulip_plan_is_not_limited)}}disabled{{/if}}>
<span class="create_button_plus_sign">+</span> <span class="create_button_plus_sign">+</span>
</button> </button>
{{/if}} {{/if}}
@@ -52,7 +52,8 @@
<div class="nothing-selected"> <div class="nothing-selected">
<div class="group-info-banner"></div> <div class="group-info-banner"></div>
<div class="create-group-button-container"> <div class="create-group-button-container">
<button type="button" class="create_user_group_button animated-purple-button" {{#unless can_create_user_groups}}disabled{{/unless}}>{{t 'Create user group' }}</button> {{> ../settings/upgrade_tip_widget . }}
<button type="button" class="create_user_group_button animated-purple-button" {{#unless (and can_create_user_groups zulip_plan_is_not_limited)}}disabled{{/unless}}>{{t 'Create user group' }}</button>
{{#unless can_create_user_groups}} {{#unless can_create_user_groups}}
<span class="settings-empty-option-text"> <span class="settings-empty-option-text">
{{t 'You do not have permission to create user groups.' }} {{t 'You do not have permission to create user groups.' }}

View File

@@ -10,6 +10,7 @@ from zerver.actions.create_realm import do_create_realm
from zerver.actions.create_user import do_reactivate_user from zerver.actions.create_user import do_reactivate_user
from zerver.actions.realm_settings import ( from zerver.actions.realm_settings import (
do_change_realm_permission_group_setting, do_change_realm_permission_group_setting,
do_change_realm_plan_type,
do_set_realm_property, do_set_realm_property,
) )
from zerver.actions.streams import ( from zerver.actions.streams import (
@@ -453,6 +454,14 @@ class UserGroupAPITestCase(UserGroupTestCase):
self.assert_json_success(result) self.assert_json_success(result)
self.assert_length(NamedUserGroup.objects.filter(realm=hamlet.realm), 10) self.assert_length(NamedUserGroup.objects.filter(realm=hamlet.realm), 10)
# User groups should not be allowed to be created on limited plans.
original_plan_type = hamlet.realm.plan_type
do_change_realm_plan_type(hamlet.realm, Realm.PLAN_TYPE_LIMITED, acting_user=None)
result = self.client_post("/json/user_groups/create", info=params)
self.assert_json_error(result, "Available on Zulip Cloud Standard. Upgrade to access.")
self.assert_length(NamedUserGroup.objects.filter(realm=hamlet.realm), 10)
do_change_realm_plan_type(hamlet.realm, original_plan_type, acting_user=None)
# Check default value of settings. # Check default value of settings.
everyone_system_group = NamedUserGroup.objects.get( everyone_system_group = NamedUserGroup.objects.get(
name="role:everyone", realm=hamlet.realm, is_system_group=True name="role:everyone", realm=hamlet.realm, is_system_group=True

View File

@@ -64,6 +64,7 @@ def add_user_group(
can_manage_group: Json[int | AnonymousSettingGroupDict] | None = None, can_manage_group: Json[int | AnonymousSettingGroupDict] | None = None,
can_mention_group: Json[int | AnonymousSettingGroupDict] | None = None, can_mention_group: Json[int | AnonymousSettingGroupDict] | None = None,
) -> HttpResponse: ) -> HttpResponse:
user_profile.realm.ensure_not_on_limited_plan()
user_profiles = user_ids_to_users(members, user_profile.realm, allow_deactivated=False) user_profiles = user_ids_to_users(members, user_profile.realm, allow_deactivated=False)
name = check_user_group_name(name) name = check_user_group_name(name)