mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	realm owner: Add frontend implementation of owner role.
This commit adds the option of owner role in user role dropdown and also takes care of the restrictions while adding/removing owner status of the user. This commit also handles the places where we dispaly role of the user in UI.
This commit is contained in:
		@@ -68,6 +68,7 @@ const realm_admin = {
 | 
			
		||||
    email: 'realm_admin@example.com',
 | 
			
		||||
    full_name: 'Realm Admin',
 | 
			
		||||
    user_id: 32,
 | 
			
		||||
    is_owner: false,
 | 
			
		||||
    is_admin: true,
 | 
			
		||||
    is_guest: false,
 | 
			
		||||
    is_bot: false,
 | 
			
		||||
@@ -77,11 +78,22 @@ const guest = {
 | 
			
		||||
    email: 'guest@example.com',
 | 
			
		||||
    full_name: 'Guest User',
 | 
			
		||||
    user_id: 33,
 | 
			
		||||
    is_owner: false,
 | 
			
		||||
    is_admin: false,
 | 
			
		||||
    is_guest: true,
 | 
			
		||||
    is_bot: false,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const realm_owner = {
 | 
			
		||||
    email: 'realm_owner@example.com',
 | 
			
		||||
    full_name: 'Realm Owner',
 | 
			
		||||
    user_id: 34,
 | 
			
		||||
    is_owner: true,
 | 
			
		||||
    is_admin: true,
 | 
			
		||||
    is_guest: false,
 | 
			
		||||
    is_bot: false,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const bot_botson = {
 | 
			
		||||
    email: 'botson-bot@example.com',
 | 
			
		||||
    user_id: 35,
 | 
			
		||||
@@ -402,10 +414,12 @@ run_test('user_type', () => {
 | 
			
		||||
    people.add_active_user(me);
 | 
			
		||||
    people.add_active_user(realm_admin);
 | 
			
		||||
    people.add_active_user(guest);
 | 
			
		||||
    people.add_active_user(realm_owner);
 | 
			
		||||
    people.add_active_user(bot_botson);
 | 
			
		||||
    assert.equal(people.get_user_type(me.user_id), i18n.t('Member'));
 | 
			
		||||
    assert.equal(people.get_user_type(realm_admin.user_id), i18n.t('Administrator'));
 | 
			
		||||
    assert.equal(people.get_user_type(guest.user_id), i18n.t('Guest'));
 | 
			
		||||
    assert.equal(people.get_user_type(realm_owner.user_id), i18n.t('Owner'));
 | 
			
		||||
    assert.equal(people.get_user_type(bot_botson.user_id), i18n.t('Bot'));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -91,6 +91,11 @@ run_test('updates', () => {
 | 
			
		||||
    assert.equal(person.full_name, 'Isaac Newton');
 | 
			
		||||
    assert.equal(person.is_admin, true);
 | 
			
		||||
 | 
			
		||||
    user_events.update_person({user_id: isaac.user_id,
 | 
			
		||||
                               role: settings_config.user_role_values.owner.code});
 | 
			
		||||
    assert.equal(person.is_admin, true);
 | 
			
		||||
    assert.equal(person.is_owner, true);
 | 
			
		||||
 | 
			
		||||
    let user_id;
 | 
			
		||||
    let full_name;
 | 
			
		||||
    global.message_live_update.update_user_full_name = function (user_id_arg, full_name_arg) {
 | 
			
		||||
 
 | 
			
		||||
@@ -60,6 +60,7 @@ exports.build_page = function () {
 | 
			
		||||
        realm_signup_notifications_stream_id: page_params.realm_signup_notifications_stream_id,
 | 
			
		||||
        is_admin: page_params.is_admin,
 | 
			
		||||
        is_guest: page_params.is_guest,
 | 
			
		||||
        is_owner: page_params.is_owner,
 | 
			
		||||
        realm_icon_source: page_params.realm_icon_source,
 | 
			
		||||
        realm_icon_url: page_params.realm_icon_url,
 | 
			
		||||
        realm_logo_source: page_params.realm_logo_source,
 | 
			
		||||
 
 | 
			
		||||
@@ -243,7 +243,9 @@ exports.get_user_time = function (user_id) {
 | 
			
		||||
exports.get_user_type = function (user_id) {
 | 
			
		||||
    const user_profile = exports.get_by_user_id(user_id);
 | 
			
		||||
 | 
			
		||||
    if (user_profile.is_admin) {
 | 
			
		||||
    if (user_profile.is_owner) {
 | 
			
		||||
        return i18n.t("Owner");
 | 
			
		||||
    } else if (user_profile.is_admin) {
 | 
			
		||||
        return i18n.t("Administrator");
 | 
			
		||||
    } else if (user_profile.is_guest) {
 | 
			
		||||
        return i18n.t("Guest");
 | 
			
		||||
 
 | 
			
		||||
@@ -171,6 +171,10 @@ exports.user_role_values = {
 | 
			
		||||
        code: 200,
 | 
			
		||||
        description: i18n.t("Administrator"),
 | 
			
		||||
    },
 | 
			
		||||
    owner: {
 | 
			
		||||
        code: 100,
 | 
			
		||||
        description: i18n.t("Owner"),
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// NOTIFICATIONS
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,9 @@ function get_user_info_row(user_id) {
 | 
			
		||||
 | 
			
		||||
function set_user_role_dropdown(person) {
 | 
			
		||||
    let role_value = settings_config.user_role_values.member.code;
 | 
			
		||||
    if (person.is_admin) {
 | 
			
		||||
    if (person.is_owner) {
 | 
			
		||||
        role_value = settings_config.user_role_values.owner.code;
 | 
			
		||||
    } else if (person.is_admin) {
 | 
			
		||||
        role_value = settings_config.user_role_values.admin.code;
 | 
			
		||||
    } else if (person.is_guest) {
 | 
			
		||||
        role_value = settings_config.user_role_values.guest.code;
 | 
			
		||||
@@ -218,6 +220,7 @@ function human_info(person) {
 | 
			
		||||
    info.is_bot = false;
 | 
			
		||||
    info.is_admin = person.is_admin;
 | 
			
		||||
    info.is_guest = person.is_guest;
 | 
			
		||||
    info.is_owner = person.is_owner;
 | 
			
		||||
    info.is_active = people.is_person_active(person.user_id);
 | 
			
		||||
    info.user_id = person.user_id;
 | 
			
		||||
    info.full_name = person.full_name;
 | 
			
		||||
@@ -378,12 +381,16 @@ function open_human_form(person) {
 | 
			
		||||
        email: person.email,
 | 
			
		||||
        full_name: person.full_name,
 | 
			
		||||
        user_role_values: settings_config.user_role_values,
 | 
			
		||||
        disable_role_dropdown: person.is_owner && !page_params.is_owner,
 | 
			
		||||
    });
 | 
			
		||||
    const div = $(html);
 | 
			
		||||
    const modal_container = $('#user-info-form-modal-container');
 | 
			
		||||
    modal_container.empty().append(div);
 | 
			
		||||
    overlays.open_modal('#admin-human-form');
 | 
			
		||||
    set_user_role_dropdown(person);
 | 
			
		||||
    if (!page_params.is_owner) {
 | 
			
		||||
        $('#user-role-select').find('option[value=' + settings_config.user_role_values.owner.code + ']').hide();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const element = "#admin-human-form .custom-profile-field-form";
 | 
			
		||||
    $(element).html("");
 | 
			
		||||
 
 | 
			
		||||
@@ -48,10 +48,16 @@ exports.update_person = function update(person) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Object.prototype.hasOwnProperty.call(person, 'role')) {
 | 
			
		||||
        person_obj.is_admin = person.role === settings_config.user_role_values.admin.code;
 | 
			
		||||
        person_obj.is_owner = person.role === settings_config.user_role_values.owner.code;
 | 
			
		||||
        person_obj.is_admin = person.role === settings_config.user_role_values.admin.code
 | 
			
		||||
            || person_obj.is_owner;
 | 
			
		||||
        person_obj.is_guest = person.role === settings_config.user_role_values.guest.code;
 | 
			
		||||
        settings_users.update_user_data(person.user_id, person);
 | 
			
		||||
 | 
			
		||||
        if (people.is_my_user_id(person.user_id) && page_params.is_owner !== person_obj.is_owner) {
 | 
			
		||||
            page_params.is_owner = person_obj.is_owner;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (people.is_my_user_id(person.user_id) && page_params.is_admin !== person_obj.is_admin) {
 | 
			
		||||
            page_params.is_admin = person_obj.is_admin;
 | 
			
		||||
            gear_menu.update_org_settings_menu_item();
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="input-group">
 | 
			
		||||
                    <label class="input-label" for="user-role-select">{{t 'User role' }}</label>
 | 
			
		||||
                    <select name="user-role-select" id="user-role-select" data-setting-widget-type="number">
 | 
			
		||||
                    <select name="user-role-select" id="user-role-select" data-setting-widget-type="number" {{#if disable_role_dropdown}}disabled{{/if}}>
 | 
			
		||||
                        {{> settings/dropdown_options_widget option_values=user_role_values}}
 | 
			
		||||
                    </select>
 | 
			
		||||
                </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,9 @@
 | 
			
		||||
    {{#unless is_bot}}
 | 
			
		||||
    <td>
 | 
			
		||||
        <span class="user_role">
 | 
			
		||||
            {{#if is_admin}}
 | 
			
		||||
            {{#if is_owner}}
 | 
			
		||||
            {{t "Owner" }}
 | 
			
		||||
            {{else if is_admin}}
 | 
			
		||||
            {{t "Administrator" }}
 | 
			
		||||
            {{else if is_guest}}
 | 
			
		||||
            {{t "Guest" }}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user