MT 1110, Follow-up : Balance cart and lists : cart is now in the intranet
authorMatthias Meusburger <matthias.meusburger@biblibre.com>
Wed, 14 Oct 2009 13:27:40 +0000 (15:27 +0200)
committerMatthias Meusburger <matthias.meusburger@biblibre.com>
Wed, 14 Oct 2009 13:27:40 +0000 (15:27 +0200)
C4/Auth.pm
installer/data/mysql/updatedatabase.pl
koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc
koha-tmpl/intranet-tmpl/prog/en/includes/header.inc
koha-tmpl/intranet-tmpl/prog/en/js/basket.js [changed from symlink to file mode: 0644]
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl
koha-tmpl/opac-tmpl/prog/en/modules/opac-basket.tmpl
virtualshelves/addbybiblionumber.pl

index 0b92868..9fd298f 100755 (executable)
@@ -352,6 +352,7 @@ sub get_template_and_user {
             intranetreadinghistory      => C4::Context->preference("intranetreadinghistory"),
             intranetstylesheet          => C4::Context->preference("intranetstylesheet"),
             intranetuserjs              => C4::Context->preference("intranetuserjs"),
+           intranetbookbag             => C4::Context->preference("intranetbookbag"),
             noItemTypeImages            => C4::Context->preference("noItemTypeImages"),
             suggestion                  => C4::Context->preference("suggestion"),
             virtualshelves              => C4::Context->preference("virtualshelves"),
@@ -894,6 +895,7 @@ sub checkauth {
         intranetcolorstylesheet =>
                                                                C4::Context->preference("intranetcolorstylesheet"),
         intranetstylesheet => C4::Context->preference("intranetstylesheet"),
+        intranetbookbag    => C4::Context->preference("intranetbookbag"),
         IntranetNav        => C4::Context->preference("IntranetNav"),
         intranetuserjs     => C4::Context->preference("intranetuserjs"),
         TemplateEncoding   => C4::Context->preference("TemplateEncoding"),
@@ -901,7 +903,6 @@ sub checkauth {
         AutoLocation       => C4::Context->preference("AutoLocation"),
                wrongip            => $info{'wrongip'}
     );
-
     $template->param( loginprompt => 1 ) unless $info{'nopermission'};
 
     my $self_url = $query->url( -absolute => 1 );
index 6c552f6..f6c1b42 100755 (executable)
@@ -3064,6 +3064,13 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
     SetVersion ($DBversion);
 }
 
+$DBversion = "3.01.00.116";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    $dbh->do(  qq# INSERT INTO `systempreferences` VALUES ('intranetbookbag','1','','If ON, enables display of Cart feature in the intranet','YesNo')  #);
+
+    print "Upgrade to $DBversion done (intranetbookbag syspref added)\n";
+    SetVersion ($DBversion);
+}
 
 
 =item DropAllForeignKeys($table)
index 7a81fd3..5118721 100644 (file)
@@ -1789,3 +1789,175 @@ h1#xml a {
        padding:44px 0 0;
        text-decoration:none;
        width:35px;
+}
+
+#cartDetails,#cartUpdate,#holdDetails,#listsDetails {
+       background-color : #FFF;
+       border: 1px solid #739acf;
+       color : black;
+       display : none;
+       margin : 0;
+       padding : 10px;
+       text-align : center;
+       width : 180px;
+}
+
+#cartmenulink, #listsmenulink {
+       background : #aaa;
+       padding : 5px;
+       color : #333;
+       text-decoration : none;
+       cursor : pointer;
+}
+
+ #cartmenulink *, #listsmenulink * {
+       font-style : normal;
+       background-image : url(../../images/button-background.png);
+       background-repeat : no-repeat;
+}
+
+ #cartmenulink i, #listsmenulink i {
+       background-position : top left;
+       position : absolute;
+       margin-bottom : -5px;
+       top : 0;
+       left : 0;
+       width : 5px;
+       height : 5px;
+}
+
+ #cartmenulink span, #listsmenulink span {
+       background-position : bottom left;
+       left : -5px;
+       padding : 0 0 5px 10px;
+       margin-bottom : -5px;
+}
+/* For IE7 */
+ *:first-child+html #cartmenulink span { padding-top : 3px; padding-bottom : 7px; }
+ *:first-child+html #listsmenulink span { padding-top : 5px; }
+
+ #cartmenulink span i, #listsmenulink span i {
+       background-position : bottom right;
+       margin-bottom : 0;
+       position : absolute;
+       left : 100%;
+       width : 10px;
+       height : 100%;
+       top : 0;
+}
+
+ #cartmenulink span span, #listsmenulink span span {
+       background-position : top right;
+       position : absolute;
+       right : -10px;
+       margin-left : 10px;
+       top : -5px;
+       height : 0;
+}
+
+* html #cartmenulink span, * html #cartmenulink i, * html #listsmenulink span, * html #listsmenulink i {
+       float : left;
+       width : auto;
+       background-image : none;
+       cursor : pointer;
+}
+* html #cartmenulink span, * html #listsmenulink span {
+       padding-top : 5px;
+}
+#listsmenulink {
+       background : #9FBFFF;
+}
+
+#cartmenulink {
+       background : #98CB58;
+       color : #336600;
+       font-size : 105%;
+}
+
+#listsmenulink:hover {
+       background-color : #b8d0e6;
+}
+
+#cartmenulink:hover {
+       background-color : #BFDE96;
+}
+
+#cartmenulink img {
+       background-image : none;
+       display : inline;
+       padding : 3px 3px 0 3px;
+}
+
+#cartmenulink span#basketcount {
+       background-image : none;
+       float : none;
+       display : inline;
+       height : auto;
+       position : relative;
+       margin : 0;
+       padding : 0;
+       left : auto;
+       right : auto;
+       top : auto;
+}
+
+#cartmenulink span#basketcount span {
+       background-image : none;
+       background-color : #E6FCB7;
+       color : #000;
+       display : inline;
+       float : none;
+       font-size : 80%;
+       font-weight : normal;
+       margin : 0 0 0 .9em;
+       padding : 0 .3em 0 .3em;
+       position : relative;
+       left : auto;
+       right : auto;
+       top : auto;
+}
+
+a#listsmenulink, a#listsmenulink:hover {
+       color : #006699;
+       font-size : 105%;
+       font-weight : bold;
+       line-height : 185%;
+       margin-left : 1.5em;
+}
+
+a#cartmenulink, a#cartmenulink:hover {
+       color : #336600;
+       font-size : 105%;
+       font-weight : bold;
+       line-height : 185%;
+       margin-left : 1.5em;
+}
+* html a#cartmenulink {
+       padding-top: 0;
+}
+ * html a#cartmenulink:hover {
+       padding-top : 0;
+}
+/* For IE7 */
+*:first-child+html a#listsmenulink { padding-top : 0; }
+*:first-child+html a#listsmenulink:hover { padding-top : 0; }
+*:first-child+html a#cartmenulink { padding-top : 0; }
+*:first-child+html a#cartmenulink:hover { padding-top : 0; }
+*:first-child+html #cartmenulink span i{ top : -4px; }
+*:first-child+html #listsmenulink span i { top : -5px; }
+
+#listsmenulink img {
+       background-image : none;
+       display : inline;
+       padding : 0 0 2px 0;
+}
+
+* html #cartmenulink {
+       border : 1px solid #336600;
+}
+
+* html #listsmenulink {
+       border : 1px solid #006699;
+}
+
+
index f771a73..8811f97 100644 (file)
 <link rel="stylesheet" type="text/css" href="<!-- TMPL_VAR NAME="themelang" -->/<!-- TMPL_VAR NAME="widget" -->" />
 <!-- /TMPL_LOOP -->
 <!-- /TMPL_IF -->
