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 [% Asset.js("lib/hc-sticky.js") | $raw %]
8 [% INCLUDE 'select2.inc' %]
10 [% IF Koha.Preference('CreateAVFromCataloguing') && CAN_user_parameters_manage_auth_values %]
11 var auth_values_creation = 1;
13 var auth_values_creation = 0;
15 $.fn.select2.defaults.set("width", "100%" );
17 [% Asset.js("js/cataloging.js") | $raw %]
18 [% Asset.js("js/browser.js") | $raw %]
20 var browser = KOHA.browser('[% searchid | html %]', parseInt('[% biblionumber | html %]', 10));
23 $(window).load(function(){
27 $(document).ready(function() {
29 [% IF bib_doesnt_exist %]
30 $("#addbibliotabs").hide();
34 var $tabs = $('#addbibliotabs').tabs().bind('show.ui-tabs', function(e, ui) {
35 $("#"+ui.panel.id+" input:eq(0)").focus();
37 $( "ul.sortable_field", $tabs ).sortable({
39 containment: $("#addbibliotabs")
41 $( "ul.sortable_subfield", $tabs ).sortable({
47 link = $("a[href='#[% tab | html %]']");
51 Sticky = $("#toolbar");
54 stickyClass: "floating"
57 /* check cookie to hide/show marcdocs*/
58 if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
59 toggleMARCdocLinks(false);
61 toggleMARCdocLinks(true);
64 $("#marcDocsSelect").click(function(){
65 if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
66 toggleMARCdocLinks(true);
68 toggleMARCdocLinks(false);
72 /* check cookie to hide/show marc tags*/
73 var marctags_cookie = Cookies.get("marctags_[% borrowernumber | html %]");
74 if( marctags_cookie == 'hide'){
75 toggleMARCTagLinks(false);
76 } else if( marctags_cookie == 'show'){
77 toggleMARCTagLinks(true)
79 [% UNLESS Koha.Preference("hide_marc") %]
80 toggleMARCTagLinks(true)
82 toggleMARCTagLinks(false);
86 $("#marcTagsSelect").click(function(){
87 if( Cookies.get("marctags_[% borrowernumber | html %]") == 'hide'){
88 toggleMARCTagLinks(true)
90 toggleMARCTagLinks(false);
94 $("#z3950search").click(function(){
98 $("#linkerbutton").click(function(){
102 $("#saverecord").click(function(){
103 $(".btn-group").removeClass("open");
108 $("#saveandview").click(function(){
109 $(".btn-group").removeClass("open");
114 $("#saveanditems").click(function(){
115 $(".btn-group").removeClass("open");
119 $("#saveandcontinue").click(function(){
120 $(".btn-group").removeClass("open");
121 var tab = $("#addbibliotabs li.ui-tabs-active:first a").attr('href');
122 tab = tab.replace('#', '');
123 $("#current_tab").val(tab);
124 redirect("just_save", tab);
128 $( '#switcheditor' ).click( function() {
129 var breedingid = [% breedingid || "null" | html %];
131 if ( !confirm( breedingid ? _("This record cannot be transferred to the advanced editor. Continue?") : _("Any changes will not be saved. Continue?") ) ) return false;
133 Cookies.set( 'catalogue_editor_[% logged_in_user.borrowernumber | html %]', 'advanced', { expires: 365, path: '/' } );
135 var biblionumber = [% biblionumber || "null" | html %];
137 if ( biblionumber ) {
138 window.location = '/cgi-bin/koha/cataloguing/editor.pl#catalog/' + biblionumber;
140 window.location = '/cgi-bin/koha/cataloguing/editor.pl';
145 $(".change-framework").on("click", function(){
146 var frameworkcode = $(this).data("frameworkcode");
147 $("#frameworkcode").val( frameworkcode );
151 $(".toolbar-tabs a").on("click",function(e){
153 selectTab( $(this ) );
156 $(".tag_anchor").on("click", function(e){
158 $(".tag_anchor").removeClass("selected");
159 $(this).addClass("selected");
160 var link = this.href;
161 var linkid = link.substring( link.indexOf("#") + 1 );
162 window.scrollTo( 0, getScrollto( linkid, "toolbar" ) );
165 $("body").on("click", ".linkfield", function(e){
167 var tab = $(this).data("tab");
168 var field = $(this).data("field");
169 var tablink = $("a[data-tabid='" + tab + "']" );
170 selectTab( tablink );
171 window.scrollTo( 0, getScrollto( field, "toolbar" ) );
174 $("body").on("click", ".show-errors", function(e){
175 document.getElementById("form-errors").scrollIntoView();
180 function selectTab( tablink ){
181 $(".toolbar-tabs li").removeClass("selected");
182 tablink.parent().addClass("selected");
183 var tabid = tablink.data("tabid");
184 $('#addbibliotabs').selectTabByID("#tab" + tabid + "XX");
185 $(".tag_anchors").removeClass("tab_selected").hide();
186 $(".tag_anchors_" + tabid ).addClass("tab_selected").show();
190 * Returns a roughly ideal position to scroll an element into view
191 * @param {string} target - The HTML id of the element to scroll into view
192 * @param {string} elemid - The HTML id of the element which might obscure
193 * the view of the target element e.g. a floating toolbar
194 * @return {number} - The y-coordinate to pass to window.scrollTo()
196 function getScrollto( target, elemid ){
197 var dest = $("#" + target );
198 var yoffset = dest.offset();
201 var element = $("#" + elemid );
202 var elem_height = element.outerHeight();
206 return yoffset.top - elem_height - 20;
209 function redirect(dest){
210 $("#redirect").attr("value",dest);
214 [% IF ( CAN_user_editcatalogue_edit_items ) %]
215 var onOption = function () {
221 * this function append button for create new authority if not found
224 function addCreateAuthorityButton(tag_subfield_line, heading, tag_index) {
225 var title = _("Create authority");
226 var elem = $('<a href="#" title="' + title + '"><i class="fa fa-plus-circle"></i></a>');
227 tag_subfield_line.append(elem);
228 var tag_subfield_line_a = $('.subfield_line[id^=subfield' + heading.tag + 'a]').eq(tag_index);
229 var subfield_a = tag_subfield_line_a.find('.input_marceditor').eq(0);
230 var index = subfield_a.attr('id');
231 elem.click(function() {
232 var popup = window.open("", "new_auth_popup",'fullscreen,toolbar=false,scrollbars=yes');
234 // Create a new form that will be POSTed in the new window
235 var form = $('<form>').attr({
237 action: "/cgi-bin/koha/authorities/authorities.pl",
238 target: "new_auth_popup"
240 //add the authtypecode
241 form.append($('<input>').attr({
243 name: 'authtypecode',
244 value: heading.auth_type
246 form.append($('<input>').attr({
249 value: heading.tag_to_report
251 form.append($('<input>').attr({
256 form.append($('<input>').attr({
261 $('.tag[id^=tag_' + heading.tag + '_]').eq(tag_index).find(':input').each(function(){
262 form.append($('<input>').attr({
264 name: this.name.split('_',4).join(''),
268 $('body').append(form);
278 * Updates the authid for every heading field
279 * Adds visual feedback for the changes made on the form.
281 function updateHeadingLinks(links) {
282 var current_tag = '';
285 // Delete the old message dialog and create a new one
286 $('#autolinker_dialog').remove();
287 var message_dialog = $('<div id="autolinker_dialog" class="dialog message"><strong>' + _("Automatic authority link results:") + '</strong><ul></ul></div>');
288 var message_dialog_ul = message_dialog.find('ul');
290 $.each(links, function(index, heading) {
291 if(current_tag == heading.tag) {
295 current_tag = heading.tag;
299 // Find the $9 field to update
300 var tag_subfield_line = $('.subfield_line[id^=subfield' + heading.tag + '9]').eq(tag_index);
301 if( tag_subfield_line.length < 1 ){ return; }
303 var subfield = tag_subfield_line.find('.input_marceditor').eq(0);
304 subfield.removeClass("matching_authority_field no_matching_authority_field");
306 // Delete the old status if one exists
307 tag_subfield_line.children('.subfield_status').remove();
309 // If the field wasn't modified. Skip it.
310 if(heading.status == 'UNCHANGED') {
315 // Make the subfield line visible and update its value
316 tag_subfield_line.show();
317 subfield.val(heading.authid);
319 // Add the new status
320 var image = '<i class="fa fa-close subfield_status no_matching_authority" </i> ';
322 var field_class = 'no_matching_authority_field';
323 switch(heading.status) {
325 image = '<i class="fa fa-check subfield_status matching_authority"</i> ';
326 message = _("A matching authority was found in the local database.");
327 field_class = 'matching_authority_field';
330 image = '<i class="fa fa-check subfield_status matching_authority"></i> ';
331 message = _("No matching authority found. A new authority was created automatically.");
332 field_class = 'matching_authority_field';
334 case 'MULTIPLE_MATCH':
335 message = _("More than one local match found. Possibly a duplicate authority!");
338 message = _("No matching authority found.");
341 message = heading.status;
345 subfield[0].classList.add(field_class);
346 tag_subfield_line.find('i').each(function() {
349 tag_subfield_line.append(image);
351 // Add the message to the dialog
352 message_dialog_ul.append('<li><strong>' + heading.tag + '</strong> - ' + message + '</li>');
354 // Add a link to create a new authority if none was found
355 if(heading.status == 'NONE_FOUND' && tag_subfield_line.find('i').length == 1) {
356 addCreateAuthorityButton(tag_subfield_line, heading , tag_index);
360 if(message_dialog.find('li').length == 0) {
361 message_dialog_ul.append("<li>" + _("No authority link was changed.") + "</li>");
363 $('#addbibliotabs').before(message_dialog);
367 * Use an ajax request to automatically find authority links for the current record
369 function AutomaticLinker() {
370 // Show the Loading overlay
371 $("#loading").show();
373 // Remove fields that are completely empty
374 $('#f').find('.tag').each(function() {
376 $(this).find('.input_marceditor').each(function() {
377 if($(this).val() != '') {
383 UnCloneField($(this).attr('id'));
387 // Get all the form values to post via AJAX
389 $('#f').find(':input').each(function(){
390 form_data[this.name] = $(this).val();
392 delete form_data[''];
394 // Send the data to automatic_linker.pl
396 url:'/cgi-bin/koha/svc/cataloguing/automatic_linker.pl',
400 error: function(xhr) {
401 alert("Error : \n" + xhr.responseText);
403 success: function(json) {
404 switch(json.status) {
406 alert(_("Error : You do not have the permissions necessary to use this functionality."));
409 updateHeadingLinks(json.links);
413 complete: function() {
414 $("#loading").hide();
420 function PopupMARCFieldDoc(field) {
421 [% IF Koha.Preference('marcfielddocurl') %]
422 var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','"') | html %]";
423 docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
424 docurl = docurl.replace("{FIELD}", ""+field);
425 docurl = docurl.replace("{LANG}", "[% lang | html %]");
427 [% ELSIF ( marcflavour == 'MARC21' ) %]
428 _MARC21FieldDoc(field);
429 [% ELSIF ( marcflavour == 'UNIMARC' ) %]
430 _UNIMARCFieldDoc(field);
433 function confirmnotdup(redirect){
434 $("#confirm_not_duplicate").attr("value","1");
435 $("#redirect").attr("value",redirect);
439 function Dopop(link,i) {
440 defaultvalue = document.getElementById(i).value;
441 window.open(link+"&result="+defaultvalue,"valuebuilder",'width=700,height=550,toolbar=false,scrollbars=yes');
445 * this function open a popup to search on z3950 server.
447 function PopupZ3950() {
448 var strQuery = GetZ3950Terms();
450 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');
454 function PopupMARCFieldDoc(field) {
455 [% IF Koha.Preference('marcfielddocurl') %]
456 var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','"') | html %]";
457 docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
458 docurl = docurl.replace("{FIELD}", ""+field);
459 docurl = docurl.replace("{LANG}", "[% lang | html %]");
461 [% ELSIF ( marcflavour == 'MARC21' ) %]
462 _MARC21FieldDoc(field);
463 [% ELSIF ( marcflavour == 'UNIMARC' ) %]
464 _UNIMARCFieldDoc(field);
468 function _MARC21FieldDoc(field) {
470 window.open("http://www.loc.gov/marc/bibliographic/bdleader.html");
471 } else if (field >= 90 && field <= 99 ){
472 window.open("http://www.loc.gov/marc/bibliographic/bd09x.html");
473 } else if (field >= 590 && field <= 599 ){
474 window.open("http://www.loc.gov/marc/bibliographic/bd59x.html");
475 } else if (field >= 690 && field <= 699 ){
476 window.open("http://www.loc.gov/marc/bibliographic/bd69x.html");
477 } else if (field < 900) {
478 window.open("http://www.loc.gov/marc/bibliographic/bd" + ("000"+field).slice(-3) + ".html");
480 window.open("http://www.loc.gov/marc/bibliographic/bd9xx.html");
484 function _UNIMARCFieldDoc(field) {
485 /* http://archive.ifla.org/VI/3/p1996-1/ is an outdated version of UNIMARC, but
486 seems to be the only version available that can be linked to per tag. More recent
487 versions of the UNIMARC standard are available on the IFLA website only as
492 url = "http://archive.ifla.org/VI/3/p1996-1/uni.htm";
494 var first = field.substring(0,1);
495 url = "http://archive.ifla.org/VI/3/p1996-1/uni" + first + ".htm#";
496 if (first == 0) url = url + "b";
498 ? "http://archive.ifla.org/VI/3/p1996-1/uni9.htm"
505 * Functions to hide/show marc docs and tags links
508 function toggleMARCdocLinks(flag){
510 $(".marcdocs").show();
511 Cookies.set("marcdocs_[% borrowernumber | html %]",'show', { path: "/", expires: 365 });
512 $("#marcDocsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
514 $(".marcdocs").hide();
515 Cookies.set("marcdocs_[% borrowernumber | html %]",'hide', { path: "/", expires: 365 });
516 $("#marcDocsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
520 function toggleMARCTagLinks(flag){
523 $(".subfieldcode").show();
524 Cookies.set("marctags_[% borrowernumber | html %]",'show', { path: "/", expires: 365 });
525 $("#marcTagsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
528 $(".subfieldcode").hide();
529 Cookies.set("marctags_[% borrowernumber | html %]",'hide', { path: "/", expires: 365 });
530 $("#marcTagsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
535 * check if mandatory/important subfields are written
536 * @param mandatory true to check for mandatories, false for importants
538 function AreFieldsNotOk (mandatory = true) {
539 var fields = new Array();
540 var subfields = new Array();
541 var tab = new Array();
542 var label = new Array();
544 var tabflag= new Array();
545 var StrAlert = "<div id='form-errors' class='dialog alert list'>";
546 var notFilledClass = "subfield_not_filled";
549 [% FOREACH BIG_LOO IN BIG_LOOP %]
550 [% FOREACH innerloo IN BIG_LOO.innerloop %]
551 [% IF ( innerloo.mandatory ) %]
552 fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
554 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
555 [% IF ( subfield_loo.mandatory ) %]subfields.push("[% subfield_loo.id | html %]");
556 tab.push("[% BIG_LOO.number | html %]");
557 label.push("[% subfield_loo.marc_lib | $raw %]");
562 StrAlert += "<h4>" + _("The following subfields aren't filled:") + "</h4>";
564 [% FOREACH BIG_LOO IN BIG_LOOP %]
565 [% FOREACH innerloo IN BIG_LOO.innerloop %]
566 [% IF ( innerloo.important ) %]
567 fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
569 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
570 [% IF ( subfield_loo.important ) %]subfields.push("[% subfield_loo.id | html %]");
571 tab.push("[% BIG_LOO.number | html %]");
572 label.push("[% subfield_loo.marc_lib | $raw %]");
577 StrAlert += "<h4>" + _("A few important fields are not filled:") + "</h4>";
578 notFilledClass = "important_subfield_not_filled";
581 for(var i=0,len=subfields.length; i<len ; i++){
582 var tag=subfields[i].substr(4,3);
583 var subfield=subfields[i].substr(17,1);
584 var tagnumber=subfields[i].substr(19,subfields[i].lastIndexOf("_")-19);
585 if (tabflag[tag+subfield+tagnumber] == null) {
586 tabflag[tag+subfield+tagnumber]=new Array();
587 tabflag[tag+subfield+tagnumber][0]=0;
589 if( tabflag[tag+subfield+tagnumber][0] != 1 && (document.getElementById(subfields[i]) != null && ! document.getElementById(subfields[i]).value || document.getElementById(subfields[i]) == null)){
590 tabflag[tag+subfield+tagnumber][0] = 0 + tabflag[tag+subfield+tagnumber] ;
592 var elt = document.getElementById(subfields[i]);
593 if ( elt.nodeName == 'SELECT' ) {
594 $(elt).siblings('.select2').find("span[role='combobox']").addClass(notFilledClass);
596 elt.setAttribute('class','input_marceditor noEnterSubmit ' + notFilledClass);
598 $('#' + subfields[i]).focus();
599 tabflag[tag+subfield+tagnumber][1]=label[i];
600 tabflag[tag+subfield+tagnumber][2]=tab[i];
602 tabflag[tag+subfield+tagnumber][0] = 1;
604 tabflag[tag+subfield+tagnumber][3] = subfields[i];
607 for (var tagsubfieldid in tabflag){
608 if (tabflag[tagsubfieldid][0]==0){
609 var tag=tagsubfieldid.substr(0,3);
610 var subfield=tagsubfieldid.substr(3,1);
611 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>';
616 /* Check for mandatories/importants field(not subfields) */
617 /* Loop over array of fields identified as mandatory or
618 important to see if at least one subfield is filled */
619 mandatoryFields = new Object();
621 for(var i=0,len=fields.length; i<len; i++){
624 divid = "tag_" + arr[0] + "_" + arr[1];
625 varegexp = new RegExp("^tag_" + arr[0] + "_code_");
627 if(parseInt(arr[0]) >= 10){
628 elem = document.getElementById(divid);
629 eleminputs = elem.getElementsByTagName('input');
631 for(var j=0,len2=eleminputs.length; j<len2; j++){
633 if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
634 inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
636 for( var k=0; k<len2; k++){
637 if( eleminputs[k].id.match(inputregexp) ){
638 if( eleminputs[k].value ){
644 elemselect = elem.getElementsByTagName('select');
645 for( var k=0; k<elemselect.length; k++){
646 if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
653 elemtextareas = elem.getElementsByTagName('textarea');
654 for(var j=0,len2=elemtextareas.length; j<len2; j++){
655 // this bit assumes that the only textareas in this context would be for subfields
656 if (elemtextareas[j].value) {
668 mandatoryFields[ arr[0] ] = {
669 importance: "mandatory",
670 elemid: "div_indicator_" + divid,
674 mandatoryFields[ arr[0] ] = {
675 importance: "important",
676 elemid: "div_indicator_" + divid,
684 if( Object.entries(mandatoryFields).length > 0 ){
685 StrAlert += "<h4>" + _("The following fields aren't filled:") + "</h4>";
687 for( var prop in mandatoryFields ){
688 if( mandatoryFields[prop]["importance"] == "mandatory" ){
689 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>';
691 StrAlert += "<li>" + _("Field %s is important, at least one of its subfields must be filled.").format(arr[0]) + ' <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>';
696 StrAlert += "</div>";
698 $("#show-errors").html('<button type="button" class="btn btn-danger show-errors"><i class="fa fa-warning"></i> ' + _("Errors") + '</span>');
710 var StrAlert = AreFieldsNotOk();
712 var StrWarning = AreFieldsNotOk(false);
715 // Check important fields
716 $("#check_errors").html( AreFieldsNotOk(false) );
717 $('html, body').animate({ scrollTop: 0 }, 'fast');
719 var r=confirm("Important fields(s) are not filled. Are you sure you want to save?");
728 // Call AreFieldsNotOk() twice to check both mandatory and important fields
729 $("#check_errors").html( AreFieldsNotOk() + AreFieldsNotOk(false) );
730 $('html, body').animate({ scrollTop: 0 }, 'fast');
731 Sticky.hcSticky('refresh');
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 [% INCLUDE 'header.inc' %]
787 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
790 <a href="/cgi-bin/koha/mainpage.pl">Home</a>
793 <a href="/cgi-bin/koha/cataloguing/addbooks.pl">Cataloging</a>
796 <a href="#" aria-current="page">
797 [% IF ( biblionumber ) %]
798 Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
807 <div class="main container-fluid">
809 <div class="col-md-10 col-md-offset-1">
811 <div id="check_errors"></div>
814 [% IF ( biblionumber ) %]
815 Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
817 Add MARC record [% IF (circborrowernumber) %]<em>(fast cataloging)</em>[% END %]
821 [% UNLESS ( number ) %]
822 <!-- show duplicate warning on tab 0 only -->
823 [% IF ( duplicatebiblionumber ) %]
824 <div class="dialog alert">
825 <h3>Duplicate record suspected</h3>
826 <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>
827 [% IF ( CAN_user_editcatalogue_edit_items ) %]
828 <form action="/cgi-bin/koha/cataloguing/additem.pl" method="get">
829 <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
830 <button type="submit" class="new"><i class="fa fa-fw fa-pencil"></i> Yes, edit existing items</button>
833 <form action="/cgi-bin/koha/catalogue/detail.pl" method="get">
834 <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
835 <input type="submit" value="Yes: View existing items" />
838 <form action="/cgi-bin/koha/cataloguing/addbiblio.pl" method="get">
839 [% IF ( CAN_user_editcatalogue_edit_items ) %]
840 <button type="submit" class="new" onclick="confirmnotdup('items'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
842 <button type="submit" class="new" onclick="confirmnotdup('view'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
845 </div> <!-- /.dialog.alert -->
846 [% END # /IF duplicatebiblionumber %]
847 [% END # /UNLESS number %]
851 opener.document.forms['f'].biblionumber.value=[% biblionumber | html %];
852 opener.document.forms['f'].title.value='[% title | html %]';
856 <form method="post" name="f" id="f" action="/cgi-bin/koha/cataloguing/addbiblio.pl" onsubmit="return Check();">
857 <input type="hidden" value="[% IF ( biblionumber ) %]view[% ELSE %]items[% END %]" id="redirect" name="redirect" />
858 <input type="hidden" value="" id="current_tab" name="current_tab" />
859 <input type="hidden" value="0" id="confirm_not_duplicate" name="confirm_not_duplicate" />
862 <div id="toolbar" class="btn-toolbar">
863 [% IF CAN_user_editcatalogue_edit_items or ( frameworkcode == 'FA' and CAN_user_editcatalogue_fast_cataloging ) %]
864 [% IF (circborrowernumber) %][%# fast cataloging must lead to items %]
865 <!-- Action is under fast cataloging - Save button redirecting to items -->
866 <div class="btn-group"><a href="#" id="saveanditems" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
868 <!-- Not using fast cataloging - Display split menu -->
869 <div class="btn-group">
870 <button class="btn btn-default" id="saverecord"><i class="fa fa-save"></i> Save</button>
871 <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
872 <span class="caret"></span>
874 <ul class="dropdown-menu">
875 <li><a id="saveandview" href="#">Save and view record</a></li>
876 <li><a id="saveanditems" href="#">Save and edit items</a></li>
877 <li><a id="saveandcontinue" href="#">Save and continue editing</a></li>
882 <!-- User cannot edit items - single button redirecting to view -->
883 <div class="btn-group"><a href="#" id="saveandview" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
884 [% END # /IF CAN_user_editcatalogue_edit_items %]
886 [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
887 [% IF biblionumber %]
888 <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>
890 <div class="btn-group"><a class="btn btn-default" href="#" id="z3950search"><i class="fa fa-search"></i> Z39.50/SRU search</a></div>
892 [% IF ( CAN_user_editauthorities ) %]
893 <div class="btn-group"><a class="btn btn-default" href="#" id="linkerbutton"><i class="fa fa-refresh"></i> Link authorities automatically</a></div>
897 <div class="btn-group">
898 <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> Settings <span class="caret"></span></button>
899 <ul id="settings-menu" class="dropdown-menu">
900 [% IF Koha.Preference( 'EnableAdvancedCatalogingEditor' ) == 1 && CAN_user_editcatalogue_advanced_editor %]
901 <li><a href="#" id="switcheditor">Switch to advanced editor</a></li>
903 [% UNLESS advancedMARCEditor %]
905 <a href="#" id="marcDocsSelect"><i class="fa fa-check-square-o"></i> Show MARC tag documentation links</a>
907 <a href="#" id="marcTagsSelect"><i class="fa fa-check-square-o"></i> Show tags</a>
910 <li class="dropdown-header">Change framework</li>
912 <a href="#" class="change-framework" data-frameworkcode="">
913 [% IF ( frameworkcode ) %]
914 <i class="fa fa-fw"> </i>
916 <i class="fa fa-fw fa-check"></i>
921 [% FOREACH framework IN frameworks%]
923 <a href="#" class="change-framework" data-frameworkcode="[% framework.frameworkcode | html %]">
924 [% IF framework.frameworkcode == frameworkcode %]
925 <i class="fa fa-fw fa-check"></i>
927 <i class="fa fa-fw"> </i>
929 [% framework.frameworktext | html %]
933 </ul> <!-- /#settings-menu -->
934 </div> <!-- /.btn-group -->
935 [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
936 [% IF (biblionumber) %]
937 [% IF ( BiblioDefaultViewmarc ) %]
938 <div class="btn-group">
939 <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
941 [% ELSIF ( BiblioDefaultViewlabeled_marc ) %]
942 <div class="btn-group">
943 <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
945 [% ELSIF ( BiblioDefaultViewisbd ) %]
946 <div class="btn-group">
947 <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
950 <div class="btn-group">
951 <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
955 <div class="btn-group">
956 <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/cataloguing/addbooks.pl">Cancel</a>
959 <div id="show-errors" class="btn-group"></div>
960 [% END # /UNLESS circborrowernumber %]
961 <div class="toolbar-tabs-container">
962 [% IF ( BIG_LOOP && BIG_LOOP.size > 1 ) %]
963 <ul class="toolbar-tabs">
964 [%- FOREACH BIG_LOO IN BIG_LOOP -%]
966 <li class="selected">
970 <a data-tabid="[% BIG_LOO.number | html %]" href="#tab[% BIG_LOO.number | html %]XX">[% BIG_LOO.number | html %]</a>
975 <ul class="tag_anchors_list">
976 [% FOREACH BIG_LOO IN BIG_LOOP %]
977 [% IF loop.first %][% SET tab_selected = "tab_selected" %][% ELSE %][% SET tab_selected = "" %][% END %]
978 [% FOREACH innerloo IN BIG_LOO.innerloop %]
979 [% IF ( innerloo.tag ) %]
980 <li class="tag_anchors tag_anchors_[% BIG_LOO.number | html %] [% tab_selected | html %]">
981 <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>
988 </div> <!-- /#toolbar.btn-toolbar -->
990 [% IF bib_doesnt_exist %]
991 <div class="dialog alert">
992 The record you are trying to edit doesn't exist.<br>
993 <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>.
998 <input type="hidden" name="mode" value="popup" />
1000 <input type="hidden" name="op" value="addbiblio" />
1001 <input type="hidden" id="frameworkcode" name="frameworkcode" value="[% frameworkcode | html %]" />
1002 <input type="hidden" name="z3950" value="[% z3950 | html %]" />
1003 <input type="hidden" name="biblionumber" value="[% biblionumber | html %]" />
1004 <input type="hidden" name="breedingid" value="[% breedingid | html %]" />
1005 <input type="hidden" name="changed_framework" value="" />
1007 <div id="addbibliotabs" class="toptabs numbered">
1009 [% FOREACH BIG_LOO IN BIG_LOOP %]
1010 <li><a href="#tab[% BIG_LOO.number | uri %]XX">[% BIG_LOO.number | html %]</a></li>
1014 [% FOREACH BIG_LOO IN BIG_LOOP %]
1015 <div id="tab[% BIG_LOO.number | html %]XX">
1017 [% IF ( BIG_LOOP.size > 1 ) %]
1018 <h3>Section [% BIG_LOO.number | html %]</h3>
1021 [% FOREACH innerloo IN BIG_LOO.innerloop %]
1022 [% IF ( innerloo.tag ) %]
1023 [% IF innerloo.tag != previous %]
1024 [% IF previous != "" %]
1027 [% previous = innerloo.tag %]
1028 [% IF ( innerloo.repeatable ) %]
1029 <ul class="sortable_field">
1034 [% IF ( innerloo.repeatable ) %]
1035 <li class="tag sortable_tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1037 <li class="tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1039 <div class="tag_title" id="div_indicator_tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1040 [% IF advancedMARCEditor %]
1041 <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>
1043 <span class="tagnum" title="[% innerloo.tag_lib | html %]">[% innerloo.tag | html %]</span>
1044 <a href="#" class="marcdocs" onclick="PopupMARCFieldDoc('[% innerloo.tag | html %]'); return false;"> ?</a>
1047 [% IF ( innerloo.fixedfield ) %]
1050 class="indicator flat"
1051 style="display:none;"
1052 name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1055 value="[% innerloo.indicator1 | html %]" />
1058 class="indicator flat"
1059 style="display:none;"
1060 name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1063 value="[% innerloo.indicator2 | html %]" />
1067 class="indicator flat"
1068 name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1071 value="[% innerloo.indicator1 | html %]" />
1074 class="indicator flat"
1075 name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1078 value="[% innerloo.indicator2 | html %]" />
1079 [% END # /IF innerloo.fixedfield %] -
1081 [% UNLESS advancedMARCEditor %]
1082 <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>
1085 <span class="field_controls">
1086 [% IF ( innerloo.repeatable ) %]
1087 <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">
1088 <img src="[% interface | html %]/[% theme | html %]/img/repeat-tag.png" alt="Repeat this Tag" />
1091 <a href="#" tabindex="1" class="buttonMinus" onclick="UnCloneField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;" title="Delete this Tag">
1092 <img src="[% interface | html %]/[% theme | html %]/img/delete-tag.png" alt="Delete this Tag" />
1094 </span> <!-- /.field_controls -->
1095 </div> <!-- /div.tag_title -->
1097 <ul class="sortable_subfield">
1098 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
1099 <!-- One line on the marc editor -->
1100 <li class="subfield_line" style="[% subfield_loo.visibility | html %]" id="subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]">
1101 <div class="subfieldcode">
1103 title="[% subfield_loo.marc_lib | $raw %]"
1104 style=" [% IF ( subfield_loo.fixedfield ) %]display:none; [% END %]border:0;"
1105 name="tag_[% subfield_loo.tag | html %]_code_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]"
1106 value="[% subfield_loo.subfield | html %]"
1112 [% UNLESS advancedMARCEditor %]
1113 [% IF ( subfield_loo.mandatory ) %]
1114 <div class="subfield subfield_mandatory">
1115 [% ELSIF ( subfield_loo.important ) %]
1116 <div class="subfield subfield_important">
1118 <div class="subfield">
1120 [% IF ( subfield_loo.fixedfield ) %]
1121 <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">
1123 <label for="tag_[% subfield_loo.tag | html %]_subfield_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]" class="labelsubfield">
1125 [% subfield_loo.marc_lib | $raw %]
1130 [% SET mv = subfield_loo.marc_value %]
1131 <div id="field_marceditor[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]" class="field_marceditor">
1132 [% IF ( mv.type == 'text' ) %]
1133 [% IF ( mv.readonly == 1 ) %]
1134 <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" />
1136 <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 -%]" />
1139 [% ELSIF ( mv.type == 'text_complex' ) %]
1140 <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 -%]" />
1141 [% mv.javascript | $raw %]
1142 [% ELSIF ( mv.type == 'hidden' ) %]
1143 <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 -%]" />
1144 [% ELSIF ( mv.type == 'textarea' ) %]
1145 <textarea cols="70" rows="4" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" class="input_marceditor" tabindex="1">[%- mv.value | html -%]</textarea>
1146 [% ELSIF ( mv.type == 'select' ) %]
1147 [% IF mv.category AND CAN_user_parameters_manage_auth_values %]
1148 <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor" id="[%- mv.id | html -%]" data-category="[% mv.category | html %]">
1150 <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor select2" id="[%- mv.id | html -%]">
1152 [% FOREACH aval IN mv.values %]
1153 [% IF aval == mv.default %]
1154 <option value="[%- aval | html -%]" selected="selected">[%- mv.labels.$aval | html -%]</option>
1156 <option value="[%- aval | html -%]">[%- mv.labels.$aval | html -%]</option>
1160 [% END # /IF (mv.type...) %]
1162 [% IF ( subfield_loo.mandatory ) %]
1163 <div class="subfield_loop_mandatory">
1164 <span class="required">Required</span>
1166 [% ELSIF ( subfield_loo.important ) %]
1167 <div class="subfield_loop_mandatory">
1168 <span class="important">Important</span>
1171 <div class="subfield_controls">
1172 [% IF ( mv.type == 'text' ) %]
1173 [% IF ( mv.authtype ) %]
1174 <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>
1176 [% ELSIF ( mv.type == 'text_complex' ) %]
1178 <span class="buttonDot tag_editor disabled" tabindex="-1" title="Field autofilled by plugin"></span>
1180 [% IF mv.plugin == "upload.pl" %]
1181 <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>
1183 <a href="#" id="buttonDot_[% mv.id | html %]" class="buttonDot tag_editor framework_plugin" tabindex="1" title="Tag editor">Tag editor</a>
1188 [% IF ( subfield_loo.repeatable ) %]
1189 <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;">
1190 <img src="[% interface | html %]/[% theme | html %]/img/clone-subfield.png" alt="Clone" title="Clone this subfield" />
1192 <a href="#" class="buttonMinus" tabindex="1" onclick="UnCloneField('subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]'); return false;">
1193 <img src="[% interface | html %]/[% theme | html %]/img/delete-subfield.png" alt="Delete" title="Delete this subfield" />
1197 </li> <!-- /.subfield_line -->
1198 <!-- End of the line -->
1199 [% END # /FOREACH subfield_loop %]
1200 </ul> <!-- /.sortable_subfield -->
1201 </li> <!-- /.tag.clearfix -->
1202 [% END %]<!-- if innerloo.tag -->
1203 [% END # /FOREACH BIG_LOO.innerloop %]
1204 </ul> <!-- /.sortable_field -->
1205 </div> <!-- /#tabXXX -->
1206 [% END # /FOREACH BIG_LOOP %]
1207 </div><!-- /#addbibliotabs -->
1209 [%# Fields for fast cataloging %]
1210 <input type="hidden" name="barcode" value="[% barcode | html %]" />
1211 <input type="hidden" name="branch" value="[% branch | html %]" />
1212 <input type="hidden" name="circborrowernumber" value="[% circborrowernumber | html %]" />
1213 <input type="hidden" name="stickyduedate" value="[% stickyduedate | html %]" />
1214 <input type="hidden" name="duedatespec" value="[% duedatespec | html %]" />
1215 [%# End of fields for fast cataloging %]
1216 </form> <!-- /name=f -->
1218 [% INCLUDE 'modals/cataloguing_create_av.inc' %]
1220 </div> <!-- /.col-md-10.col-md-offset-1 -->
1221 </div> <!-- /.row -->
1223 [% INCLUDE 'intranet-bottom.inc' %]