5 [% INCLUDE 'doc-head-open.inc' %]
6 <title>[% IF ( biblionumber ) %]Editing [% title | html %] (Record number [% biblionumber | html %])[% ELSE %]Add MARC record[% END %] › Cataloging › Koha</title>
7 [% INCLUDE 'doc-head-close.inc' %]
8 [% INCLUDE 'calendar.inc' %]
9 [% Asset.js("lib/hc-sticky.js") | $raw %]
10 [% INCLUDE 'select2.inc' %]
12 [% IF Koha.Preference('CreateAVFromCataloguing') && CAN_user_parameters_manage_auth_values %]
13 var auth_values_creation = 1;
15 var auth_values_creation = 0;
17 $.fn.select2.defaults.set("width", "100%" );
19 [% Asset.js("js/cataloging.js") | $raw %]
20 [% Asset.js("js/browser.js") | $raw %]
22 var browser = KOHA.browser('[% searchid | html %]', parseInt('[% biblionumber | html %]', 10));
25 $(window).load(function(){
29 $(document).ready(function() {
31 [% IF bib_doesnt_exist %]
32 $("#addbibliotabs").hide();
36 $("a[data-toggle='tab']").on("shown.bs.tab", function (e) {
37 $( e.target.hash + " .input_marceditor:visible:eq(0)").focus();
40 /* On page load, check for location.hash in the page URL */
41 /* If present the location hash will be used to activate the correct tab */
42 var hash = location.hash;
43 var hashPieces = hash.split('?');
44 if( hashPieces[0] !== "" ){
45 selectTab( hashPieces[0] );
46 window.scrollTo( 0, 0 );
49 $( "ul.sortable_field", "#addbibliotabs" ).sortable({
51 containment: $("#addbibliotabs")
53 $( "ul.sortable_subfield", "#addbibliotabs" ).sortable({
59 hash = "#[% tab | html %]";
63 Sticky = $("#toolbar");
66 stickyClass: "floating"
69 /* check cookie to hide/show marcdocs*/
70 if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
71 toggleMARCdocLinks(false);
73 toggleMARCdocLinks(true);
76 $("#marcDocsSelect").click(function(){
77 if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
78 toggleMARCdocLinks(true);
80 toggleMARCdocLinks(false);
84 /* check cookie to hide/show marc tags*/
85 var marctags_cookie = Cookies.get("marctags_[% borrowernumber | html %]");
86 if( marctags_cookie == 'hide'){
87 toggleMARCTagLinks(false);
88 } else if( marctags_cookie == 'show'){
89 toggleMARCTagLinks(true)
91 [% UNLESS Koha.Preference("hide_marc") %]
92 toggleMARCTagLinks(true)
94 toggleMARCTagLinks(false);
98 $("#marcTagsSelect").click(function(){
99 if( Cookies.get("marctags_[% borrowernumber | html %]") == 'hide'){
100 toggleMARCTagLinks(true)
102 toggleMARCTagLinks(false);
106 $("#z3950search").click(function(){
110 $("#linkerbutton").click(function(){
114 $("#saverecord").click(function(){
115 $(".btn-group").removeClass("open");
120 $("#saveandview").click(function(){
121 $(".btn-group").removeClass("open");
126 $("#saveanditems").click(function(){
127 $(".btn-group").removeClass("open");
131 $("#saveandcontinue").click(function(){
132 $(".btn-group").removeClass("open");
133 var tab = $("#addbibliotabs div.active:first").attr('id');
134 $("#current_tab").val(tab);
135 redirect("just_save", tab);
139 $( '#switcheditor' ).click( function() {
140 var breedingid = [% breedingid || "null" | html %];
142 if ( !confirm( breedingid ? _("This record cannot be transferred to the advanced editor. Continue?") : _("Any changes will not be saved. Continue?") ) ) return false;
144 Cookies.set( 'catalogue_editor_[% logged_in_user.borrowernumber | html %]', 'advanced', { expires: 365, path: '/', sameSite: 'Lax' } );
146 var biblionumber = [% biblionumber || "null" | html %];
148 if ( biblionumber ) {
149 window.location = '/cgi-bin/koha/cataloguing/editor.pl#catalog/' + biblionumber;
151 window.location = '/cgi-bin/koha/cataloguing/editor.pl';
156 $(".change-framework").on("click", function(){
157 var frameworkcode = $(this).data("frameworkcode");
158 $("#frameworkcode").val( frameworkcode );
162 $(".toolbar-tabs a").on("click",function(e){
164 selectTab( this.hash );
167 $(".tag_anchor").on("click", function(e){
169 $(".tag_anchor").removeClass("selected");
170 $(this).addClass("selected");
171 var link = this.href;
172 var linkid = link.substring( link.indexOf("#") + 1 );
173 window.scrollTo( 0, getScrollto( linkid, "toolbar" ) );
176 $("body").on("click", ".linkfield", function(e){
178 var tab = $(this).data("tab");
179 var field = $(this).data("field");
180 var tablink = $("a[data-tabid='" + tab + "']" ).get(0).hash;
181 selectTab( tablink );
182 window.scrollTo( 0, getScrollto( field, "toolbar" ) );
185 $("body").on("click", ".show-errors", function(e){
186 document.getElementById("form-errors").scrollIntoView();
191 function selectTab( tablink ){
192 let a = $("a[href='" + tablink + "']");
193 $(".toolbar-tabs li").removeClass("selected");
194 a.tab("show").parent().addClass("selected");
195 var tabid = a.data("tabid");
196 $(".tag_anchors").removeClass("tab_selected").hide();
197 $(".tag_anchors_" + tabid ).addClass("tab_selected").show();
201 * Returns a roughly ideal position to scroll an element into view
202 * @param {string} target - The HTML id of the element to scroll into view
203 * @param {string} elemid - The HTML id of the element which might obscure
204 * the view of the target element e.g. a floating toolbar
205 * @return {number} - The y-coordinate to pass to window.scrollTo()
207 function getScrollto( target, elemid ){
208 var dest = $("#" + target );
209 var yoffset = dest.offset();
212 var element = $("#" + elemid );
213 var elem_height = element.outerHeight();
217 return yoffset.top - elem_height - 20;
220 function redirect(dest){
221 $("#redirect").attr("value",dest);
225 [% IF ( CAN_user_editcatalogue_edit_items ) %]
226 var onOption = function () {
232 * this function append button for create new authority if not found
235 function addCreateAuthorityButton(tag_subfield_line, heading, tag_index) {
236 var title = _("Create authority");
237 var elem = $('<a href="#" title="' + title + '"><i class="fa fa-plus-circle"></i></a>');
238 tag_subfield_line.append(elem);
239 var tag_subfield_line_a = $('.subfield_line[id^=subfield' + heading.tag + 'a]').eq(tag_index);
240 var subfield_a = tag_subfield_line_a.find('.input_marceditor').eq(0);
241 var index = subfield_a.attr('id');
242 elem.click(function() {
243 var popup = window.open("", "new_auth_popup",'fullscreen,toolbar=false,scrollbars=yes');
245 // Create a new form that will be POSTed in the new window
246 var form = $('<form>').attr({
248 action: "/cgi-bin/koha/authorities/authorities.pl",
249 target: "new_auth_popup"
251 //add the authtypecode
252 form.append($('<input>').attr({
254 name: 'authtypecode',
255 value: heading.auth_type
257 form.append($('<input>').attr({
260 value: heading.tag_to_report
262 form.append($('<input>').attr({
267 form.append($('<input>').attr({
272 $('.tag[id^=tag_' + heading.tag + '_]').eq(tag_index).find(':input').each(function(){
273 form.append($('<input>').attr({
275 name: this.name.split('_',4).join(''),
279 $('body').append(form);
289 * Updates the authid for every heading field
290 * Adds visual feedback for the changes made on the form.
292 function updateHeadingLinks(links) {
293 var current_tag = '';
296 // Delete the old message dialog and create a new one
297 $('#autolinker_dialog').remove();
298 var message_dialog = $('<div id="autolinker_dialog" class="dialog message"><strong>' + _("Automatic authority link results:") + '</strong><ul></ul></div>');
299 var message_dialog_ul = message_dialog.find('ul');
301 $.each(links, function(index, heading) {
302 if(current_tag == heading.tag) {
306 current_tag = heading.tag;
310 // Find the $9 field to update
311 var tag_subfield_line = $('.subfield_line[id^=subfield' + heading.tag + '9]').eq(tag_index);
312 if( tag_subfield_line.length < 1 ){ return; }
314 var subfield = tag_subfield_line.find('.input_marceditor').eq(0);
315 subfield.removeClass("matching_authority_field no_matching_authority_field");
317 // Delete the old status if one exists
318 tag_subfield_line.children('.subfield_status').remove();
320 // If the field wasn't modified. Skip it.
321 if(heading.status == 'UNCHANGED') {
326 // Make the subfield line visible and update its value
327 tag_subfield_line.show();
328 subfield.val(heading.authid);
330 // Add the new status
331 var image = '<i class="fa fa-close subfield_status no_matching_authority" </i> ';
333 var field_class = 'no_matching_authority_field';
334 switch(heading.status) {
336 image = '<i class="fa fa-check subfield_status matching_authority"</i> ';
337 message = _("A matching authority was found in the local database.");
338 field_class = 'matching_authority_field';
341 image = '<i class="fa fa-check subfield_status matching_authority"></i> ';
342 message = _("No matching authority found. A new authority was created automatically.");
343 field_class = 'matching_authority_field';
345 case 'MULTIPLE_MATCH':
346 message = _("More than one local match found. Possibly a duplicate authority!");
349 message = _("No matching authority found.");
352 message = heading.status;
356 subfield[0].classList.add(field_class);
357 tag_subfield_line.find('i').each(function() {
360 tag_subfield_line.append(image);
362 // Add the message to the dialog
363 message_dialog_ul.append('<li><strong>' + heading.tag + '</strong> - ' + message + '</li>');
365 // Add a link to create a new authority if none was found
366 if(heading.status == 'NONE_FOUND' && tag_subfield_line.find('i').length == 1) {
367 addCreateAuthorityButton(tag_subfield_line, heading , tag_index);
371 if(message_dialog.find('li').length == 0) {
372 message_dialog_ul.append("<li>" + _("No authority link was changed.") + "</li>");
374 $('#addbibliotabs').before(message_dialog);
378 * Use an ajax request to automatically find authority links for the current record
380 function AutomaticLinker() {
381 // Show the Loading overlay
382 $("#loading").show();
384 // Remove fields that are completely empty
385 $('#f').find('.tag').each(function() {
387 $(this).find('.input_marceditor').each(function() {
388 if($(this).val() != '') {
394 UnCloneField($(this).attr('id'));
398 // Get all the form values to post via AJAX
400 $('#f').find(':input').each(function(){
401 form_data[this.name] = $(this).val();
403 delete form_data[''];
405 // Send the data to automatic_linker.pl
407 url:'/cgi-bin/koha/svc/cataloguing/automatic_linker.pl',
411 error: function(xhr) {
412 alert("Error : \n" + xhr.responseText);
414 success: function(json) {
415 switch(json.status) {
417 alert(_("Error : You do not have the permissions necessary to use this functionality."));
420 updateHeadingLinks(json.links);
424 complete: function() {
425 $("#loading").hide();
431 function PopupMARCFieldDoc(field) {
432 [% IF Koha.Preference('marcfielddocurl') %]
433 var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','"') | html %]";
434 docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
435 docurl = docurl.replace("{FIELD}", ""+field);
436 docurl = docurl.replace("{LANG}", "[% lang | html %]");
438 [% ELSIF ( marcflavour == 'MARC21' ) %]
439 _MARC21FieldDoc(field);
440 [% ELSIF ( marcflavour == 'UNIMARC' ) %]
441 _UNIMARCFieldDoc(field);
444 function confirmnotdup(redirect){
445 $("#confirm_not_duplicate").attr("value","1");
446 $("#redirect").attr("value",redirect);
450 function Dopop(link,i) {
451 defaultvalue = document.getElementById(i).value;
452 window.open(link+"&result="+defaultvalue,"valuebuilder",'width=700,height=550,toolbar=false,scrollbars=yes');
456 * this function open a popup to search on z3950 server.
458 function PopupZ3950() {
459 var strQuery = GetZ3950Terms();
461 window.open("/cgi-bin/koha/cataloguing/z3950_search.pl?biblionumber=[% biblionumber | html %]"+strQuery,"z3950search",'width=740,height=450,location=yes,toolbar=no,scrollbars=yes,resize=yes');
465 function _MARC21FieldDoc(field) {
467 window.open("http://www.loc.gov/marc/bibliographic/bdleader.html");
468 } else if (field >= 90 && field <= 99 ){
469 window.open("http://www.loc.gov/marc/bibliographic/bd09x.html");
470 } else if (field >= 590 && field <= 599 ){
471 window.open("http://www.loc.gov/marc/bibliographic/bd59x.html");
472 } else if (field >= 690 && field <= 699 ){
473 window.open("http://www.loc.gov/marc/bibliographic/bd69x.html");
474 } else if (field < 900) {
475 window.open("http://www.loc.gov/marc/bibliographic/bd" + ("000"+field).slice(-3) + ".html");
477 window.open("http://www.loc.gov/marc/bibliographic/bd9xx.html");
481 function _UNIMARCFieldDoc(field) {
482 /* http://archive.ifla.org/VI/3/p1996-1/ is an outdated version of UNIMARC, but
483 seems to be the only version available that can be linked to per tag. More recent
484 versions of the UNIMARC standard are available on the IFLA website only as
489 url = "http://archive.ifla.org/VI/3/p1996-1/uni.htm";
491 var first = field.substring(0,1);
492 url = "http://archive.ifla.org/VI/3/p1996-1/uni" + first + ".htm#";
493 if (first == 0) url = url + "b";
495 ? "http://archive.ifla.org/VI/3/p1996-1/uni9.htm"
502 * Functions to hide/show marc docs and tags links
505 function toggleMARCdocLinks(flag){
507 $(".marcdocs").show();
508 Cookies.set("marcdocs_[% borrowernumber | html %]",'show', { path: "/", expires: 365, sameSite: 'Lax' });
509 $("#marcDocsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
511 $(".marcdocs").hide();
512 Cookies.set("marcdocs_[% borrowernumber | html %]",'hide', { path: "/", expires: 365, sameSite: 'Lax' });
513 $("#marcDocsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
517 function toggleMARCTagLinks(flag){
520 $(".subfieldcode").show();
521 Cookies.set("marctags_[% borrowernumber | html %]",'show', { path: "/", expires: 365, sameSite: 'Lax' });
522 $("#marcTagsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
525 $(".subfieldcode").hide();
526 Cookies.set("marctags_[% borrowernumber | html %]",'hide', { path: "/", expires: 365, sameSite: 'Lax' });
527 $("#marcTagsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
532 * check if mandatory/important subfields are written
533 * @param mandatory true to check for mandatories, false for importants
535 function AreFieldsNotOk (mandatory = true) {
536 var fields = new Array();
537 var subfields = new Array();
538 var tab = new Array();
539 var label = new Array();
541 var tabflag= new Array();
542 var StrAlert = "<div id='form-errors' class='dialog alert list'>";
543 var notFilledClass = "subfield_not_filled";
546 [% FOREACH BIG_LOO IN BIG_LOOP %]
547 [% FOREACH innerloo IN BIG_LOO.innerloop %]
548 [% IF ( innerloo.mandatory ) %]
549 fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
551 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
552 [% IF ( subfield_loo.mandatory ) %]subfields.push("[% subfield_loo.id | html %]");
553 tab.push("[% BIG_LOO.number | html %]");
554 label.push("[% subfield_loo.marc_lib | $raw %]");
559 StrAlert += "<h4>" + _("The following mandatory subfields aren't filled:") + "</h4>";
561 [% FOREACH BIG_LOO IN BIG_LOOP %]
562 [% FOREACH innerloo IN BIG_LOO.innerloop %]
563 [% IF ( innerloo.important ) %]
564 fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
566 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
567 [% IF ( subfield_loo.important ) %]subfields.push("[% subfield_loo.id | html %]");
568 tab.push("[% BIG_LOO.number | html %]");
569 label.push("[% subfield_loo.marc_lib | $raw %]");
574 StrAlert += "<h4>" + _("The following important subfields aren’t filled:") + "</h4>";
575 notFilledClass = "important_subfield_not_filled";
578 for(var i=0,len=subfields.length; i<len ; i++){
579 var tag=subfields[i].substr(4,3);
580 var subfield=subfields[i].substr(17,1);
581 var tagnumber=subfields[i].substr(19,subfields[i].lastIndexOf("_")-19);
582 if (tabflag[tag+subfield+tagnumber] == null) {
583 tabflag[tag+subfield+tagnumber]=new Array();
584 tabflag[tag+subfield+tagnumber][0]=0;
586 if( tabflag[tag+subfield+tagnumber][0] != 1 && (document.getElementById(subfields[i]) != null && ! document.getElementById(subfields[i]).value || document.getElementById(subfields[i]) == null)){
587 tabflag[tag+subfield+tagnumber][0] = 0 + tabflag[tag+subfield+tagnumber] ;
589 var elt = document.getElementById(subfields[i]);
590 if ( elt.nodeName == 'SELECT' ) {
591 $(elt).siblings('.select2').find("span[role='combobox']").addClass(notFilledClass);
593 elt.setAttribute('class','input_marceditor noEnterSubmit ' + notFilledClass);
595 $('#' + subfields[i]).focus();
596 tabflag[tag+subfield+tagnumber][1]=label[i];
597 tabflag[tag+subfield+tagnumber][2]=tab[i];
599 tabflag[tag+subfield+tagnumber][0] = 1;
601 tabflag[tag+subfield+tagnumber][3] = subfields[i];
604 for (var tagsubfieldid in tabflag){
605 if (tabflag[tagsubfieldid][0]==0){
606 var tag=tagsubfieldid.substr(0,3);
607 var subfield=tagsubfieldid.substr(3,1);
608 StrAlert += "<li>"+_("Tag %s subfield %s %s in tab %s").format(tag, subfield, formatFieldName( tabflag[tagsubfieldid][1] ), tabflag[tagsubfieldid][2]) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + tabflag[tagsubfieldid][2] + '" data-field="' + tabflag[tagsubfieldid][3] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
613 /* Check for mandatories/importants field(not subfields) */
614 /* Loop over array of fields identified as mandatory or
615 important to see if at least one subfield is filled */
616 mandatoryFields = new Object();
618 for(var i=0,len=fields.length; i<len; i++){
621 divid = "tag_" + arr[0] + "_" + arr[1];
622 varegexp = new RegExp("^tag_" + arr[0] + "_code_");
624 if(parseInt(arr[0]) >= 10){
625 elem = document.getElementById(divid);
626 eleminputs = elem.getElementsByTagName('input');
628 for(var j=0,len2=eleminputs.length; j<len2; j++){
630 if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
631 inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
633 for( var k=0; k<len2; k++){
634 if( eleminputs[k].id.match(inputregexp) ){
635 if( eleminputs[k].value ){
641 elemselect = elem.getElementsByTagName('select');
642 for( var k=0; k<elemselect.length; k++){
643 if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
650 elemtextareas = elem.getElementsByTagName('textarea');
651 for(var j=0,len2=elemtextareas.length; j<len2; j++){
652 // this bit assumes that the only textareas in this context would be for subfields
653 if (elemtextareas[j].value) {
665 mandatoryFields[ arr[0] ] = {
666 importance: "mandatory",
667 elemid: "div_indicator_" + divid,
671 mandatoryFields[ arr[0] ] = {
672 importance: "important",
673 elemid: "div_indicator_" + divid,
681 if( Object.entries(mandatoryFields).length > 0 ){
682 StrAlert += "<h4>" + _("The following fields aren't filled:") + "</h4>";
684 for( var prop in mandatoryFields ){
685 if( mandatoryFields[prop]["importance"] == "mandatory" ){
686 StrAlert += "<li>" + _("Field %s is mandatory, at least one of its subfields must be filled.").format( prop ) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + mandatoryFields[prop]["tab"] + '" data-field="' + mandatoryFields[prop]["elemid"] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
688 StrAlert += "<li>" + _("Field %s is important, at least one of its subfields must be filled.").format(prop) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + mandatoryFields[prop]["tab"] + '" data-field="' + mandatoryFields[prop]["elemid"] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
693 StrAlert += "</div>";
695 $("#show-errors").html('<button type="button" class="btn btn-danger show-errors"><i class="fa fa-warning"></i> ' + _("Errors") + '</span>');
703 * Run checks for mandatory and important fields
704 * Output errors if necessary, or submit the form
707 var StrAlert = AreFieldsNotOk();
708 var StrWarning = AreFieldsNotOk( false );
709 if( !StrAlert && StrWarning ){
710 // Check important fields
711 $("#check_errors").html( StrWarning );
712 $('html, body').animate({ scrollTop: 0 }, 'fast');
714 var r=confirm( _("Important fields(s) are not filled. Are you sure you want to save?" ) );
721 } else if( StrAlert ){
722 var strAll = StrAlert;
724 strAll += StrWarning;
726 $("#check_errors").html( strAll );
727 $('html, body').animate({ scrollTop: 0 }, 'fast');
728 Sticky.hcSticky('refresh');
730 } else if( !StrAlert && !StrWarning ){
737 * check if z3950 mandatories are set or not
739 function GetZ3950Terms(){
740 var frameworkcode = document.getElementById("frameworkcode").value;
741 var strQuery = "&frameworkcode=" + encodeURIComponent(frameworkcode);
742 var mandatories = new Array();
743 var mandatories_label = new Array();
744 [% FOREACH BIG_LOO IN BIG_LOOP %]
745 [% FOREACH innerloo IN BIG_LOO.innerloop %]
746 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
747 [% IF ( subfield_loo.z3950_mandatory ) %]
748 mandatories.push("[% subfield_loo.id | html %]");
749 mandatories_label.push("[% subfield_loo.z3950_mandatory | html %]");
755 for(var i=0,len=mandatories.length; i<len ; i++){
756 var field_value = document.getElementById(mandatories[i]).value;
758 strQuery += "&"+encodeURIComponent(mandatories_label[i])+"="+encodeURIComponent(field_value);
764 function Changefwk() {
766 f.op.value = "[% op | html %]";
767 f.biblionumber.value = "[% biblionumberdata | html %]";
768 f.changed_framework.value = "changed";
772 /* Wrap a value in HTML without putting HTML in translatable string */
773 function formatFieldName( string ){
774 return "<strong><em>" + string + "</em></strong>";
777 [% Asset.css("css/addbiblio.css") | $raw %]
779 <body id="cat_addbiblio" class="cat">
782 <div>Loading, please wait...</div>
785 [% WRAPPER 'header.inc' %]
786 [% INCLUDE 'cataloging-search.inc' %]
789 [% WRAPPER 'sub-header.inc' %]
790 [% WRAPPER breadcrumbs %]
791 [% WRAPPER breadcrumb_item %]
792 <a href="/cgi-bin/koha/cataloguing/cataloging-home.pl">Cataloging</a>
794 [% WRAPPER breadcrumb_item bc_active= 1 %]
795 [% IF ( biblionumber ) %]
796 <span>[% tp('Editing MARC record titled:', "Editing") | html %] [% title | html %] (Record number [% biblionumber | html %])</span>
798 [% IF ( circborrowernumber ) %]
799 <span>Add MARC record (fast cataloging)</span>
801 <span>Add MARC record</span>
805 [% END #/ WRAPPER breadcrumbs %]
806 [% END #/ WRAPPER sub-header.inc %]
808 <div class="main container-fluid">
810 <div class="col-md-10 col-md-offset-1">
812 <div id="check_errors"></div>
815 [% IF ( biblionumber ) %]
816 Editing [% title | $HtmlTags tag="em" %] (Record number [% biblionumber | html %])
818 [% IF (circborrowernumber) %]
819 <span>Add MARC record (fast cataloging)</span>
821 <span>Add MARC record</span>
826 [% UNLESS ( number ) %]
827 <!-- show duplicate warning on tab 0 only -->
828 [% IF ( duplicatebiblionumber ) %]
829 <div class="dialog alert">
830 <h3>Duplicate record suspected</h3>
831 <p>Is this a duplicate of <a href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% duplicatebiblionumber | uri %]" onclick="openWindow('/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% duplicatebiblionumber | uri %]&popup=1', 'DuplicateBiblio','800','600'); return false;">[% duplicatetitle | html %] <i class="fa fa-window-restore"></i></a> ?</p>
832 [% IF ( CAN_user_editcatalogue_edit_items ) %]
833 <form action="/cgi-bin/koha/cataloguing/additem.pl" method="get">
834 <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
835 <button type="submit" class="new"><i class="fa fa-fw fa-pencil"></i> Yes, edit existing items</button>
838 <form action="/cgi-bin/koha/catalogue/detail.pl" method="get">
839 <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
840 <input type="submit" value="Yes: View existing items" />
843 <form action="/cgi-bin/koha/cataloguing/addbiblio.pl" method="get">
844 [% IF ( CAN_user_editcatalogue_edit_items ) %]
845 <button type="submit" class="new" onclick="confirmnotdup('items'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
847 <button type="submit" class="new" onclick="confirmnotdup('view'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
850 </div> <!-- /.dialog.alert -->
851 [% END # /IF duplicatebiblionumber %]
852 [% END # /UNLESS number %]
856 opener.document.forms['f'].biblionumber.value=[% biblionumber | html %];
857 opener.document.forms['f'].title.value='[% title | html %]';
861 <form method="post" name="f" id="f" action="/cgi-bin/koha/cataloguing/addbiblio.pl" onsubmit="return Check();">
862 <input type="hidden" value="[% IF ( biblionumber ) %]view[% ELSE %]items[% END %]" id="redirect" name="redirect" />
863 <input type="hidden" value="" id="current_tab" name="current_tab" />
864 <input type="hidden" value="0" id="confirm_not_duplicate" name="confirm_not_duplicate" />
867 <div id="toolbar" class="btn-toolbar">
868 [% IF CAN_user_editcatalogue_edit_items or ( frameworkcode == 'FA' and CAN_user_editcatalogue_fast_cataloging ) %]
869 [% IF (circborrowernumber) %][%# fast cataloging must lead to items %]
870 <!-- Action is under fast cataloging - Save button redirecting to items -->
871 <div class="btn-group"><a href="#" id="saveanditems" class="btn btn-primary"><i class="fa fa-save"></i> Save</a></div>
873 <!-- Not using fast cataloging - Display split menu -->
874 <div class="btn-group">
875 <button class="btn btn-primary" id="saverecord"><i class="fa fa-save"></i> Save</button>
876 <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
877 <span class="caret"></span>
879 <ul class="dropdown-menu">
880 <li><a id="saveandview" href="#">Save and view record</a></li>
881 <li><a id="saveanditems" href="#">Save and edit items</a></li>
882 <li><a id="saveandcontinue" href="#">Save and continue editing</a></li>
887 <!-- User cannot edit items - single button redirecting to view -->
888 <div class="btn-group"><a href="#" id="saveandview" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
889 [% END # /IF CAN_user_editcatalogue_edit_items %]
891 [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
892 [% IF biblionumber %]
893 <div class="btn-group"><a class="btn btn-default" href="#" id="z3950search"><i class="fa fa-search"></i> Replace record via Z39.50/SRU search</a></div>
895 <div class="btn-group"><a class="btn btn-default" href="#" id="z3950search"><i class="fa fa-search"></i> Z39.50/SRU search</a></div>
897 [% IF ( CAN_user_editauthorities ) %]
898 <div class="btn-group"><a class="btn btn-default" href="#" id="linkerbutton"><i class="fa fa-refresh"></i> Link authorities automatically</a></div>
902 <div class="btn-group">
903 <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> Settings <span class="caret"></span></button>
904 <ul id="settings-menu" class="dropdown-menu">
905 [% IF Koha.Preference( 'EnableAdvancedCatalogingEditor' ) == 1 && CAN_user_editcatalogue_advanced_editor %]
906 <li><a href="#" id="switcheditor">Switch to advanced editor</a></li>
908 [% UNLESS advancedMARCEditor %]
910 <a href="#" id="marcDocsSelect"><i class="fa fa-check-square-o"></i> Show MARC tag documentation links</a>
912 <a href="#" id="marcTagsSelect"><i class="fa fa-check-square-o"></i> Show tags</a>
915 <li class="dropdown-header">Change framework</li>
917 <a href="#" class="change-framework" data-frameworkcode="">
918 [% IF ( frameworkcode ) %]
919 <i class="fa fa-fw"> </i>
921 <i class="fa fa-fw fa-check"></i>
926 [% FOREACH framework IN frameworks%]
928 <a href="#" class="change-framework" data-frameworkcode="[% framework.frameworkcode | html %]">
929 [% IF framework.frameworkcode == frameworkcode %]
930 <i class="fa fa-fw fa-check"></i>
932 <i class="fa fa-fw"> </i>
934 [% framework.frameworktext | html %]
938 </ul> <!-- /#settings-menu -->
939 </div> <!-- /.btn-group -->
940 [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
941 [% IF (biblionumber) %]
942 <div class="btn-group">
943 <a href="[% PROCESS biblio_a_href biblionumber => biblionumber %]" class="btn btn-link" id="cancel">Cancel</a>
946 <div class="btn-group">
947 <a class="btn btn-link" id="cancel" href="/cgi-bin/koha/cataloguing/cataloging-home.pl">Cancel</a>
950 <div id="show-errors" class="btn-group"></div>
951 [% END # /UNLESS circborrowernumber %]
952 <div class="toolbar-tabs-container">
953 [% IF ( BIG_LOOP && BIG_LOOP.size > 1 ) %]
954 <ul class="toolbar-tabs" role="tablist">
955 [%- FOREACH BIG_LOO IN BIG_LOOP -%]
957 <li role="presentation" class="active selected">
959 <li role="presentation">
961 <a data-tabid="[% BIG_LOO.number | html %]" href="#tab[% BIG_LOO.number | html %]XX" aria-controls="#tab[% BIG_LOO.number | html %]XX" role="tab" data-toggle="tab">[% BIG_LOO.number | html %]</a>
966 <ul class="tag_anchors_list">
967 [% FOREACH BIG_LOO IN BIG_LOOP %]
968 [% IF loop.first %][% SET tab_selected = "tab_selected" %][% ELSE %][% SET tab_selected = "" %][% END %]
969 [% FOREACH innerloo IN BIG_LOO.innerloop %]
970 [% IF ( innerloo.tag ) %]
971 <li class="tag_anchors tag_anchors_[% BIG_LOO.number | html %] [% tab_selected | html %]">
972 <a class="tag_anchor" id="tag_anchor_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]" title="tag_anchor_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]" href="#div_indicator_tag_[% innerloo.tag | uri %]_[% innerloo.index | uri %][% innerloo.random | uri %]">[% innerloo.tag | uri %]</a>
979 </div> <!-- /#toolbar.btn-toolbar -->
981 [% IF bib_doesnt_exist %]
982 <div class="dialog alert">
983 The record you are trying to edit doesn't exist.<br>
984 <a href="/cgi-bin/koha/cataloguing/addbiblio.pl?frameworkcode=">Add a new record</a> or <a href="/cgi-bin/koha/catalogue/search.pl">do a catalog search</a>.
989 <input type="hidden" name="mode" value="popup" />
991 <input type="hidden" name="op" value="addbiblio" />
992 <input type="hidden" id="frameworkcode" name="frameworkcode" value="[% frameworkcode | html %]" />
993 <input type="hidden" name="z3950" value="[% z3950 | html %]" />
994 <input type="hidden" name="biblionumber" value="[% biblionumber | html %]" />
995 <input type="hidden" name="breedingid" value="[% breedingid | html %]" />
996 <input type="hidden" name="changed_framework" value="" />
998 <div id="addbibliotabs" class="toptabs numbered">
999 <div class="tab-content">
1001 [% FOREACH BIG_LOO IN BIG_LOOP %]
1003 <div id="tab[% BIG_LOO.number | html %]XX" role="tabpanel" class="tab-pane active">
1005 <div id="tab[% BIG_LOO.number | html %]XX" role="tabpanel" class="tab-pane">
1008 [% IF ( BIG_LOOP.size > 1 ) %]
1009 <h3>Section [% BIG_LOO.number | html %]</h3>
1012 [% FOREACH innerloo IN BIG_LOO.innerloop %]
1013 [% IF ( innerloo.tag ) %]
1014 [% IF innerloo.tag != previous %]
1015 [% IF previous != "" %]
1018 [% previous = innerloo.tag %]
1019 [% IF ( innerloo.repeatable ) %]
1020 <ul class="sortable_field">
1025 [% IF ( innerloo.repeatable ) %]
1026 <li class="tag sortable_tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1028 <li class="tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1030 <div class="tag_title" id="div_indicator_tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1031 [% IF advancedMARCEditor %]
1032 <a href="#" tabindex="1" class="tagnum" title="[% innerloo.tag_lib | html %] - Click to expand this tag" onclick="ExpandField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;">[% innerloo.tag | html %]</a>
1034 <span class="tagnum" title="[% innerloo.tag_lib | html %]">[% innerloo.tag | html %]</span>
1035 <a href="#" class="marcdocs" onclick="PopupMARCFieldDoc('[% innerloo.tag | html %]'); return false;"> ?</a>
1038 [% IF ( innerloo.fixedfield ) %]
1041 class="indicator flat"
1042 style="display:none;"
1043 name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1046 value="[% innerloo.indicator1 | html %]" />
1049 class="indicator flat"
1050 style="display:none;"
1051 name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1054 value="[% innerloo.indicator2 | html %]" />
1058 class="indicator flat"
1059 name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1062 value="[% innerloo.indicator1 | html %]" />
1065 class="indicator flat"
1066 name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1069 value="[% innerloo.indicator2 | html %]" />
1070 [% END # /IF innerloo.fixedfield %] -
1072 [% UNLESS advancedMARCEditor %]
1073 <a href="#" tabindex="1" class="expandfield" onclick="ExpandField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;" title="Click to expand this tag">[% innerloo.tag_lib | html %]</a>
1076 <span class="field_controls">
1077 [% IF ( innerloo.repeatable ) %]
1078 <a href="#" tabindex="1" class="buttonPlus" onclick="CloneField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]','0','[% advancedMARCEditor | html %]'); return false;" title="Repeat this tag">
1079 <img src="[% interface | html %]/[% theme | html %]/img/repeat-tag.png" alt="Repeat this tag" />
1082 <a href="#" tabindex="1" class="buttonMinus" onclick="UnCloneField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;" title="Delete this tag">
1083 <img src="[% interface | html %]/[% theme | html %]/img/delete-tag.png" alt="Delete this tag" />
1085 </span> <!-- /.field_controls -->
1086 </div> <!-- /div.tag_title -->
1088 <ul class="sortable_subfield">
1089 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
1090 <!-- One line on the marc editor -->
1091 <li class="subfield_line" style="[% subfield_loo.visibility | html %]" id="subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]">
1092 <div class="subfieldcode">
1094 title="[% subfield_loo.marc_lib | $raw %]"
1095 style=" [% IF ( subfield_loo.fixedfield ) %]display:none; [% END %]border:0;"
1096 name="tag_[% subfield_loo.tag | html %]_code_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]"
1097 value="[% subfield_loo.subfield | html %]"
1103 [% UNLESS advancedMARCEditor %]
1104 [% IF ( subfield_loo.mandatory ) %]
1105 <div class="subfield subfield_mandatory">
1106 [% ELSIF ( subfield_loo.important ) %]
1107 <div class="subfield subfield_important">
1109 <div class="subfield">
1111 [% IF ( subfield_loo.fixedfield ) %]
1112 <label for="tag_[% subfield_loo.tag | html %]_subfield_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]" style="display:none;" class="labelsubfield">
1114 <label for="tag_[% subfield_loo.tag | html %]_subfield_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]" class="labelsubfield">
1116 [% subfield_loo.marc_lib | $raw %]
1121 [% SET mv = subfield_loo.marc_value %]
1122 <div id="field_marceditor[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]" class="field_marceditor">
1123 [% IF ( mv.type == 'text' ) %]
1124 [% IF ( mv.readonly == 1 ) %]
1125 <input type="text" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" value="[%- mv.value | html -%]" class="input_marceditor readonly" tabindex="1" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" readonly="readonly" />
1127 <input type="text" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" value="[%- mv.value | html -%]" class="input_marceditor" tabindex="1" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" />
1130 [% ELSIF ( mv.type == 'text_complex' ) %]
1131 <input type="text" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" value="[%- mv.value | html -%]" class="input_marceditor framework_plugin" tabindex="1" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" />
1132 [% mv.javascript | $raw %]
1133 [% ELSIF ( mv.type == 'hidden' ) %]
1134 <input tabindex="1" type="hidden" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" value="[%- mv.value | html -%]" />
1135 [% ELSIF ( mv.type == 'textarea' ) %]
1136 <textarea cols="70" rows="4" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" class="input_marceditor" tabindex="1">[%- mv.value | html -%]</textarea>
1137 [% ELSIF ( mv.type == 'select' ) %]
1138 [% IF mv.category AND CAN_user_parameters_manage_auth_values %]
1139 <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor" id="[%- mv.id | html -%]" data-category="[% mv.category | html %]">
1141 <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor select2" id="[%- mv.id | html -%]">
1143 [% SET matched = 0 %]
1144 [% FOREACH aval IN mv.values %]
1145 [% IF aval == mv.default %]
1146 [% SET matched = 1 %]
1147 <option value="[%- aval | html -%]" selected="selected">[%- mv.labels.$aval | html -%]</option>
1149 <option value="[%- aval | html -%]">[%- mv.labels.$aval | html -%]</option>
1153 [% UNLESS matched # If the current value is not in the authorised value list %]
1154 <option value="[%- mv.default | html -%]" selected="selected">[%- mv.default | html -%] (Not an authorised value)</option>
1156 <span style="float:right;" title="The current value [% mv.default | html %] is not configured for the authorised value category controlling this subfield"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></span>
1160 [% UNLESS matched # If the current value is not in the authorised list %]
1162 [% END # /IF (mv.type...) %]
1164 [% IF ( subfield_loo.mandatory ) %]
1165 <div class="subfield_loop_mandatory">
1166 <span class="required">Required</span>
1168 [% ELSIF ( subfield_loo.important ) %]
1169 <div class="subfield_loop_mandatory">
1170 <span class="important">Important</span>
1173 <div class="subfield_controls">
1174 [% IF ( mv.type == 'text' ) %]
1175 [% IF ( mv.authtype ) %]
1176 <a href="#" class="buttonDot tag_editor" onclick="openAuth(this.parentNode.parentNode.getElementsByTagName('input')[1].id,'[%- mv.authtype | html -%]','biblio'); return false;" tabindex="1" title="Tag editor">Tag editor</a>
1178 [% ELSIF ( mv.type == 'text_complex' ) %]
1180 <span class="buttonDot tag_editor disabled" tabindex="-1" title="Field autofilled by plugin"></span>
1182 [% IF mv.plugin == "upload.pl" %]
1183 <a href="#" id="buttonDot_[% mv.id | html %]" class="tag_editor upload framework_plugin" tabindex="1"><i class="fa fa-upload" aria-hidden="true"></i> Upload</a>
1185 <a href="#" id="buttonDot_[% mv.id | html %]" class="buttonDot tag_editor framework_plugin" tabindex="1" title="Tag editor">Tag editor</a>
1190 [% IF ( subfield_loo.repeatable ) %]
1191 <a href="#" class="buttonPlus" tabindex="1" onclick="CloneSubfield('subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]','[% advancedMARCEditor | html %]'); return false;">
1192 <img src="[% interface | html %]/[% theme | html %]/img/clone-subfield.png" alt="Clone" title="Clone this subfield" />
1194 <a href="#" class="buttonMinus" tabindex="1" onclick="UnCloneField('subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]'); return false;">
1195 <img src="[% interface | html %]/[% theme | html %]/img/delete-subfield.png" alt="Delete" title="Delete this subfield" />
1199 </li> <!-- /.subfield_line -->
1200 <!-- End of the line -->
1201 [% END # /FOREACH subfield_loop %]
1202 </ul> <!-- /.sortable_subfield -->
1203 </li> <!-- /.tag.clearfix -->
1204 [% END %]<!-- if innerloo.tag -->
1205 [% END # /FOREACH BIG_LOO.innerloop %]
1206 </ul> <!-- /.sortable_field -->
1207 </div> <!-- /#tabXXX -->
1208 [% END # /FOREACH BIG_LOOP %]
1209 </div> <!-- /.tab-content -->
1210 </div><!-- /#addbibliotabs -->
1212 [%# Fields for fast cataloging %]
1213 <input type="hidden" name="barcode" value="[% barcode | html %]" />
1214 <input type="hidden" name="branch" value="[% branch | html %]" />
1215 <input type="hidden" name="circborrowernumber" value="[% circborrowernumber | html %]" />
1216 <input type="hidden" name="stickyduedate" value="[% stickyduedate | html %]" />
1217 <input type="hidden" name="duedatespec" value="[% duedatespec | html %]" />
1218 [%# End of fields for fast cataloging %]
1219 </form> <!-- /name=f -->
1221 [% INCLUDE 'modals/cataloguing_create_av.inc' %]
1223 </div> <!-- /.col-md-10.col-md-offset-1 -->
1224 </div> <!-- /.row -->
1226 [% INCLUDE 'intranet-bottom.inc' %]