From fea2a4efd1ad085def7cf84cc444325d0815b62e Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sat, 24 May 2014 14:18:04 +0000 Subject: feature 3077 : improve cache invalidation - add "lastmodified" automatic field for categories, groups, users, tags and images tables - provide a "server key" to the client cache manager git-svn-id: http://piwigo.org/svn/trunk@28532 68402e56-0260-453c-a942-63ccdbb3a9ee --- admin/themes/default/js/LocalStorageCache.js | 22 +++--- .../default/template/batch_manager_global.tpl | 35 +++++---- .../themes/default/template/batch_manager_unit.tpl | 35 +++++---- admin/themes/default/template/cat_perm.tpl | 84 ++++++++++++++++------ admin/themes/default/template/picture_modify.tpl | 49 +++++++------ 5 files changed, 131 insertions(+), 94 deletions(-) (limited to 'admin/themes/default') diff --git a/admin/themes/default/js/LocalStorageCache.js b/admin/themes/default/js/LocalStorageCache.js index 49a4fa98d..c18171efc 100644 --- a/admin/themes/default/js/LocalStorageCache.js +++ b/admin/themes/default/js/LocalStorageCache.js @@ -1,7 +1,8 @@ -var LocalStorageCache = function(key, lifetime, loader) { - this.key = key; - this.lifetime = lifetime*1000; - this.loader = loader; +var LocalStorageCache = function(options) { + this.key = options.key + '-' + options.serverId; + this.serverKey = options.serverKey; + this.lifetime = options.lifetime ? options.lifetime*1000 : 3600*1000; + this.loader = options.loader; this.storage = window.localStorage; this.ready = !!this.storage; @@ -14,28 +15,23 @@ LocalStorageCache.prototype.get = function(callback) { if (this.ready && this.storage[this.key] != undefined) { var cache = JSON.parse(this.storage[this.key]); - if (now - cache.timestamp <= this.lifetime) { + if (now - cache.timestamp <= this.lifetime && cache.key == this.serverKey) { callback(cache.data); return; } } this.loader(function(data) { - if (that.ready) { - that.storage[that.key] = JSON.stringify({ - timestamp: now, - data: data - }); - } - + that.set.call(that, data); callback(data); }); }; LocalStorageCache.prototype.set = function(data) { if (this.ready) { - that.storage[that.key] = JSON.stringify({ + this.storage[this.key] = JSON.stringify({ timestamp: new Date().getTime(), + key: this.serverKey, data: data }); } diff --git a/admin/themes/default/template/batch_manager_global.tpl b/admin/themes/default/template/batch_manager_global.tpl index 3e22edb02..087f9916a 100644 --- a/admin/themes/default/template/batch_manager_global.tpl +++ b/admin/themes/default/template/batch_manager_global.tpl @@ -68,16 +68,22 @@ jQuery(document).ready(function() {ldelim} jQuery("a.preview-box").colorbox(); {* *} - var tagsCache = new LocalStorageCache('tagsAdminList', 5*60, function(callback) { - jQuery.getJSON('{$ROOT_URL}ws.php?format=json&method=pwg.tags.getAdminList', function(data) { - var tags = data.result.tags; - - for (var i=0, l=tags.length; i *} -var tagsCache = new LocalStorageCache('tagsAdminList', 5*60, function(callback) { - jQuery.getJSON('{$ROOT_URL}ws.php?format=json&method=pwg.tags.getAdminList', function(data) { - var tags = data.result.tags; - - for (var i=0, l=tags.length; i *} -var groupsCache = new LocalStorageCache('groupsAdminList', 5*60, function(callback) { - jQuery.getJSON('{$ROOT_URL}ws.php?format=json&method=pwg.groups.getList&per_page=99999', function(data) { - callback(data.result.groups); - }); +var groupsCache = new LocalStorageCache({ + key: 'groupsAdminList', + serverKey: '{$CACHE_KEYS.groups}', + serverId: '{$CACHE_KEYS._hash}', + + loader: function(callback) { + jQuery.getJSON('{$ROOT_URL}ws.php?format=json&method=pwg.groups.getList&per_page=99999', function(data) { + callback(data.result.groups); + }); + } }); jQuery('[data-selectize=groups]').selectize({ @@ -32,22 +38,28 @@ groupsCache.get(function(groups) { }); {* *} -var usersCache = new LocalStorageCache('usersAdminList', 5*60, function(callback) { - var page = 0, - users = []; - - (function load(page){ - jQuery.getJSON('{$ROOT_URL}ws.php?format=json&method=pwg.users.getList&display=username&per_page=99999&page='+ page, function(data) { - users = users.concat(data.result.users); - - if (data.result.paging.count == data.result.paging.per_page) { - load(++page); - } - else { - callback(users); - } - }); - }(page)); +var usersCache = new LocalStorageCache({ + key: 'usersAdminList', + serverKey: '{$CACHE_KEYS.users}', + serverId: '{$CACHE_KEYS._hash}', + + loader: function(callback) { + var users = []; + + // recursive loader + (function load(page){ + jQuery.getJSON('{$ROOT_URL}ws.php?format=json&method=pwg.users.getList&display=username&per_page=99999&page='+ page, function(data) { + users = users.concat(data.result.users); + + if (data.result.paging.count == data.result.paging.per_page) { + load(++page); + } + else { + callback(users); + } + }); + }(0)); + } }); jQuery('[data-selectize=users]').selectize({ @@ -68,6 +80,29 @@ usersCache.get(function(users) { }, this)); }); }); + +{* *} +function checkStatusOptions() { + if (jQuery("input[name=status]:checked").val() == "private") { + jQuery("#privateOptions, #applytoSubAction").show(); + } + else { + jQuery("#privateOptions, #applytoSubAction").hide(); + } +} + +checkStatusOptions(); +jQuery("#selectStatus").change(function() { + checkStatusOptions(); +}); + +{if isset($nb_users_granted_indirect) && $nb_users_granted_indirect>0} + jQuery(".toggle-indirectPermissions").click(function(e){ + jQuery(".toggle-indirectPermissions").toggle(); + jQuery("#indirectPermissionsDetails").toggle(); + e.preventDefault(); + }); +{/if} }()); {/footer_script} @@ -111,8 +146,8 @@ usersCache.get(function(users) { {if isset($nb_users_granted_indirect) && $nb_users_granted_indirect>0}

{'%u users have automatic permission because they belong to a granted group.'|@translate:$nb_users_granted_indirect} - - {'show details'|@translate} + + {'show details'|@translate}