[open-ils-commits] r17393 - in trunk/Open-ILS: web/js/ui/default/cat/authority web/opac/skin/craftsman/js web/opac/skin/default/js xul/staff_client/chrome/content/cat xul/staff_client/server/cat (dbs)

svn at svn.open-ils.org svn at svn.open-ils.org
Mon Aug 30 18:01:16 EDT 2010


Author: dbs
Date: 2010-08-30 18:01:10 -0400 (Mon, 30 Aug 2010)
New Revision: 17393

Modified:
   trunk/Open-ILS/web/js/ui/default/cat/authority/list.js
   trunk/Open-ILS/web/opac/skin/craftsman/js/rdetail.js
   trunk/Open-ILS/web/opac/skin/default/js/rdetail.js
   trunk/Open-ILS/xul/staff_client/chrome/content/cat/opac.js
   trunk/Open-ILS/xul/staff_client/server/cat/marcedit.js
   trunk/Open-ILS/xul/staff_client/server/cat/marcedit.xul
   trunk/Open-ILS/xul/staff_client/server/cat/z3950.js
Log:
Add a bib_source editor widget to the MARC editor

This widget should only be exposed when editing bibliographic MARC records.
The existing restriction of not being able to set the bib source when importing
via Z39.50 sadly remains in place; I believe the best place to tackle that will
be in the Z39.50 import interface itself.

Also TODO: i18n


