Bug 18904: Advanced editor - Rancor - Add authority support
authorNick Clemens <nick@bywatersolutions.com>
Thu, 6 Jul 2017 16:35:38 +0000 (16:35 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 12 Apr 2018 13:50:36 +0000 (10:50 -0300)
This patchset adds the ability to use the authorities search to select
or clear fields in the advanced editor

To test:
 1 - Open a record in the advanced cataloging editor
 2 - Press 'Ctrl+L' while in a field that shuold not be linked to
authorities (300 for instance)
 3 - Nothing should happen
 4 - Try it in a field that should be linked
 5 - You should get the authorities pop-up
 6 - Values in pop-up should be populated from values in record (as
        appropriate for authority type)
 7 - Correct authority type should be selected ( PERSO_NAME for 100,
        TOPIC_TERM for 650, etc.)
 8 - Press 'Clear', field should be blanked
 9 - Search again and select an authority
10 - Field should be correctly populated

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

cataloguing/editor.pl
koha-tmpl/intranet-tmpl/lib/koha/cateditor/marc-editor.js
koha-tmpl/intranet-tmpl/prog/en/includes/cateditor-ui.inc
koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tt
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/editor.tt

index fe31c0b..0806233 100755 (executable)
@@ -29,6 +29,7 @@ use C4::Context;
 use C4::Output;
 use DBIx::Class::ResultClass::HashRefInflator;
 use Koha::Database;
+use Koha::MarcSubfieldStructures;
 
 my $input = CGI->new;
 
@@ -56,6 +57,9 @@ $template->{VARS}->{editable_batches} = [ $schema->resultset('ImportBatch')->sea
 # Needed information for cataloging plugins
 $template->{VARS}->{DefaultLanguageField008} = pack( 'A3', C4::Context->preference('DefaultLanguageField008') || 'eng' );
 
+my $authtags = Koha::MarcSubfieldStructures->search({ authtypecode => { '!=' => '' }, 'frameworkcode' => '' });
+$template->{VARS}->{authtags} = $authtags;
+
 # Z39.50 servers
 my $dbh = C4::Context->dbh;
 $template->{VARS}->{z3950_servers} = $dbh->selectall_arrayref( q{
index d2cc7b5..6343f5e 100644 (file)
@@ -18,6 +18,7 @@
  */
 
 define( [ 'marc-record', 'koha-backend', 'preferences', 'text-marc', 'widget' ], function( MARC, KohaBackend, Preferences, TextMARC, Widget ) {
+
     var NOTIFY_TIMEOUT = 250;
 
     function editorCursorActivity( cm ) {
@@ -163,6 +164,29 @@ define( [ 'marc-record', 'koha-backend', 'preferences', 'text-marc', 'widget' ],
             cm.execCommand('deleteLine');
         },
 
+        'Ctrl-L': function( cm ) {
+            // Launch the auth search popup
+            var field = cm.marceditor.getCurrentField();
+
+            if ( !field ) return;
+            if ( authInfo[field.tag] == undefined ) return;
+            authtype = authInfo[field.tag].authtypecode;
+            index = 'rancor';//+field.line+'|'+field.tag;
+            var mainmainstring = '';
+            if( field.getSubfields( authInfo[field.tag].subfield ).length != 0 ){
+                mainmainstring += field.getSubfields( authInfo[field.tag].subfield )[0].text;
+            }
+
+            var subfields = field.getSubfields();
+            var mainstring= '';
+            for(i=0;i < subfields.length ;i++){
+                if ( authInfo[field.tag].subfield == subfields[i].code ) continue;
+                mainstring += subfields[i].text+' ';
+            }
+            newin=window.open("../authorities/auth_finder.pl?source=biblio&authtypecode="+authtype+"&index="+index+"&value_mainstr="+encodeURI(mainmainstring)+"&value_main="+encodeURI(mainstring), "_blank",'width=700,height=550,toolbar=false,scrollbars=yes');
+
+        },
+
         'Shift-Ctrl-X': function( cm ) {
             // Delete subfield
             var field = cm.marceditor.getCurrentField();
index 62f19b0..68a168f 100644 (file)
@@ -3,6 +3,14 @@
 <script src="[% interface %]/lib/koha/cateditor/marc-mode.js"></script>
 <script src="[% interface %]/lib/require.js"></script>
 <script>
+    var authInfo = {
+        [%- FOREACH authtag = authtags -%]
+            [% authtag.tagfield %]: {
+                subfield: '[% authtag.tagsubfield %]',
+                authtypecode: '[% authtag.authtypecode %]',
+                },
+        [%- END -%]
+    };
 require.config( {
     baseUrl: '[% interface %]/lib/koha/cateditor/',
     config: {
index 85bb721..8635be9 100644 (file)
 [% MACRO jsinclude BLOCK %]
     <script type="text/javascript">
         $(document).ready(function(){
+            [% IF tag_number == 'rancor' %]
+            function RancorReplaceField( new_text ){
+                var cur_field = opener.opener.jQuery(".CodeMirror")[0].CodeMirror.marceditor.getCurrentField();
+                cur_field.setText(new_text);
+                return true;
+            }
+                [% IF ( clear ) %]
+                var new_line = "";
+                [% ELSE %]
+                var new_line = "
+                [%- FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP -%]‡
+                    [%- SUBFIELD_LOO.marc_subfield |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r    ') -%]
+                    [%- FOREACH marc_value IN SUBFIELD_LOO.marc_values -%]
+                        [%- marc_value |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') -%]
+                    [%- END -%]
+                [%- END -%]‡9[% authid %]";
+                [% END %]
+                RancorReplaceField( new_line );
+            [% ELSE %]
             var index_start = "[% index %]";
             var whichfield;
             try {
             }
 
             [% UNLESS ( clear ) %]
-            [% FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP %]
-                SetSubfieldValues(
-                    "[% tag_number |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %][% SUBFIELD_LOO.marc_subfield |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]"
-                [% FOREACH marc_value IN SUBFIELD_LOO.marc_values %]
-                    ,"[% marc_value |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]"
+                [% FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP %]
+                    SetSubfieldValues(
+                        "[% tag_number |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %][% SUBFIELD_LOO.marc_subfield |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]"
+                    [% FOREACH marc_value IN SUBFIELD_LOO.marc_values %]
+                        ,"[% marc_value |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') %]"
+                    [% END %]
+                    );
                 [% END %]
-                );
             [% END %]
                 var indicators = field_start.getElementsByClassName('indicator flat');
                 [% IF update_ind1 %]
                 [% END %]
                 }
             }
+            [% END %]
 
             opener.close();
             window.close();
index 14f75a4..571e997 100644 (file)
@@ -6,6 +6,7 @@
 <link rel="stylesheet" href="[% interface %]/lib/codemirror/codemirror_[% KOHA_VERSION %].css" />
 <link rel="stylesheet" href="[% interface %]/[% theme %]/css/humanmsg_[% KOHA_VERSION %].css" />
 <script src="[% interface %]/lib/jquery/plugins/humanmsg.js" type="text/javascript"></script>
+<script src="/intranet-tmpl/prog/js/cataloging.js" type="text/javascript"></script>
 [% IF ( bidi ) %]
    <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/right-to-left_[% KOHA_VERSION %].css" />
 [% END %]
             <td>Get help on current subfield</td>
         </tr>
         <tr>
+            <td>Ctrl-L</td>
+            <td>Link field to authorities</td>
+        </tr>
+        <tr>
             <td>Ctrl-S</td>
             <td>Save record</td>
         </tr>