4 [% INCLUDE 'doc-head-open.inc' %]
5 <title>[% IF ( biblionumber ) %]Editing [% title | html %] (Record number [% biblionumber | html %])[% ELSE %]Add MARC record[% END %] › Cataloging › Koha</title>
6 [% INCLUDE 'doc-head-close.inc' %]
7 [% INCLUDE 'calendar.inc' %]
8 [% Asset.js("lib/hc-sticky.js") | $raw %]
9 [% INCLUDE 'select2.inc' %]
11 [% IF Koha.Preference('CreateAVFromCataloguing') && CAN_user_parameters_manage_auth_values %]
12 var auth_values_creation = 1;
14 var auth_values_creation = 0;
16 $.fn.select2.defaults.set("width", "100%" );
18 [% Asset.js("js/cataloging.js") | $raw %]
19 [% Asset.js("js/browser.js") | $raw %]
21 var browser = KOHA.browser('[% searchid | html %]', parseInt('[% biblionumber | html %]', 10));
24 $(window).load(function(){
28 $(document).ready(function() {
30 [% IF bib_doesnt_exist %]
31 $("#addbibliotabs").hide();
35 var $tabs = $('#addbibliotabs').tabs().bind('show.ui-tabs', function(e, ui) {
36 $("#"+ui.panel.id+" input:eq(0)").focus();
38 $( "ul.sortable_field", $tabs ).sortable({
40 containment: $("#addbibliotabs")
42 $( "ul.sortable_subfield", $tabs ).sortable({
48 link = $("a[href='#[% tab | html %]']");
52 Sticky = $("#toolbar");
55 stickyClass: "floating"
58 /* check cookie to hide/show marcdocs*/
59 if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
60 toggleMARCdocLinks(false);
62 toggleMARCdocLinks(true);
65 $("#marcDocsSelect").click(function(){
66 if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
67 toggleMARCdocLinks(true);
69 toggleMARCdocLinks(false);
73 /* check cookie to hide/show marc tags*/
74 var marctags_cookie = Cookies.get("marctags_[% borrowernumber | html %]");
75 if( marctags_cookie == 'hide'){
76 toggleMARCTagLinks(false);
77 } else if( marctags_cookie == 'show'){
78 toggleMARCTagLinks(true)
80 [% UNLESS Koha.Preference("hide_marc") %]
81 toggleMARCTagLinks(true)
83 toggleMARCTagLinks(false);
87 $("#marcTagsSelect").click(function(){
88 if( Cookies.get("marctags_[% borrowernumber | html %]") == 'hide'){
89 toggleMARCTagLinks(true)
91 toggleMARCTagLinks(false);
95 $("#z3950search").click(function(){
99 $("#linkerbutton").click(function(){
103 $("#saverecord").click(function(){
104 $(".btn-group").removeClass("open");
109 $("#saveandview").click(function(){
110 $(".btn-group").removeClass("open");
115 $("#saveanditems").click(function(){
116 $(".btn-group").removeClass("open");
120 $("#saveandcontinue").click(function(){
121 $(".btn-group").removeClass("open");
122 var tab = $("#addbibliotabs li.ui-tabs-active:first a").attr('href');
123 tab = tab.replace('#', '');
124 $("#current_tab").val(tab);
125 redirect("just_save", tab);
129 $( '#switcheditor' ).click( function() {
130 var breedingid = [% breedingid || "null" | html %];
132 if ( !confirm( breedingid ? _("This record cannot be transferred to the advanced editor. Continue?") : _("Any changes will not be saved. Continue?") ) ) return false;
134 Cookies.set( 'catalogue_editor_[% logged_in_user.borrowernumber | html %]', 'advanced', { expires: 365, path: '/', sameSite: 'Lax' } );
136 var biblionumber = [% biblionumber || "null" | html %];
138 if ( biblionumber ) {
139 window.location = '/cgi-bin/koha/cataloguing/editor.pl#catalog/' + biblionumber;
141 window.location = '/cgi-bin/koha/cataloguing/editor.pl';
146 $(".change-framework").on("click", function(){
147 var frameworkcode = $(this).data("frameworkcode");
148 $("#frameworkcode").val( frameworkcode );
152 $(".toolbar-tabs a").on("click",function(e){
154 selectTab( $(this ) );
157 $(".tag_anchor").on("click", function(e){
159 $(".tag_anchor").removeClass("selected");
160 $(this).addClass("selected");
161 var link = this.href;
162 var linkid = link.substring( link.indexOf("#") + 1 );
163 window.scrollTo( 0, getScrollto( linkid, "toolbar" ) );
166 $("body").on("click", ".linkfield", function(e){
168 var tab = $(this).data("tab");
169 var field = $(this).data("field");
170 var tablink = $("a[data-tabid='" + tab + "']" );
171 selectTab( tablink );
172 window.scrollTo( 0, getScrollto( field, "toolbar" ) );
175 $("body").on("click", ".show-errors", function(e){
176 document.getElementById("form-errors").scrollIntoView();
181 function selectTab( tablink ){
182 $(".toolbar-tabs li").removeClass("selected");
183 tablink.parent().addClass("selected");
184 var tabid = tablink.data("tabid");
185 $('#addbibliotabs').selectTabByID("#tab" + tabid + "XX");
186 $(".tag_anchors").removeClass("tab_selected").hide();
187 $(".tag_anchors_" + tabid ).addClass("tab_selected").show();
191 * Returns a roughly ideal position to scroll an element into view
192 * @param {string} target - The HTML id of the element to scroll into view
193 * @param {string} elemid - The HTML id of the element which might obscure
194 * the view of the target element e.g. a floating toolbar
195 * @return {number} - The y-coordinate to pass to window.scrollTo()
197 function getScrollto( target, elemid ){
198 var dest = $("#" + target );
199 var yoffset = dest.offset();
202 var element = $("#" + elemid );
203 var elem_height = element.outerHeight();
207 return yoffset.top - elem_height - 20;
210 function redirect(dest){
211 $("#redirect").attr("value",dest);
215 [% IF ( CAN_user_editcatalogue_edit_items ) %]
216 var onOption = function () {
222 * this function append button for create new authority if not found
225 function addCreateAuthorityButton(tag_subfield_line, heading, tag_index) {
226 var title = _("Create authority");
227 var elem = $('<a href="#" title="' + title + '"><i class="fa fa-plus-circle"></i></a>');
228 tag_subfield_line.append(elem);
229 var tag_subfield_line_a = $('.subfield_line[id^=subfield' + heading.tag + 'a]').eq(tag_index);
230 var subfield_a = tag_subfield_line_a.find('.input_marceditor').eq(0);
231 var index = subfield_a.attr('id');
232 elem.click(function() {
233 var popup = window.open("", "new_auth_popup",'fullscreen,toolbar=false,scrollbars=yes');
235 // Create a new form that will be POSTed in the new window
236 var form = $('<form>').attr({
238 action: "/cgi-bin/koha/authorities/authorities.pl",
239 target: "new_auth_popup"
241 //add the authtypecode
242 form.append($('<input>').attr({
244 name: 'authtypecode',
245 value: heading.auth_type
247 form.append($('<input>').attr({
250 value: heading.tag_to_report
252 form.append($('<input>').attr({
257 form.append($('<input>').attr({
262 $('.tag[id^=tag_' + heading.tag + '_]').eq(tag_index).find(':input').each(function(){
263 form.append($('<input>').attr({
265 name: this.name.split('_',4).join(''),
269 $('body').append(form);
279 * Updates the authid for every heading field
280 * Adds visual feedback for the changes made on the form.
282 function updateHeadingLinks(links) {
283 var current_tag = '';
286 // Delete the old message dialog and create a new one
287 $('#autolinker_dialog').remove();
288 var message_dialog = $('<div id="autolinker_dialog" class="dialog message"><strong>' + _("Automatic authority link results:") + '</strong><ul></ul></div>');
289 var message_dialog_ul = message_dialog.find('ul');
291 $.each(links, function(index, heading) {
292 if(current_tag == heading.tag) {
296 current_tag = heading.tag;
300 // Find the $9 field to update
301 var tag_subfield_line = $('.subfield_line[id^=subfield' + heading.tag + '9]').eq(tag_index);
302 if( tag_subfield_line.length < 1 ){ return; }
304 var subfield = tag_subfield_line.find('.input_marceditor').eq(0);
305 subfield.removeClass("matching_authority_field no_matching_authority_field");
307 // Delete the old status if one exists
308 tag_subfield_line.children('.subfield_status').remove();
310 // If the field wasn't modified. Skip it.
311 if(heading.status == 'UNCHANGED') {
316 // Make the subfield line visible and update its value
317 tag_subfield_line.show();
318 subfield.val(heading.authid);
320 // Add the new status
321 var image = '<i class="fa fa-close subfield_status no_matching_authority" </i> ';
323 var field_class = 'no_matching_authority_field';
324 switch(heading.status) {
326 image = '<i class="fa fa-check subfield_status matching_authority"</i> ';
327 message = _("A matching authority was found in the local database.");
328 field_class = 'matching_authority_field';
331 image = '<i class="fa fa-check subfield_status matching_authority"></i> ';
332 message = _("No matching authority found. A new authority was created automatically.");
333 field_class = 'matching_authority_field';
335 case 'MULTIPLE_MATCH':
336 message = _("More than one local match found. Possibly a duplicate authority!");
339 message = _("No matching authority found.");
342 message = heading.status;
346 subfield[0].classList.add(field_class);
347 tag_subfield_line.find('i').each(function() {
350 tag_subfield_line.append(image);
352 // Add the message to the dialog
353 message_dialog_ul.append('<li><strong>' + heading.tag + '</strong> - ' + message + '</li>');
355 // Add a link to create a new authority if none was found
356 if(heading.status == 'NONE_FOUND' && tag_subfield_line.find('i').length == 1) {
357 addCreateAuthorityButton(tag_subfield_line, heading , tag_index);
361 if(message_dialog.find('li').length == 0) {
362 message_dialog_ul.append("<li>" + _("No authority link was changed.") + "</li>");
364 $('#addbibliotabs').before(message_dialog);
368 * Use an ajax request to automatically find authority links for the current record
370 function AutomaticLinker() {
371 // Show the Loading overlay
372 $("#loading").show();
374 // Remove fields that are completely empty
375 $('#f').find('.tag').each(function() {
377 $(this).find('.input_marceditor').each(function() {
378 if($(this).val() != '') {
384 UnCloneField($(this).attr('id'));
388 // Get all the form values to post via AJAX
390 $('#f').find(':input').each(function(){
391 form_data[this.name] = $(this).val();
393 delete form_data[''];
395 // Send the data to automatic_linker.pl
397 url:'/cgi-bin/koha/svc/cataloguing/automatic_linker.pl',
401 error: function(xhr) {
402 alert("Error : \n" + xhr.responseText);
404 success: function(json) {
405 switch(json.status) {
407 alert(_("Error : You do not have the permissions necessary to use this functionality."));
410 updateHeadingLinks(json.links);
414 complete: function() {
415 $("#loading").hide();
421 function PopupMARCFieldDoc(field) {
422 [% IF Koha.Preference('marcfielddocurl') %]
423 var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','"') | html %]";
424 docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
425 docurl = docurl.replace("{FIELD}", ""+field);
426 docurl = docurl.replace("{LANG}", "[% lang | html %]");
428 [% ELSIF ( marcflavour == 'MARC21' ) %]
429 _MARC21FieldDoc(field);
430 [% ELSIF ( marcflavour == 'UNIMARC' ) %]
431 _UNIMARCFieldDoc(field);
434 function confirmnotdup(redirect){
435 $("#confirm_not_duplicate").attr("value","1");
436 $("#redirect").attr("value",redirect);
440 function Dopop(link,i) {
441 defaultvalue = document.getElementById(i).value;
442 window.open(link+"&result="+defaultvalue,"valuebuilder",'width=700,height=550,toolbar=false,scrollbars=yes');
446 * this function open a popup to search on z3950 server.
448 function PopupZ3950() {
449 var strQuery = GetZ3950Terms();
451 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');
455 function PopupMARCFieldDoc(field) {
456 [% IF Koha.Preference('marcfielddocurl') %]
457 var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','"') | html %]";
458 docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
459 docurl = docurl.replace("{FIELD}", ""+field);
460 docurl = docurl.replace("{LANG}", "[% lang | html %]");
462 [% ELSIF ( marcflavour == 'MARC21' ) %]
463 _MARC21FieldDoc(field);
464 [% ELSIF ( marcflavour == 'UNIMARC' ) %]
465 _UNIMARCFieldDoc(field);
469 function _MARC21FieldDoc(field) {
471 window.open("http://www.loc.gov/marc/bibliographic/bdleader.html");
472 } else if (field >= 90 && field <= 99 ){
473 window.open("http://www.loc.gov/marc/bibliographic/bd09x.html");
474 } else if (field >= 590 && field <= 599 ){
475 window.open("http://www.loc.gov/marc/bibliographic/bd59x.html");
476 } else if (field >= 690 && field <= 699 ){
477 window.open("http://www.loc.gov/marc/bibliographic/bd69x.html");
478 } else if (field < 900) {
479 window.open("http://www.loc.gov/marc/bibliographic/bd" + ("000"+field).slice(-3) + ".html");
481 window.open("http://www.loc.gov/marc/bibliographic/bd9xx.html");
485 function _UNIMARCFieldDoc(field) {
486 /* http://archive.ifla.org/VI/3/p1996-1/ is an outdated version of UNIMARC, but
487 seems to be the only version available that can be linked to per tag. More recent
488 versions of the UNIMARC standard are available on the IFLA website only as
493 url = "http://archive.ifla.org/VI/3/p1996-1/uni.htm";
495 var first = field.substring(0,1);
496 url = "http://archive.ifla.org/VI/3/p1996-1/uni" + first + ".htm#";
497 if (first == 0) url = url + "b";
499 ? "http://archive.ifla.org/VI/3/p1996-1/uni9.htm"
506 * Functions to hide/show marc docs and tags links
509 function toggleMARCdocLinks(flag){
511 $(".marcdocs").show();
512 Cookies.set("marcdocs_[% borrowernumber | html %]",'show', { path: "/", expires: 365, sameSite: 'Lax' });
513 $("#marcDocsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
515 $(".marcdocs").hide();
516 Cookies.set("marcdocs_[% borrowernumber | html %]",'hide', { path: "/", expires: 365, sameSite: 'Lax' });
517 $("#marcDocsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
521 function toggleMARCTagLinks(flag){
524 $(".subfieldcode").show();
525 Cookies.set("marctags_[% borrowernumber | html %]",'show', { path: "/", expires: 365, sameSite: 'Lax' });
526 $("#marcTagsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
529 $(".subfieldcode").hide();
530 Cookies.set("marctags_[% borrowernumber | html %]",'hide', { path: "/", expires: 365, sameSite: 'Lax' });
531 $("#marcTagsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
536 * check if mandatory/important subfields are written
537 * @param mandatory true to check for mandatories, false for importants
539 function AreFieldsNotOk (mandatory = true) {
540 var fields = new Array();
541 var subfields = new Array();
542 var tab = new Array();
543 var label = new Array();
545 var tabflag= new Array();
546 var StrAlert = "<div id='form-errors' class='dialog alert list'>";
547 var notFilledClass = "subfield_not_filled";
550 [% FOREACH BIG_LOO IN BIG_LOOP %]
551 [% FOREACH innerloo IN BIG_LOO.innerloop %]
552 [% IF ( innerloo.mandatory ) %]
553 fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
555 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
556 [% IF ( subfield_loo.mandatory ) %]subfields.push("[% subfield_loo.id | html %]");
557 tab.push("[% BIG_LOO.number | html %]");
558 label.push("[% subfield_loo.marc_lib | $raw %]");
563 StrAlert += "<h4>" + _("The following mandatory subfields aren't filled:") + "</h4>";
565 [% FOREACH BIG_LOO IN BIG_LOOP %]
566 [% FOREACH innerloo IN BIG_LOO.innerloop %]
567 [% IF ( innerloo.important ) %]
568 fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
570 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
571 [% IF ( subfield_loo.important ) %]subfields.push("[% subfield_loo.id | html %]");
572 tab.push("[% BIG_LOO.number | html %]");
573 label.push("[% subfield_loo.marc_lib | $raw %]");
578 StrAlert += "<h4>" + _("The following important subfields aren’t filled:") + "</h4>";
579 notFilledClass = "important_subfield_not_filled";
582 for(var i=0,len=subfields.length; i<len ; i++){
583 var tag=subfields[i].substr(4,3);
584 var subfield=subfields[i].substr(17,1);
585 var tagnumber=subfields[i].substr(19,subfields[i].lastIndexOf("_")-19);
586 if (tabflag[tag+subfield+tagnumber] == null) {
587 tabflag[tag+subfield+tagnumber]=new Array();
588 tabflag[tag+subfield+tagnumber][0]=0;
590 if( tabflag[tag+subfield+tagnumber][0] != 1 && (document.getElementById(subfields[i]) != null && ! document.getElementById(subfields[i]).value || document.getElementById(subfields[i]) == null)){
591 tabflag[tag+subfield+tagnumber][0] = 0 + tabflag[tag+subfield+tagnumber] ;
593 var elt = document.getElementById(subfields[i]);
594 if ( elt.nodeName == 'SELECT' ) {
595 $(elt).siblings('.select2').find("span[role='combobox']").addClass(notFilledClass);
597 elt.setAttribute('class','input_marceditor noEnterSubmit ' + notFilledClass);
599 $('#' + subfields[i]).focus();
600 tabflag[tag+subfield+tagnumber][1]=label[i];
601 tabflag[tag+subfield+tagnumber][2]=tab[i];
603 tabflag[tag+subfield+tagnumber][0] = 1;
605 tabflag[tag+subfield+tagnumber][3] = subfields[i];
608 for (var tagsubfieldid in tabflag){
609 if (tabflag[tagsubfieldid][0]==0){
610 var tag=tagsubfieldid.substr(0,3);
611 var subfield=tagsubfieldid.substr(3,1);
612 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>';
617 /* Check for mandatories/importants field(not subfields) */
618 /* Loop over array of fields identified as mandatory or
619 important to see if at least one subfield is filled */
620 mandatoryFields = new Object();
622 for(var i=0,len=fields.length; i<len; i++){
625 divid = "tag_" + arr[0] + "_" + arr[1];
626 varegexp = new RegExp("^tag_" + arr[0] + "_code_");
628 if(parseInt(arr[0]) >= 10){
629 elem = document.getElementById(divid);
630 eleminputs = elem.getElementsByTagName('input');
632 for(var j=0,len2=eleminputs.length; j<len2; j++){
634 if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
635 inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
637 for( var k=0; k<len2; k++){
638 if( eleminputs[k].id.match(inputregexp) ){
639 if( eleminputs[k].value ){
645 elemselect = elem.getElementsByTagName('select');
646 for( var k=0; k<elemselect.length; k++){
647 if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
654 elemtextareas = elem.getElementsByTagName('textarea');
655 for(var j=0,len2=elemtextareas.length; j<len2; j++){
656 // this bit assumes that the only textareas in this context would be for subfields
657 if (elemtextareas[j].value) {
669 mandatoryFields[ arr[0] ] = {
670 importance: "mandatory",
671 elemid: "div_indicator_" + divid,
675 mandatoryFields[ arr[0] ] = {
676 importance: "important",
677 elemid: "div_indicator_" + divid,
685 if( Object.entries(mandatoryFields).length > 0 ){
686 StrAlert += "<h4>" + _("The following fields aren't filled:") + "</h4>";
688 for( var prop in mandatoryFields ){
689 if( mandatoryFields[prop]["importance"] == "mandatory" ){
690 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>';
692 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>';
697 StrAlert += "</div>";
699 $("#show-errors").html('<button type="button" class="btn btn-danger show-errors"><i class="fa fa-warning"></i> ' + _("Errors") + '</span>');
707 * Run checks for mandatory and important fields
708 * Output errors if necessary, or submit the form
711 var StrAlert = AreFieldsNotOk();
712 var StrWarning = AreFieldsNotOk( false );
713 if( !StrAlert && StrWarning ){
714 // Check important fields
715 $("#check_errors").html( StrWarning );
716 $('html, body').animate({ scrollTop: 0 }, 'fast');
718 var r=confirm( _("Important fields(s) are not filled. Are you sure you want to save?" ) );
725 } else if( StrAlert ){
726 var strAll = StrAlert;
728 strAll += StrWarning;
730 $("#check_errors").html( strAll );
731 $('html, body').animate({ scrollTop: 0 }, 'fast');
732 Sticky.hcSticky('refresh');
734 } else if( !StrAlert && !StrWarning ){
741 * check if z3950 mandatories are set or not
743 function GetZ3950Terms(){
744 var frameworkcode = document.getElementById("frameworkcode").value;
745 var strQuery = "&frameworkcode=" + encodeURIComponent(frameworkcode);
746 var mandatories = new Array();
747 var mandatories_label = new Array();
748 [% FOREACH BIG_LOO IN BIG_LOOP %]
749 [% FOREACH innerloo IN BIG_LOO.innerloop %]
750 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
751 [% IF ( subfield_loo.z3950_mandatory ) %]
752 mandatories.push("[% subfield_loo.id | html %]");
753 mandatories_label.push("[% subfield_loo.z3950_mandatory | html %]");
759 for(var i=0,len=mandatories.length; i<len ; i++){
760 var field_value = document.getElementById(mandatories[i]).value;
762 strQuery += "&"+encodeURIComponent(mandatories_label[i])+"="+encodeURIComponent(field_value);
768 function Changefwk() {
770 f.op.value = "[% op | html %]";
771 f.biblionumber.value = "[% biblionumberdata | html %]";
772 f.changed_framework.value = "changed";
776 /* Wrap a value in HTML without putting HTML in translatable string */
777 function formatFieldName( string ){
778 return "<strong><em>" + string + "</em></strong>";
781 [% Asset.css("css/addbiblio.css") | $raw %]
783 <body id="cat_addbiblio" class="cat">
786 <div>Loading, please wait...</div>
789 [% INCLUDE 'header.inc' %]
791 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
794 <a href="/cgi-bin/koha/mainpage.pl">Home</a>
797 <a href="/cgi-bin/koha/cataloguing/addbooks.pl">Cataloging</a>
800 <a href="#" aria-current="page">
801 [% IF ( biblionumber ) %]
802 Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
811 <div class="main container-fluid">
813 <div class="col-md-10 col-md-offset-1">
815 <div id="check_errors"></div>
818 [% IF ( biblionumber ) %]
819 Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
821 Add MARC record [% IF (circborrowernumber) %]<em>(fast cataloging)</em>[% END %]
825 [% UNLESS ( number ) %]
826 <!-- show duplicate warning on tab 0 only -->
827 [% IF ( duplicatebiblionumber ) %]
828 <div class="dialog alert">
829 <h3>Duplicate record suspected</h3>
830 <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>
831 [% IF ( CAN_user_editcatalogue_edit_items ) %]
832 <form action="/cgi-bin/koha/cataloguing/additem.pl" method="get">
833 <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
834 <button type="submit" class="new"><i class="fa fa-fw fa-pencil"></i> Yes, edit existing items</button>
837 <form action="/cgi-bin/koha/catalogue/detail.pl" method="get">
838 <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
839 <input type="submit" value="Yes: View existing items" />
842 <form action="/cgi-bin/koha/cataloguing/addbiblio.pl" method="get">
843 [% IF ( CAN_user_editcatalogue_edit_items ) %]
844 <button type="submit" class="new" onclick="confirmnotdup('items'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
846 <button type="submit" class="new" onclick="confirmnotdup('view'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
849 </div> <!-- /.dialog.alert -->
850 [% END # /IF duplicatebiblionumber %]
851 [% END # /UNLESS number %]
855 opener.document.forms['f'].biblionumber.value=[% biblionumber | html %];
856 opener.document.forms['f'].title.value='[% title | html %]';
860 <form method="post" name="f" id="f" action="/cgi-bin/koha/cataloguing/addbiblio.pl" onsubmit="return Check();">
861 <input type="hidden" value="[% IF ( biblionumber ) %]view[% ELSE %]items[% END %]" id="redirect" name="redirect" />
862 <input type="hidden" value="" id="current_tab" name="current_tab" />
863 <input type="hidden" value="0" id="confirm_not_duplicate" name="confirm_not_duplicate" />
866 <div id="toolbar" class="btn-toolbar">
867 [% IF CAN_user_editcatalogue_edit_items or ( frameworkcode == 'FA' and CAN_user_editcatalogue_fast_cataloging ) %]
868 [% IF (circborrowernumber) %][%# fast cataloging must lead to items %]
869 <!-- Action is under fast cataloging - Save button redirecting to items -->
870 <div class="btn-group"><a href="#" id="saveanditems" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
872 <!-- Not using fast cataloging - Display split menu -->
873 <div class="btn-group">
874 <button class="btn btn-default" id="saverecord"><i class="fa fa-save"></i> Save</button>
875 <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
876 <span class="caret"></span>
878 <ul class="dropdown-menu">
879 <li><a id="saveandview" href="#">Save and view record</a></li>
880 <li><a id="saveanditems" href="#">Save and edit items</a></li>
881 <li><a id="saveandcontinue" href="#">Save and continue editing</a></li>
886 <!-- User cannot edit items - single button redirecting to view -->
887 <div class="btn-group"><a href="#" id="saveandview" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
888 [% END # /IF CAN_user_editcatalogue_edit_items %]
890 [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
891 [% IF biblionumber %]
892 <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>
894 <div class="btn-group"><a class="btn btn-default" href="#" id="z3950search"><i class="fa fa-search"></i> Z39.50/SRU search</a></div>
896 [% IF ( CAN_user_editauthorities ) %]
897 <div class="btn-group"><a class="btn btn-default" href="#" id="linkerbutton"><i class="fa fa-refresh"></i> Link authorities automatically</a></div>
901 <div class="btn-group">
902 <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> Settings <span class="caret"></span></button>
903 <ul id="settings-menu" class="dropdown-menu">
904 [% IF Koha.Preference( 'EnableAdvancedCatalogingEditor' ) == 1 && CAN_user_editcatalogue_advanced_editor %]
905 <li><a href="#" id="switcheditor">Switch to advanced editor</a></li>
907 [% UNLESS advancedMARCEditor %]
909 <a href="#" id="marcDocsSelect"><i class="fa fa-check-square-o"></i> Show MARC tag documentation links</a>
911 <a href="#" id="marcTagsSelect"><i class="fa fa-check-square-o"></i> Show tags</a>
914 <li class="dropdown-header">Change framework</li>
916 <a href="#" class="change-framework" data-frameworkcode="">
917 [% IF ( frameworkcode ) %]
918 <i class="fa fa-fw"> </i>
920 <i class="fa fa-fw fa-check"></i>
925 [% FOREACH framework IN frameworks%]
927 <a href="#" class="change-framework" data-frameworkcode="[% framework.frameworkcode | html %]">
928 [% IF framework.frameworkcode == frameworkcode %]
929 <i class="fa fa-fw fa-check"></i>
931 <i class="fa fa-fw"> </i>
933 [% framework.frameworktext | html %]
937 </ul> <!-- /#settings-menu -->
938 </div> <!-- /.btn-group -->
939 [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
940 [% IF (biblionumber) %]
941 <div class="btn-group">
942 <a href="[% PROCESS biblio_a_href biblionumber => biblionumber %]" class="btn btn-default" id="cancel">Cancel</a>
945 <div class="btn-group">
946 <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/cataloguing/addbooks.pl">Cancel</a>
949 <div id="show-errors" class="btn-group"></div>
950 [% END # /UNLESS circborrowernumber %]
951 <div class="toolbar-tabs-container">
952 [% IF ( BIG_LOOP && BIG_LOOP.size > 1 ) %]
953 <ul class="toolbar-tabs">
954 [%- FOREACH BIG_LOO IN BIG_LOOP -%]
956 <li class="selected">
960 <a data-tabid="[% BIG_LOO.number | html %]" href="#tab[% BIG_LOO.number | html %]XX">[% BIG_LOO.number | html %]</a>
965 <ul class="tag_anchors_list">
966 [% FOREACH BIG_LOO IN BIG_LOOP %]
967 [% IF loop.first %][% SET tab_selected = "tab_selected" %][% ELSE %][% SET tab_selected = "" %][% END %]
968 [% FOREACH innerloo IN BIG_LOO.innerloop %]
969 [% IF ( innerloo.tag ) %]
970 <li class="tag_anchors tag_anchors_[% BIG_LOO.number | html %] [% tab_selected | html %]">
971 <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>
978 </div> <!-- /#toolbar.btn-toolbar -->
980 [% IF bib_doesnt_exist %]
981 <div class="dialog alert">
982 The record you are trying to edit doesn't exist.<br>
983 <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>.
988 <input type="hidden" name="mode" value="popup" />
990 <input type="hidden" name="op" value="addbiblio" />
991 <input type="hidden" id="frameworkcode" name="frameworkcode" value="[% frameworkcode | html %]" />
992 <input type="hidden" name="z3950" value="[% z3950 | html %]" />
993 <input type="hidden" name="biblionumber" value="[% biblionumber | html %]" />
994 <input type="hidden" name="breedingid" value="[% breedingid | html %]" />
995 <input type="hidden" name="changed_framework" value="" />
997 <div id="addbibliotabs" class="toptabs numbered">
999 [% FOREACH BIG_LOO IN BIG_LOOP %]
1000 <li><a href="#tab[% BIG_LOO.number | uri %]XX">[% BIG_LOO.number | html %]</a></li>
1004 [% FOREACH BIG_LOO IN BIG_LOOP %]
1005 <div id="tab[% BIG_LOO.number | html %]XX">
1007 [% IF ( BIG_LOOP.size > 1 ) %]
1008 <h3>Section [% BIG_LOO.number | html %]</h3>
1011 [% FOREACH innerloo IN BIG_LOO.innerloop %]
1012 [% IF ( innerloo.tag ) %]
1013 [% IF innerloo.tag != previous %]
1014 [% IF previous != "" %]
1017 [% previous = innerloo.tag %]
1018 [% IF ( innerloo.repeatable ) %]
1019 <ul class="sortable_field">
1024 [% IF ( innerloo.repeatable ) %]
1025 <li class="tag sortable_tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1027 <li class="tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1029 <div class="tag_title" id="div_indicator_tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1030 [% IF advancedMARCEditor %]
1031 <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>
1033 <span class="tagnum" title="[% innerloo.tag_lib | html %]">[% innerloo.tag | html %]</span>
1034 <a href="#" class="marcdocs" onclick="PopupMARCFieldDoc('[% innerloo.tag | html %]'); return false;"> ?</a>
1037 [% IF ( innerloo.fixedfield ) %]
1040 class="indicator flat"
1041 style="display:none;"
1042 name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1045 value="[% innerloo.indicator1 | html %]" />
1048 class="indicator flat"
1049 style="display:none;"
1050 name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1053 value="[% innerloo.indicator2 | html %]" />
1057 class="indicator flat"
1058 name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1061 value="[% innerloo.indicator1 | html %]" />
1064 class="indicator flat"
1065 name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1068 value="[% innerloo.indicator2 | html %]" />
1069 [% END # /IF innerloo.fixedfield %] -
1071 [% UNLESS advancedMARCEditor %]
1072 <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>
1075 <span class="field_controls">
1076 [% IF ( innerloo.repeatable ) %]
1077 <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">
1078 <img src="[% interface | html %]/[% theme | html %]/img/repeat-tag.png" alt="Repeat this Tag" />
1081 <a href="#" tabindex="1" class="buttonMinus" onclick="UnCloneField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;" title="Delete this Tag">
1082 <img src="[% interface | html %]/[% theme | html %]/img/delete-tag.png" alt="Delete this Tag" />
1084 </span> <!-- /.field_controls -->
1085 </div> <!-- /div.tag_title -->
1087 <ul class="sortable_subfield">
1088 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
1089 <!-- One line on the marc editor -->
1090 <li class="subfield_line" style="[% subfield_loo.visibility | html %]" id="subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]">
1091 <div class="subfieldcode">
1093 title="[% subfield_loo.marc_lib | $raw %]"
1094 style=" [% IF ( subfield_loo.fixedfield ) %]display:none; [% END %]border:0;"
1095 name="tag_[% subfield_loo.tag | html %]_code_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]"
1096 value="[% subfield_loo.subfield | html %]"
1102 [% UNLESS advancedMARCEditor %]
1103 [% IF ( subfield_loo.mandatory ) %]
1104 <div class="subfield subfield_mandatory">
1105 [% ELSIF ( subfield_loo.important ) %]
1106 <div class="subfield subfield_important">
1108 <div class="subfield">
1110 [% IF ( subfield_loo.fixedfield ) %]
1111 <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">
1113 <label for="tag_[% subfield_loo.tag | html %]_subfield_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]" class="labelsubfield">
1115 [% subfield_loo.marc_lib | $raw %]
1120 [% SET mv = subfield_loo.marc_value %]
1121 <div id="field_marceditor[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]" class="field_marceditor">
1122 [% IF ( mv.type == 'text' ) %]
1123 [% IF ( mv.readonly == 1 ) %]
1124 <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" />
1126 <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 -%]" />
1129 [% ELSIF ( mv.type == 'text_complex' ) %]
1130 <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 -%]" />
1131 [% mv.javascript | $raw %]
1132 [% ELSIF ( mv.type == 'hidden' ) %]
1133 <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 -%]" />
1134 [% ELSIF ( mv.type == 'textarea' ) %]
1135 <textarea cols="70" rows="4" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" class="input_marceditor" tabindex="1">[%- mv.value | html -%]</textarea>
1136 [% ELSIF ( mv.type == 'select' ) %]
1137 [% IF mv.category AND CAN_user_parameters_manage_auth_values %]
1138 <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor" id="[%- mv.id | html -%]" data-category="[% mv.category | html %]">
1140 <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor select2" id="[%- mv.id | html -%]">
1142 [% FOREACH aval IN mv.values %]
1143 [% IF aval == mv.default %]
1144 <option value="[%- aval | html -%]" selected="selected">[%- mv.labels.$aval | html -%]</option>
1146 <option value="[%- aval | html -%]">[%- mv.labels.$aval | html -%]</option>
1150 [% END # /IF (mv.type...) %]
1152 [% IF ( subfield_loo.mandatory ) %]
1153 <div class="subfield_loop_mandatory">
1154 <span class="required">Required</span>
1156 [% ELSIF ( subfield_loo.important ) %]
1157 <div class="subfield_loop_mandatory">
1158 <span class="important">Important</span>
1161 <div class="subfield_controls">
1162 [% IF ( mv.type == 'text' ) %]
1163 [% IF ( mv.authtype ) %]
1164 <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>
1166 [% ELSIF ( mv.type == 'text_complex' ) %]
1168 <span class="buttonDot tag_editor disabled" tabindex="-1" title="Field autofilled by plugin"></span>
1170 [% IF mv.plugin == "upload.pl" %]
1171 <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>
1173 <a href="#" id="buttonDot_[% mv.id | html %]" class="buttonDot tag_editor framework_plugin" tabindex="1" title="Tag editor">Tag editor</a>
1178 [% IF ( subfield_loo.repeatable ) %]
1179 <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;">
1180 <img src="[% interface | html %]/[% theme | html %]/img/clone-subfield.png" alt="Clone" title="Clone this subfield" />
1182 <a href="#" class="buttonMinus" tabindex="1" onclick="UnCloneField('subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]'); return false;">
1183 <img src="[% interface | html %]/[% theme | html %]/img/delete-subfield.png" alt="Delete" title="Delete this subfield" />
1187 </li> <!-- /.subfield_line -->
1188 <!-- End of the line -->
1189 [% END # /FOREACH subfield_loop %]
1190 </ul> <!-- /.sortable_subfield -->
1191 </li> <!-- /.tag.clearfix -->
1192 [% END %]<!-- if innerloo.tag -->
1193 [% END # /FOREACH BIG_LOO.innerloop %]
1194 </ul> <!-- /.sortable_field -->
1195 </div> <!-- /#tabXXX -->
1196 [% END # /FOREACH BIG_LOOP %]
1197 </div><!-- /#addbibliotabs -->
1199 [%# Fields for fast cataloging %]
1200 <input type="hidden" name="barcode" value="[% barcode | html %]" />
1201 <input type="hidden" name="branch" value="[% branch | html %]" />
1202 <input type="hidden" name="circborrowernumber" value="[% circborrowernumber | html %]" />
1203 <input type="hidden" name="stickyduedate" value="[% stickyduedate | html %]" />
1204 <input type="hidden" name="duedatespec" value="[% duedatespec | html %]" />
1205 [%# End of fields for fast cataloging %]
1206 </form> <!-- /name=f -->
1208 [% INCLUDE 'modals/cataloguing_create_av.inc' %]
1210 </div> <!-- /.col-md-10.col-md-offset-1 -->
1211 </div> <!-- /.row -->
1213 [% INCLUDE 'intranet-bottom.inc' %]