Modified: trunk/Open-ILS/web/js/ui/default/cat/authority/list.js
===================================================================
--- trunk/Open-ILS/web/js/ui/default/cat/authority/list.js	2010-08-30 18:25:15 UTC (rev 17392)
+++ trunk/Open-ILS/web/js/ui/default/cat/authority/list.js	2010-08-30 22:01:10 UTC (rev 17393)
@@ -148,7 +148,7 @@
     win = window.open('/xul/server/cat/marcedit.xul'); // XXX version?
 
     win.xulG = {
-        "record": {"marc": rec.marc()},
+        "record": {"marc": rec.marc(), "rtype": "are"},
         "save": {
             "label": "Save",
             "func": function(xmlString) {

Modified: trunk/Open-ILS/web/opac/skin/craftsman/js/rdetail.js
===================================================================
--- trunk/Open-ILS/web/opac/skin/craftsman/js/rdetail.js	2010-08-30 18:25:15 UTC (rev 17392)
+++ trunk/Open-ILS/web/opac/skin/craftsman/js/rdetail.js	2010-08-30 22:01:10 UTC (rev 17393)
@@ -238,7 +238,7 @@
 	dojo.require('openils.PermaCrud');
 
 	win.xulG = {
-		"record": {"marc": rec.marc()},
+		"record": {"marc": rec.marc(), "rtype": "sre"},
 		"save": {
 			"label": opac_strings.SAVE_MFHD_LABEL,
 			"func": function(xmlString) {

Modified: trunk/Open-ILS/web/opac/skin/default/js/rdetail.js
===================================================================
--- trunk/Open-ILS/web/opac/skin/default/js/rdetail.js	2010-08-30 18:25:15 UTC (rev 17392)
+++ trunk/Open-ILS/web/opac/skin/default/js/rdetail.js	2010-08-30 22:01:10 UTC (rev 17393)
@@ -241,7 +241,7 @@
 	dojo.require('openils.PermaCrud');
 
 	win.xulG = {
-		"record": {"marc": rec.marc()},
+		"record": {"marc": rec.marc(), "rtype": "sre"},
 		"save": {
 			"label": opac_strings.SAVE_MFHD_LABEL,
 			"func": function(xmlString) {

Modified: trunk/Open-ILS/xul/staff_client/chrome/content/cat/opac.js
===================================================================
--- trunk/Open-ILS/xul/staff_client/chrome/content/cat/opac.js	2010-08-30 18:25:15 UTC (rev 17392)
+++ trunk/Open-ILS/xul/staff_client/chrome/content/cat/opac.js	2010-08-30 22:01:10 UTC (rev 17393)
@@ -121,7 +121,7 @@
     var a =    xulG.url_prefix( urls.XUL_MARC_EDIT );
     var b =    {};
     var c =    {
-            'record' : { 'url' : '/opac/extras/supercat/retrieve/marcxml/record/' + docid },
+            'record' : { 'url' : '/opac/extras/supercat/retrieve/marcxml/record/' + docid, "id": docid, "rtype": "bre" },
             'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
                 try {
                     var cat = { util: {} }; /* FIXME: kludge since we can't load remote JSAN libraries into chrome */

Modified: trunk/Open-ILS/xul/staff_client/server/cat/marcedit.js
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/cat/marcedit.js	2010-08-30 18:25:15 UTC (rev 17392)
+++ trunk/Open-ILS/xul/staff_client/server/cat/marcedit.js	2010-08-30 22:01:10 UTC (rev 17393)
@@ -140,11 +140,30 @@
             var cgi = new CGI();
             var _rid = cgi.param('record');
             if (_rid) {
+                window.xulG.record.id = _rid;
                 window.xulG.record.url = '/opac/extras/supercat/retrieve/marcxml/record/' + _rid;
             }
         }
+
         // End faking part...
 
+        /* Check for an explicitly passed record type
+         * This is not the same as the fixed-field record type; we can't trust
+         * the fixed fields when making modifications to the attributes for a
+         * given record (in particular, config.bib_source only applies for bib
+         * records, but an auth or MFHD record with the same ID and bad fixed
+         * fields could trample the config.bib_source value for the
+         * corresponding bib record if we're not careful.
+         *
+         * are = authority record
+         * sre = serial record (MFHD)
+         * bre = bibliographic record
+         */
+        if (!window.xulG.record.rtype) {
+            var cgi = new CGI();
+            window.xulG.record.rtype = cgi.param('rtype') || false;
+        }
+
         document.getElementById('save-button').setAttribute('label', window.xulG.save.label);
         document.getElementById('save-button').setAttribute('oncommand',
             'if ($("xul-editor").hidden) swap_editors(); ' +
@@ -288,6 +307,19 @@
         }
         document.getElementById('fastItemAdd_textboxes').hidden = document.getElementById('fastItemAdd_checkbox').hidden || !document.getElementById('fastItemAdd_checkbox').checked;
 
+        // Only show bib sources for bib records that already exist in the database
+        if (xulG.record.rtype == 'bre' && xulG.record.id) {
+            dojo.require('openils.PermaCrud');
+            var authtoken = ses();
+            // Retrieve the current record attributes
+            var bib = new openils.PermaCrud({"authtoken": authtoken}).retrieve('bre', xulG.record.id);
+
+            // Remember the current bib source of the record
+            xulG.record.bre = bib;
+
+            buildBibSourceList(authtoken, xulG.record.id);
+        }
+
     } catch(E) {
         alert('FIXME, MARC Editor, my_init: ' + E);
     }
@@ -2303,3 +2335,65 @@
 
 }
 
+function buildBibSourceList (authtoken, recId) {
+    /* TODO: Work out how to set the bib source of the bre that does not yet
+     * exist - this is specifically in the case of Z39.50 imports. Right now
+     * we just avoid populating and showing the config.bib_source list
+     */
+	if (!recId) {
+		return false;
+	}
+
+    var bib = xulG.record.bre;
+
+    dojo.require('openils.PermaCrud');
+
+    // cbsList = the XUL menulist that contains the available bib sources 
+    var cbsList = dojo.byId('bib-source-list');
+
+    // bibSources = an array containing all of the bib source objects
+    var bibSources = new openils.PermaCrud({"authtoken": authtoken}).retrieveAll('cbs');
+
+    // A tad ugly, but gives us the index of the bib source ID in cbsList
+    var x = 0;
+    var cbsListArr = [];
+    dojo.forEach(bibSources, function (item) {
+        cbsList.appendItem(item.source(), item.id());
+        cbsListArr[item.id()] = x;
+        x++;
+    });
+
+    // Show the current value of the bib source for this record
+    cbsList.selectedIndex = cbsListArr[bib.source()];
+
+    // Display the bib source selection widget
+    dojo.byId('bib-source-list-caption').hidden = false;
+    dojo.byId('bib-source-list').hidden = false;
+    dojo.byId('bib-source-list-button').disabled = true;
+    dojo.byId('bib-source-list-button').hidden = false;
+}
+
+// Fired when the "Update Source" button is clicked
+// Updates the value of the bib source for the current record
+function updateBibSource() {
+    var authtoken = ses();
+    var cbs = dojo.byId('bib-source-list').selectedItem.value;
+    var recId = xulG.record.id;
+    var pcrud = new openils.PermaCrud({"authtoken": authtoken});
+    var bib = pcrud.retrieve('bre', recId);
+    if (bib.source() != cbs) {
+        bib.source(cbs);
+        bib.ischanged = true;
+        pcrud.update(bib);
+    }
+}
+
+function onBibSourceSelect() {
+    var cbs = dojo.byId('bib-source-list').selectedItem.value;
+    var bib = xulG.record.bre;
+    if (bib.source() != cbs) {
+        dojo.byId('bib-source-list-button').disabled = false;   
+    } else {
+        dojo.byId('bib-source-list-button').disabled = true;   
+    }
+}

Modified: trunk/Open-ILS/xul/staff_client/server/cat/marcedit.xul
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/cat/marcedit.xul	2010-08-30 18:25:15 UTC (rev 17392)
+++ trunk/Open-ILS/xul/staff_client/server/cat/marcedit.xul	2010-08-30 22:01:10 UTC (rev 17393)
@@ -236,6 +236,12 @@
                 </grid>
             </vbox>
         </groupbox>
+
+            <vbox>
+                <caption id="bib-source-list-caption" hidden="true">Bibliographic source</caption>
+                <menulist id="bib-source-list" rows="3" hidden="true" onselect='onBibSourceSelect();'><menupopup id='bib-source-list-popup'></menupopup></menulist>
+                <button id="bib-source-list-button" label="Update source" disabled="true" oncommand="updateBibSource();" hidden="true"/>
+            </vbox>
         </hbox>
 
         <grid id="recGrid" flex="1">

Modified: trunk/Open-ILS/xul/staff_client/server/cat/z3950.js
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/cat/z3950.js	2010-08-30 18:25:15 UTC (rev 17392)
+++ trunk/Open-ILS/xul/staff_client/server/cat/z3950.js	2010-08-30 22:01:10 UTC (rev 17393)
@@ -709,7 +709,7 @@
             xulG.url_prefix(urls.XUL_MARC_EDIT), 
             { 'tab_name' : 'MARC Editor' }, 
             { 
-                'record' : { 'marc' : my_marcxml },
+                'record' : { 'marc' : my_marcxml, "rtype": "bre" },
                 'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
                     try {
                         JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);



More information about the open-ils-commits mailing list