+
 <script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/jquery.js"></script>
-<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/ui.tabs.js"></script><script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/jquery.hotkeys.min.js"></script>
+<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/ui.tabs.js"></script>
+<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/jquery.hotkeys.min.js"></script>
+<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/jquery.dropshadow-min.js"></script>
+<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/jquery.highlight-3.js"></script>
+
 <!-- TMPL_IF NAME="js_libs" -->
 <!-- TMPL_LOOP NAME="js_libs" --><script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/<!-- TMPL_VAR NAME="lib" -->"></script>
 <!-- /TMPL_LOOP -->
@@ -29,8 +34,7 @@
 <!-- TMPL_IF NAME="js_page" -->
 <script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/js/pages/<!-- TMPL_VAR NAME="js_page" -->"></script>
 <!-- /TMPL_IF -->
-<script type="text/javascript" language="javascript"
-<!-- TMPL_IF NAME="opacbookbag" -->src="<!-- TMPL_VAR NAME="themelang" -->/js/basket.js"><!-- TMPL_ELSIF NAME="virtualshelves" -->src="<!-- TMPL_VAR NAME="themelang" -->/js/basket.js"><!-- TMPL_ELSE -->>var readCookie;<!-- /TMPL_IF --></script>
+<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/js/tags.js"></script>
 
 <!-- TMPL_IF NAME="js_widgets" -->
 <!-- TMPL_LOOP NAME="js_widgets" -->
 
 <!-- yui js --> 
 <script type="text/javascript" src="<!-- TMPL_VAR NAME="yuipath" -->/utilities/utilities.js"></script> 
