import { $gettext } from '../lib/gettext'; class Resources { static addUserToPermissionList(user_id, table_element) { if (!user_id || !table_element) { return; } var is_temporary_table = false; var table_id = jQuery(table_element).attr('id'); if (table_id === 'TemporaryPermissionList') { is_temporary_table = true; } var template_row = jQuery(table_element).find('tr.resource-permission-list-template')[0]; if (!template_row) { //Something is wrong with the HTML return; } var temp_perms_row = false; if (jQuery(template_row).attr('data-temp-perms') === '1') { temp_perms_row = true; } if (!is_temporary_table) { //Check if the user is already in the list: var trs = jQuery(table_element).find('tr'); for (var tr of trs) { if (jQuery(tr).data('user_id') === user_id) { //We have found a table entry for the user specified by //user_id. Nothing to do here. return; } } } var insert_function = function(user_id = null, username = null) { var new_row = jQuery(template_row).clone(true); jQuery(new_row).removeClass('invisible'); jQuery(new_row).removeClass('resource-permission-list-template'); jQuery(new_row).attr('data-user_id', user_id); var row_tds = jQuery(new_row).children('td'); //Set the name-TD's content: var user_td_index = 1; jQuery(row_tds[user_td_index]).children('input').removeAttr('disabled'); if (username) { jQuery(row_tds[user_td_index]).append(username); } else { jQuery(row_tds[user_td_index]).append('ID ' + user_id); } var user_id_input = jQuery(row_tds[user_td_index]).children('input')[0]; if (!user_id_input) { return; } jQuery(user_id_input).val(user_id); var perm_select = jQuery(row_tds[user_td_index + 1]).children()[0]; if (temp_perms_row) { //Set the time input fields to useful values: var begin = new Date(); begin.setHours(begin.getHours() + 1); var begin_month = (begin.getMonth() + 1).toString(); if (begin_month.length === 1) { begin_month = '0' + begin_month; } var begin_date = begin.getDate() + '.' + begin_month + '.' + begin.getFullYear(); var begin_time = begin.getHours() + ':00'; if (begin.getHours() < 10) { begin_time = '0' + begin_time; } var end = new Date(); end.setDate(end.getDate() + 14); var end_month = (end.getMonth() + 1).toString(); if (end_month.length === 1) { end_month = '0' + end_month; } var end_date = end.getDate() + '.' + end_month + '.' + end.getFullYear(); var end_time = end.getHours() + ':00'; if (end.getHours() < 10) { end_time = '0' + end_time; } var begin_td_inputs = jQuery(row_tds[user_td_index + 2]).children(); jQuery(begin_td_inputs[0]).addClass('has-date-picker'); jQuery(begin_td_inputs[1]).addClass('has-time-picker'); jQuery(begin_td_inputs[1]).timepicker({timeFormat: 'HH:mm'}); jQuery(begin_td_inputs[0]).val(begin_date); jQuery(begin_td_inputs[1]).val(begin_time); var end_td_inputs = jQuery(row_tds[user_td_index + 3]).children(); jQuery(end_td_inputs[0]).addClass('has-date-picker'); jQuery(end_td_inputs[1]).addClass('has-time-picker'); jQuery(end_td_inputs[1]).timepicker({timeFormat: 'HH:mm'}); jQuery(end_td_inputs[0]).val(end_date); jQuery(end_td_inputs[1]).val(end_time); } var last_tr = jQuery(table_element).find('tr:last')[0]; if (!last_tr) { //Something is wrong with the HTML. return; } jQuery(last_tr).parent().append(new_row); //Make the empty permission list message box //invisible if it is still visible: jQuery('#ResourceEmptyPermissionListMessage').addClass('invisible'); //Trigger a table update so that the tablesorter will re-sort //the table: jQuery(table_element).trigger('update'); }; STUDIP.api.GET( `user/${user_id}` ).done(function(data) { var username = data.name.family + ', ' + data.name.given; if (data.name.prefix) { username += ', ' + data.name.prefix; } if (data.name.suffix) { username += ' ' + data.name.suffix; } username += ' (' + data.name.username +')' + ' (' + data.perms + ')'; insert_function(user_id, username); }).fail(function() { insert_function(user_id); }); } static addCourseUsersToPermissionList(course_id, table_element) { if (!course_id || !table_element) { return; } STUDIP.api.GET( `course/${course_id}/members`, { data: { //The limit '0' results in a division by zero. //Hopefully, the limit is set to a value high enough: limit: 1000000 } } ).done(function(data) { for (var attribute in data.collection) { var user_id = data.collection[attribute].member.id; STUDIP.Resources.addUserToPermissionList( user_id, table_element ); } }); } static removeUserFromPermissionList(html_node) { if (!html_node) { return; } var row = jQuery(html_node).parent().parent(); var tbody = jQuery(row).parent(); STUDIP.Dialog.confirm( $gettext('Soll die ausgewählte Berechtigung wirklich entfernt werden?') ).done(function () { jQuery(row).remove(); if (jQuery(tbody).children().length < 3) { //No special permissions available: show the empty permission list //message box: jQuery('#ResourceEmptyPermissionListMessage').removeClass('invisible'); } }); } //Room search related methods: static addSearchCriteriaToRoomSearchWidget(select_node) { if (!select_node) { return; } let selected_option = jQuery(select_node).find(":selected")[0]; if (!selected_option) { return; } let option_value = jQuery(selected_option).val(); if (!option_value) { //The first option which is left blank intentionally //has been selected. return; } let option_title = jQuery(selected_option).data('title'); let option_type = jQuery(selected_option).data('type'); let option_select_options = jQuery(selected_option).data('select_options').split(';;'); let option_range_search = jQuery(selected_option).data('range-search'); let template; if (option_type === 'bool') { template = jQuery(select_node).parent().parent().find( '.criteria-list .template[data-template-type="' + option_type + '"]' )[0]; } else if (option_type === 'select') { template = jQuery(select_node).parent().parent().find( '.criteria-list .template[data-template-type="select"]' )[0]; } else if (option_type === 'date') { if (option_range_search) { template = jQuery(select_node).parent().parent().find( '.criteria-list .template[data-template-type="date_range"]' )[0]; } else { template = jQuery(select_node).parent().parent().find( '.criteria-list .template[data-template-type="date"]' )[0]; } } else if (option_type === 'num') { if (option_range_search) { template = jQuery(select_node).parent().parent().find( '.criteria-list .template[data-template-type="range"]' )[0]; } else { template = jQuery(select_node).parent().parent().find( '.criteria-list .template[data-template-type="num"]' )[0]; } } else { template = jQuery(select_node).parent().parent().find( '.criteria-list .template[data-template-type="other"]' )[0]; } if (!template) { return; } let criteria_list = jQuery(template).parent(); let new_criteria = jQuery(template).clone(); jQuery(new_criteria).attr('class', 'item'); jQuery(new_criteria).attr('data-criteria', option_value); let new_criteria_text_field = jQuery(new_criteria).find('span')[0]; jQuery(new_criteria_text_field).text(option_title); if (option_type === 'bool') { let new_criteria_input = jQuery(new_criteria).find('input[type=checkbox]'); jQuery(new_criteria_input).attr('name', option_value); let new_criteria_hidden_input = jQuery(new_criteria).find('input[type=hidden]'); jQuery(new_criteria_hidden_input).attr('name', 'options_' + option_value); } else if (option_type === 'select') { let new_criteria_select = jQuery(new_criteria).find('select')[0]; jQuery(new_criteria_select).attr('name', option_value); //Build the option elements from the data-options field: if (!option_select_options) { //Something is wrong. return; } let options = []; for (let option of option_select_options) { const opt = $('