From 2fdcfdddfecb66c7d654004cd1d44ceb6a1233c7 Mon Sep 17 00:00:00 2001 From: plegall Date: Mon, 28 Oct 2013 16:25:46 +0000 Subject: feature 1668, in progress: redesign user manager (jQuery datatables, AJAX calls) git-svn-id: http://piwigo.org/svn/trunk@25194 68402e56-0260-453c-a942-63ccdbb3a9ee --- admin/themes/default/template/user_list.tpl | 583 ++++++++++++++++------------ 1 file changed, 344 insertions(+), 239 deletions(-) (limited to 'admin/themes/default/template') diff --git a/admin/themes/default/template/user_list.tpl b/admin/themes/default/template/user_list.tpl index 5bb3f18ed..911bfc978 100644 --- a/admin/themes/default/template/user_list.tpl +++ b/admin/themes/default/template/user_list.tpl @@ -1,8 +1,246 @@ +{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"} + +{footer_script} +var selectedMessage_pattern = "{'%d of %d photos selected'|@translate}"; +var selectedMessage_none = "{'No photo selected, %d photos in current set'|@translate}"; +var selectedMessage_all = "{'All %d photos are selected'|@translate}"; +var applyOnDetails_pattern = "{'on the %d selected users'|@translate}"; +var missingConfirm = "{'You need to confirm deletion'|translate}"; + +var allUsers = [{$all_users}]; +var selection = [{$selection}]; +{/footer_script} + +{footer_script}{literal} +jQuery(document).ready(function() { + /* first column must be prefixed with the open/close icon */ + var aoColumns = [ + { + 'bVisible':false + }, + { + "mRender": function(data, type, full) { + return ''; + } + } + ]; + + for (i=2; i 0) { + jQuery("#forbidAction").hide(); + jQuery("#permitAction").show(); + + jQuery("#applyOnDetails").text( + sprintf( + applyOnDetails_pattern, + selection.length + ) + ); + + if (selection.length == allUsers.length) { + jQuery("#selectedMessage").text( + sprintf( + selectedMessage_all, + allUsers.length + ) + ); + } + else { + jQuery("#selectedMessage").text( + sprintf( + selectedMessage_pattern, + selection.length, + allUsers.length + ) + ); + } + } + else { + jQuery("#forbidAction").show(); + jQuery("#permitAction").hide(); + + jQuery("#selectedMessage").text( + sprintf( + selectedMessage_none, + allUsers.length + ) + ); + } + + 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("#selectAll").click(function () { + selection = allUsers; + 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 () { + var newSelection = []; + for(var i in allUsers) + { + if (selection.indexOf(allUsers[i]) == -1) { + newSelection.push(allUsers[i]); + } + } + selection = newSelection; + + 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(); + 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("#permitAction input, #permitAction select").click(function() { + jQuery("#applyActionBlock .infos").hide(); + }); + + jQuery("#applyAction").click(function() { + var action = jQuery("select[name=selectAction]").prop("value"); + var method = null; + var data = { + 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; + } + + jQuery.ajax({ + url: "ws.php?format=json&method="+method, + type:"POST", + data: data, + beforeSend: function() { + jQuery("#applyActionLoading").show(); + }, + success:function(data) { + oTable.fnDraw(); + jQuery("#applyActionLoading").hide(); + jQuery("#applyActionBlock .infos").show(); + + if (action == 'delete') { + var allUsers_new = []; + for(var i in allUsers) + { + if (selection.indexOf(allUsers[i]) == -1) { + allUsers_new.push(allUsers[i]); + } + } + allUsers = allUsers_new; + console.log('allUsers_new.length = '+allUsers_new.length); + selection = []; + checkSelection(); + } + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + jQuery("#applyActionLoading").hide(); + } + }); + + return false; + }); + +}); +{/literal}{/footer_script} + +{literal} + +{/literal} +

{'User list'|@translate}

-
+
{'Add a user'|@translate} @@ -18,273 +256,140 @@
-
-
- {'Filter'|@translate} - - - - - - - - - - - - - - -
- -
-
-{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} - - +
- - - - - - - - {if not empty($plugin_user_list_column_titles)} - {foreach from=$plugin_user_list_column_titles item=title} - - {/foreach} - {/if} - + + + + + - - {foreach from=$users item=user name=users_loop} - - - - - - - - {foreach from=$user.plugin_columns item=data} - - {/foreach} - - - {/foreach}
 {'Username'|@translate}{'User status'|@translate}{'Email address'|@translate}{'Groups'|@translate}{'Properties'|@translate}{$title}{'Actions'|@translate}
id{'Username'|@translate}{'Status'|@translate}{'Email address'|@translate}
{$user.STATUS}{$user.EMAIL}{$user.GROUPS}{$user.PROPERTIES}{$data} - {'Permissions'|@translate} - {'Profile'|@translate} - {foreach from=$user.plugin_actions item=data} - {$data} - {/foreach} -
-{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} - -{* delete the selected users ? *} -
- {'Deletions'|@translate} - - -
+
-
- {'Status'|@translate} +

+ {'Select:'|@translate} + {'All'|@translate}, + {'None'|@translate}, + {'Invert'|@translate} - - - - - -
{'Status'|@translate} - - - -
-

- -{* form to set properties for many users at once *} -
- {'Groups'|@translate} + +

- +
+ {'Action'|@translate} + + +
- - - + - - - - - -
{'associate to group'|@translate} + {* group_associate *} +
{html_options name=associate options=$association_options selected=$associate_selected} -
{'dissociate from group'|@translate} + {* group_dissociate *} +
{html_options name=dissociate options=$association_options selected=$dissociate_selected} -
- -
- -{* Properties *} -
- {'Properties'|@translate} - - - - - - - - - - - - -
{'High definition enabled'|@translate} - - / {'set to'|@translate} - - -
{'Privacy level'|@translate} - - - -
+ + + {* enabled_high *} +
+ + +
+ + {* level *} +
+ +
-
+ {* nb_image_page *} +
+ +
-{* preference *} -
- {'Preferences'|@translate} - - - - - - - - - - - - - - - - - - - - - - - - - - + -{if $ACTIVATE_COMMENTS} - - - - -{/if} + - - - - + -
{'Number of photos per page'|@translate} - - - -
{'Interface theme'|@translate} - - - {html_options options=$theme_options selected=$theme_selected} -
{'Language'|@translate} - - - {html_options options=$language_options selected=$language_selected} -
{'Recent period'|@translate} - - - -
{'Expand all albums'|@translate} - - / {'set to'|@translate} + + + {* recent_period *} +
+ +
+ + {* expand *} +
-
{'Show number of comments'|@translate} - - / {'set to'|@translate} + {* show_nb_comments *} +
-
{'Show number of hits'|@translate} - - / {'set to'|@translate} + {* show_nb_hits *} +
-
+ + {* #permitAction *}
-

- {'target'|@translate} - - -

- -

- - -

- -
- - - + -- cgit v1.2.3