+<script type="text/javascript" src="<!-- TMPL_VAR NAME="yuipath" -->/datasource/datasource.js"></script> 
 <!-- TMPL_IF NAME="CircAutocompl" --><script type="text/javascript" src="<!-- TMPL_VAR NAME="yuipath" -->/autocomplete/autocomplete-min.js"></script> <!-- /TMPL_IF -->
 <script type="text/javascript" src="<!-- TMPL_VAR NAME="yuipath" -->/button/button-min.js"></script> 
 <script type="text/javascript" src="<!-- TMPL_VAR NAME="yuipath" -->/container/container_core-min.js"></script> 
 <script type="text/javascript" src="<!-- TMPL_VAR NAME="yuipath" -->/menu/menu-min.js"></script> 
+
 <!-- koha core js -->
 <script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/js/staff-global.js"></script>
 <!-- TMPL_IF NAME="intranetuserjs" --><script type="text/javascript">
 <!-- TMPL_VAR NAME="intranetuserjs" -->
 //]]>
 </script><!-- /TMPL_IF -->
+<script type="text/javascript" language="javascript">
+        //<![CDATA[
+    <!-- TMPL_IF NAME="intranetbookbag" -->var MSG_BASKET_EMPTY = _("Your cart is currently empty");
+    var MSG_RECORD_IN_BASKET = _("This item is already in your cart");
+    var MSG_RECORD_ADDED = _("This item has been added to your cart");
+    var MSG_NRECORDS_ADDED = _(" item(s) added to your cart");
+    var MSG_NRECORDS_IN_BASKET = _("already in your cart");
+    var MSG_NO_RECORD_SELECTED = _("No item was selected");
+    var MSG_NO_RECORD_ADDED = _("No item was added to your cart");
+    var MSG_CONFIRM_DEL_BASKET = _("Are you sure you want to empty your cart?");
+    var MSG_CONFIRM_DEL_RECORDS = _("Are you sure you want to remove the selected items?");
+    var MSG_NON_RESERVES_SELECTED = _("One or more selected items cannot be reserved.");
+<!-- /TMPL_IF -->
+//]]>
+</script>
+<!-- TMPL_IF EXPR="virtualshelves || intranetbookbag" --><script type="text/javascript" language="javascript" src="<!-- TMPL_VAR NAME="themelang" -->/js/basket.js"></script><!-- /TMPL_IF -->
+<!-- /TMPL_IF -->
+
index 4c034e9..24b5d84 100644 (file)
@@ -1,3 +1,5 @@
+    <!-- TMPL_IF NAME="intranetbookbag" --><div id="cartDetails">Your cart is empty.</div><!-- /TMPL_IF -->
+
     <div id="header" class="clearfix">
         <div id="toplevelnav">
             <ul id="toplevelmenu">
@@ -35,6 +37,9 @@
                         </div>
                     </div>
                 </li>
+               <!-- TMPL_IF NAME="intranetbookbag" -->
+               <li><a href="#" id="cartmenulink"><i></i><span><i></i><span></span><img src="/intranet-tmpl/prog/img/cart.gif" width="14" height="14" alt="" border="0" />Cart<span id="basketcount"></span></span></a></li>
+               <!-- /TMPL_IF -->
             </ul>
         </div>
     <div id="login">
