Backport bib-source selector from trunk (r13793)
authordbs <dbs@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 31 Aug 2010 14:54:23 +0000 (14:54 +0000)
committerdbs <dbs@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 31 Aug 2010 14:54:23 +0000 (14:54 +0000)
Enables one to edit the bib source of a given MARC record in the MARC editor

git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6@17402 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/skin/default/js/rdetail.js
Open-ILS/xul/staff_client/chrome/content/cat/opac.js
Open-ILS/xul/staff_client/server/cat/marcedit.js
Open-ILS/xul/staff_client/server/cat/marcedit.xul
Open-ILS/xul/staff_client/server/cat/z3950.js

index 8c94780..6337671 100644 (file)
@@ -212,7 +212,7 @@ function OpenMarcEditWindow(pcrud, rec) {
        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) {
index 3035ceb..4317387 100644 (file)
@@ -72,7 +72,7 @@ function set_marc_edit() {
     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 */
index 15441cb..7adbaa3 100644 (file)
@@ -100,11 +100,30 @@ function my_init() {
             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',
             'mangle_005(); ' + 
@@ -247,6 +266,19 @@ function my_init() {
         }
         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);
     }
@@ -2091,3 +2123,65 @@ function searchAuthority (term, tag, sf, limit) {
 
 }
 
+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;   
+    }
+}
index b646df2..f357a1a 100644 (file)
@@ -15,6 +15,8 @@
 
 <scripts id="openils_util_scripts"/>
 <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
+<script>var djConfig = { 'baseUrl' : '/js/dojo/dojo/',parseOnLoad: true,isDebug:false };</script>
+<script type="text/javascript" src="/js/dojo/dojo/dojo.js" />
 
 <script src="marcedit.js" type="application/x-javascript; e4x=1"/>
 
                 </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">
index b1ac1b0..3c7e3ed 100644 (file)
@@ -709,7 +709,7 @@ cat.z3950.prototype = {
             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);