libretime/legacy/public/js/airtime/user/user.js

315 lines
9.1 KiB
JavaScript

function populateForm(entries) {
//$('#user_details').show();
$(".errors").remove();
$(".success").remove();
if (entries.type === "S") {
$("#user_details").hide();
$("#user_details_superadmin_message").show();
$("#type").attr("disabled", "1");
} else {
$("#user_details").show();
$("#user_details_superadmin_message").hide();
$("#type").removeAttr("disabled");
}
$("#user_id").val(entries.id);
$("#login").val(entries.login);
$("#first_name").val(entries.first_name);
$("#last_name").val(entries.last_name);
$("#type").val(entries.type);
$("#email").val(entries.email);
$("#cell_phone").val(entries.cell_phone);
$("#skype").val(entries.skype_contact);
$("#jabber").val(entries.jabber_contact);
if (entries.id.length != 0) {
$("#login").attr("readonly", "readonly");
$("#password").val("xxxxxx");
$("#passwordVerify").val("xxxxxx");
} else {
$("#login").removeAttr("readonly");
$("#password").val("");
$("#passwordVerify").val("");
}
}
function rowClickCallback(row_id) {
$.ajax({
url: baseUrl + "User/get-user-data/id/" + row_id + "/format/json",
dataType: "json",
success: function (data) {
populateForm(data.entries);
$("#user_details").css("visibility", "visible");
},
});
}
function removeUserCallback(row_id, nRow) {
if (confirm($.i18n._("Are you sure you want to delete this user?"))) {
$.ajax({
url: baseUrl + "User/remove-user/id/" + row_id + "/format/json",
dataType: "text",
success: function (data) {
var o = $("#users_datatable").dataTable().fnDeleteRow(nRow);
},
});
}
}
function rowCallback(nRow, aData, iDisplayIndex) {
$(nRow).click(function () {
rowClickCallback(aData["id"]);
});
if (aData["delete"] != "self") {
$("td:eq(4)", nRow)
.append('<span class="ui-icon ui-icon-closethick"></span>')
.children("span")
.click(function (e) {
e.stopPropagation();
removeUserCallback(aData["id"], nRow);
});
} else {
$("td:eq(4)", nRow)
.empty()
.append('<span class="ui-icon ui-icon-closethick"></span>')
.children("span")
.click(function (e) {
e.stopPropagation();
alert($.i18n._("Can't delete yourself!"));
});
}
if (aData["type"] == "A") {
$("td:eq(3)", nRow).html($.i18n._("Admin"));
} else if (aData["type"] == "H") {
$("td:eq(3)", nRow).html($.i18n._("DJ"));
} else if (aData["type"] == "G") {
$("td:eq(3)", nRow).html($.i18n._("Guest"));
} else if (aData["type"] == "P") {
$("td:eq(3)", nRow).html($.i18n._("Program Manager"));
} else if (aData["type"] == "S") {
$("td:eq(3)", nRow).html($.i18n._("Super Admin"));
$("td:eq(4)", nRow).html(""); //Disable deleting the super admin
}
return nRow;
}
function populateUserTable() {
var dt = $("#users_datatable");
dt.dataTable({
bProcessing: true,
bServerSide: true,
sAjaxSource: baseUrl + "User/get-user-data-table-info/format/json",
fnServerData: function (sSource, aoData, fnCallback) {
$.ajax({
dataType: "json",
type: "POST",
url: sSource,
data: aoData,
success: fnCallback,
});
},
fnRowCallback: rowCallback,
aoColumns: [
/* Id */ {
sName: "id",
bSearchable: false,
bVisible: false,
mDataProp: "id",
},
/* user name */ { sName: "login", mDataProp: "login" },
/* first name */ { sName: "first_name", mDataProp: "first_name" },
/* last name */ { sName: "last_name", mDataProp: "last_name" },
/* user type */ { sName: "type", bSearchable: false, mDataProp: "type" },
/* del button */ {
sName: "null as delete",
bSearchable: false,
bSortable: false,
mDataProp: "delete",
},
],
bJQueryUI: true,
bAutoWidth: false,
bLengthChange: false,
oLanguage: getDatatablesStrings({
sEmptyTable: $.i18n._("No users were found."),
sEmptyTable: $.i18n._("No users found"),
sZeroRecords: $.i18n._("No matching users found"),
sInfo: $.i18n._("Showing _START_ to _END_ of _TOTAL_ users"),
sInfoEmpty: $.i18n._("Showing 0 to 0 of 0 users"),
sInfoFiltered: $.i18n._("(filtered from _MAX_ total users)"),
}),
sDom: '<"H"lf<"dt-process-rel"r>><"#user_list_inner_wrapper"t><"F"ip>',
});
}
function sizeFormElements() {
$("dt[id$='label']").addClass("user-form-label");
$("dd[id$='element']").addClass("user-form-element");
}
function assignUserRightsToUserTypes() {
//assign user-rights and id to each user type option so we can
//display user rights for each with tipsy tooltip
$.each($("#type").children(), function (i, opt) {
switch ($(this).val()) {
case "G":
$(this).attr("id", "user-type-G");
$(this).attr(
"user-rights",
$.i18n._("Guests can do the following:") +
"<br><br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View show content"),
);
break;
case "H":
$(this).attr("id", "user-type-H");
$(this).attr(
"user-rights",
$.i18n._("DJs can do the following:") +
"<br><br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View show content") +
"<br>" +
$.i18n._("Manage assigned show content") +
"<br>" +
$.i18n._("Import media files") +
"<br>" +
$.i18n._("Create playlists, smart blocks, and webstreams") +
"<br>" +
$.i18n._("Manage their own library content"),
);
break;
case "P":
$(this).attr("id", "user-type-P");
$(this).attr(
"user-rights",
$.i18n._("Program Managers can do the following:") +
"<br><br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View and manage show content") +
"<br>" +
$.i18n._("Schedule shows") +
"<br>" +
$.i18n._("Import media files") +
"<br>" +
$.i18n._("Create playlists, smart blocks, and webstreams") +
"<br>" +
$.i18n._("Manage all library content"),
);
break;
case "A":
$(this).attr("id", "user-type-A");
$(this).attr(
"user-rights",
$.i18n._("Admins can do the following:") +
"<br><br>" +
$.i18n._("Manage preferences") +
"<br>" +
$.i18n._("Manage users") +
"<br>" +
$.i18n._("Manage watched folders") +
"<br>" +
$.i18n._("Send support feedback") +
"<br>" +
$.i18n._("View system status") +
"<br>" +
$.i18n._("Access playout history") +
"<br>" +
$.i18n._("View listener stats") +
"<br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View and manage show content") +
"<br>" +
$.i18n._("Schedule shows") +
"<br>" +
$.i18n._("Import media files") +
"<br>" +
$.i18n._("Create playlists, smart blocks, and webstreams") +
"<br>" +
$.i18n._("Manage all library content"),
);
break;
}
});
}
function initUserData() {
var type = $("#type");
type.live("change", function () {
//when the title changes on live tipsy tooltips the changes take
//affect the next time tipsy is shown so we need to hide and re-show it
$(this).tipsy("hide").tipsy("show");
});
type.tipsy({
gravity: "w",
html: true,
opacity: 0.9,
trigger: "manual",
live: true,
title: function () {
return $("#user-type-" + $(this).val()).attr("user-rights");
},
});
var table = $("#users_datable"); //.DataTable();
$(".datatable tbody").on("click", "tr", function () {
$(this).parent().find("tr.selected").removeClass("selected");
$(this).addClass("selected");
});
$("#button").click(function () {
table.row(".selected").remove().draw(false);
});
type.tipsy("show");
var newUser = { login: "", first_name: "", last_name: "", type: "G", id: "" };
$("#add_user_button").live("click", function () {
populateForm(newUser);
$("#user_details").css("visibility", "visible");
});
}
$(document).ready(function () {
populateUserTable();
assignUserRightsToUserTypes();
initUserData();
$("#save_user").live("click", function () {
var data = $("#user_form").serialize();
var url = baseUrl + "User/add-user";
$.post(url, { format: "json", data: data }, function (json) {
if (json.valid === "true") {
$("#content").empty().append(json.html);
populateUserTable();
assignUserRightsToUserTypes();
init(); // Reinitialize
} else {
//if form is invalid we only need to redraw the form
$("#user_form")
.empty()
.append($(json.html).find("#user_form").children());
$("#password").val("");
$("#passwordVerify").val("");
}
setTimeout(removeSuccessMsg, 5000);
sizeFormElements();
});
});
sizeFormElements();
});