deleted file mode 120000 (symlink)
index 104343c0ceb45d268b763db8110ec2e52b7e6efc..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1 +0,0 @@
-../../../../opac-tmpl/prog/en/js/basket.js
\ No newline at end of file
new file mode 100644 (file)
index 0000000000000000000000000000000000000000..f0bbf7b94b387fdfecfb865d4a5eb0aee1c13077
--- /dev/null
@@ -0,0 +1,470 @@
+//////////////////////////////////////////////////////////////////////////////
+// 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 = "dependant=yes,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(){
+    var c_value = "";
+    if(document.bookbag_form.biblionumber.length > 0) {
+        for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
+            if (document.bookbag_form.biblionumber[i].checked) {
+                c_value = c_value + document.bookbag_form.biblionumber[i].value + "/";
+            }
+        }
+        addSelRecords(c_value);
+    } else {
+        c_value = c_value + document.bookbag_form.biblionumber.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 = nbAdd+" "+MSG_NRECORDS_ADDED+", "+(i-nbAdd)+" "+MSG_NRECORDS_IN_BASKET;
+        }
+        else {
+            msg = nbAdd+" "+MSG_NRECORDS_ADDED;
+        }
+    }
+    else {
+        if (i < 1) {
+            msg = MSG_NO_RECORD_SELECTED;
+        }
+        else {
+            msg = MSG_NO_RECORD_ADDED+" ("+MSG_NRECORDS_IN_BASKET+") !";
+        }
+    }
+       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
+       $("#listsDetails").html(msg);
+       showLists();
+       setTimeout("hideLists()",2000); 
+}
+
+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() {
+
+    var rep = false;
+    rep = confirm(MSG_CONFIRM_DEL_BASKET);
+    if (rep) {
+        delCookie(nameCookie);
+        document.location = "about:blank";
+        updateBasket(0,top.opener);
+        window.close();
+    }
+}
+
+
+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="dependant=yes,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",'dependant=yes,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(_("Your cart contains ")+updated_value+_(" items"));
+       } else {
+       $('#basketcount').html("<span>"+updated_value+"</span>");
+       $('#cartDetails').html(_("Your cart contains ")+updated_value+_(" items"));
+       }
+       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() {
+        bibs= new Array;
+        if(document.bookbag_form.biblionumber.length > 0) {
+                for (var i=0; i < document.bookbag_form.biblionumber.length; i++) {
+                        if (document.bookbag_form.biblionumber[i].checked) {
+                                bibs.push("biblionumber=" +  document.bookbag_form.biblionumber[i].value);
+                        }
+                }
+           if (bibs.length == 0) { showListsUpdate(MSG_NO_RECORD_SELECTED); }
+            return bibs.join("&");
+        } else {
+            if (document.bookbag_form.biblionumber.checked) {
+                return "biblionumber=" + document.bookbag_form.biblionumber.value;
+            }
+        }
+}
+
+function showCart(){
+               var position = $("#cartmenulink").offset();
+               var top = position.top + $("#cartmenulink").outerHeight();
+               var menuWidth = 200;
+               var buttonWidth = $("#cartmenulink").innerWidth();
+               var buttonOffset = menuWidth - buttonWidth;
+               var left = position.left -  buttonOffset;
+               $("#cartDetails").css("position","absolute").css("top",top);
+               $("#cartDetails").css("position","absolute").css("left",left);
+               $("#cartDetails").fadeIn("fast",function(){
+                       $("#cartDetails").dropShadow({left: 3, top: 3, blur: 0,  color: "#000", opacity: 0.1});
+        });
+}
+
+function showLists(){
+               var position = $("#listsmenulink").offset();
+              var top = position.top + $("#listsmenulink").outerHeight();
+               var menuWidth = 200;
+               var buttonWidth = $("#listsmenulink").innerWidth();
+               var buttonOffset = menuWidth - buttonWidth;
+               var left = position.left -  buttonOffset;
+               $("#listsDetails").css("position","absolute").css("top",top);
+               $("#listsDetails").css("position","absolute").css("left",left);
+               $("#listsDetails").fadeIn("fast",function(){
+                       $("#listsDetails").dropShadow({left: 3, top: 3, blur: 0,  color: "#000", opacity: 0.1});
+        });
+}
+
+function hideCart(){
+    $("#cartDetails").removeShadow();
+    $("#cartDetails").fadeOut("fast");
+}
+
+function hideLists(){
+    $("#listsDetails").removeShadow();
+    $("#listsDetails").fadeOut("fast");
+}
+
+
+$(document).ready(function(){
+       $("#cartmenulink").click(function(){ openBasket(); return false; });
+       $("#cartDetails,#cartmenulink").click(function(){ hideCart(); });
+       $("#cartmenulink").hover(function(){
+               showCart();
+       },function(){
+               hideCart();
+       });
+       if(basketcount){ updateBasket(basketcount); }
+});
+
+
index dd3c5db..f86aad6 100644 (file)
@@ -39,7 +39,7 @@ $('#sort_by').change(function() {
 
 $(".addtocart").show();
         var param1 = "<label for=\"addto\">Add to: <\/label><select name=\"addto\" id=\"addto\"><option value=\"\"><\/option>";
-
+        <!-- TMPL_IF name="intranetbookbag" -->     param1 += "<option value=\"addtocart\">"+_("Cart")+"<\/option>"; <!-- /TMPL_IF -->
         <!-- TMPL_IF NAME="virtualshelves" --><!-- TMPL_IF NAME="addbarshelves" -->
         param1 += "<optgroup label=\"Your Lists:\">";<!-- TMPL_LOOP NAME="addbarshelvesloop" -->
         param1 += "<option id=\"s<!-- TMPL_VAR NAME="shelfnumber" -->\" value=\"addtolist\"><!-- TMPL_VAR NAME="shelfname" ESCAPE="html"--><\/option>";<!-- /TMPL_LOOP -->
@@ -79,6 +79,11 @@ $(".addtocart").show();
                         }
                         return false;   
                 }
