Kyle M Hall
b1eb5f2e44
There is a missing space in the "added to cart" message on the staff side, when you are adding 2 or more items to the cart, where 1+ is already in the cart and 1+ is not in the cart. I verified that this is not an issue in the OPAC cart function. Test: 1. Search for records in your system. 2. In search results, select the first two records and choose Add to Cart. 3. Message returned, "2 item(s) added to your cart", as expected. 4. Keep those 2 records selected, and select 2 additional records (so 4 total records selected), and choose Add to Cart again. 5. Message returned, "2 item(s) added to your cart2 already in your cart". 6. Apply this patch 7. Repeat steps 1 through 4 8. Note the two phrases are on separate lines Signed-off-by: Heather Braum <hbraum@nekls.org> Signed-off-by: Joonas Kylmälä <j.kylmala@gmail.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>
447 lines
12 KiB
JavaScript
447 lines
12 KiB
JavaScript
//////////////////////////////////////////////////////////////////////////////
|
|
// BASIC FUNCTIONS FOR COOKIE MANAGEMENT //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
var CGIBIN = "/cgi-bin/koha/";
|
|
|
|
var nameCookie = "intranet_bib_list";
|
|
var nameParam = "bib_list";
|
|
var valCookie = readCookie(nameCookie);
|
|
|
|
if(valCookie){
|
|
var arrayRecords = valCookie.split("/");
|
|
if(arrayRecords.length > 0){
|
|
var basketcount = arrayRecords.length-1;
|
|
} else {
|
|
var basketcount = "";
|
|
}
|
|
} else {
|
|
var basketcount = "";
|
|
}
|
|
|
|
function writeCookie(name, val, wd) {
|
|
if (wd) {
|
|
parent.opener.document.cookie = name + "=" + val + "; path=/";
|
|
}
|
|
else {
|
|
parent.document.cookie = name + "=" + val + "; path=/";
|
|
}
|
|
}
|
|
|
|
function readCookieValue (str, val_beg) {
|
|
var val_end = str.indexOf(";", val_end);
|
|
if (val_end == -1)
|
|
val_end = str.length;
|
|
return str.substring(val_beg, val_end);
|
|
}
|
|
|
|
function readCookie(name, wd) {
|
|
var str_name = name + "=";
|
|
var str_len = str_name.length;
|
|
var str_cookie = "";
|
|
if (wd) {
|
|
str_cookie = parent.opener.document.cookie;
|
|
}
|
|
else {
|
|
str_cookie = parent.document.cookie;
|
|
}
|
|
// fixed - getting the part of the basket that is bib_list
|
|
var cookie_parts = str_cookie.split(";");
|
|
for(var i=0;i < cookie_parts.length;i++) {
|
|
var c = cookie_parts[i];
|
|
while (c.charAt(0)==' ') c = c.substring(1,c.length);
|
|
if(c.indexOf(str_name) == 0) return c.substring(str_name.length,c.length);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function delCookie(name) {
|
|
var exp = new Date();
|
|
exp.setTime(exp.getTime()-1);
|
|
if(parent.opener){
|
|
parent.opener.document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
|
|
} else {
|
|
document.cookie = name + "=null; path=/; expires=" + exp.toGMTString();
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// SPECIFIC FUNCTIONS USING COOKIES //
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
function openBasket() {
|
|
var strCookie = "";
|
|
var valCookie = readCookie(nameCookie);
|
|
if ( valCookie ) {
|
|
strCookie = nameParam + "=" + valCookie;
|
|
}
|
|
|
|
if ( strCookie ) {
|
|
var iW = 820;
|
|
var iH = 450;
|
|
var optWin = "status=yes,scrollbars=yes,resizable=yes,toolbar=no,location=yes,height="+iH+",width="+iW;
|
|
var loc = CGIBIN + "basket/basket.pl?" + strCookie;
|
|
var basket = open(loc, "basket", optWin);
|
|
if (window.focus) {basket.focus()}
|
|
}
|
|
else {
|
|
showCartUpdate(MSG_BASKET_EMPTY);
|
|
}
|
|
}
|
|
|
|
function addRecord(val, selection,NoMsgAlert) {
|
|
var valCookie = readCookie(nameCookie);
|
|
var write = 0;
|
|
|
|
if ( ! valCookie ) { // empty basket
|
|
valCookie = val + '/';
|
|
write = 1;
|
|
updateBasket(1);
|
|
}
|
|
else {
|
|
// is this record already in the basket ?
|
|
var found = false;
|
|
var arrayRecords = valCookie.split("/");
|
|
for (var i = 0; i < valCookie.length - 1; i++) {
|
|
if (val == arrayRecords[i]) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if ( found ) {
|
|
if (selection) {
|
|
return 0;
|
|
}
|
|
if (! NoMsgAlert ) {
|
|
showCartUpdate(MSG_RECORD_IN_BASKET);
|
|
}
|
|
}
|
|
else {
|
|
valCookie += val + '/';
|
|
write = 1;
|
|
updateBasket(arrayRecords.length);
|
|
}
|
|
}
|
|
|
|
if (write) {
|
|
writeCookie(nameCookie, valCookie);
|
|
if (selection) { // when adding a selection of records
|
|
return 1;
|
|
}
|
|
if (! NoMsgAlert ) {
|
|
showCartUpdate(MSG_RECORD_ADDED);
|
|
}
|
|
}
|
|
}
|
|
|
|
function AllAreChecked(s){
|
|
if (! s.length) { return false;}
|
|
var l = s.length;
|
|
for (var i=0; i < l; i++) {
|
|
if(! s[i].checked) { return false; }
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function SelectAll(){
|
|
if(document.bookbag_form.biblionumber.length > 0) {
|
|
var checky = AllAreChecked(document.bookbag_form.biblionumber);
|
|
var l = document.bookbag_form.biblionumber.length;
|
|
for (var i=0; i < l; i++) {
|
|
document.bookbag_form.biblionumber[i].checked = (checky) ? false : true;
|
|
}
|
|
}
|
|
}
|
|
|
|
function addMultiple(biblist){
|
|
var c_value = "";
|
|
if(biblist.length > 0) {
|
|
for (var i=0; i < biblist.length; i++) {
|
|
if (biblist[i].checked) {
|
|
c_value = c_value + biblist[i].value + "/";
|
|
}
|
|
}
|
|
addSelRecords(c_value);
|
|
} else {
|
|
c_value = c_value + biblist.value + "/";
|
|
addSelRecords(c_value);
|
|
}
|
|
}
|
|
|
|
function addSelRecords(valSel) { // function for adding a selection of biblios to the basket
|
|
// from the results list
|
|
var arrayRecords = valSel.split("/");
|
|
var i = 0;
|
|
var nbAdd = 0;
|
|
for (i=0;i<arrayRecords.length;i++) {
|
|
if (arrayRecords[i]) {
|
|
nbAdd += addRecord(arrayRecords[i], 1);
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
var msg = "";
|
|
if (nbAdd) {
|
|
if (i > nbAdd) {
|
|
msg = MSG_NRECORDS_ADDED.format(nbAdd);
|
|
msg += "<br/>";
|
|
msg += MSG_NRECORDS_IN_BASKET.format((i-nbAdd));
|
|
}
|
|
else {
|
|
msg = MSG_NRECORDS_ADDED.format(nbAdd);
|
|
}
|
|
}
|
|
else {
|
|
if (i < 1) {
|
|
msg = MSG_NO_RECORD_SELECTED;
|
|
}
|
|
else {
|
|
msg = MSG_NO_RECORD_ADDED;
|
|
}
|
|
}
|
|
showCartUpdate(msg);
|
|
}
|
|
|
|
function showCartUpdate(msg){
|
|
// set body of popup window
|
|
$("#cartDetails").html(msg);
|
|
showCart();
|
|
setTimeout("hideCart()",2000);
|
|
}
|
|
|
|
function showListsUpdate(msg){
|
|
// set body of popup window
|
|
alert(msg);
|
|
}
|
|
|
|
function selRecord(num, status) {
|
|
var str = document.myform.records.value
|
|
if (status){
|
|
str += num+"/";
|
|
}
|
|
else {
|
|
str = delRecord(num, str);
|
|
}
|
|
|
|
document.myform.records.value = str;
|
|
}
|
|
|
|
function delSelRecords() {
|
|
var recordsSel = 0;
|
|
var end = 0;
|
|
var valCookie = readCookie(nameCookie, 1);
|
|
|
|
if (valCookie) {
|
|
var str = document.myform.records.value;
|
|
if (str.length > 0){
|
|
recordsSel = 1;
|
|
var str2 = valCookie;
|
|
while (!end){
|
|
s = str.indexOf("/");
|
|
if (s>0){
|
|
num = str.substring(0, s)
|
|
str = delRecord(num,str);
|
|
str2 = delRecord(num,str2);
|
|
} else {
|
|
end = 1;
|
|
}
|
|
}
|
|
|
|
if (str2.length == 0) { // equivalent to emptying the basket
|
|
var rep = false;
|
|
rep = confirm(MSG_CONFIRM_DEL_BASKET);
|
|
if (rep) {
|
|
delCookie(nameCookie);
|
|
document.location = "about:blank";
|
|
updateBasket(0,top.opener);
|
|
window.close();
|
|
} else {
|
|
return;
|
|
}
|
|
} else {
|
|
writeCookie(nameCookie, str2, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (recordsSel) {
|
|
var strCookie = "";
|
|
var valCookie = readCookie(nameCookie, 1);
|
|
strCookie = nameParam + "=" + valCookie;
|
|
var arrayRecords = valCookie.split("/");
|
|
updateBasket(arrayRecords.length-1,top.opener);
|
|
document.location = CGIBIN + "basket/basket.pl?" + strCookie;
|
|
}
|
|
else {
|
|
alert(MSG_NO_RECORD_SELECTED);
|
|
}
|
|
}
|
|
|
|
function delRecord (n, s) {
|
|
var re = /\d/;
|
|
var aux = s;
|
|
var found = 0;
|
|
var pos = -1;
|
|
|
|
while (!found) {
|
|
pos = aux.indexOf(n, pos+1);
|
|
var charAfter = aux.charAt(pos+n.length); // character right after the researched string
|
|
if (charAfter.match(re)) { // record number inside another one
|
|
continue;
|
|
}
|
|
else { // good record number
|
|
aux = s.substring(0, pos)+ s.substring(pos+n.length+1, s.length);
|
|
s = aux;
|
|
found = 1;
|
|
}
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
|
|
function delBasket(context,rep) {
|
|
if (rep == undefined){
|
|
rep = confirm(MSG_CONFIRM_DEL_BASKET);
|
|
}
|
|
if (rep) {
|
|
if(context == "popup"){
|
|
delCookie(nameCookie);
|
|
document.location = "about:blank";
|
|
updateBasket(0,top.opener);
|
|
window.close();
|
|
} else {
|
|
delCookie(nameCookie);
|
|
updateBasket(0,top.opener);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function quit() {
|
|
if (document.myform.records.value) {
|
|
var rep = false;
|
|
rep = confirm(MSG_CONFIRM_DEL_RECORDS);
|
|
if (rep) {
|
|
delSelRecords();
|
|
}
|
|
}
|
|
updateBasket(arrayRecords.length-1,top.opener);
|
|
window.close();
|
|
}
|
|
|
|
function sendBasket() {
|
|
var valCookie = readCookie(nameCookie);
|
|
var strCookie = nameParam + "=" + valCookie;
|
|
|
|
var loc = CGIBIN + "basket/sendbasket.pl?" + strCookie;
|
|
|
|
var optWin="scrollbars=no,resizable=no,height=300,width=450,top=50,left=100";
|
|
var win_form = open(loc,"win_form",optWin);
|
|
}
|
|
|
|
function downloadBasket() {
|
|
var valCookie = readCookie(nameCookie);
|
|
var strCookie = nameParam + "=" + valCookie;
|
|
|
|
var loc = CGIBIN + "basket/downloadcart.pl?" + strCookie;
|
|
|
|
open(loc,"win_form",'scrollbars=no,resizable=no,height=300,width=450,top=50,left=100');
|
|
}
|
|
|
|
function printBasket() {
|
|
var loc = document.location + "&print=1";
|
|
document.location = loc;
|
|
}
|
|
|
|
function showMore() {
|
|
var strCookie = "";
|
|
|
|
var valCookie = readCookie(nameCookie);
|
|
if (valCookie) {
|
|
strCookie = nameParam + "=" + valCookie;
|
|
}
|
|
var loc = CGIBIN + "basket/basket.pl?" + strCookie + "&verbose=1";
|
|
document.location = loc;
|
|
}
|
|
|
|
function showLess() {
|
|
var strCookie = "";
|
|
|
|
var valCookie = readCookie(nameCookie);
|
|
if (valCookie) {
|
|
strCookie = nameParam + "=" + valCookie;
|
|
}
|
|
var loc = CGIBIN + "basket/basket.pl?" + strCookie + "&verbose=0";
|
|
document.location = loc;
|
|
}
|
|
|
|
function updateBasket(updated_value,target) {
|
|
if(target){
|
|
target.$('#basketcount').html(" <span>("+updated_value+")</span>");
|
|
target.$('#cartDetails').html(MSG_IN_YOUR_CART.format(updated_value));
|
|
} else {
|
|
$('#basketcount').html(" <span>("+updated_value+")</span>");
|
|
$('#cartDetails').html(MSG_IN_YOUR_CART.format(updated_value));
|
|
}
|
|
var basketcount = updated_value;
|
|
}
|
|
|
|
function openBiblio(dest,biblionumber) {
|
|
openerURL=dest+"?biblionumber="+biblionumber;
|
|
opener.document.location = openerURL;
|
|
opener.focus();
|
|
}
|
|
|
|
function addSelToShelf() {
|
|
var items = document.getElementById('records').value;
|
|
if(items){
|
|
document.location = "/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?biblionumber="+items;
|
|
} else {
|
|
alert(MSG_NO_RECORD_SELECTED);
|
|
}
|
|
}
|
|
|
|
/// vShelfAdd() builds url string for multiple-biblio adds.
|
|
|
|
function vShelfAdd(biblist) {
|
|
bibs = new Array();
|
|
if(biblist.length > 0) {
|
|
for (var i=0; i < biblist.length; i++) {
|
|
if (biblist[i].checked) {
|
|
bibs.push("biblionumber=" + biblist[i].value);
|
|
}
|
|
}
|
|
if (bibs.length == 0) { showListsUpdate(MSG_NO_RECORD_SELECTED); }
|
|
return bibs.join("&");
|
|
} else {
|
|
if (biblist.checked) {
|
|
return "biblionumber=" + biblist.value;
|
|
}
|
|
}
|
|
}
|
|
|
|
function showCart(){
|
|
var position = $("#cartmenulink").offset();
|
|
var scrolld = $(window).scrollTop();
|
|
var top = position.top + $("#cartmenulink").outerHeight();
|
|
if( scrolld > top ){
|
|
top = scrolld + 15;
|
|
}
|
|
var left = position.left
|
|
$("#cartDetails").css("position","absolute").css("top",top);
|
|
$("#cartDetails").css("position","absolute").css("left",left);
|
|
$("#cartDetails").fadeIn("fast");
|
|
}
|
|
|
|
function hideCart(){
|
|
$("#cartDetails").fadeOut("fast");
|
|
}
|
|
|
|
$(document).ready(function(){
|
|
$("#cartmenulink").click(function(){ openBasket(); return false; });
|
|
if(basketcount){ updateBasket(basketcount); }
|
|
});
|
|
|
|
|