Bug 13265: Use sessionStorage to store searches instead of cookies
This is a counter patch. The idea is to provide a permanent solution for the cookie length issue we occurred on storing the searches (intranet side). Test plan: Launch as many searches as you can (don't forget to sleep). You should not get any error. Confirm there is no regression using the results browser. Tested with 6 parralel searches in different tabs (with alternatively browising up and down). No problems found. Signed-off-by: Marc Véron <veron@veron.ch> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
parent
9bef8f8738
commit
41b9687d97
1 changed files with 41 additions and 39 deletions
|
@ -7,58 +7,60 @@ KOHA.browser = function (searchid, biblionumber) {
|
|||
// We are generating a clean numeric datetime representation so we can easily compare them using the default javascript lexigraphic sorter.
|
||||
searchid = 'scs_' + (new Date()).getTime(); // scs for Staff Client Search
|
||||
}
|
||||
this.searchid = searchid;
|
||||
me.searchid = searchid;
|
||||
|
||||
var cookie = $.cookie(me.searchid)
|
||||
if (cookie) {
|
||||
me.searchCookie = JSON.parse(cookie);
|
||||
var searches_stored = sessionStorage.getItem('searches');
|
||||
var current_search;
|
||||
var searches = {};
|
||||
if ( searches_stored ) {
|
||||
searches = JSON.parse(searches_stored);
|
||||
current_search = searches[me.searchid];
|
||||
|
||||
// Remove old entries
|
||||
var searchids = Object.keys(searches);
|
||||
var nb_searches = searchids.length;
|
||||
if ( nb_searches > 20 ) { // No need to keep more than 20 searches
|
||||
searchids = searchids.sort();
|
||||
for ( var i = 0 ; i < nb_searches - 20 ; i++ ) {
|
||||
delete searches[searchids[i]];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var browseRecords = function (movement) {
|
||||
var newSearchPos = me.curPos + movement;
|
||||
if (newSearchPos > me.searchCookie.results.length - 1) {
|
||||
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(me.searchCookie.query) + '&limit=' + decodeURIComponent(me.searchCookie.limit) + '&sort=' + me.searchCookie.sort + '&gotoPage=detail.pl&gotoNumber=first&searchid=' + me.searchid + '&offset=' + newSearchPos;
|
||||
if (newSearchPos > current_search.results.length - 1) {
|
||||
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(current_search.query) + '&limit=' + decodeURIComponent(current_search.limit) + '&sort=' + current_search.sort + '&gotoPage=detail.pl&gotoNumber=first&searchid=' + me.searchid + '&offset=' + newSearchPos;
|
||||
} else if (newSearchPos < 0) {
|
||||
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(me.searchCookie.query) + '&limit=' + decodeURIComponent(me.searchCookie.limit) + '&sort=' + me.searchCookie.sort + '&gotoPage=detail.pl&gotoNumber=last&searchid=' + me.searchid + '&offset=' + (me.offset - me.searchCookie.pagelen);
|
||||
window.location = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(current_search.query) + '&limit=' + decodeURIComponent(current_search.limit) + '&sort=' + current_search.sort + '&gotoPage=detail.pl&gotoNumber=last&searchid=' + me.searchid + '&offset=' + (me.offset - current_search.pagelen);
|
||||
} else {
|
||||
window.location = window.location.href.replace('biblionumber=' + biblionumber, 'biblionumber=' + me.searchCookie.results[newSearchPos]);
|
||||
window.location = window.location.href.replace('biblionumber=' + biblionumber, 'biblionumber=' + current_search.results[newSearchPos]);
|
||||
}
|
||||
}
|
||||
|
||||
this.create = function (offset, query, limit, sort, newresults, total) {
|
||||
if (me.searchCookie) {
|
||||
if (offset === me.searchCookie.offset - newresults.length) {
|
||||
me.searchCookie.results = newresults.concat(me.searchCookie.results);
|
||||
} else if (searchOffset = me.searchCookie.offset + newresults.length) {
|
||||
me.searchCookie.results = me.searchCookie.results.concat(newresults);
|
||||
me.create = function (offset, query, limit, sort, newresults, total) {
|
||||
if (current_search) {
|
||||
if (offset === current_search.offset - newresults.length) {
|
||||
current_search.results = newresults.concat(current_search.results);
|
||||
} else if (searchOffset = current_search.offset + newresults.length) {
|
||||
current_search.results = current_search.results.concat(newresults);
|
||||
} else {
|
||||
delete me.searchCookie;
|
||||
delete current_search;
|
||||
}
|
||||
}
|
||||
if (!me.searchCookie) {
|
||||
me.searchCookie = { offset: offset,
|
||||
if (!current_search) {
|
||||
current_search = { offset: offset,
|
||||
query: query,
|
||||
limit: limit,
|
||||
sort: sort,
|
||||
pagelen: newresults.length,
|
||||
results: newresults,
|
||||
total: total
|
||||
total: total,
|
||||
searchid: searchid
|
||||
};
|
||||
|
||||
//Bug_11369 Cleaning up excess searchCookies to prevent cookie overflow in the browser memory.
|
||||
var allVisibleCookieKeys = Object.keys( $.cookie() );
|
||||
var scsCookieKeys = $.grep( allVisibleCookieKeys,
|
||||
function(elementOfArray, indexInArray) {
|
||||
return ( elementOfArray.search(/^scs_\d/) != -1 ); //We are looking for specifically staff client searchCookies.
|
||||
}
|
||||
);
|
||||
if (scsCookieKeys.length >= 10) {
|
||||
scsCookieKeys.sort(); //Make sure they are in order, oldest first!
|
||||
$.removeCookie( scsCookieKeys[0], { path: '/' } );
|
||||
}
|
||||
//EO Bug_11369
|
||||
}
|
||||
$.cookie(me.searchid, JSON.stringify(me.searchCookie), { path: '/' });
|
||||
searches[me.searchid] = current_search;
|
||||
sessionStorage.setItem('searches', JSON.stringify(searches));
|
||||
$(document).ready(function () {
|
||||
//FIXME It's not a good idea to modify the click events
|
||||
$('#searchresults table tr a[href*="detail.pl"]').on('click', function (ev) {
|
||||
|
@ -80,22 +82,22 @@ KOHA.browser = function (searchid, biblionumber) {
|
|||
});
|
||||
};
|
||||
|
||||
this.show = function () {
|
||||
if (me.searchCookie) {
|
||||
me.curPos = $.inArray(biblionumber, me.searchCookie.results);
|
||||
me.offset = Math.floor((me.searchCookie.offset + me.curPos - 1) / me.searchCookie.pagelen) * me.searchCookie.pagelen;
|
||||
me.show = function () {
|
||||
if (current_search) {
|
||||
me.curPos = $.inArray(biblionumber, current_search.results);
|
||||
me.offset = Math.floor((current_search.offset + me.curPos - 1) / current_search.pagelen) * current_search.pagelen;
|
||||
|
||||
$(document).ready(function () {
|
||||
if (me.curPos > -1) {
|
||||
var searchURL = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(me.searchCookie.query) + '&limit=' + decodeURIComponent(me.searchCookie.limit) + '&sort=' + me.searchCookie.sort + '&searchid=' + me.searchid + '&offset=' + me.offset;
|
||||
var searchURL = '/cgi-bin/koha/catalogue/search.pl?' + decodeURIComponent(current_search.query) + '&limit=' + decodeURIComponent(current_search.limit) + '&sort=' + current_search.sort + '&searchid=' + me.searchid + '&offset=' + me.offset;
|
||||
var prevbutton;
|
||||
var nextbutton;
|
||||
if (me.curPos === 0 && me.searchCookie.offset === 1) {
|
||||
if (me.curPos === 0 && current_search.offset === 1) {
|
||||
prevbutton = '<span id="browse-previous" class="browse-button">« ' + BROWSER_PREVIOUS + '</span>';
|
||||
} else {
|
||||
prevbutton = '<a href="#" id="browse-previous" class="browse-button">« ' + BROWSER_PREVIOUS + '</a>';
|
||||
}
|
||||
if (me.searchCookie.offset + me.curPos == me.searchCookie.total) {
|
||||
if (current_search.offset + me.curPos == current_search.total) {
|
||||
nextbutton = '<span id="browse-next" class="browse-button">' + BROWSER_NEXT + ' »</span>';
|
||||
} else {
|
||||
nextbutton = '<a href="#" id="browse-next" class="browse-button">' + BROWSER_NEXT + ' »</a>';
|
||||
|
|
Loading…
Reference in a new issue