+               if($("#addto").find("option:selected").attr("value") == "addtocart"){
+                        addMultiple();
+                        return false;
+                 }
+
         }
 
     $("#selection_ops").show();
index 109d652..09a8c0f 100644 (file)
@@ -128,6 +128,7 @@ function tagAdded() {
 <ul>
        <li><!-- TMPL_IF NAME="verbose" --><a href="opac-basket.pl" class="brief" onclick="showLess(); return false;">Brief Display</a><!-- TMPL_ELSE --><a href="opac-basket.pl" class="detail" onclick="showMore(); return false;">More Details</a><!-- /TMPL_IF --></li>
        <li><a class="send" href="opac-basket.pl" onclick="sendBasket(); return false;">Send</a></li>
+       <li><a class="download" href="opac-basket.pl" onclick="downloadBasket(); return false;">Download</a></li>
        <li><a class="print" href="opac-basket.pl" onclick="printBasket(); return false;">Print</a></li>
        <li><a class="empty" href="opac-basket.pl" onclick="delBasket(); return false;">Empty and Close</a></li>
        <li><a class="hide" href="opac-basket.pl" onclick="quit(); return false;">Hide Window</a></li>
index f81c2fe..215a145 100755 (executable)
@@ -65,28 +65,13 @@ use C4::Output;
 use C4::VirtualShelves qw/:DEFAULT GetRecentShelves/;
 use C4::Circulation;
 use C4::Auth;
-#splits incoming biblionumber(s) to array and adds each to shelf.
-sub AddBibliosToShelf {
-    my ($shelfnumber,@biblionumber)=@_;
-
-    # multiple bibs might come in as '/' delimited string (from where, i don't see), or as array.
-    if (scalar(@biblionumber) == 1) {
-        @biblionumber = (split /\//,$biblionumber[0]);
-    }
-    for my $bib (@biblionumber){
-        AddToShelfFromBiblio($bib, $shelfnumber);
-    }
-}
-
-
-
-#use it only to debug !
-use warnings;
 
+# splits incoming biblionumber(s) to array and adds each to shelf.
 sub AddBibliosToShelf {
     my ($shelfnumber,@biblionumber)=@_;
 
     # multiple bibs might come in as '/' delimited string (from where, i don't see), or as array.
+    # (Note : they come in as '/' when added from the cart)
     if (scalar(@biblionumber) == 1) {
         @biblionumber = (split /\//,$biblionumber[0]);
     }
@@ -128,6 +113,9 @@ if ($biblionumbers) {
 } else {
     @biblionumbers = (@biblionumber);
 }
+if (scalar(@biblionumber) == 1) {
+        @biblionumber = (split /\//,$biblionumber[0]);
+}
 
 $shelfnumber = AddShelf( $newvirtualshelf, $loggedinuser, $category, $sortfield ) if $newvirtualshelf;
 if ( $shelfnumber || ( $shelfnumber == -1 ) ) {    # the shelf already exist.