diff --git a/admin/themes/default/js/user_list.js b/admin/themes/default/js/user_list.js new file mode 100644 index 000000000..046e2f2e7 --- /dev/null +++ b/admin/themes/default/js/user_list.js @@ -0,0 +1,1532 @@ +const color_icons = ["icon-red", "icon-blue", "icon-yellow", "icon-purple", "icon-green"]; +const status_arr = ['webmaster', 'admin', 'normal', 'generic', 'guest']; +const level_arr = ['0', '1', '2', '4', '8']; +let current_users = []; +let guest_id = 0; +let guest_user = {}; +let connected_user = 0; +let groups_arr = []; +let nb_days = ''; +let nb_photos = ''; +let nb_photos_per_page = ''; +let last_user_index = -1; +let last_user_id = -1; +let pwg_token = ''; +let selection = []; +let first_update = true; +/*---------------- +Escape of pop-in +----------------*/ + +//get out of pop in via escape key +$(document).on('keydown', function (e) { + if ( e.keyCode === 27) { // ESC button + $("#UserList").fadeOut(); + } +}); + +//get out of pop in via clicking outside pop in +//$(document).on('click', function (e) { +// console.log($(e.target)); +// if ($(e.target) && $(e.target).closest(".UserListPopInContainer").length === 0) { +// $("#UserList").fadeOut(); +// } +//}); + +/*---------------- +Group Selectize +----------------*/ + +jQuery('[data-selectize=groups]').selectize({ + valueField: 'value', + labelField: 'label', + searchField: ['label'], + plugins: ['remove_button'] +}); + +let groupSelectize = jQuery('[data-selectize=groups]')[0].selectize; +let groupGuestSelectize = jQuery('[data-selectize=groups]')[1].selectize; + +/*----------------- +OnClick functions +-----------------*/ +function open_user_list() { + hide_temporary_messages(); + $("#UserList").fadeIn(); +} + +function close_user_list() { + hide_temporary_messages(); + $("#UserList").fadeOut(); +} + +function open_guest_user_list() { + hide_temporary_messages(); + $("#GuestUserList").fadeIn(); +} + +function close_guest_user_list() { + hide_temporary_messages(); + $("#GuestUserList").fadeOut(); +} + + +function isSelectionMode() { + return $("#toggleSelectionMode").is(":checked") +} + + +$( document ).ready(function() { + $(".user-property-register").tipTip({ + maxWidth: "300px", + delay: 0, + fadeIn: 200, + fadeOut: 200 + }); + $(".user-property-last-visit").tipTip({ + maxWidth: "300px", + delay: 0, + fadeIn: 200, + fadeOut: 200 + }); + $(".advanced-filter-level select option").eq(1).remove(); + $('.edit-password').click(function () { + $('.user-property-password').hide(); + $('.user-property-password-change').show().css('display', 'flex'); + }) + + $('.edit-password-cancel').click(function () { + //possibly reset input value + $('.user-property-password').show(); + $('.user-property-password-change').hide(); + }) + + $('.edit-username').click(function () { + $('.user-property-username').hide(); + $('.user-property-username-change').show().css('display', 'flex'); + }) + + $('.edit-username-cancel').click(function () { + //possibly reset input value + $('.user-property-username').show(); + $('.user-property-username-change').hide(); + }) + + $('#UserList .close-update-button').click(close_user_list); + $('.CloseUserList').click(close_user_list); + + $("#toggleSelectionMode").attr("checked", false); + $("#toggleSelectionMode").click(function () { + let isSelection = $(this).is(":checked"); + selectionMode(isSelection); + }); + $('.edit-guest-user-button').click(open_guest_user_list); + $('.CloseGuestUserList').click(close_guest_user_list); + $('#GuestUserList .close-update-button').click(close_guest_user_list); + + $("#show_password").click(function() { + if ($(this).hasClass("icon-eye")) { + $(this).removeClass("icon-eye"); + $(this).addClass("icon-eye-off"); + $("#AddUserPassword").get(0).type = "text"; + $(this).html(hide_str) + } else { + $(this).removeClass("icon-eye-off"); + $(this).addClass("icon-eye"); + $("#AddUserPassword").get(0).type = "password"; + $(this).html(show_str) + } + }) + /* Action */ + jQuery("[id^=action_]").hide(); + + jQuery("select[name=selectAction]").change(function () { + jQuery("#applyActionBlock .infos").hide(); + jQuery("[id^=action_]").hide(); + jQuery("#action_"+$(this).prop("value")).show(); + if (jQuery(this).val() != -1) { + jQuery("#applyActionBlock").show(); + } else { + jQuery("#applyActionBlock").hide(); + } + }); + jQuery("#applyAction").click(function() { + let action = jQuery("select[name=selectAction]").prop("value"); + let method = 'pwg.users.setInfo'; + let data = { + pwg_token: pwg_token, + user_id: selection.map(x => x.id) + }; + switch (action) { + case 'delete': + if (!($("#permitActionUserList .user-list-checkbox[name=confirm_deletion]").attr("data-selected") === "1")) { + alert(missingConfirm); + return false; + } + method = 'pwg.users.delete'; + break; + case 'group_associate': + method = 'pwg.groups.addUser'; + data.group_id = jQuery("#permitActionUserList select[name=associate]").prop("value"); + break; + case 'group_dissociate': + method = 'pwg.groups.deleteUser'; + data.group_id = jQuery("#permitActionUserList select[name=dissociate]").prop("value"); + break; + case 'status': + data.status = jQuery("#permitActionUserList select[name=status]").prop("value"); + break; + case 'enabled_high': + data.enabled_high = $("#permitActionUserList .user-list-checkbox[name=enabled_high_yes]").attr("data-selected") === "1" ? true : false; + break; + case 'level': + data.level = jQuery("#permitActionUserList select[name=level]").val(); + break; + case 'nb_image_page': + data.nb_image_page = jQuery("#permitActionUserList input[name=nb_image_page]").val(); + break; + case 'theme': + data.theme = jQuery("#permitActionUserList select[name=theme]").val(); + break; + case 'language': + data.language = jQuery("#permitActionUserList select[name=language]").val(); + break; + case 'recent_period': + data.recent_period = recent_period_values[$('#permitActionUserList .period-select-bar .select-bar-container').slider("option", "value")];; + break; + case 'expand': + data.expand = $("#permitActionUserList .user-list-checkbox[name=expand_yes]").attr("data-selected") === "1" ? true : false; + break; + case 'show_nb_comments': + data.show_nb_comments = $("#permitActionUserList .user-list-checkbox[name=show_nb_comments_yes]").attr("data-selected") === "1" ? true : false + break; + case 'show_nb_hits': + data.show_nb_hits = $("#permitActionUserList .user-list-checkbox[name=show_nb_hits_yes]").attr("data-selected") === "1" ? true : false; + break; + default: + alert("Unexpected action"); + return false; + } + jQuery.ajax({ + url: "ws.php?format=json&method="+method, + type:"POST", + data: data, + beforeSend: function() { + jQuery("#applyActionLoading").show(); + jQuery("#applyActionBlock .infos").fadeOut(); + }, + success:function(data) { + jQuery("#applyActionLoading").hide(); + jQuery("#applyActionBlock .infos").fadeIn(); + jQuery("#applyActionBlock .infos").css("display", "inline-block"); + update_user_list(); + if (action == 'delete') { + selection = []; + update_selection_content(); + } + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + jQuery("#applyActionLoading").hide(); + } + }); + return false; + }); + + $(".yes_no_radio .user-list-checkbox").unbind("click").click(function () { + if ($(this).attr("data-selected") !== "1") { + $(this).attr("data-selected", "1"); + $(this).siblings().attr("data-selected", "0"); + } + }) + $(".AddUserGenPassword").click(gen_password); + $('.AddUserSubmit').click(add_user); + $('.AddUserCancel').click(add_user_close); + $(".CloseAddUser").click(add_user_close); + + + //open add user pop in + $('.add-user-button').click(add_user_open); + + /* Select */ + + jQuery("#selectSet").click(function () { + select_whole_set(); + return false; + }); + + + jQuery("#selectAllPage").click(function () { + let selection_ids = selection.map(x => x.id); + for (let i = 0; i < current_users.length; i++) { + if (!selection_ids.includes(current_users[i].id)) { + selection.push({id: current_users[i].id, username: current_users[i].username}); + } + } + update_selection_content(); + return false; + }); + + jQuery("#selectNone").click(function () { + selection = []; + update_selection_content(); + return false; + }); + + jQuery("#selectInvert").click(function () { + let selection_ids = selection.map(x => x.id); + for (let i = 0; i < current_users.length; i++) { + if (selection_ids.includes(current_users[i].id)) { + selection.splice(selection.findIndex((x) => x.id == current_users[i].id), 1); + } else { + selection.push({id: current_users[i].id, username: current_users[i].username}); + } + } + update_selection_content(); + return false; + }); + + $("#permitActionUserList select[name=selectAction]").val("-1"); + + $("#advanced_filter_button").click(advanced_filter_button_click); + $("#advanced-filter-container span.icon-cancel").click(advanced_filter_hide); + $(".advanced-filter-select").change(update_user_list); + $("#user_search").on("input", update_user_list); + + + /*View manager*/ + + if (!$.cookie("pwg_user_manager_view")) { + $.cookie("pwg_user_manager_view", "tile"); + } + + if ($("#displayCompact").is(":checked")) { + setDisplayCompact(); + }; + + if ($("#displayLine").is(":checked")) { + setDisplayLine(); + }; + + if ($("#displayTile").is(":checked")) { + setDisplayTile(); + }; + + $("#displayCompact").change(function () { + setDisplayCompact(); + + if ($(".addAlbum").hasClass("input-mode")) { + $(".addAlbum p").hide(); + } + + $.cookie("pwg_user_manager_view", "compact"); + + }); + + $("#displayLine").change(function () { + setDisplayLine(); + + if ($(".addAlbum").hasClass("input-mode")) { + $(".addAlbum p").hide(); + } + + $.cookie("pwg_user_manager_view", "line"); + }); + + $("#displayTile").change(function () { + setDisplayTile(); + + if ($(".addAlbum").hasClass("input-mode")) { + $(".addAlbum p").show(); + } + + $.cookie("pwg_user_manager_view", "tile"); + }); + + /* Pagination */ + + if ($.cookie("pwg_user_manager_view") === "compact") { + if (per_page < 10) { + per_page = 10 + update_pagination_menu(); + update_user_list(); + + $("#pagination-per-page-5").removeClass("selected-pagination"); + $("#pagination-per-page-10").addClass("selected-pagination"); + $("#pagination-per-page-25").removeClass("selected-pagination"); + $("#pagination-per-page-50").removeClass("selected-pagination"); + } + } else { + $("#pagination-per-page-5").addClass("selected-pagination"); + $("#pagination-per-page-10").removeClass("selected-pagination"); + $("#pagination-per-page-25").removeClass("selected-pagination"); + $("#pagination-per-page-50").removeClass("selected-pagination"); + } + +}); + +function setDisplayTile() { + $(".user-container-wrapper").removeClass("compactView").removeClass("lineView").addClass("tileView"); + $(".user-header-col").addClass("hide"); + +} + +function setDisplayLine() { + $(".user-container-wrapper").removeClass("tileView").removeClass("compactView").addClass("lineView"); + $(".user-header-col").removeClass("hide"); + +} + +function setDisplayCompact() { + $(".user-container-wrapper").removeClass("tileView").removeClass("lineView").addClass("compactView"); + $(".user-header-col").addClass("hide"); + + if (per_page < 10) { + per_page = 10 + update_pagination_menu(); + update_user_list(); + + $("#pagination-per-page-5").removeClass("selected-pagination"); + $("#pagination-per-page-10").addClass("selected-pagination"); + $("#pagination-per-page-25").removeClass("selected-pagination"); + $("#pagination-per-page-50").removeClass("selected-pagination"); + } +} + + +/*---------------- +Checkboxes +----------------*/ + +function checkbox_change() { + if ($(this).attr('data-selected') == '1') { + $(this).find("i").hide(); + } else { + $(this).find("i").show(); + } +} + +function checkbox_click() { + if ($(this).attr('data-selected') == '1') { + $(this).attr('data-selected', '0'); + $(this).find("i").hide(); + } else { + $(this).attr('data-selected', '1'); + $(this).find("i").show(); + } +} + +$('.user-list-checkbox').unbind("change").change(checkbox_change); +$('.user-list-checkbox').unbind("click").click(checkbox_click); + +/* --------------- +User edit sliders +----------------*/ +const nb_image_page_values = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,35,40,45,50,60,70,80,90,100,200,300,500,999]; +const recent_period_values = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,30,40,50,60,80,99]; +const recent_period_init = 0; +//const recent_period_init = getSliderKeyFromValue($('.period-select-bar input[name=recent_period]').val(), recent_period_values); +const nb_image_page_init = 0; +//const nb_image_page_init = getSliderKeyFromValue($('.photos-select-bar input[name=nb_image_page]').val(), nb_image_page_values); + +/** +* find the key from a value in the startStopValues array +*/ +function getSliderKeyFromValue(value, values) { + for (var key in values) { + if (values[key] >= value) { + return key; + } + } + return 0; +} + +function getNbImagePageInfoFromIdx(idx) { + return sprintf( + nb_photos, + nb_image_page_values[idx] + ); +} + +function getRecentPeriodInfoFromIdx(idx) { + return sprintf( + nb_days, + recent_period_values[idx] + ); + //return recent_period_values[idx].toString(); +} + +/* Photos bar slider */ +jQuery('#UserList .photos-select-bar .select-bar-container').slider({ + range: "min", + min: 0, + max: nb_image_page_values.length - 1, + value: nb_image_page_init, + change: function( event, ui ) { + $('#UserList .photos-select-bar .nb-img-page-infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + slide: function( event, ui ) { + $('#UserList .photos-select-bar .nb-img-page-infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + $('#UserList .photos-select-bar input[name=nb_image_page]').val(nb_image_page_values[ui.value]).trigger('change'); + } +}); + + +jQuery('#GuestUserList .photos-select-bar .select-bar-container').slider({ + range: "min", + min: 0, + max: nb_image_page_values.length - 1, + value: nb_image_page_init, + change: function( event, ui ) { + $('#GuestUserList .photos-select-bar .nb-img-page-infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + slide: function( event, ui ) { + $('#GuestUserList .photos-select-bar .nb-img-page-infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + $('#GuestUserList .photos-select-bar input[name=nb_image_page]').val(nb_image_page_values[ui.value]).trigger('change'); + } +}); + +$('#permitActionUserList .photos-select-bar .nb-img-page-infos').html(getNbImagePageInfoFromIdx(0)); +jQuery('#permitActionUserList .photos-select-bar .select-bar-container').slider({ + range: "min", + min: 0, + max: nb_image_page_values.length - 1, + value: nb_image_page_init, + change: function( event, ui ) { + $('#permitActionUserList .photos-select-bar .nb-img-page-infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + slide: function( event, ui ) { + $('#permitActionUserList .photos-select-bar .nb-img-page-infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + $('#permitActionUserList .photos-select-bar input[name=nb_image_page]').val(nb_image_page_values[ui.value]).trigger('change'); + } +}); + +/* recent_period slider */ +$('#UserList .period-select-bar .select-bar-container').slider({ + range: "min", + min: 0, + max: recent_period_values.length - 1, + value: recent_period_init, + change: function( event, ui ) { + $('#UserList .period-select-bar .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + slide: function( event, ui ) { + $('#UserList .period-select-bar .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + $('#UserList .period-select-bar input[name=recent_period]').val(recent_period_values[ui.value]).trigger('change'); + } +}); + +$('#GuestUserList .period-select-bar .select-bar-container').slider({ + range: "min", + min: 0, + max: recent_period_values.length - 1, + value: recent_period_init, + change: function( event, ui ) { + $('#GuestUserList .period-select-bar .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + slide: function( event, ui ) { + $('#GuestUserList .period-select-bar .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + $('#GuestUserList .period-select-bar input[name=recent_period]').val(recent_period_values[ui.value]).trigger('change'); + } +}); + +$('#permitActionUserList .period-select-bar .select-bar-container').slider({ + range: "min", + min: 0, + max: recent_period_values.length - 1, + value: recent_period_init, + change: function( event, ui ) { + $('#permitActionUserList .period-select-bar .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + slide: function( event, ui ) { + $('#permitActionUserList .period-select-bar .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + $('#permitActionUserList .period-select-bar input[name=recent_period]').val(recent_period_values[ui.value]).trigger('change'); + } +}); +$('#permitActionUserList .photos-select-bar .select-bar-container').slider("option", "value", 0); +let period_info = getRecentPeriodInfoFromIdx(0); +$('#permitActionUserList .period-select-bar .recent_period_infos').html(period_info); + + +/* ----------- +Pagination +------------*/ + +let per_page = 5; +let actual_page = 1; +let max_page = 1; +let nb_filtered_users = 0; +const page_ellipsis = '...' +const page_item = '%d'; +let promise_pending = false; +let update_ask = false; + +function move_to_page(page) { + if (page < 1 || page > max_page) + return; + actual_page = page; + update_pagination_menu(); + update_user_list(); +} + +$('.pagination-arrow.rigth').on('click', () => { + move_to_page(actual_page + 1); +}) + +$('.pagination-arrow.left').on('click', () => { + move_to_page(actual_page - 1); +}) + +$('.pagination-per-page a').on('click',function () { + per_page = parseInt($(this).html()); + actual_page = 1; + update_pagination_menu(); + update_user_list(); + + + $(this).parent().children("a").removeClass("selected-pagination"); + + $(this).addClass("selected-pagination"); +}); + +function append_pagination_item(page = null) { + if (page != null) { + let new_tag = $(page_item.replace(/%d/g, page)); + $('.pagination-item-container').append(new_tag); + if (actual_page == page) { + new_tag.addClass('actual'); + } + new_tag.on('click', () => { + move_to_page(new_tag.data('page')); + }) + } else { + $('.pagination-item-container').append($(page_ellipsis)); + } +} + +function update_pagination_items() { + $('.pagination-item-container a').remove(); + $('.pagination-item-container span').remove(); + + append_pagination_item(1); + + if (actual_page > 2) { + append_pagination_item(); + } + if (actual_page != 1 && actual_page != max_page) { + append_pagination_item(actual_page) + } + if (actual_page < (max_page - 1)) { + append_pagination_item(); + } + append_pagination_item(max_page); + +} + +function update_pagination_menu() { + max_page = Math.ceil(nb_filtered_users / per_page); + updateArrows(); + update_pagination_items(); + if (max_page <= 1) { + $('.pagination-container').hide(); + } else { + $('.pagination-container').show(); + } +} + +function updateArrows() { + if (actual_page == 1) { + $('.pagination-arrow.left').addClass('unavailable'); + } else { + $('.pagination-arrow.left').removeClass('unavailable'); + } + if (actual_page == max_page) { + $('.pagination-arrow.rigth').addClass('unavailable'); + } else { + $('.pagination-arrow.rigth').removeClass('unavailable'); + } +} + +/*------------------ +Advanced filter +------------------*/ + +function advanced_filter_button_click() { + if ($("#advanced-filter-container").css("display") === "none") { + advanced_filter_show(); + } else { + advanced_filter_hide(); + } +} + +function advanced_filter_show() { + $("#advanced-filter-container").show(); + $("#advanced_filter_button").addClass("extended-filter-btn"); + update_user_list(); +} + +function advanced_filter_hide() { + $("#advanced-filter-container").hide(); + $("#advanced_filter_button").removeClass("extended-filter-btn"); + update_user_list(); +} + +let months = []; + +function getDateStr(date) { + let date_arr = date.split(' '); + let curr_month = months[parseInt(date_arr[0]) - 1]; + return curr_month + " " + date_arr[1] +} + +function setupRegisterDates(register_dates) { + $('#advanced-filter-container .dates-select-bar .select-bar-container').slider({ + range: true, + min: 0, + max: register_dates.length - 1, + values: [0, register_dates.length - 1], + change: function( event, ui ) { + $("#advanced-filter-container .dates-infos").html(sprintf(dates_infos, getDateStr(register_dates[ui.values[0]]), getDateStr(register_dates[ui.values[1]]))); + }, + slide: function( event, ui ) { + $("#advanced-filter-container .dates-infos").html(sprintf(dates_infos, getDateStr(register_dates[ui.values[0]]), getDateStr(register_dates[ui.values[1]]))); + }, + stop: function( event, ui ) { + $("#advanced-filter-container .dates-infos").html(sprintf(dates_infos, getDateStr(register_dates[ui.values[0]]), getDateStr(register_dates[ui.values[1]]))); + update_user_list(); + } + }); + + $("#advanced-filter-container .dates-infos").html(sprintf(dates_infos, getDateStr(register_dates[0]), getDateStr(register_dates[register_dates.length - 1]))); + +} +/*------------------ +Add User +------------------*/ + +function gen_password(e) { + e.preventDefault(); + + var characterSet = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789'; + + var i; + var password; + var length = getRandomInt(8, 15); + + password = ''; + for (i = 0; i < length; i++) { + password += characterSet.charAt(Math.floor(Math.random() * characterSet.length)); + } + + jQuery("#AddUserPassword").val(password); +} + +function add_user_close() { + $("#AddUser").fadeOut(); +} + +function add_user_open() { + $('#AddUser .AddUserInput').val(''); + $("#AddUser").fadeIn(); +} + +/*------------------ +Selection mode +------------------*/ + +function checkbox_container_change() { + if ($(this).attr('data-selected') == '1') { + $(this).attr('data-selected', '0'); + $(this).find("i").hide(); + } else { + $(this).attr('data-selected', '1'); + $(this).find("i").show(); + } +} + +function checkbox_container_click() { + let curr_container = $(this).closest(".user-container"); + let in_container = curr_container.length != 0; + let curr_user = in_container ? current_users[parseInt(curr_container.attr("key"))] : {id: -1}; + if ($(this).attr('data-selected') == '1') { + $(this).attr('data-selected', '0'); + $(this).find("i").hide(); + if (in_container) { + curr_container.removeClass("container-selected"); + selection = selection.filter((elem) => elem.id != curr_user.id); + } + } else { + $(this).attr('data-selected', '1'); + $(this).find("i").show(); + if (in_container) { + curr_container.addClass("container-selected"); + selection.push({id: curr_user.id, username: curr_user.username}) + } + } + if (in_container) { + update_selection_content(); + } +} + +function create_user_selected_item(user) { + let new_elem = $("#template .user-selected-item").clone(); + new_elem.attr("data-id", user.id.toString()); + new_elem.find("p").html(user.username); + new_elem.find("a").click(() => { + selection.splice(selection.findIndex((i) => i.id == user.id), 1); + update_selection_content(); + }) + return new_elem; +} + +function generate_user_selected_items() { + let items_created = 0; + let others = selection.length - 5; + $('.user-selected-list .user-selected-item').remove(); + for (let i = 0; i < selection.length && items_created < 5; i++) { + if (typeof selection[i].username !== 'undefined') { + $('.user-selected-list').append(create_user_selected_item(selection[i])); + items_created += 1; + } + } + if (others >= 1) { + $(".selection-other-users").html(str_and_others_tags.replace('%s', others)) + $(".selection-other-users").show() + } else { + $(".selection-other-users").hide(); + } + return +} + +function fill_user_selected_list() { + let elems_with_username = 0; + for (let i = 0; i < selection.length && elems_with_username < 5;i++) { + if (typeof selection[i].username !== 'undefined') { + elems_with_username += 1; + } + } + if (elems_with_username < 5 && elems_with_username != selection.length) { + get_first_selection_usernames(generate_user_selected_items); + } else { + generate_user_selected_items(); + } +} + +function update_selection_content() { + number = selection.length; + fill_user_selected_list(); + if (number == 0) { + $("#forbidAction").show(); + $('.selection-mode-ul').hide(); + $("#permitActionUserList").hide(); + } else { + $("#forbidAction").hide(); + $("#permitActionUserList").show(); + $('.selection-mode-ul').show(); + } + set_selected_to_selection(); + $("#applyActionBlock .infos").hide(); +} + +function set_selected_to_selection() { + if (!$("#toggleSelectionMode").is(":checked")) { + return + } + $(".user-container-wrapper .user-container").each(function (index) { + selection_ids = selection.map(x => x.id); + if (selection_ids.includes(current_users[index].id)) { + $(this).addClass("container-selected"); + $(this).find(".user-list-checkbox").attr("data-selected", "1"); + $(this).find(".user-list-checkbox i").show(); + } else { + $(this).removeClass("container-selected"); + $(this).find(".user-list-checkbox").attr("data-selected", "0"); + $(this).find(".user-list-checkbox i").hide(); + } + }) +} + +function selectionMode(isSelection) { + $("#permitActionUserList select[name=selectAction]").val("-1"); + $("#permitActionUserList select[name=selectAction]").trigger("change"); + if (isSelection) { + //resets the selection + //selection = []; + set_selected_to_selection(); + $(".in-selection-mode").show(); + $(".not-in-selection-mode").hide(); + + if ($.cookie("pwg_user_manager_view") === "tile") { + $(".user-container-email").show(); + } + + if ($.cookie("pwg_user_manager_view") === "tile" || $.cookie("pwg_user_manager_view") === "line") { + $(".user-container-email").css({ + display: "flex" + }) + } + + + } else { + $(".container-selected").removeClass("container-selected"); + $(".in-selection-mode").hide(); + $(".not-in-selection-mode").show(); + + if ($.cookie("pwg_user_manager_view") === "tile" || $.cookie("pwg_user_manager_view") === "line") { + $(".user-container-email").css({ + display: "flex" + }) + } + } +} + + +/*------------------ +General functions +------------------*/ + +function hide_temporary_messages() { + $(".update-user-success").hide(); + $("#AddUserSuccess").hide(); + $('.error-msg').hide(); +} + +function get_group_name_from_id(id) { + for (let i = 0; i < groups_arr.length; i++) { + if (groups_arr[i][0] == id) { + return (groups_arr[i][1]); + } + } + return ("group_id error"); +} + +function get_container_index_from_uid(uid) { + for (let i = 0; i < current_users.length; i++) { + if (current_users[i].id == uid) { + return i; + } + } + return -1; +} + +/*----------------------- +Generate User Containers +-----------------------*/ +function user_container_click() { + if (!isSelectionMode()) { + return; + } + let curr_container = $(this) + let in_container = curr_container.length != 0; + let container_checkbox = $(this).find('.user-list-checkbox'); + let curr_user = in_container ? current_users[parseInt(curr_container.attr("key"))] : {id: -1}; + if (container_checkbox.attr('data-selected') == '1') { + container_checkbox.attr('data-selected', '0'); + container_checkbox.find("i").hide(); + if (in_container) { + curr_container.removeClass("container-selected"); + selection = selection.filter((elem) => elem.id != curr_user.id); + } + } else { + container_checkbox.attr('data-selected', '1'); + container_checkbox.find("i").show(); + if (in_container) { + curr_container.addClass("container-selected"); + selection.push({id: curr_user.id, username: curr_user.username}) + } + } + if (in_container) { + update_selection_content(); + } +} + +function generate_groups(container, groups) { + container.find(".user-container-groups").html(''); + if (groups.length >= 1) { + let primary_grp = $("#template .group-primary").clone(); + primary_grp.html(get_group_name_from_id(groups[0])); + primary_grp.addClass(color_icons[groups[0] % 5]); + container.find(".user-container-groups").append(primary_grp); + } + if (groups.length >= 2) { + let primary_grp = $("#template .group-primary").clone(); + primary_grp.html(get_group_name_from_id(groups[1])); + primary_grp.addClass(color_icons[groups[1] % 5]); + container.find(".user-container-groups").append(primary_grp); + } + if (groups.length >= 3) { + let bonus_grp = $("#template .group-bonus").clone(); + bonus_grp.html("..."); + bonus_grp.addClass(color_icons[groups[2] % 5]); + bonus_grp.addClass("tiptip"); + let groups_in_title = ""; + for (let i = 2; i < groups.length; i++) { + groups_in_title += get_group_name_from_id(groups[i]) + ", "; + } + groups_in_title = groups_in_title.substring(0, groups_in_title.length -2); + bonus_grp.prop('title', groups_in_title); + container.find(".user-container-groups").append(bonus_grp); + } +} + +function get_initials(username) { + let words = username.toUpperCase().split(" "); + let res = words[0][0]; + + if (words.length > 1 && words[1][0] !== undefined ) { + res += words[1][0]; + } + return res; +} + +function fill_container_user_info(container, user_index) { + let user = current_users[user_index]; + let registration_dates = user.registration_date.split(' '); + container.attr('key', user_index); + container.find(".user-container-username span").html(user.username); + container.find(".user-container-initials span").html(get_initials(user.username)).addClass(color_icons[user.id % 5]); + container.find(".user-container-status span").html(user.status); + container.find(".user-container-email span").html(user.email); + generate_groups(container, user.groups); + container.find(".user-container-registration-date").html(registration_dates[0]); + container.find(".user-container-registration-time").html(registration_dates[1]); + container.find(".user-container-registration-date-since").html(user.registration_date_since); +} + +function generate_user_list() { + $("#user-table-content").find(".user-container").remove(); + for (let i = 0; i < current_users.length; i++) { + let new_container = $("#template .user-container").clone(); + fill_container_user_info(new_container, i); + $("#user-table-content .user-container-wrapper").append(new_container); + } + $('.user-container .user-list-checkbox').unbind("change").change(checkbox_change); + $('.user-container .user-list-checkbox').unbind("click"); + $(".user-container").click(user_container_click); +} + +/*--------------------- +Fill the pop-in values +---------------------*/ + +function get_formatted_date(date_str) { + if (date_str === null) { + return "N/A" + } + let first_part = date_str.split(' ')[0]; + let formatted = first_part.split('-').join('/'); + console.log(formatted); + return (formatted); +} + +function get_status_index(status) { + for (let i = 0; i < status_arr.length; i++) { + if (status_arr[i] === status) { + return i; + } + } + return 0; +} + +function get_level_index(level) { + for (let i = 0; i < level_arr.length; i++) { + if (level_arr[i] === level) { + return i; + } + } + return 0; +} + +function set_selected_groups(groups) { + for (let i = 0; i < groupOptions.length; i++) { + groupOptions[i].isSelected = groups.includes(groupOptions[i].value); + } +} + +function fill_user_edit_summary(user_to_edit, pop_in) { + pop_in.find('.user-property-initials span').html(get_initials(user_to_edit.username)).removeClass(color_icons.join(' ')).addClass(color_icons[user_to_edit.id % 5]); + pop_in.find('.user-property-username span:first').html(user_to_edit.username); + if (user_to_edit.id === connected_user) { + pop_in.find('.user-property-username .edit-username-specifier').show(); + } else { + pop_in.find('.user-property-username .edit-username-specifier').hide(); + } + pop_in.find('.user-property-username-change input').val(user_to_edit.username); + pop_in.find('.user-property-password-change input').val(''); + pop_in.find('.user-property-permissions a').attr('href', `admin.php?page=user_perm&user_id=${user_to_edit.id}`); + pop_in.find('.user-property-register').html(get_formatted_date(user_to_edit.registration_date)); + pop_in.find('.user-property-register').tipTip({content:`${registered_str}
${user_to_edit.registration_date_since}`}); + pop_in.find('.user-property-last-visit').html(get_formatted_date(user_to_edit.last_visit)); + pop_in.find('.user-property-last-visit').tipTip({content: `${last_visit_str}
${user_to_edit.last_visit_since}`}); +} + +function fill_user_edit_properties(user_to_edit, pop_in) { + let status_index = get_status_index(user_to_edit.status); + let level_index = get_level_index(user_to_edit.level); + let current_group_selectize = user_to_edit.id === guest_id ? groupGuestSelectize : groupSelectize; + + pop_in.find('.user-property-email input').val(user_to_edit.email); + pop_in.find(`.user-property-status select option:eq(${status_index})`).prop("selected", true); + pop_in.find(`.user-property-level select option:eq(${level_index})`).prop('selected', true); + pop_in.find('.photos-select-bar input').val(user_to_edit.recent_period); + set_selected_groups(user_to_edit.groups); + current_group_selectize.clear(); + current_group_selectize.load(function(callback) { + callback(groupOptions); + }); + jQuery.each(jQuery.grep(groupOptions, function(group) { + return group.isSelected; + }), function(i, group) { + current_group_selectize.addItem(group.value); + }); + pop_in.find('.user-list-checkbox[name="hd_enabled"]').attr('data-selected', user_to_edit.enabled_high == 'true' ? '1' : '0'); +} + +function fill_user_edit_preferences(user_to_edit, pop_in) { + let slider_key_photos = getSliderKeyFromValue(parseInt(user_to_edit.nb_image_page), nb_image_page_values); + let slider_key_period = getSliderKeyFromValue(parseInt(user_to_edit.recent_period), recent_period_values); + + pop_in.find('.photos-select-bar .select-bar-container').slider("option", "value", slider_key_photos); + pop_in.find('.user-property-theme select option').each(function () { + if ($(this).val() == user_to_edit.theme) { + $(this).prop('selected', true); + } + }); + pop_in.find('.user-property-lang select option').each(function () { + if ($(this).val() == user_to_edit.language) { + $(this).prop('selected', true); + } + }); + pop_in.find('.period-select-bar .select-bar-container').slider("option", "value", slider_key_period); + pop_in.find('.user-list-checkbox[name="expand_all_albums"]').attr('data-selected', user_to_edit.expand == 'true' ? '1' : '0'); + pop_in.find('.user-list-checkbox[name="show_nb_comments"]').attr('data-selected', user_to_edit.show_nb_comments == 'true' ? '1' : '0'); + pop_in.find('.user-list-checkbox[name="show_nb_hits"]').attr('data-selected', user_to_edit.show_nb_hits == 'true' ? '1' : '0'); +} + +function fill_user_edit_update(user_to_edit, pop_in) { + pop_in.find('.update-user-button').unbind("click").click( + user_to_edit.id === guest_id ? update_guest_info : update_user_info); + pop_in.find('.edit-username-validate').unbind("click").click(update_user_username); + pop_in.find('.edit-password-validate').unbind("click").click(update_user_password); + pop_in.find('.delete-user-button').unbind("click").click(function () { + $.confirm({ + title: title_msg.replace('%s', user_to_edit.username), + buttons: { + confirm: { + text: confirm_msg, + btnClass: 'btn-red', + action: function () { + delete_user(user_to_edit.id); + } + }, + cancel: { + text: cancel_msg + } + }, + ...jConfirm_confirm_options + }); + }) +} + +function fill_user_edit(user_to_edit) { + let pop_in = $('.UserListPopInContainer'); + fill_user_edit_summary(user_to_edit, pop_in); + fill_user_edit_properties(user_to_edit, pop_in); + fill_user_edit_preferences(user_to_edit, pop_in); + fill_user_edit_update(user_to_edit, pop_in); +} + +function fill_guest_edit() { + let user_to_edit = guest_user; + let pop_in = $('.GuestUserListPopInContainer'); + fill_user_edit_summary(user_to_edit, pop_in); + fill_user_edit_properties(user_to_edit, pop_in); + fill_user_edit_preferences(user_to_edit, pop_in); + fill_user_edit_update(user_to_edit, pop_in); +} + +/*------------------- +Fill data for setInfo +-------------------*/ + +function fill_ajax_data_from_properties(ajax_data, pop_in) { + let groups_selected = pop_in.find('.user-property-group .selectize-input .item').map(function () { + return parseInt($(this).attr('data-value')); + } ).get(); + console.log(groups_selected); + ajax_data['email'] = pop_in.find('.user-property-email input').val(); + ajax_data['status'] = pop_in.find('.user-property-status select').val(); + ajax_data['level'] = pop_in.find('.user-property-level select').val(); + ajax_data['group_id'] = groups_selected.length == 0 ? -1 : groups_selected; + ajax_data['enabled_high'] = pop_in.find('.user-list-checkbox[name="hd_enabled"]').attr('data-selected') == '1' ? true : false ; + return ajax_data +} + +function fill_ajax_data_from_preferences(ajax_data, pop_in) { + ajax_data['theme'] = pop_in.find('.user-property-theme select').val(); + ajax_data['language'] = pop_in.find('.user-property-lang select').val(); + ajax_data['nb_image_page'] = nb_image_page_values[pop_in.find('.photos-select-bar .select-bar-container').slider("option", "value")]; + ajax_data['recent_period'] = recent_period_values[pop_in.find('.period-select-bar .select-bar-container').slider("option", "value")]; + ajax_data['expand'] = pop_in.find('.user-list-checkbox[name="expand_all_albums"]').attr('data-selected') == '1' ? true : false; + ajax_data['show_nb_comments'] = pop_in.find('.user-list-checkbox[name="show_nb_comments"]').attr('data-selected') == '1' ? true : false ; + ajax_data['show_nb_hits'] = pop_in.find('.user-list-checkbox[name="show_nb_hits"]').attr('data-selected') == '1' ? true : false ; + return ajax_data +} + +function fill_ajax_data_from_container(ajax_data, pop_in) { + ajax_data = fill_ajax_data_from_properties(ajax_data, pop_in); + ajax_data = fill_ajax_data_from_preferences(ajax_data, pop_in); + return ajax_data +} + +/*---------------- +Ajax Requests +----------------*/ + +function get_first_selection_usernames(callback) { + let first_ids = selection.slice(0, 50).map(x => x.id); + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.getList", + type: "POST", + data: { + display: "username", + order: "id", + user_id: first_ids, + exclude: [guest_id] + }, + success:function(data) { + data = jQuery.parseJSON(data); + let result = data.result.users; + for (let i = 0; i < result.length;i++) { + let index = selection.findIndex(x => x.id === result[i].id); + if (index != -1) { + selection[index].username = result[i].username; + } + } + callback(); + } + }); +} + +function select_whole_set() { + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.getList", + type: "POST", + data: { + display: "only_id", + order: "id", + page: actual_page - 1, + per_page: 0, + exclude: [guest_id] + }, + beforeSend: function() { + $("#checkActions .loading").show(); + }, + success:function(data) { + data = jQuery.parseJSON(data); + selection = data.result.map((x) => { + return {id: x}; + }); + $("#checkActions .loading").hide(); + update_selection_content(); + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + $("#checkActions .loading").hide(); + } + }); +} + +function update_user_username() { + let pop_in_container = $('.UserListPopInContainer'); + let ajax_data = { + pwg_token: pwg_token, + user_id: last_user_id + }; + ajax_data['username'] = pop_in_container.find('.user-property-input-username').val(); + if (ajax_data.username === '') { + return; + } + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.setInfo", + type: "POST", + data: ajax_data, + success: (raw_data) => { + data = jQuery.parseJSON(raw_data); + if (data.stat == 'ok') { + if (last_user_index != -1) { + current_users[last_user_index].username = data.result.users[0].username; + $('#UserList .user-property-username .edit-username-title').html(current_users[last_user_index].username); + $('#UserList .user-property-initials span').html(get_initials(current_users[last_user_index].username)); + fill_container_user_info($('#user-table-content .user-container').eq(last_user_index), last_user_index); + } + $("#UserList .update-user-success").fadeIn(); + $('.user-property-username').show(); + $('.user-property-username-change').hide(); + } + } + }) +} + +function update_user_password() { + let pop_in_container = $('.UserListPopInContainer'); + let ajax_data = { + pwg_token: pwg_token, + user_id: last_user_id + }; + ajax_data['password'] = pop_in_container.find('.user-property-input-password').val(); + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.setInfo", + type: "POST", + data: ajax_data, + success: (raw_data) => { + data = jQuery.parseJSON(raw_data); + if (data.stat == 'ok') { + $("#UserList .update-user-success").fadeIn(); + $('.user-property-password').show(); + $('.user-property-password-change').hide(); + } + } + }) +} + +function update_user_info() { + let pop_in_container = $('.UserListPopInContainer'); + let ajax_data = { + pwg_token: pwg_token, + user_id: last_user_id + }; + + ajax_data = fill_ajax_data_from_container(ajax_data, pop_in_container); + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.setInfo", + type: "POST", + data: ajax_data, + beforeSend: function() { + $("#UserList .update-user-fail").fadeOut(); + $("#UserList .update-user-success").fadeOut(); + }, + success: function(raw_data) { + data = jQuery.parseJSON(raw_data); + if (data.stat === 'ok') { + let result_user = data.result.users[0]; + if (last_user_index != -1) { + current_users[last_user_index].email = result_user.email; + current_users[last_user_index].enabled_high = result_user.enabled_high; + current_users[last_user_index].expand = result_user.expand; + current_users[last_user_index].groups = result_user.groups; + current_users[last_user_index].language = result_user.language; + current_users[last_user_index].level = result_user.level; + current_users[last_user_index].nb_image_page = result_user.nb_image_page; + current_users[last_user_index].recent_period = result_user.recent_period; + current_users[last_user_index].show_nb_comments = result_user.show_nb_comments; + current_users[last_user_index].show_nb_hits = result_user.show_nb_hits; + current_users[last_user_index].status = result_user.status; + current_users[last_user_index].theme = result_user.theme; + fill_container_user_info($('#user-table-content .user-container').eq(last_user_index), last_user_index); + } + $("#UserList .update-user-success").fadeIn(); + } else if (data.stat === 'fail') { + $("#UserList .update-user-fail").html(data.message); + $("#UserList .update-user-fail").fadeIn(); + } + } + }); +} + +function get_guest_info() { + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.getList", + type: "POST", + data: { + display: "all", + user_id: guest_id + }, + success: (raw_data) => { + data = jQuery.parseJSON(raw_data); + if (data.stat == 'ok') { + guest_user = data.result.users[0]; + fill_guest_edit(); + } + } + }); +} + +function get_user_info(uid, callback=None) { + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.getList", + type: "POST", + data: { + display: "all", + user_id: uid + }, + success: (raw_data) => { + data = jQuery.parseJSON(raw_data); + if (data.stat == 'ok') { + let result_user = data.result.users[0]; + fill_user_edit(result_user); + callback(); + } + } + }); +} + +function update_guest_info() { + let pop_in_container = $('.GuestUserListPopInContainer'); + let ajax_data = { + pwg_token: pwg_token, + user_id: guest_id + }; + ajax_data = fill_ajax_data_from_container(ajax_data, pop_in_container); + ajax_data.email = undefined; + ajax_data.status = undefined; + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.setInfo", + type: "POST", + data: ajax_data, + success: function(raw_data) { + data = jQuery.parseJSON(raw_data); + if (data.stat == 'ok') { + $("#GuestUserList .update-user-success").fadeIn(); + } + } + }); +} + +function update_user_list() { + let update_data = { + display: "all", + order: "id", + page: actual_page - 1, + per_page: per_page, + exclude: [guest_id] + } + update_data["filter"] = "%" + $("#user_search").val() + "%"; + if ($("#advanced-filter-container").css("display") !== "none") { + update_data["status"] = $(".advanced-filter-select[name=filter_status]").val(); + update_data["group_id"] = $(".advanced-filter-select[name=filter_group]").val(); + update_data["min_level"] = $(".advanced-filter-select[name=filter_level]").val(); + update_data["max_level"] = $(".advanced-filter-select[name=filter_level]").val(); + update_data["min_register"] = register_dates[$(".dates-select-bar .select-bar-container").slider("option", "values")[0]]; + update_data["max_register"] = register_dates[$(".dates-select-bar .select-bar-container").slider("option", "values")[1]]; + } + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.getList", + type: "POST", + data: update_data, + beforeSend: function () { + $(".user-update-spinner").show(); + }, + success: function (raw_data) { + data = jQuery.parseJSON(raw_data); + if (data.stat === "fail") { + console.log(data.message); + return; + } + if (first_update) { + let total_users = data.result.total_count; + $("h1").append(`${total_users}`); + first_update = false; + } + nb_filtered_users = data.result.total_count; + update_pagination_menu(); + current_users = data.result.users; + generate_user_list(); + $(".user-col.user-first-col.user-container-edit").click(function () { + let uid_index = $(this).closest('.user-container').attr('key'); + last_user_id = current_users[uid_index].id; + last_user_index = uid_index; + fill_user_edit(current_users[uid_index]); + $("#UserList").fadeIn(); + }); + set_selected_to_selection(); + + $(".user-update-spinner").hide(); + }, + error: (raw_data) => { + $(".user-update-spinner").hide(); + } + }); +} + +function add_user() { + let ajax_data = { + pwg_token: pwg_token, + } + ajax_data.username = $('.AddUserLabelUsername .AddUserInput').val(); + ajax_data.password = $('.AddUserLabelPassword .AddUserInput').val(); + ajax_data.email = $(".AddUserLabelEmail .AddUserInput").val(); + ajax_data.send_password_by_mail = $('.user-list-checkbox[name="send_by_email"]').attr("data-selected") == "1" ? true : false; + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.add", + type:"POST", + data: ajax_data, + beforeSend: function() { + $("#AddUser .AddUserErrors").css("visibility", "hidden"); + if ($(".AddUserLabelUsername .AddUserInput").val() == "") { + $("#AddUser .AddUserErrors p").html('✘ '+missingUsername); + $("#AddUser .AddUserErrors").css("visibility", "visible"); + return false; + } + }, + success: (raw_data) => { + let data = jQuery.parseJSON(raw_data); + if (data.stat == 'ok') { + let new_user_id = data.result.users[0].id; + update_user_list(); + add_user_close(); + $("#AddUser .AddUserInput").val(""); + $("#AddUserSuccess .edit-now").unbind("click").click(() => { + last_user_id = new_user_id; + last_user_index = get_container_index_from_uid(new_user_id); + if (last_user_index != -1) { + fill_user_edit(current_users[last_user_index]); + open_user_list(); + } else { + get_user_info(new_user_id, open_user_list); + } + }) + $("#AddUserSuccess label span:first").html(user_added_str.replace("%s", ajax_data.username)); + $("#AddUserSuccess").css("display", "flex"); + } + else { + $("#AddUser .AddUserErrors p").html('✘ '+data.message) + $("#AddUser .AddUserErrors").css("visibility", "visible"); + } + } + }); +} + +function delete_user(uid) { + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.delete", + type:"POST", + data: { + user_id:uid, + pwg_token:pwg_token + }, + beforeSend: function() { + //jQuery('#user'+uid+' .userDelete .loading').show(); + }, + success:function(data) { + close_user_list(); + update_user_list(); + // msg where user was deleted + //jQuery('#showAddUser .infos').html('✔ User '+username+' deleted').show(); + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + //error just hide loading + //jQuery('#user'+uid+' .userDelete .loading').hide(); + } + }) +} diff --git a/admin/themes/default/template/user_list.tpl b/admin/themes/default/template/user_list.tpl index 0d5569b5c..64bc6ff33 100644 --- a/admin/themes/default/template/user_list.tpl +++ b/admin/themes/default/template/user_list.tpl @@ -1,1269 +1,2357 @@ -{include file='include/colorbox.inc.tpl'} -{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'} -{combine_script id='jquery.dataTables' load='footer' path='themes/default/js/plugins/jquery.dataTables.js'} -{combine_css path="themes/default/js/plugins/datatables/css/jquery.dataTables.css"} -{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'} +{combine_script id='common' load='header' require='jquery' path='admin/themes/default/js/common.js'} + +{combine_script id='jquery.selectize' load='header' path='themes/default/js/plugins/selectize.min.js'} {combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"} -{combine_script id='jquery.underscore' load='footer' path='themes/default/js/plugins/underscore.js'} - -{combine_script id='jquery.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'} +{combine_script id='jquery.ui.slider' require='jquery.ui' load='header' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'} {combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"} -{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'} +{combine_script id='jquery.confirm' load='header' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'} {combine_css path="themes/default/js/plugins/jquery-confirm.min.css"} +{combine_script id='jquery.tipTip' load='header' path='themes/default/js/plugins/jquery.tipTip.minified.js'} + {footer_script} -var selectedMessage_pattern = "{'%d of %d users selected'|translate|escape:javascript}"; -var selectedMessage_none = "{'No user selected of %d users'|translate|escape:javascript}"; -var selectedMessage_all = "{'All %d users are selected'|translate|escape:javascript}"; -var applyOnDetails_pattern = "{'on the %d selected users'|translate|escape:javascript}"; -var newUser_pattern = "✔ {'User %s added'|translate|escape:javascript}"; -var registeredOn_pattern = "{'Registered on %s, %s.'|translate|escape:javascript}"; -var lastVisit_pattern = "{'Last visit on %s, %s.'|translate|escape:javascript}"; -var missingConfirm = "{'You need to confirm deletion'|translate|escape:javascript}"; -var missingUsername = "{'Please, enter a login'|translate|escape:javascript}"; -let title_msg = '{'Are you sure you want to delete the user "%s"?'|@translate|escape:'javascript'}'; - -var filteredUsers = []; -var nb_all_users = 0; -var selection = []; -var pwg_token = "{$PWG_TOKEN}"; - -var protectedUsers = [{$protected_users}]; -var passwordProtectedUsers = [{$password_protected_users}]; -var guestUser = {$guest_user}; - +/* Translates */ +const title_msg = '{'Are you sure you want to delete the user "%s"?'|@translate|escape:'javascript'}'; const are_you_sure_msg = '{'Are you sure?'|@translate|@escape:'javascript'}'; const confirm_msg = '{'Yes, I am sure'|@translate|@escape}'; const cancel_msg = '{'No, I have changed my mind'|@translate|@escape}'; +const str_and_others_tags = '{'and %s others'|@translate}'; +const missingConfirm = "{'You need to confirm deletion'|translate|escape:javascript}"; +const missingUsername = "{'Please, enter a login'|translate|escape:javascript}"; -var truefalse = { - 'true':"{'Yes'|translate}", - 'false':"{'No'|translate}", -}; +const registered_str = '{"Registered"|@translate}'; +const last_visit_str = '{"Last visit"|@translate}'; +const dates_infos = '{'between %s and %s'|translate}' +const hide_str = '{'Hide'|@translate}'; +const show_str = '{'Show'|@translate}'; +const user_added_str = '{'User %s added'|@translate}'; + +months = [ + "{'Jan'|@translate}", + "{'Feb'|@translate}", + "{'Mar'|@translate}", + "{'Apr'|@translate}", + "{'May'|@translate}", + "{'Jun'|@translate}", + "{'Jul'|@translate}", + "{'Aug'|@translate}", + "{'Sep'|@translate}", + "{'Oct'|@translate}", + "{'Nov'|@translate}", + "{'Dec'|@translate}" +]; + +/* Template variables */ +connected_user = {$connected_user}; +let groups_arr_name = [{$groups_arr_name}]; +let groups_arr_id = [{$groups_arr_id}]; +groups_arr = groups_arr_id.map((elem, index) => [elem, groups_arr_name[index]]); +guest_id = {$guest_id}; +nb_days = "{'%d days'|@translate}"; +//per page is too long for the popin +nb_photos = "{'%d photos'|@translate}"; +nb_photos_per_page = "{'%d photos per page'|@translate}"; +pwg_token = '{$PWG_TOKEN}'; + +let register_dates_str = '{$register_dates}'; +let register_dates = register_dates_str.split(','); +{literal} +let groupOptions = groups_arr.map(x => ({value: x[0], label: x[1], isSelected: 0})); +{/literal} + +/* Startup */ +setupRegisterDates(register_dates); +selectionMode(false); +get_guest_info(); +update_user_list(); +update_selection_content(); -var statusLabels = { -{foreach from=$label_of_status key=status item=label} - '{$status}' : '{$label|escape:javascript}', -{/foreach} -}; {/footer_script} -{footer_script}{literal} -jQuery(document).ready(function() { - /** - * Add user - */ - jQuery("#addUser").click(function() { - jQuery("#addUserForm").toggle(); - jQuery("#showAddUser .infos").hide(); - jQuery("input[name=username]").focus(); - return false; - }); - - jQuery("#genPass").click(function(e){ - e.preventDefault(); - - var characterSet = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789'; - - var i; - var password; - var length = getRandomInt(8, 15); - - password = ''; - for (i = 0; i < length; i++) { - password += characterSet.charAt(Math.floor(Math.random() * characterSet.length)); - } - - jQuery('input[name=password]').val(password); - }); - - jQuery("#addUserClose").click(function() { - jQuery("#addUserForm").hide(); - return false; - }); - - jQuery("#addUserForm").submit(function() { - jQuery.ajax({ - url: "ws.php?format=json&method=pwg.users.add", - type:"POST", - data: jQuery(this).serialize()+"&pwg_token="+pwg_token, - beforeSend: function() { - jQuery("#addUserForm .errors").hide(); - - if (jQuery("input[name=username]").val() == "") { - jQuery("#addUserForm .errors").html('✘ '+missingUsername).show(); - return false; - } - - jQuery("#addUserForm .loading").show(); - }, - success:function(data) { - oTable.api().draw(); - jQuery("#addUserForm .loading").hide(); - - var data = jQuery.parseJSON(data); - if (data.stat == 'ok') { - jQuery("#addUserForm input[type=text], #addUserForm input[type=password]").val(""); - - var new_user = data.result.users[0]; - nb_all_users += 1; - jQuery("#showAddUser .infos").html(sprintf(newUser_pattern, new_user.username)).show(); - checkSelection(); - - jQuery("#addUserForm").hide(); - } - else { - jQuery("#addUserForm .errors").html('✘ '+data.message).show(); - } - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - jQuery("#addUserForm .loading").hide(); - } - }); - - return false; - }); - - /** - * Table with users - */ - /** - * find the key from a value in the startStopValues array - */ - function getSliderKeyFromValue(value, values) { - for (var key in values) { - if (values[key] >= value) { - return key; - } - } - return 0; - } - - var recent_period_values = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,30,40,50,60,80,99]; - - function getRecentPeriodInfoFromIdx(idx) { - return sprintf( - "{/literal}{'%d days'|@translate}{literal}", - recent_period_values[idx] - ); - } - - var nb_image_page_values = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,35,40,45,50,60,70,80,90,100,200,300,500,999]; - - function getNbImagePageInfoFromIdx(idx) { - return sprintf( - "{/literal}{'%d photos per page'|@translate}{literal}", - nb_image_page_values[idx] - ); - } - - /* nb_image_page slider */ - var nb_image_page_init = getSliderKeyFromValue(jQuery('#action_nb_image_page input[name=nb_image_page]').val(), nb_image_page_values); - - jQuery('#action_nb_image_page .nb_image_page_infos').html(getNbImagePageInfoFromIdx(nb_image_page_init)); - - jQuery('#action_nb_image_page .nb_image_page').slider({ - range: "min", - min: 0, - max: nb_image_page_values.length - 1, - value: nb_image_page_init, - slide: function( event, ui ) { - jQuery('#action_nb_image_page .nb_image_page_infos').html(getNbImagePageInfoFromIdx(ui.value)); - }, - stop: function( event, ui ) { - jQuery('#action_nb_image_page input[name=nb_image_page]').val(nb_image_page_values[ui.value]).trigger('change'); - } - }); - - /* recent_period slider */ - var recent_period_init = getSliderKeyFromValue(jQuery('#action_recent_period input[name=recent_period]').val(), recent_period_values); - jQuery('#action_recent_period .recent_period_infos').html(getRecentPeriodInfoFromIdx(recent_period_init)); - - jQuery('#action_recent_period .recent_period').slider({ - range: "min", - min: 0, - max: recent_period_values.length - 1, - value: recent_period_init, - slide: function( event, ui ) { - jQuery('#action_recent_period .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); - }, - stop: function( event, ui ) { - jQuery('#action_recent_period input[name=recent_period]').val(recent_period_values[ui.value]).trigger('change'); - } - }); - - /* Formating function for row details */ - function fnFormatDetails(oTable, nTr) { - var userId = oTable.api().row(nTr).data()[0]; - var sOut = null; - - jQuery.ajax({ - url: "ws.php?format=json&method=pwg.users.getList", - type:"POST", - data: { - user_id: userId, - display: "all", - }, - success:function(data) { - jQuery("#user"+userId+" .loading").hide(); - - var data = jQuery.parseJSON(data); - if (data.stat == 'ok') { - var user = data.result.users[0]; - - /* Prepare data for template */ - user.statusOptions = []; - jQuery("#action select[name=status] option").each(function() { - var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; - - if (user.status == jQuery(this).val()) { - option.isSelected = true; - } - - user.statusOptions.push(option); - }); - - user.levelOptions = []; - jQuery("#action select[name=level] option").each(function() { - var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; - - if (user.level == jQuery(this).val()) { - option.isSelected = true; - } - - user.levelOptions.push(option); - }); - - user.groupOptions = []; - jQuery("#action select[name=associate] option").each(function() { - var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; - - if (user.groups.indexOf( parseInt(jQuery(this).val()) ) != -1) { - option.isSelected = true; - } - - user.groupOptions.push(option); - }); - - user.themeOptions = []; - jQuery("#action select[name=theme] option").each(function() { - var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; - - if (user.theme == jQuery(this).val()) { - option.isSelected = true; - } - - user.themeOptions.push(option); - }); - - user.languageOptions = []; - jQuery("#action select[name=language] option").each(function() { - var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; - - if (user.language == jQuery(this).val()) { - option.isSelected = true; - } - - user.languageOptions.push(option); - }); - - user.isGuest = (parseInt(userId) == guestUser); - user.isProtected = (protectedUsers.indexOf(parseInt(userId)) != -1); - user.isPasswordProtected = (passwordProtectedUsers.indexOf(parseInt(userId)) != -1); - - user.registeredOn_string = sprintf( - registeredOn_pattern, - user.registration_date_string, - user.registration_date_since - ); - - user.lastVisit_string = ""; - if (typeof user.last_visit != 'undefined') { - user.lastVisit_string = sprintf(lastVisit_pattern, user.last_visit_string, user.last_visit_since); - } - - user.email = user.email || ''; - - user.statusLabel = statusLabels[user.status]; - - /* Render the underscore template */ - _.templateSettings.variable = "user"; - - var template = _.template( - jQuery("script.userDetails").html() - ); - - jQuery("#user"+userId).html(template(user)); - - /* groups select */ - jQuery('[data-selectize=groups]').selectize({ - valueField: 'value', - labelField: 'label', - searchField: ['label'], - plugins: ['remove_button'] - }); - - var groupSelectize = jQuery('[data-selectize=groups]')[0].selectize; - - groupSelectize.load(function(callback) { - callback(user.groupOptions); - }); - - jQuery.each(jQuery.grep(user.groupOptions, function(group) { - return group.isSelected; - }), function(i, group) { - groupSelectize.addItem(group.value); - }); - - /* nb_image_page slider */ - var nb_image_page_init = getSliderKeyFromValue(jQuery('#user'+userId+' input[name=nb_image_page]').val(), nb_image_page_values); - - jQuery('#user'+userId+' .nb_image_page_infos').html(getNbImagePageInfoFromIdx(nb_image_page_init)); - - jQuery('#user'+userId+' .nb_image_page').slider({ - range: "min", - min: 0, - max: nb_image_page_values.length - 1, - value: nb_image_page_init, - slide: function( event, ui ) { - jQuery('#user'+userId+' .nb_image_page_infos').html(getNbImagePageInfoFromIdx(ui.value)); - }, - stop: function( event, ui ) { - jQuery('#user'+userId+' input[name=nb_image_page]').val(nb_image_page_values[ui.value]).trigger('change'); - } - }); - - /* recent_period slider */ - var recent_period_init = getSliderKeyFromValue(jQuery('#user'+userId+' input[name=recent_period]').val(), recent_period_values); - jQuery('#user'+userId+' .recent_period_infos').html(getRecentPeriodInfoFromIdx(recent_period_init)); - - jQuery('#user'+userId+' .recent_period').slider({ - range: "min", - min: 0, - max: recent_period_values.length - 1, - value: recent_period_init, - slide: function( event, ui ) { - jQuery('#user'+userId+' .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); - }, - stop: function( event, ui ) { - jQuery('#user'+userId+' input[name=recent_period]').val(recent_period_values[ui.value]).trigger('change'); - } - }); - } - else { - console.log('error loading user details'); - } - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - console.log('technical error loading user details'); - } - }); - - jQuery(".user_form_popin") - .attr("id", "user"+userId) - .html('
{/literal}{'Loading...'|translate|escape:'javascript'}{literal}
') - ; - } - -jQuery(document).on('click', '.close-user-details', function(e) { - jQuery('.user_form_popin').colorbox.close(); - e.preventDefault(); -}); - - - /* change password */ - jQuery(document).on('click', '.changePasswordOpen', function() { - var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); - - jQuery(this).hide(); - jQuery('#user'+userId+' .changePasswordDone').hide(); - jQuery('#user'+userId+' .changePassword').show(); - jQuery('#user'+userId+' .changePassword input[type=text]').focus(); - - return false; - }); - - jQuery(document).on('click', '.changePassword a.updatePassword', function() { - var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); - - jQuery('#user'+userId+' .changePassword a .text').hide(); - jQuery('#user'+userId+' .changePassword a img').show(); - - jQuery.ajax({ - url: "ws.php?format=json&method=pwg.users.setInfo", - type:"POST", - data: { - pwg_token:pwg_token, - user_id:userId, - password: jQuery('#user'+userId+' .changePassword input[type=text]').val() - }, - beforeSend: function() { - jQuery('#user'+userId+' .changePassword input[type=text]').val(""); - }, - success:function(data) { - jQuery('#user'+userId+' .changePassword a .text').show(); - jQuery('#user'+userId+' .changePassword a img').hide(); - jQuery('#user'+userId+' .changePassword').hide(); - jQuery('#user'+userId+' .changePasswordOpen').show(); - jQuery('#user'+userId+' .changePasswordDone').show(); - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - } - }); - - return false; - }); - - jQuery(document).on('click', '.changePassword a.cancel', function() { - var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); - - jQuery('#user'+userId+' .changePassword').hide(); - jQuery('#user'+userId+' .changePasswordOpen').show(); - - return false; - }); - - /* change username */ - jQuery(document).on('click', '.changeUsernameOpen a', function() { - var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); - var username = jQuery('#user'+userId+' .username').html(); - - jQuery('#user'+userId+' .changeUsernameOpen').hide(); - jQuery('#user'+userId+' .changeUsername').show(); - jQuery('#user'+userId+' .changeUsername input[type=text]').val(username).focus(); - - return false; - }); - - jQuery(document).on('click', 'a.updateUsername', function() { - var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); - - jQuery('#user'+userId+' .changeUsername a .text').hide(); - jQuery('#user'+userId+' .changeUsername a img').show(); - - jQuery.ajax({ - url: "ws.php?format=json&method=pwg.users.setInfo", - type:"POST", - data: { - pwg_token:pwg_token, - user_id:userId, - username: jQuery('#user'+userId+' .changeUsername input[type=text]').val() - }, - success:function(data) { - jQuery('#user'+userId+' .changeUsername a .text').show(); - jQuery('#user'+userId+' .changeUsername a img').hide(); - jQuery('#user'+userId+' .changeUsername').hide(); - jQuery('#user'+userId+' .changeUsernameOpen').show(); - - var data = jQuery.parseJSON(data); - jQuery('#user'+userId+' .username').html(data.result.users[0].username); - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - } - }); - - return false; - }); - - jQuery(document).on('click', '.changeUsername a.cancel', function() { - var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); - - jQuery('#user'+userId+' .changeUsername').hide(); - jQuery('#user'+userId+' .changeUsernameOpen').show(); - - return false; - }); - - /* display the "save" button when a field changes */ - jQuery(document).on('change', '.userProperties input, .userProperties select', function() { - var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); - - jQuery('#user'+userId+' input[type=submit]').show(); - jQuery('#user'+userId+' .propertiesUpdateDone').hide(); - }); - - /* delete user */ - - $(document).on('click', '.userDelete a', function () { - var userId = jQuery(this).data('user_id'); - var username = jQuery('#user'+userId+' .username').html(); - $.confirm({ - title: title_msg.replace('%s', username), - buttons: { - confirm: { - text: confirm_msg, - btnClass: 'btn-red', - action: function () { - jQuery.ajax({ - url: "ws.php?format=json&method=pwg.users.delete", - type:"POST", - data: { - user_id:userId, - pwg_token:pwg_token - }, - beforeSend: function() { - jQuery('#user'+userId+' .userDelete .loading').show(); - }, - success:function(data) { - jQuery('.user_form_popin').colorbox.close(); - jQuery('#showAddUser .infos').html('✔ User '+username+' deleted').show(); - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - jQuery('#user'+userId+' .userDelete .loading').hide(); - } - }) - } - }, - cancel: { - text: cancel_msg - } - }, - ...jConfirm_confirm_options - }); - }); - jQuery(document).on('click', '.userProperties input[type=submit]', function() { - var userId = jQuery(this).data('user_id'); - - var formData = jQuery('#user'+userId+' form').serialize(); - formData += '&pwg_token='+pwg_token; - - if (jQuery('#user'+userId+' form select[name="group_id[]"] option:selected').length == 0) { - formData += '&group_id=-1'; - } - - if (!jQuery('#user'+userId+' form input[name=enabled_high]').is(':checked')) { - formData += '&enabled_high=false'; - } - - if (!jQuery('#user'+userId+' form input[name=expand]').is(':checked')) { - formData += '&expand=false'; - } - - if (!jQuery('#user'+userId+' form input[name=show_nb_hits]').is(':checked')) { - formData += '&show_nb_hits=false'; - } - - if (!jQuery('#user'+userId+' form input[name=show_nb_comments]').is(':checked')) { - formData += '&show_nb_comments=false'; - } - - jQuery.ajax({ - url: "ws.php?format=json&method=pwg.users.setInfo", - type:"POST", - data: formData, - beforeSend: function() { - jQuery('#user'+userId+' .submitWait').show(); - }, - success:function(data) { - jQuery('#user'+userId+' .submitWait').hide(); - - var html_message; - - var data = jQuery.parseJSON(data); - if (data.stat == 'ok') { - var message = sprintf( - "{/literal}{'User %s updated'|translate|escape:javascript}{literal}", - data.result.users[0].username - ); - - html_message = '✔ '+message+''; - } - else { - html_message = '✘ '+data.message+''; - } - - jQuery('#user'+userId+' .propertiesUpdateDone') - .html(html_message) - .show(); - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - jQuery('#user'+userId+' .submitWait').hide(); - } - }); - - return false; - }); - - /* Add event listener for opening and closing details - * Note that the indicator for showing which row is open is not controlled by DataTables, - * rather it is done here - */ - jQuery(document).on('click', '#userList tbody td .openUserDetails', function() { - var nTr = this.parentNode.parentNode; - - jQuery.colorbox({ - inline:true, - title:"{/literal}{'Edit user'|translate}{literal}", - href:".user_form_popin", - onClosed: function() { - oTable.api().draw(); - } - }); - - fnFormatDetails(oTable, nTr); - }); - - - /* first column must be prefixed with the open/close icon */ - var aoColumns = [ - { - visible:false - }, - { - render: function(data, type, full) { - return ' {/literal}{'edit'|translate}{literal}'; - } - } - ]; - - for (i=2; i'+"{/literal}{'Search'|translate|escape:'javascript'}{literal}", - loadingRecords: "{/literal}{'Loading...'|translate|escape:'javascript'}{literal}", - paginate: { - first: "{/literal}{'First'|translate|escape:'javascript'}{literal}", - previous: '← '+"{/literal}{'Previous'|translate|escape:'javascript'}{literal}", - next: "{/literal}{'Next'|translate|escape:'javascript'}{literal}"+' →', - last: "{/literal}{'Last'|translate|escape:'javascript'}{literal}", - } - }, - "drawCallback": function( oSettings ) { - nb_all_users = parseInt(oTable.api().ajax.json().iTotalRecords); - jQuery("#userList input[type=checkbox]").each(function() { - var user_id = jQuery(this).data("user_id"); - jQuery(this).prop('checked', (selection.indexOf(user_id) != -1)); - }); - checkSelection(); - }, - columns: aoColumns - }); - - /** - * Selection management - */ - function checkSelection() { - if (selection.length > 0) { - jQuery("#forbidAction").hide(); - jQuery("#permitActionUserList").show(); - - jQuery("#applyOnDetails").text( - sprintf( - applyOnDetails_pattern, - selection.length - ) - ); - - if (selection.length == nb_all_users) { - jQuery("#selectedMessage").text( - sprintf( - selectedMessage_all, - nb_all_users - ) - ); - } - else { - jQuery("#selectedMessage").text( - sprintf( - selectedMessage_pattern, - selection.length, - nb_all_users - ) - ); - } - } - else { - jQuery("#forbidAction").show(); - jQuery("#permitActionUserList").hide(); - - jQuery("#selectedMessage").text( - sprintf( - selectedMessage_none, - nb_all_users - ) - ); - } - - jQuery("#applyActionBlock .infos").hide(); - } - - jQuery(document).on('change', '#userList input[type=checkbox]', function() { - var user_id = jQuery(this).data("user_id"); - - array_delete(selection, user_id); - - if (jQuery(this).is(":checked")) { - selection.push(user_id); - } - - checkSelection(); - }); - - jQuery("#selectSet").click(function () { - let api = oTable.api(); - let info = api.page.info(); - let search_term = api.search(); - jQuery.ajax({ - url: "admin/user_list_backend.php", - type:"POST", - data: { - search: { - value: search_term, - regex: false - }, - start: info.start, - length: info.length, - get_set_uids: true - }, - beforeSend: function() { - $("#checkActions .loading").show(); - }, - success:function(data) { - data = jQuery.parseJSON(data); - filtered_users = data.filtered_uids.map(x=>+x); - selection = filtered_users; - checkSelection(); - $("#checkActions .loading").hide(); - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - $("#checkActions .loading").hide(); - } - }); - jQuery("#userList input[type=checkbox]").prop('checked', true); - checkSelection(); - return false; - }); - - - jQuery("#selectAllPage").click(function () { - let tab = [] - let sel = $("tr td").find("label").each(function() { - let val = $(this).find("input").attr('data-user_id'); - tab.push(parseInt(val)); - }); - selection = tab; - jQuery("#userList input[type=checkbox]").prop('checked', true); - checkSelection(); - return false; - }); - - jQuery("#selectNone").click(function () { - selection = []; - jQuery("#userList input[type=checkbox]").prop('checked', false); - checkSelection(); - return false; - }); - - jQuery("#selectInvert").click(function () { - let tab = [] - let sel = $("tr td").find("label").each(function() { - let val = parseInt($(this).find("input").attr('data-user_id')); - $(this).find("input[type=checkbox]").prop('checked', false); - if (selection.includes(val) == false) { - tab.push(val); - $(this).find("input[type=checkbox]").prop('checked', true); - } - }); - selection = tab; - checkSelection(); - return false; - }); - - /** - * Action management - */ - jQuery("[id^=action_]").hide(); - - jQuery("select[name=selectAction]").change(function () { - jQuery("#applyActionBlock .infos").hide(); - - jQuery("[id^=action_]").hide(); - - jQuery("#action_"+$(this).prop("value")).show(); - - if (jQuery(this).val() != -1) { - jQuery("#applyActionBlock").show(); - } - else { - jQuery("#applyActionBlock").hide(); - } - }); - - jQuery("#permitActionUserList input, #permitActionUserList select").click(function() { - jQuery("#applyActionBlock .infos").hide(); - }); - - jQuery("#applyAction").click(function() { - var action = jQuery("select[name=selectAction]").prop("value"); - var method = 'pwg.users.setInfo'; - var data = { - pwg_token: pwg_token, - user_id: selection - }; - - switch (action) { - case 'delete': - if (!jQuery("input[name=confirm_deletion]").is(':checked')) { - alert(missingConfirm); - return false; - } - method = 'pwg.users.delete'; - break; - case 'group_associate': - method = 'pwg.groups.addUser'; - data.group_id = jQuery("select[name=associate]").prop("value"); - break; - case 'group_dissociate': - method = 'pwg.groups.deleteUser'; - data.group_id = jQuery("select[name=dissociate]").prop("value"); - break; - case 'status': - data.status = jQuery("select[name=status]").prop("value"); - break; - case 'enabled_high': - data.enabled_high = jQuery("input[name=enabled_high]:checked").val(); - break; - case 'level': - data.level = jQuery("select[name=level]").val(); - break; - case 'nb_image_page': - data.nb_image_page = jQuery("input[name=nb_image_page]").val(); - break; - case 'theme': - data.theme = jQuery("select[name=theme]").val(); - break; - case 'language': - data.language = jQuery("select[name=language]").val(); - break; - case 'recent_period': - data.recent_period = jQuery("input[name=recent_period]").val(); - break; - case 'expand': - data.expand = jQuery("input[name=expand]:checked").val(); - break; - case 'show_nb_comments': - data.show_nb_comments = jQuery("input[name=show_nb_comments]:checked").val(); - break; - case 'show_nb_hits': - data.show_nb_hits = jQuery("input[name=show_nb_hits]:checked").val(); - break; - default: - alert("Unexpected action"); - return false; - } - - jQuery.ajax({ - url: "ws.php?format=json&method="+method, - type:"POST", - data: data, - beforeSend: function() { - jQuery("#applyActionLoading").show(); - }, - success:function(data) { - oTable.api().draw(); - jQuery("#applyActionLoading").hide(); - jQuery("#applyActionBlock .infos").show(); - - if (action == 'delete') { - nb_all_users -= 1; - selection = []; - checkSelection(); - } - }, - error:function(XMLHttpRequest, textStatus, errorThrows) { - jQuery("#applyActionLoading").hide(); - } - }); - - return false; - }); -}); -{/literal}{/footer_script} - -{html_style}{literal} -.dataTables_wrapper, .dataTables_info {clear:none;} -.dataTables_wrapper .dataTables_info {clear:none;} -.dataTables_wrapper::after {clear:none;} - -table.dataTable {clear:right;padding-top:10px;} -.dataTable td img {margin-bottom: -6px;margin-left: -6px;} - -.paginate_button, .paginate_button:hover {background:none !important;} -.dataTables_wrapper .dataTables_paginate .paginate_button {color:#005E89 !important;} -.dataTables_wrapper .dataTables_paginate .paginate_button:hover {color:#D54E21 !important; text-decoration:underline !important; border-color:transparent;} - -.paginate_button.next {padding-right:3px !important;} - -table.dataTable tbody th, -table.dataTable tbody td { - padding: 3px 5px; +{combine_script id='user_list' load='footer' path='admin/themes/default/js/user_list.js'} + +{combine_script id='jquery.cookie' path='themes/default/js/jquery.cookie.js' load='footer'} + +
+ +

{'Selection mode'|@translate}

+
+ + +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+
+ +
+ +
+
+ {*
+ {'Advanced filter'|@translate} +
*} + {*
+
+ + + +
*} +
+
+
+
+
+
+ {'Advanced filter'|@translate} +
+
+
+ + + +
+
+
+ {'Advanced filter'|@translate} + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ {'Registered'|@translate} + +
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+ {'Username'|@translate} +
+ +
+ {'Status'|@translate} +
+ +
+ {'Email Adress'|@translate} +
+ {* +
+ {'Groups'|@translate} +
*} + +
+ {'Registered'|@translate} +
+ +
+ {'Groups'|@translate} +
+
+
+ +
+
+
+ +
+
+ {'Display'|@translate} + 5 + 10 + 25 + 50 +
+ +
+ +
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+

{'Your selection'|@translate}

+
+
+
+
+
+ {'Action'|@translate} + +
{'No users selected, no actions possible.'|@translate}
+
+ +
+ +
+ {* delete *} +
+
+ + + + {'Are you sure?'|@translate} +
+
+ + {* status *} +
+
+ +
+
+ + {* group_associate *} +
+
+ +
+
+ + {* group_dissociate *} +
+
+ +
+
+ + {* enabled_high *} +
+ + + + + {'Yes'|@translate} + + + + + + {'No'|@translate} + +
+ + {* level *} +
+
+ +
+
+ + {* nb_image_page *} +
+
{'Photos per page'|translate} +
+ +
+
+
+ +
+
+ + {* theme *} +
+ +
+ +
+
+ + {* language *} +
+
+ +
+
+ + {* recent_period *} +
+
{'Recent period'|translate} +
+ +
+
+
+
+
+ + {* expand *} +
+ + + + + {'Yes'|@translate} + + + + + + {'No'|@translate} + +
+ + {* show_nb_comments *} +
+ + + + + {'Yes'|@translate} + + + + + + {'No'|@translate} + +
+ + {* show_nb_hits *} +
+ + + + + {'Yes'|@translate} + + + + + + {'No'|@translate} + +
+ + +
{* #permitActionUserList *} +
+
+
+
+ + +
+
+ +
+
+ + + +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+ {*
+ +
*} +
+
+ {* *} +
+ {* + *} + +
+
+
+
+ +
+
+ + +
+ +

+
+
+ +
+ +
+ + +
+
+
+
+
+ +
+
+
+ + + +
+
+
+ +
+ + +
+
+
+

{'Change Password'|@translate}

+
+
+
+ +
+ + +
+ +
+
+ + + +
+
+
+
+

{'Properties'|@translate}

+
+
+

{'Email Adress'|@translate}

+ +
+
+

{'Status'|@translate}

+
+ +
+
+
+

{'Privacy level'|@translate}

+
+ +
+
+
+

{'Groups'|@translate}

+
+ +
+
+ +
+ + + + {'High definition enabled'|translate} +
+
+
+
+
+
+ {'Update'|@translate} + {'Close'|@translate} + {'User updated'|@translate} +
+
+ {'Delete user'|@translate} +
+
+
+ +
+
+
+
+
+

{'Preferences'|translate}

+
+
{'Photos per page'|translate} + +
+
+
+ +
+
+

{'Theme'|@translate}

+
+ +
+
+
+

{'Language'|@translate}

+
+ +
+
+
{'Recent period'|translate} + +
+
+
+
+ +
+ + + + {'Expand all albums'|translate} +
+
+ + + + {'Show number of comments'|translate} +
+
+ + + + {'Show number of hits'|translate} +
+
+
+
+ + +
+ +
+ + +
+ {'Users not logged in will have these settings applied, these settings are used by default for new users'|@translate} +
+
+
+
+
+
+
+ +
+
+
+ + +
+
+
+ +
+ + +
+
+
+

{'Change Password'|@translate}

+
+
+
+ +
+ + +
+ +
+
+
+
+

{'Properties'|@translate}

+
+
+

{'Email Adress'|@translate}

+ +
+
+

{'Status'|@translate}

+
+ +
+
+
+

{'Privacy Level'|@translate}

+
+ +
+
+
+

{'Groups'|@translate}

+
+ +
+
+ +
+ + + + {'High definition enabled'|translate} +
+
+
+
+
+
+ {'Update'|@translate} + {'Close'|@translate} + {'User updated'|@translate} +
+
+ +
+
+
+
+
+
+

{'Preferences'|translate}

+
+
{'Photos per page'|translate} + +
+
+
+ +
+
+

{'Theme'|@translate}

+
+ +
+
+
+

{'Language'|@translate}

+
+ +
+
+
{'Recent period'|translate} + +
+
+
+
+ +
+ + + + {'Expand all albums'|translate} +
+
+ + + + {'Show number of comments'|translate} +
+
+ + + + {'Show number of hits'|translate} +
+
+
+
+
+ +
+
+ + +
+ +
+
+ {'Add a new user'|@translate} +
+
+ +
+ +
+
+ + {'Show'|@translate} +
+ + +
+ {'Generate random password'|@translate} +
+
+ +
+ +
+ +
+ + + + {'Send connection settings by email'|translate} +
+ +
+

X

+
+ +
+ {'Add User'|@translate} +
+ + +
+
+ + diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css index e06244563..0ce7240a9 100644 --- a/admin/themes/default/theme.css +++ b/admin/themes/default/theme.css @@ -1925,6 +1925,8 @@ h2:lang(en) { text-transform:capitalize; } .infos .submit {margin-left:30px;} .checkActions {text-align:left;padding:0;margin:0;} +#user-table-content #checkActions {margin:0; display:flex; flex-wrap:wrap; align-items:center;} +#user-table-content #checkActions a {padding:10px; margin: 0 4px}; #checkActions {text-align:left; margin:0 0 20px 0;} .ActionUserList #checkActions {margin: 20px 0 20px 0;} @@ -2688,20 +2690,27 @@ a#showPermissions:hover {text-decoration: none;} overflow: hidden; } +.user-list-checkbox .select-checkbox, .tag-container .tag-box .select-checkbox { display: none; width: 15px; height: 15px; border-radius: 100%; - margin: 2px 0px; + /* margin: 2px 0px; */ margin-left: 3.4px; border: solid #ffa646 2px; } +.user-list-checkbox .select-checkbox { + display: inline-block; +} + .tag-container.selection .tag-box .select-checkbox { display: block; } +.user-list-checkbox:hover .select-checkbox, +.user-list-checkbox[data-selected='1'] .select-checkbox, .tag-container .tag-box:hover .select-checkbox, .tag-container .tag-box[data-selected='1'] .select-checkbox { background-color: #ffa646; @@ -2711,6 +2720,7 @@ a#showPermissions:hover {text-decoration: none;} display: block; } +.user-list-checkbox .select-checkbox i, .tag-container .tag-box .select-checkbox i { display: none; font-size: 14px; @@ -2722,6 +2732,7 @@ a#showPermissions:hover {text-decoration: none;} animation-timing-function: ease-out; } +.user-list-checkbox[data-selected='1'] .select-checkbox i, .tag-container .tag-box[data-selected='1'] .select-checkbox i { display: inline; } @@ -4616,18 +4627,23 @@ li.plupload_delete a:hover {background: url("images/cancelhover.svg")!important; #action_delete_derivatives label, #action_generate_derivatives label {display: flex; margin-top: 4px; width: 50%;} #action_delete_derivatives input[name="del_derivatives_type[]"], #action_generate_derivatives input[name="generate_derivatives_type[]"] {margin-right: 3px;} .actionButtons:first-child::after,#filter_prefilter::before,#filter_category::before,#filter_level::before, -.permitActionListButton div::before, #action_level::after, .pictureLevels::before { +.permitActionListButton div::before, #action_level::after, .pictureLevels::before, +.user-action-select-container::before, .advanced-filter-select-container::before, +.user-property-select-container::before { content: '\e835'; font-size: 17px; position: absolute; font-family: "fontello"; color: #6E6E6E; pointer-events: none; } .permitActionListButton div::before {margin-left: 250px; margin-top: 11px;} .pictureLevels::before {margin-left: 216px; margin-top: 10px;} .permitActionListButton div.hidden::after {display: none;} +.user-action-select-container::before {top: 5px; right:10px} +.user-property-select-container::before {margin-top: 10px; margin-left:270px;} +.advanced-filter-select-container::before {top: 5px; right:10px} #filter_prefilter::before {margin-left: 257px; margin-top: 35px;} #filter_category .selectize-control.single .selectize-input::after {content: none;} #filter_category {width: 600px;} #filter_category::before {margin-left: 565px;margin-top: 33px; z-index: 2;} #filter_level::before {margin-top: 34px; margin-left: 260px;} -#action_level::after {margin-top: -56px; margin-left: 254px;} +#batchManagerGlobal #action_level::after {margin-top: -56px; margin-left: 254px;} #filter_search input {width: 300px; box-sizing: border-box; padding: 11px 18px;} #applyFilter, #addFilter,#filterList select, #filter_tags .selectize-input.items.not-full.has-options, .pictureLevels select, #permitAction select{ font-family: "Open Sans", "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; diff --git a/admin/user_list.php b/admin/user_list.php index c57d17eba..a1da5d6d5 100644 --- a/admin/user_list.php +++ b/admin/user_list.php @@ -43,11 +43,34 @@ while ($row = pwg_db_fetch_assoc($result)) $groups[$row['id']] = $row['name']; } +// +-----------------------------------------------------------------------+ +// | Dates for filtering | +// +-----------------------------------------------------------------------+ + +$query = ' +SELECT DISTINCT + month(registration_date) as registration_month, + year(registration_date) as registration_year +FROM '.USER_INFOS_TABLE.' +ORDER BY registration_date +;'; +$result = pwg_query($query); + +$register_dates = array(); +while ($row = pwg_db_fetch_assoc($result)) +{ + $register_dates[] = $row['registration_month'].' '.$row['registration_year']; +} + +$template->assign('register_dates', implode(',' , $register_dates)); + + // +-----------------------------------------------------------------------+ // | template | // +-----------------------------------------------------------------------+ $template->assign( array( + 'ADMIN_PAGE_TITLE' => l10n('Manage users'), 'ACTIVATE_COMMENTS' => $conf['activate_comments'], 'Double_Password' => $conf['double_password_type_in_admin'] ) @@ -97,6 +120,7 @@ $template->assign( 'password_protected_users' => implode(',', array_unique($password_protected_users)), 'guest_user' => $conf['guest_id'], 'filter_group' => (isset($_GET['group']) ? $_GET['group'] : null), + 'connected_user' => $user["id"] ) ); @@ -132,6 +156,24 @@ foreach ($conf['available_permission_levels'] as $level) $template->assign('level_options', $level_options); $template->assign('level_selected', $default_user['level']); +$query = ' +SELECT id, name, is_default + FROM `'.GROUPS_TABLE.'` + ORDER BY name ASC +;'; +$result = pwg_query($query); + +$groups_arr_id = []; +$groups_arr_name = []; +while ($row = pwg_db_fetch_assoc($result)) +{ + $groups_arr_name[] = '"'.pwg_db_real_escape_string($row["name"]).'"'; + $groups_arr_id[] = $row["id"]; +} + +$template->assign('groups_arr_id', implode(',', $groups_arr_id)); +$template->assign('groups_arr_name', implode(',', $groups_arr_name)); +$template->assign('guest_id', $conf["guest_id"]); // +-----------------------------------------------------------------------+ // | html code display | diff --git a/include/ws_functions/pwg.users.php b/include/ws_functions/pwg.users.php index f9f607017..1d507017b 100644 --- a/include/ws_functions/pwg.users.php +++ b/include/ws_functions/pwg.users.php @@ -14,11 +14,16 @@ * @option string username (optional) * @option string[] status (optional) * @option int min_level (optional) + * @option int max_level (optional) * @option int[] group_id (optional) * @option int per_page * @option int page * @option string order * @option string display + * @option string filter + * @option int[] exclude (optional) + * @option string min_register + * @option string max_register */ function ws_users_getList($params, &$service) { @@ -36,6 +41,44 @@ function ws_users_getList($params, &$service) $where_clauses[] = 'u.'.$conf['user_fields']['username'].' LIKE \''.pwg_db_real_escape_string($params['username']).'\''; } + $filtered_groups = array(); + if (!empty($params['filter'])) + { + $filter_query = 'SELECT id FROM '. GROUPS_TABLE .' WHERE name LIKE \''. $params['filter'] . '\';'; + $filtered_groups_res = pwg_query($filter_query); + while ($row = pwg_db_fetch_assoc($filtered_groups_res)) + { + $filtered_groups[] = $row['id']; + } + $filter_where_clause = '('.'u.'.$conf['user_fields']['username'].' LIKE \''. + pwg_db_real_escape_string($params['filter']).'\' OR ' + .'u.'.$conf['user_fields']['email'].' LIKE \''. + pwg_db_real_escape_string($params['filter']).'\''; + + if (!empty($filtered_groups)) { + $filter_where_clause .= 'OR ug.group_id IN ('. implode(',', $filtered_groups).')'; + } + $where_clauses[] = $filter_where_clause.')'; + } + + + if (!empty($params['min_register'])) { + list($min_register_month, $min_register_year) = explode(' ', $params["min_register"]); + if (strlen($min_register_month) == 1) { + $min_register_month = "0".$min_register_month; + } + $where_clauses[] = 'ui.registration_date >= \''.$min_register_year.'-'.$min_register_month.'-01 00:00:00\''; + } + + + if (!empty($params['max_register'])) { + list($max_register_month, $max_register_year) = explode(' ', $params["max_register"]); + if (strlen($max_register_month) == 1) { + $max_register_month = "0".$max_register_month; + } + $where_clauses[] = 'ui.registration_date <= adddate(\''.$max_register_year.'-'.$max_register_month.'-01 00:00:00\', interval 1 month)'; + } + if (!empty($params['status'])) { $params['status'] = array_intersect($params['status'], get_enums(USER_INFOS_TABLE, 'status')); @@ -54,11 +97,25 @@ function ws_users_getList($params, &$service) $where_clauses[] = 'ui.level >= '.$params['min_level']; } + if (!empty($params['max_level'])) + { + if ( !in_array($params['max_level'], $conf['available_permission_levels']) ) + { + return new PwgError(WS_ERR_INVALID_PARAM, 'Invalid level'); + } + $where_clauses[] = 'ui.level <= '.$params['max_level']; + } + if (!empty($params['group_id'])) { $where_clauses[] = 'ug.group_id IN('. implode(',', $params['group_id']) .')'; } + if (!empty($params['exclude'])) + { + $where_clauses[] = 'u.'.$conf['user_fields']['id'].' NOT IN('. implode(',', $params['exclude']) .')'; + } + $display = array('u.'.$conf['user_fields']['id'] => 'id'); if ($params['display'] != 'none') @@ -72,7 +129,7 @@ function ws_users_getList($params, &$service) 'nb_image_page','recent_period','expand','show_nb_comments','show_nb_hits', 'enabled_high','registration_date','registration_date_string', 'registration_date_since', 'last_visit', 'last_visit_string', - 'last_visit_since' + 'last_visit_since', 'total_count' ); } else if (in_array('basics', $params['display'])) @@ -81,6 +138,10 @@ function ws_users_getList($params, &$service) 'username','email','status','level','groups', )); } + else if (in_array('only_id', $params["display"])) + { + $params['display'] = array(); + } $params['display'] = array_flip($params['display']); // if registration_date_string or registration_date_since is requested, @@ -127,6 +188,10 @@ function ws_users_getList($params, &$service) $query = ' SELECT DISTINCT '; + // ADD SQL_CALC_FOUND_ROWS if display total_count is requested + if (isset($params['display']['total_count'])) { + $query .= 'SQL_CALC_FOUND_ROWS '; + } $first = true; foreach ($display as $field => $name) { @@ -140,7 +205,6 @@ SELECT DISTINCT '; if (!$first) $query.= ', '; $query.= 'ui.last_visit_from_history AS last_visit_from_history'; } - $query.= ' FROM '. USERS_TABLE .' AS u INNER JOIN '. USER_INFOS_TABLE .' AS ui @@ -149,13 +213,21 @@ SELECT DISTINCT '; ON u.'. $conf['user_fields']['id'] .' = ug.user_id WHERE '. implode(' AND ', $where_clauses) .' - ORDER BY '. $params['order'] .' - LIMIT '. $params['per_page'] .' - OFFSET '. ($params['per_page']*$params['page']) .' -;'; - + ORDER BY '. $params['order']; + if ($params["per_page"] != 0 || !empty($params["display"])) { + $query .= ' + LIMIT '. $params['per_page'].' + OFFSET '. ($params['per_page']*$params['page']) .'; + ;'; + } $users = array(); $result = pwg_query($query); + + /* GET THE RESULT OF SQL_CALC_FOUND_ROWS if display total_count is requested*/ + if (isset($params['display']['total_count'])) { + $total_count_query_result = pwg_query('SELECT FOUND_ROWS();'); + list($total_count) = pwg_db_fetch_row($total_count_query_result); + } while ($row = pwg_db_fetch_assoc($result)) { $row['id'] = intval($row['id']); @@ -165,24 +237,55 @@ SELECT DISTINCT '; } $users[ $row['id'] ] = $row; } - + + $users_id_arr = array(); if (count($users) > 0) { if (isset($params['display']['groups'])) { $query = ' -SELECT user_id, group_id + SELECT user_id, group_id FROM '. USER_GROUP_TABLE .' WHERE user_id IN ('. implode(',', array_keys($users)) .') ;'; $result = pwg_query($query); - while ($row = pwg_db_fetch_assoc($result)) { $users[ $row['user_id'] ]['groups'][] = intval($row['group_id']); } } - + foreach ($users as $cur_user) + { + $users_id_arr[] = $cur_user['id']; + if (isset($params['display']['registration_date_string'])) { + $users[$cur_user['id']]['registration_date_string'] = format_date($cur_user['registration_date'], array('day', 'month', 'year')); + } + if (isset($params['display']['registration_date_since'])) { + $users[ $cur_user['id'] ]['registration_date_since'] = time_since($cur_user['registration_date'], 'month'); + } + if (isset($params['display']['last_visit'])) { + $last_visit = $cur_user['last_visit']; + $users[ $cur_user['id'] ]['last_visit'] = $last_visit; + + if (!get_boolean($cur_user['last_visit_from_history']) and empty($last_visit)) + { + $last_visit = get_user_last_visit_from_history($cur_user['id'], true); + $users[ $cur_user['id'] ]['last_visit'] = $last_visit; + } + + if (isset($params['display']['last_visit_string'])) + { + $users[ $cur_user['id'] ]['last_visit_string'] = format_date($last_visit, array('day', 'month', 'year')); + } + + if (isset($params['display']['last_visit_since'])) + { + $users[ $cur_user['id'] ]['last_visit_since'] = time_since($last_visit, 'day'); + } + } + } + + /* Removed for optimization above, dont go through the $users array for evert display if (isset($params['display']['registration_date_string'])) { foreach ($users as $cur_user) @@ -221,22 +324,27 @@ SELECT user_id, group_id { $users[ $cur_user['id'] ]['last_visit_since'] = time_since($last_visit, 'day'); } - } - } + }*/ } - $users = trigger_change('ws_users_getList', $users); - - return array( - 'paging' => new PwgNamedStruct( - array( - 'page' => $params['page'], - 'per_page' => $params['per_page'], - 'count' => count($users) - ) - ), - 'users' => new PwgNamedArray(array_values($users), 'user') + if ($params["per_page"] == 0 && empty($params["display"])) { + $method_result = $users_id_arr; + } else { + $method_result = array( + 'paging' => new PwgNamedStruct( + array( + 'page' => $params['page'], + 'per_page' => $params['per_page'], + 'count' => count($users) + ) + ), + 'users' => new PwgNamedArray(array_values($users), 'user') ); + } + if (isset($params['display']['total_count'])) { + $method_result['total_count'] = $total_count; + } + return $method_result; } /** diff --git a/language/en_UK/admin.lang.php b/language/en_UK/admin.lang.php index 14499014b..ff84b9d5d 100644 --- a/language/en_UK/admin.lang.php +++ b/language/en_UK/admin.lang.php @@ -1076,6 +1076,42 @@ $lang['Please upgrade your PHP version before any update.'] = 'Please upgrade yo $lang['Requires PHP %s'] = 'Requires PHP %s'; $lang['%s MB used'] = '%s MB used'; $lang['%s GB used'] = '%s GB used'; +$lang['Manage users'] = 'Manage users'; +$lang['between %s and %s'] = 'between %s and %s'; +$lang['Edit guest user'] = 'Edit guest user'; +$lang['New user added'] = 'New user added'; +$lang['Edit'] = 'Edit'; +$lang['Advanced filter'] = 'Advanced filter'; +$lang['Registered'] = 'Registered'; +$lang['Email Adress'] = 'Email Adress'; +$lang['Select groups or type them'] = 'Select groups or type them'; +$lang['Update'] = 'Update'; +$lang['Close'] = 'Close'; +$lang['User updated'] = 'User updated'; +$lang['Delete user'] = 'Delete user'; +$lang['Theme'] = 'Theme'; +$lang['Language'] = 'Language'; +$lang['Add a new user'] = 'Add a new user'; +$lang['Show'] = 'Show'; +$lang['Generate random password'] = 'Generate random password'; +$lang['Email'] = 'Email'; +$lang['Add User'] = 'Add User'; +$lang['Jan'] = 'Jan'; +$lang['Feb'] = 'Feb'; +$lang['Mar'] = 'Mar'; +$lang['Apr'] = 'Apr'; +$lang['May'] = 'May'; +$lang['Jun'] = 'Jun'; +$lang['Jul'] = 'Jul'; +$lang['Aug'] = 'Aug'; +$lang['Sep'] = 'Sep'; +$lang['Oct'] = 'Oct'; +$lang['Nov'] = 'Nov'; +$lang['Dec'] = 'Dec'; +$lang['Change Password'] = 'Change Password'; +$lang['Photos per page'] = 'Photos per page'; +$lang['Users not logged in will have these settings applied, these settings are used by default for new users'] = 'Users not logged in will have these settings applied, these settings are used by default for new users'; +$lang['Last visit'] = 'Last visit'; $lang['Activity peak in the last weeks'] = 'Activity peak in the last weeks'; $lang['%d Activities'] = '%d Activities'; $lang['%d Activity'] = '%d Activity'; diff --git a/language/fr_FR/admin.lang.php b/language/fr_FR/admin.lang.php index 2ce54d7a0..229e611a6 100644 --- a/language/fr_FR/admin.lang.php +++ b/language/fr_FR/admin.lang.php @@ -1078,6 +1078,42 @@ $lang['Please upgrade your PHP version before any update.'] = 'Il faudra mettre $lang['Requires PHP %s'] = 'Requiert PHP %s'; $lang['%s MB used'] = '%s MB utilisés'; $lang['%s GB used'] = '%s GB utilisés'; +$lang['Manage users'] = 'Gérer les utilisateurs'; +$lang['between %s and %s'] = 'entre %s et %s'; +$lang['Edit guest user'] = 'Editer l\'utilisateur invité'; +$lang['New user added'] = 'Nouvel utilisateur ajouté'; +$lang['Edit'] = 'Editer'; +$lang['Advanced filter'] = 'Filtres avancés'; +$lang['Registered'] = 'Enregistré'; +$lang['Email Adress'] = 'Adresse mail'; +$lang['Select groups or type them'] = 'Sélectionne des groupes ou écris les'; +$lang['Update'] = 'Modifier'; +$lang['Close'] = 'Fermer'; +$lang['User updated'] = 'Utilisateur modifié'; +$lang['Delete user'] = 'Supprimer l\'utilitsateur'; +$lang['Theme'] = 'Thème'; +$lang['Language'] = 'Langue'; +$lang['Add a new user'] = 'Ajouter un nouvel utilisateur'; +$lang['Show'] = 'Montrer'; +$lang['Generate random password'] = 'Générer un mot de passe aléatoire'; +$lang['Email'] = 'Email'; +$lang['Add User'] = 'Ajouter l\'utlisateur'; +$lang['Jan'] = 'Jan'; +$lang['Feb'] = 'Fev'; +$lang['Mar'] = 'Mar'; +$lang['Apr'] = 'Avr'; +$lang['May'] = 'Mai'; +$lang['Jun'] = 'Jun'; +$lang['Jul'] = 'Jul'; +$lang['Aug'] = 'Aou'; +$lang['Sep'] = 'Sep'; +$lang['Oct'] = 'Oct'; +$lang['Nov'] = 'Nov'; +$lang['Dec'] = 'Dec'; +$lang['Change Password'] = 'Modifier le mot de passe'; +$lang['Photos per page'] = 'Photos par page'; +$lang['Users not logged in will have these settings applied, these settings are used by default for new users'] = 'Les utilisateurs non connectés vont avoir ces paramètres appliqués, ces paramètres sont utilisés par défaut pour les nouveaux utilisateurs'; +$lang['Last visit'] = 'Dernière visite'; $lang['Activity peak in the last weeks'] = 'Pics d\'activité des dernières semaines'; $lang['%d Activities'] = '%d Activités'; $lang['%d Activity'] = '%d Activité';