mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Lets administrators view a list of open(unconfirmed) invitations and
resend or revoke a chosen invitation.
There are a few changes that we can expect for the future:
  * It is currently possible to invite an email that you have already
    invited, it might make sense to change this behavior.
  * Resend currently sends an invite reminder instead of resending the
    original invite, this is because 'custom_body' was not stored when
    the first invite was sent.
Tweaked in various minor ways, primarily in the backend, by tabbott,
mostly for style consistency with the rest of the codebase.
Fixes: #1180.
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var settings = (function () {
 | 
						|
 | 
						|
var exports = {};
 | 
						|
var map;
 | 
						|
 | 
						|
$("body").ready(function () {
 | 
						|
    var $sidebar = $(".form-sidebar");
 | 
						|
    var $targets = $sidebar.find("[data-target]");
 | 
						|
    var $title = $sidebar.find(".title h1");
 | 
						|
    var is_open = false;
 | 
						|
 | 
						|
    var close_sidebar = function () {
 | 
						|
        $sidebar.removeClass("show");
 | 
						|
        is_open = false;
 | 
						|
    };
 | 
						|
 | 
						|
    exports.trigger_sidebar = function (target) {
 | 
						|
        $targets.hide();
 | 
						|
        var $target = $(".form-sidebar").find("[data-target='" + target + "']");
 | 
						|
 | 
						|
        $title.text($target.attr("data-title"));
 | 
						|
        $target.show();
 | 
						|
 | 
						|
        $sidebar.addClass("show");
 | 
						|
        is_open = true;
 | 
						|
    };
 | 
						|
 | 
						|
    $(".form-sidebar .exit").click(function (e) {
 | 
						|
        close_sidebar();
 | 
						|
        e.stopPropagation();
 | 
						|
    });
 | 
						|
 | 
						|
    $("body").click(function (e) {
 | 
						|
        if (is_open && !$(e.target).within(".form-sidebar")) {
 | 
						|
            close_sidebar();
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    $("body").on("click", "[data-sidebar-form]", function (e) {
 | 
						|
        exports.trigger_sidebar($(this).attr("data-sidebar-form"));
 | 
						|
        e.stopPropagation();
 | 
						|
    });
 | 
						|
 | 
						|
    $("body").on("click", "[data-sidebar-form-close]", close_sidebar);
 | 
						|
 | 
						|
    $("#settings_overlay_container").click(function (e) {
 | 
						|
        if (!overlays.is_modal_open()) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        if ($(e.target).closest(".modal").length > 0) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        e.preventDefault();
 | 
						|
        e.stopPropagation();
 | 
						|
        overlays.close_active_modal();
 | 
						|
    });
 | 
						|
});
 | 
						|
 | 
						|
 | 
						|
function _setup_page() {
 | 
						|
    ui.set_up_scrollbar($("#settings_page .sidebar.left"));
 | 
						|
    ui.set_up_scrollbar($("#settings_content"));
 | 
						|
 | 
						|
    // only run once -- if the map has not already been initialized.
 | 
						|
    if (map === undefined) {
 | 
						|
        map = {
 | 
						|
            "your-account": i18n.t("Your account"),
 | 
						|
            "display-settings": i18n.t("Display settings"),
 | 
						|
            notifications: i18n.t("Notifications"),
 | 
						|
            "your-bots": i18n.t("Your bots"),
 | 
						|
            "alert-words": i18n.t("Alert words"),
 | 
						|
            "uploaded-files": i18n.t("Uploaded files"),
 | 
						|
            "muted-topics": i18n.t("Muted topics"),
 | 
						|
            "zulip-labs": i18n.t("Zulip labs"),
 | 
						|
            "organization-profile": i18n.t("Organization profile"),
 | 
						|
            "organization-settings": i18n.t("Organization settings"),
 | 
						|
            "organization-permissions": i18n.t("Organization permissions"),
 | 
						|
            "emoji-settings": i18n.t("Emoji settings"),
 | 
						|
            "auth-methods": i18n.t("Authorization methods"),
 | 
						|
            "user-list-admin": i18n.t("Active users"),
 | 
						|
            "deactivated-users-admin": i18n.t("Deactivated users"),
 | 
						|
            "bot-list-admin": i18n.t("Bot list"),
 | 
						|
            "streams-list-admin": i18n.t("Streams"),
 | 
						|
            "default-streams-list": i18n.t("Default streams"),
 | 
						|
            "filter-settings": i18n.t("Filter settings"),
 | 
						|
            "invites-list-admin": i18n.t("Invitations"),
 | 
						|
        };
 | 
						|
    }
 | 
						|
 | 
						|
    var tab = (function () {
 | 
						|
        var tab = false;
 | 
						|
        var hash_sequence = window.location.hash.split(/\//);
 | 
						|
        if (/#*(settings)/.test(hash_sequence[0])) {
 | 
						|
            tab = hash_sequence[1];
 | 
						|
            return tab || "your-account";
 | 
						|
        }
 | 
						|
        return tab;
 | 
						|
    }());
 | 
						|
 | 
						|
    // Most browsers do not allow filenames to start with `.` without the user manually changing it.
 | 
						|
    // So we use zuliprc, not .zuliprc.
 | 
						|
 | 
						|
    var settings_tab = templates.render('settings_tab', {
 | 
						|
        full_name: people.my_full_name(),
 | 
						|
        page_params: page_params,
 | 
						|
        zuliprc: 'zuliprc',
 | 
						|
        flaskbotrc: 'flaskbotrc',
 | 
						|
        timezones: moment.tz.names(),
 | 
						|
        upload_quota: attachments_ui.bytes_to_size(page_params.upload_quota),
 | 
						|
        total_uploads_size: attachments_ui.bytes_to_size(page_params.total_uploads_size),
 | 
						|
    });
 | 
						|
 | 
						|
    $(".settings-box").html(settings_tab);
 | 
						|
 | 
						|
    // Since we just swapped in a whole new settings widget, we need to
 | 
						|
    // tell settings_sections nothing is loaded.
 | 
						|
    settings_sections.reset_sections();
 | 
						|
 | 
						|
    if (tab) {
 | 
						|
        exports.launch_page(tab);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
exports.setup_page = function () {
 | 
						|
    i18n.ensure_i18n(_setup_page);
 | 
						|
};
 | 
						|
 | 
						|
exports.launch_page = function (tab) {
 | 
						|
    var $active_tab = $("#settings_overlay_container li[data-section='" + tab + "']");
 | 
						|
 | 
						|
    if (!$active_tab.hasClass("admin")) {
 | 
						|
        components.toggle.lookup("settings-toggle").goto("settings", { dont_switch_tab: true });
 | 
						|
    }
 | 
						|
 | 
						|
    overlays.open_settings();
 | 
						|
 | 
						|
    $active_tab.click();
 | 
						|
};
 | 
						|
 | 
						|
exports.set_settings_header = function (key) {
 | 
						|
    if (map[key]) {
 | 
						|
        $(".settings-header h1 .section").text(" / " + map[key]);
 | 
						|
    } else {
 | 
						|
        blueslip.warn("Error: the key '" + key + "' does not exist in the settings" +
 | 
						|
            " header mapping file. Please add it.");
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
exports.handle_up_arrow = function (e) {
 | 
						|
    var prev = e.target.previousElementSibling;
 | 
						|
 | 
						|
    if ($(prev).css("display") !== "none") {
 | 
						|
        $(prev).focus().click();
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
exports.handle_down_arrow = function (e) {
 | 
						|
    var next = e.target.nextElementSibling;
 | 
						|
 | 
						|
    if ($(next).css("display") !== "none") {
 | 
						|
        $(next).focus().click();
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
return exports;
 | 
						|
}());
 | 
						|
 | 
						|
if (typeof module !== 'undefined') {
 | 
						|
    module.exports = settings;
 | 
						|
}
 |