Bug 8643: Add important constraint to marc subfields
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / cataloguing / addbiblio.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE Koha %]
4 [% INCLUDE 'doc-head-open.inc' %]
5 <title>Koha &rsaquo; Cataloging &rsaquo; [% IF ( biblionumber ) %]Editing [% title | html %] (Record number [% biblionumber | html %])[% ELSE %]Add MARC record[% END %]</title>
6 [% INCLUDE 'doc-head-close.inc' %]
7 [% Asset.js("lib/hc-sticky.js") | $raw %]
8 [% Asset.js("js/cataloging.js") | $raw %]
9 [% INCLUDE 'strings.inc' %]
10 [% Asset.js("js/browser.js") | $raw %]
11 <script>
12     var browser = KOHA.browser('[% searchid | html %]', parseInt('[% biblionumber | html %]', 10));
13     browser.show();
14
15     $(window).load(function(){
16         $("#loading").hide();
17     });
18     var Sticky;
19     $(document).ready(function() {
20
21         [% IF bib_doesnt_exist %]
22             $("#addbibliotabs").hide();
23             $("#toolbar").hide();
24         [% END %]
25
26         var $tabs = $('#addbibliotabs').tabs().bind('show.ui-tabs', function(e, ui) {
27             $("#"+ui.panel.id+" input:eq(0)").focus();
28         });
29         $( "ul.sortable_field", $tabs ).sortable({
30             axis: "y",
31             containment: $("#addbibliotabs")
32         });
33         $( "ul.sortable_subfield", $tabs ).sortable({
34             axis: "y",
35             containment: "parent"
36         });
37
38         [% IF tab %]
39             link = $("a[href='#[% tab | html %]']");
40             selectTab( link );
41         [% END %]
42
43         Sticky = $("#toolbar");
44         Sticky.hcSticky({
45             stickTo: "#f",
46             stickyClass: "floating"
47         });
48
49         /* check cookie to hide/show marcdocs*/
50         if($.cookie("marcdocs_[% borrowernumber | html %]") == 'hide'){
51             toggleMARCdocLinks(false);
52         } else {
53             toggleMARCdocLinks(true);
54         }
55
56         $("#marcDocsSelect").click(function(){
57             if($.cookie("marcdocs_[% borrowernumber | html %]") == 'hide'){
58                 toggleMARCdocLinks(true);
59             } else {
60                 toggleMARCdocLinks(false);
61             }
62         });
63
64         /* check cookie to hide/show marc tags*/
65         var marctags_cookie = $.cookie("marctags_[% borrowernumber | html %]");
66         if( marctags_cookie == 'hide'){
67             toggleMARCTagLinks(false);
68         } else if( marctags_cookie == 'show'){
69             toggleMARCTagLinks(true)
70         } else {
71             [% UNLESS Koha.Preference("hide_marc") %]
72                 toggleMARCTagLinks(true)
73             [% ELSE %]
74                 toggleMARCTagLinks(false);
75             [% END %]
76         }
77
78         $("#marcTagsSelect").click(function(){
79             if( $.cookie("marctags_[% borrowernumber | html %]") == 'hide'){
80                 toggleMARCTagLinks(true)
81             } else {
82                 toggleMARCTagLinks(false);
83             }
84         });
85
86         [%# Only ask for a confirmation if it is an edit %]
87         $("#z3950search").click(function(){
88             [% IF biblionumber %]
89                 if (confirm(_("Please note that this external search could replace the current record."))){
90                     PopupZ3950();
91                 }
92             [% ELSE %]
93                 PopupZ3950();
94             [% END %]
95         });
96
97         $("#saverecord").click(function(){
98             $(".btn-group").removeClass("open");
99             onOption();
100             return false;
101         });
102
103         $("#saveandview").click(function(){
104             $(".btn-group").removeClass("open");
105             redirect("view");
106             return false;
107         });
108
109         $("#saveanditems").click(function(){
110             $(".btn-group").removeClass("open");
111             redirect("items");
112             return false;
113         });
114         $("#saveandcontinue").click(function(){
115             $(".btn-group").removeClass("open");
116             var tab = $("#addbibliotabs li.ui-tabs-active:first a").attr('href');
117             tab = tab.replace('#', '');
118             $("#current_tab").val(tab);
119             redirect("just_save", tab);
120             return false;
121         });
122
123         $( '#switcheditor' ).click( function() {
124             var breedingid = [% breedingid || "null" | html %];
125
126             if ( !confirm( breedingid ? _("This record cannot be transferred to the advanced editor. Continue?") : _("Any changes will not be saved. Continue?") ) ) return false;
127
128             $.cookie( 'catalogue_editor_[% logged_in_user.borrowernumber | html %]', 'advanced', { expires: 365, path: '/' } );
129
130             var biblionumber = [% biblionumber || "null" | html %];
131
132             if ( biblionumber ) {
133                 window.location = '/cgi-bin/koha/cataloguing/editor.pl#catalog/' + biblionumber;
134             } else {
135                 window.location = '/cgi-bin/koha/cataloguing/editor.pl';
136             }
137
138             return false;
139         } );
140         $(".change-framework").on("click", function(){
141             var frameworkcode = $(this).data("frameworkcode");
142             $("#frameworkcode").val( frameworkcode );
143             Changefwk();
144         });
145
146         $(".toolbar-tabs a").on("click",function(e){
147             e.preventDefault();
148             selectTab( $(this ) );
149         });
150
151         $(".tag_anchor").on("click", function(e){
152             e.preventDefault();
153             var toolbar_height = $("#toolbar").outerHeight();
154             $(".tag_anchor").removeClass("selected");
155             $(this).addClass("selected");
156             var link = this.href;
157             var linkid = link.substring( link.indexOf("#") + 1 );
158             var dest = $("#" + linkid );
159             var yoffset = dest.offset();
160             window.scrollTo( 0, yoffset.top - toolbar_height - 20 );
161         });
162
163     });
164
165     function selectTab( tablink ){
166         $(".toolbar-tabs li").removeClass("selected");
167         tablink.parent().addClass("selected");
168         var tabid = tablink.data("tabid");
169         $('#addbibliotabs').selectTabByID("#tab" + tabid + "XX");
170         $(".tag_anchors").removeClass("tab_selected").hide();
171         $(".tag_anchors_" + tabid ).addClass("tab_selected").show();
172     }
173
174     function redirect(dest){
175         $("#redirect").attr("value",dest);
176         return Check();
177     }
178
179     [% IF ( CAN_user_editcatalogue_edit_items ) %]
180         var onOption = function () {
181             return Check();
182         }
183     [% END %]
184
185     function confirmnotdup(redirect){
186         $("#confirm_not_duplicate").attr("value","1");
187         $("#redirect").attr("value",redirect);
188         Check();
189     }
190
191     function Dopop(link,i) {
192         defaultvalue = document.getElementById(i).value;
193         window.open(link+"&result="+defaultvalue,"valuebuilder",'width=700,height=550,toolbar=false,scrollbars=yes');
194     }
195
196     /**
197      * this function open a popup to search on z3950 server.
198      */
199     function PopupZ3950() {
200         var strQuery = GetZ3950Terms();
201         if(strQuery){
202             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');
203         }
204     }
205
206     function PopupMARCFieldDoc(field) {
207         [% IF Koha.Preference('marcfielddocurl') %]
208             var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','&quot;') | html %]";
209             docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
210             docurl = docurl.replace("{FIELD}", ""+field);
211             docurl = docurl.replace("{LANG}", "[% lang | html %]");
212             window.open(docurl);
213         [% ELSIF ( marcflavour == 'MARC21' ) %]
214             _MARC21FieldDoc(field);
215         [% ELSIF ( marcflavour == 'UNIMARC' ) %]
216             _UNIMARCFieldDoc(field);
217         [% END %]
218     }
219
220     function _MARC21FieldDoc(field) {
221         if(field == 0) {
222             window.open("http://www.loc.gov/marc/bibliographic/bdleader.html");
223         } else if (field >= 90 && field <= 99 ){
224             window.open("http://www.loc.gov/marc/bibliographic/bd09x.html");
225         } else if (field >= 590 && field <= 599 ){
226             window.open("http://www.loc.gov/marc/bibliographic/bd59x.html");
227         } else if (field >= 690 && field <= 699 ){
228             window.open("http://www.loc.gov/marc/bibliographic/bd69x.html");
229         } else if (field < 900) {
230             window.open("http://www.loc.gov/marc/bibliographic/bd" + ("000"+field).slice(-3) + ".html");
231         } else {
232             window.open("http://www.loc.gov/marc/bibliographic/bd9xx.html");
233         }
234     }
235
236     function _UNIMARCFieldDoc(field) {
237         /* http://archive.ifla.org/VI/3/p1996-1/ is an outdated version of UNIMARC, but
238            seems to be the only version available that can be linked to per tag.  More recent
239            versions of the UNIMARC standard are available on the IFLA website only as
240            PDFs!
241         */
242         var url;
243         if (field == 0) {
244             url = "http://archive.ifla.org/VI/3/p1996-1/uni.htm";
245         } else {
246             var first = field.substring(0,1);
247             url = "http://archive.ifla.org/VI/3/p1996-1/uni" + first + ".htm#";
248             if (first == 0) url = url + "b";
249             url = first == 9
250                   ? "http://archive.ifla.org/VI/3/p1996-1/uni9.htm"
251                   : url + field;
252         }
253         window.open(url);
254     }
255
256     /*
257      * Functions to hide/show marc docs and tags links
258      */
259
260     function toggleMARCdocLinks(flag){
261         if( flag === true ){
262             $(".marcdocs").show();
263             $.cookie("marcdocs_[% borrowernumber | html %]",'show', { path: "/", expires: 365 });
264             $("#marcDocsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
265         } else {
266             $(".marcdocs").hide();
267             $.cookie("marcdocs_[% borrowernumber | html %]",'hide', { path: "/", expires: 365 });
268             $("#marcDocsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
269         }
270     }
271
272     function toggleMARCTagLinks(flag){
273         if( flag === true ){
274             $(".tagnum").show();
275             $(".subfieldcode").show();
276             $.cookie("marctags_[% borrowernumber | html %]",'show', { path: "/", expires: 365 });
277             $("#marcTagsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
278         } else {
279             $(".tagnum").hide();
280             $(".subfieldcode").hide();
281             $.cookie("marctags_[% borrowernumber | html %]",'hide', { path: "/", expires: 365 });
282             $("#marcTagsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
283         }
284     }
285
286     /**
287      * check if mandatory subfields are written
288      */
289     function AreMandatoriesNotOk(){
290         var mandatories = new Array();
291         var mandatoriesfields = new Array();
292         var tab = new Array();
293         var label = new Array();
294         var flag=0;
295         var tabflag= new Array();
296         [% FOREACH BIG_LOO IN BIG_LOOP %]
297             [% FOREACH innerloo IN BIG_LOO.innerloop %]
298                 [% IF ( innerloo.mandatory ) %]
299                     mandatoriesfields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]"));
300                 [% END %]
301                 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
302                     [% IF ( subfield_loo.mandatory ) %]mandatories.push("[% subfield_loo.id | html %]");
303                         tab.push("[% BIG_LOO.number | html %]");
304                         label.push("[% subfield_loo.marc_lib | $raw %]");
305                     [% END %]
306                 [% END %]
307             [% END %]
308         [% END %]
309         var StrAlert = _("Can't save this record because the following field aren't filled:");
310         StrAlert += "\n\n";
311         for(var i=0,len=mandatories.length; i<len ; i++){
312             var tag=mandatories[i].substr(4,3);
313             var subfield=mandatories[i].substr(17,1);
314             var tagnumber=mandatories[i].substr(19,mandatories[i].lastIndexOf("_")-19);
315             if (tabflag[tag+subfield+tagnumber] ==  null) {
316             tabflag[tag+subfield+tagnumber]=new Array();
317                 tabflag[tag+subfield+tagnumber][0]=0;
318         }
319             if( tabflag[tag+subfield+tagnumber][0] != 1 && (document.getElementById(mandatories[i]) != null && ! document.getElementById(mandatories[i]).value || document.getElementById(mandatories[i]) == null)){
320                 tabflag[tag+subfield+tagnumber][0] = 0 + tabflag[tag+subfield+tagnumber] ;
321                 document.getElementById(mandatories[i]).setAttribute('class','input_marceditor noEnterSubmit subfield_not_filled');
322                 $('#' + mandatories[i]).focus();
323                 tabflag[tag+subfield+tagnumber][1]=label[i];
324                 tabflag[tag+subfield+tagnumber][2]=tab[i];
325             } else {
326                 tabflag[tag+subfield+tagnumber][0] = 1;
327             }
328         }
329         for (var tagsubfieldid in tabflag){
330             if (tabflag[tagsubfieldid][0]==0){
331                 var tag=tagsubfieldid.substr(0,3);
332                 var subfield=tagsubfieldid.substr(3,1);
333                 StrAlert += "\t* "+_("tag %s subfield %s %s in tab %s").format(tag, subfield, tabflag[tagsubfieldid][1], tabflag[tagsubfieldid][2]) + "\n";
334                 //StrAlert += "\t* "+label[i]+_(" in tab ")+tab[i]+"\n";
335                 flag=1;
336             }
337         }
338
339         /* Check for mandatories field(not subfields) */
340         for(var i=0,len=mandatoriesfields.length; i<len; i++){
341             isempty  = true;
342             arr      = mandatoriesfields[i];
343             divid    = "tag_" + arr[0] + "_" + arr[1];
344             varegexp = new RegExp("^tag_" + arr[0] + "_code_");
345
346             if(parseInt(arr[0]) >= 10){
347                 elem = document.getElementById(divid);
348                 eleminputs = elem.getElementsByTagName('input');
349
350                 for(var j=0,len2=eleminputs.length; j<len2; j++){
351
352                     if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
353                         inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
354
355                         for( var k=0; k<len2; k++){
356                             if(eleminputs[k].id.match(inputregexp) && eleminputs[k].value){
357                                 isempty = false
358                             }
359                         }
360
361                         elemselect = elem.getElementsByTagName('select');
362                         for( var k=0; k<elemselect.length; k++){
363                             if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
364                                 isempty = false
365                             }
366                         }
367                     }
368                 }
369
370                 elemtextareas = elem.getElementsByTagName('textarea');
371                 for(var j=0,len2=elemtextareas.length; j<len2; j++){
372                     // this bit assumes that the only textareas in this context would be for subfields
373                     if (elemtextareas[j].value) {
374                         isempty = false;
375                     }
376                 }
377             } else {
378                 isempty = false;
379             }
380
381             if(isempty){
382                 flag = 1;
383                     StrAlert += "\t* " + _("Field %s is mandatory, at least one of its subfields must be filled.").format(arr[0]) + "\n";
384             }
385
386         }
387
388         if(flag){
389             return StrAlert;
390         } else {
391             return flag;
392         }
393     }
394
395     /**
396      *
397      *
398      */
399     function Check(){
400         var StrAlert = AreMandatoriesNotOk();
401         if( ! StrAlert ){
402             var StrWarning = AreImportantsNotOk();
403             if (StrWarning){
404                 var r=confirm(StrWarning);
405                 if (! r){
406                     return false;
407                 }
408             }
409             document.f.submit();
410             return true;
411         } else {
412             alert(StrAlert);
413             return false;
414         }
415     }
416
417     /**
418      * check if important subfields are written
419      */
420     function AreImportantsNotOk(){
421         var importants = new Array();
422         var importantsfields = new Array();
423         var tab = new Array();
424         var label = new Array();
425         var flag=0;
426         var tabflag= new Array();
427         [% FOREACH BIG_LOO IN BIG_LOOP %]
428             [% FOREACH innerloo IN BIG_LOO.innerloop %]
429                 [% IF ( innerloo.important ) %]
430                 importantsfields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]"));
431                 [% END %]
432                 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
433                     [% IF ( subfield_loo.important ) %]importants.push("[% subfield_loo.id | html %]");
434                         tab.push("[% BIG_LOO.number | html %]");
435                         label.push("[% subfield_loo.marc_lib | $raw %]");
436                     [% END %]
437                 [% END %]
438             [% END %]
439         [% END %]
440         var StrWarning = _("A few important fields are not filled:");
441         StrWarning += "\n\n";
442         for(var i=0,len=importants.length; i<len ; i++){
443             var tag=importants[i].substr(4,3);
444             var subfield=importants[i].substr(17,1);
445             var tagnumber=importants[i].substr(19,importants[i].lastIndexOf("_")-19);
446             if (tabflag[tag+subfield+tagnumber] ==  null) {
447                 tabflag[tag+subfield+tagnumber]=new Array();
448                 tabflag[tag+subfield+tagnumber][0]=0;
449             }
450             if( tabflag[tag+subfield+tagnumber][0] != 1 && (document.getElementById(importants[i]) != null && ! document.getElementById(importants[i]).value || document.getElementById(importants[i]) == null)){
451                 tabflag[tag+subfield+tagnumber][0] = 0 + tabflag[tag+subfield+tagnumber] ;
452                 document.getElementById(importants[i]).setAttribute('class','input_marceditor noEnterSubmit important_subfield_not_filled');
453                 $('#' + importants[i]).focus();
454                 tabflag[tag+subfield+tagnumber][1]=label[i];
455                 tabflag[tag+subfield+tagnumber][2]=tab[i];
456             } else {
457                 tabflag[tag+subfield+tagnumber][0] = 1;
458             }
459         }
460         for (var tagsubfieldid in tabflag){
461             if (tabflag[tagsubfieldid][0]==0){
462                 var tag=tagsubfieldid.substr(0,3);
463                 var subfield=tagsubfieldid.substr(3,1);
464                 StrWarning += "\t* "+_("tag %s subfield %s %s in tab %s").format(tag, subfield, tabflag[tagsubfieldid][1], tabflag[tagsubfieldid][2]) + "\n";
465                 //StrAlert += "\t* "+label[i]+_(" in tab ")+tab[i]+"\n";
466                 flag=1;
467             }
468         }
469
470         /* Check for importants field(not subfields) */
471         for(var i=0,len=importantsfields.length; i<len; i++){
472             isempty  = true;
473             arr      = importantsfields[i];
474             divid    = "tag_" + arr[0] + "_" + arr[1];
475             varegexp = new RegExp("^tag_" + arr[0] + "_code_");
476
477             if(parseInt(arr[0]) >= 10){
478                 elem = document.getElementById(divid);
479                 eleminputs = elem.getElementsByTagName('input');
480                 for(var j=0,len2=eleminputs.length; j<len2; j++){
481
482                     if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
483                         inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
484
485                         for( var k=0; k<len2; k++){
486                             if(eleminputs[k].id.match(inputregexp) && eleminputs[k].value){
487                                 isempty = false
488                             }
489                         }
490
491                         elemselect = elem.getElementsByTagName('select');
492                         for( var k=0; k<elemselect.length; k++){
493                             if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
494                                 isempty = false
495                             }
496                         }
497                     }
498                 }
499
500                 elemtextareas = elem.getElementsByTagName('textarea');
501                 for(var j=0,len2=elemtextareas.length; j<len2; j++){
502                     // this bit assumes that the only textareas in this context would be for subfields
503                     if (elemtextareas[j].value) {
504                         isempty = false;
505                     }
506                 }
507             } else {
508                 isempty = false;
509             }
510
511             if(isempty){
512                 flag = 1;
513                 StrWarning += "\t* " + _("Field %s is important, at least one of its subfields must be filled.").format(arr[0]) + "\n";
514             }
515         }
516
517         StrWarning += "\n" + _("Are you sure you want to save?");
518
519         if(flag){
520             return StrWarning;
521         } else {
522             return flag;
523         }
524     }
525
526     /**
527      * check if z3950 mandatories are set or not
528      */
529     function GetZ3950Terms(){
530         var frameworkcode = document.getElementById("frameworkcode").value;
531         var strQuery = "&frameworkcode=" + frameworkcode;
532         var mandatories = new Array();
533         var mandatories_label = new Array();
534         [% FOREACH BIG_LOO IN BIG_LOOP %]
535             [% FOREACH innerloo IN BIG_LOO.innerloop %]
536                 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
537                     [% IF ( subfield_loo.z3950_mandatory ) %]
538                         mandatories.push("[% subfield_loo.id | html %]");
539                         mandatories_label.push("[% subfield_loo.z3950_mandatory | html %]");
540                     [% END %]
541                 [% END %]
542             [% END %]
543         [% END %]
544
545         for(var i=0,len=mandatories.length; i<len ; i++){
546             var field_value = document.getElementById(mandatories[i]).value;
547             if( field_value ){
548                 strQuery += "&"+mandatories_label[i]+"="+field_value;
549             }
550         }
551         return strQuery;
552     }
553
554     function Changefwk() {
555         var f = document.f;
556         f.op.value = "[% op | html %]";
557         f.biblionumber.value = "[% biblionumberdata | html %]";
558         f.changed_framework.value = "changed";
559         f.submit();
560     }
561
562 </script>
563 [% Asset.css("css/addbiblio.css") | $raw %]
564
565 [% INCLUDE 'select2.inc' %]
566 <script>
567   $(document).ready(function() {
568     $('.subfield_line select').select2();
569   });
570 </script>
571
572 </head>
573 <body id="cat_addbiblio" class="cat">
574
575    <div id="loading">
576        <div>Loading, please wait...</div>
577    </div>
578
579     [% INCLUDE 'header.inc' %]
580
581     <div id="breadcrumbs">
582         <a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo;
583         <a href="/cgi-bin/koha/cataloguing/addbooks.pl">Cataloging</a>  &rsaquo;
584         [% IF ( biblionumber ) %]
585             Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
586         [% ELSE %]
587             Add MARC record
588         [% END %]
589     </div>
590
591     <div class="main container-fluid">
592         <div class="row">
593             <div class="col-md-10 col-md-offset-1">
594
595                 <h1>
596                     [% IF ( biblionumber ) %]
597                         Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
598                     [% ELSE %]
599                         Add MARC record [% IF (circborrowernumber) %]<em>(fast cataloging)</em>[% END %]
600                     [% END %]
601                 </h1>
602
603                 [% UNLESS ( number ) %]
604                     <!-- show duplicate warning on tab 0 only -->
605                     [% IF ( duplicatebiblionumber ) %]
606                         <div class="dialog alert">
607                             <h3>Duplicate record suspected</h3>
608                             <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 %]&amp;popup=1', 'DuplicateBiblio','800','600'); return false;">[% duplicatetitle | html %] <i class="fa fa-window-restore"></i></a> ?</p>
609                             [% IF ( CAN_user_editcatalogue_edit_items ) %]
610                                 <form action="/cgi-bin/koha/cataloguing/additem.pl" method="get">
611                                     <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
612                                     <button type="submit" class="new"><i class="fa fa-fw fa-pencil"></i> Yes, edit existing items</button>
613                                 </form>
614                             [% ELSE %]
615                                 <form action="/cgi-bin/koha/catalogue/detail.pl" method="get">
616                                     <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
617                                     <input type="submit" value="Yes: View existing items" />
618                                 </form>
619                             [% END %]
620                             <form action="/cgi-bin/koha/cataloguing/addbiblio.pl" method="get">
621                                 [% IF ( CAN_user_editcatalogue_edit_items ) %]
622                                     <button type="submit" class="new" onclick="confirmnotdup('items'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
623                                 [% ELSE %]
624                                     <button type="submit" class="new" onclick="confirmnotdup('view'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
625                                 [% END %]
626                             </form>
627                         </div> <!-- /.dialog.alert -->
628                     [% END # /IF duplicatebiblionumber %]
629                 [% END # /UNLESS number %]
630
631                 [% IF ( done ) %]
632                     <script>
633                         opener.document.forms['f'].biblionumber.value=[% biblionumber | html %];
634                         opener.document.forms['f'].title.value='[% title | html %]';
635                         window.close();
636                     </script>
637                 [% ELSE %]
638                     <form method="post" name="f" id="f" action="/cgi-bin/koha/cataloguing/addbiblio.pl" onsubmit="return Check();">
639                         <input type="hidden" value="[% IF ( biblionumber ) %]view[% ELSE %]items[% END %]" id="redirect" name="redirect" />
640                         <input type="hidden" value="" id="current_tab" name="current_tab" />
641                         <input type="hidden" value="0" id="confirm_not_duplicate" name="confirm_not_duplicate" />
642                 [% END %]
643
644                 <div id="toolbar" class="btn-toolbar">
645                     [% IF CAN_user_editcatalogue_edit_items or ( frameworkcode == 'FA' and CAN_user_editcatalogue_fast_cataloging ) %]
646                         [% IF (circborrowernumber) %][%# fast cataloging must lead to items %]
647                             <!-- Action is under fast cataloging - Save button redirecting to items -->
648                             <div class="btn-group"><a href="#" id="saveanditems" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
649                         [% ELSE %]
650                             <!-- Not using fast cataloging - Display split menu -->
651                             <div class="btn-group">
652                                 <button class="btn btn-default" id="saverecord"><i class="fa fa-save"></i> Save</button>
653                                 <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
654                                 <span class="caret"></span>
655                                 </button>
656                                 <ul class="dropdown-menu">
657                                     <li><a id="saveandview" href="#">Save and view record</a></li>
658                                     <li><a id="saveanditems" href="#">Save and edit items</a></li>
659                                     <li><a id="saveandcontinue" href="#">Save and continue editing</a></li>
660                                 </ul>
661                             </div>
662                         [% END %]
663                     [% ELSE %]
664                         <!-- User cannot edit items - single button redirecting to view -->
665                         <div class="btn-group"><a href="#" id="saveandview" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
666                     [% END # /IF CAN_user_editcatalogue_edit_items %]
667
668                     [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
669                         <div class="btn-group"><a class="btn btn-default" href="#" id="z3950search"><i class="fa fa-search"></i> Z39.50/SRU search</a></div>
670                     [% END %]
671
672                     <div class="btn-group">
673                         <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> Settings <span class="caret"></span></button>
674                         <ul id="settings-menu" class="dropdown-menu">
675                             [% IF Koha.Preference( 'EnableAdvancedCatalogingEditor' ) == 1 && CAN_user_editcatalogue_advanced_editor %]
676                                 <li><a href="#" id="switcheditor">Switch to advanced editor</a></li>
677                             [% END %]
678                             [% IF marcflavour != 'NORMARC' AND NOT advancedMARCEditor %]
679                                 <li>
680                                     <a href="#" id="marcDocsSelect"><i class="fa fa-check-square-o"></i> Show MARC tag documentation links</a>
681                                 <li>
682                                     <a href="#" id="marcTagsSelect"><i class="fa fa-check-square-o"></i> Show tags</a>
683                                 </li>
684                             [% END %]
685                             <li class="dropdown-header">Change framework</li>
686                             <li>
687                                 <a href="#" class="change-framework" data-frameworkcode="">
688                                     [% IF ( frameworkcode ) %]
689                                        <i class="fa fa-fw">&nbsp;</i>
690                                     [% ELSE %]
691                                         <i class="fa fa-fw fa-check"></i>
692                                     [% END %]
693                                     Default
694                                 </a>
695                             </li>
696                             [% FOREACH framework IN frameworks%]
697                                 <li>
698                                     <a href="#" class="change-framework" data-frameworkcode="[% framework.frameworkcode | html %]">
699                                         [% IF framework.frameworkcode == frameworkcode %]
700                                             <i class="fa fa-fw fa-check"></i>
701                                         [% ELSE %]
702                                             <i class="fa fa-fw">&nbsp;</i>
703                                         [% END %]
704                                         [% framework.frameworktext | html %]
705                                     </a>
706                                 </li>
707                             [% END %]
708                         </ul> <!-- /#settings-menu -->
709                     </div> <!-- /.btn-group -->
710                     [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
711                         [% IF (biblionumber) %]
712                             [% IF ( BiblioDefaultViewmarc ) %]
713                                 <div class="btn-group">
714                                     <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
715                                 </div>
716                             [% ELSIF ( BiblioDefaultViewlabeled_marc ) %]
717                                 <div class="btn-group">
718                                     <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
719                                 </div>
720                             [% ELSIF ( BiblioDefaultViewisbd ) %]
721                                 <div class="btn-group">
722                                     <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
723                                 </div>
724                             [% ELSE %]
725                                 <div class="btn-group">
726                                     <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber |url %]">Cancel</a>
727                                 </div>
728                             [% END %]
729                         [% ELSE %]
730                             <a class="btn btn-default" id="cancel" href="/cgi-bin/koha/cataloguing/addbooks.pl">Cancel</a>
731                         [% END %]
732                     [% END # /UNLESS circborrowernumber %]
733                     <div class="toolbar-tabs-container">
734                         [% IF ( BIG_LOOP.size > 1 ) %]
735                             <ul class="toolbar-tabs">
736                                 [%- FOREACH BIG_LOO IN BIG_LOOP -%]
737                                     [% IF loop.first %]
738                                         <li class="selected">
739                                     [% ELSE %]
740                                         <li>
741                                     [% END %]
742                                         <a data-tabid="[% BIG_LOO.number | html %]" href="#tab[% BIG_LOO.number | html %]XX">[% BIG_LOO.number | html %]</a>
743                                     </li>
744                                 [%- END -%]
745                             </ul>
746                         [% END %]
747                         <ul class="tag_anchors_list">
748                             [% FOREACH BIG_LOO IN BIG_LOOP %]
749                                 [% IF loop.first %][% SET tab_selected = "tab_selected" %][% ELSE %][% SET tab_selected = "" %][% END %]
750                                 [% FOREACH innerloo IN BIG_LOO.innerloop %]
751                                     [% IF ( innerloo.tag ) %]
752                                         <li class="tag_anchors tag_anchors_[% BIG_LOO.number | html %] [% tab_selected | html %]">
753                                             <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>
754                                         </li>
755                                     [% END %]
756                                 [% END %]
757                             [% END %]
758                         </ul>
759                     </div>
760                 </div> <!-- /#toolbar.btn-toolbar -->
761
762                 [% IF bib_doesnt_exist %]
763                     <div class="dialog alert">
764                         The record you are trying to edit doesn't exist.<br>
765                         <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>.
766                     </div>
767                 [% END %]
768
769                 [% IF ( popup ) %]
770                         <input type="hidden" name="mode" value="popup" />
771                 [% END %]
772                 <input type="hidden" name="op" value="addbiblio" />
773                 <input type="hidden" id="frameworkcode" name="frameworkcode" value="[% frameworkcode | html %]" />
774                 <input type="hidden" name="biblionumber" value="[% biblionumber | html %]" />
775                 <input type="hidden" name="breedingid" value="[% breedingid | html %]" />
776                 <input type="hidden" name="changed_framework" value="" />
777
778                 <div id="addbibliotabs" class="toptabs numbered">
779                     <ul>
780                         [% FOREACH BIG_LOO IN BIG_LOOP %]
781                             <li><a href="#tab[% BIG_LOO.number | uri %]XX">[% BIG_LOO.number | html %]</a></li>
782                         [% END %]
783                     </ul>
784
785                     [% FOREACH BIG_LOO IN BIG_LOOP %]
786                         <div id="tab[% BIG_LOO.number | html %]XX">
787
788                             [% IF ( BIG_LOOP.size > 1 ) %]
789                                 <h3>Section [% BIG_LOO.number | html %]</h3>
790                             [% END %]
791                             [% previous = "" %]
792                             [% FOREACH innerloo IN BIG_LOO.innerloop %]
793                                 [% IF ( innerloo.tag ) %]
794                                 [% IF innerloo.tag != previous %]
795                                     [% IF previous != "" %]
796                                         </ul>
797                                     [% END %]
798                                     [% previous = innerloo.tag %]
799                                     [% IF ( innerloo.repeatable ) %]
800                                         <ul class="sortable_field">
801                                     [% ELSE %]
802                                         <ul>
803                                     [% END %]
804                                 [% END %]
805                                     [% IF ( innerloo.repeatable ) %]
806                                         <li class="tag sortable_tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
807                                     [% ELSE %]
808                                         <li class="tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
809                                     [% END %]
810                                         <div class="tag_title" id="div_indicator_tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
811                                             [% IF advancedMARCEditor %]
812                                                 <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>
813                                             [% ELSE %]
814                                                 <span class="tagnum" title="[% innerloo.tag_lib | html %]">[% innerloo.tag | html %]</span>
815                                                 [% IF marcflavour != 'NORMARC' %]<a href="#" class="marcdocs" onclick="PopupMARCFieldDoc('[% innerloo.tag | html %]'); return false;">&nbsp;?</a>[% END %]
816                                             [% END %]
817
818                                             [% IF ( innerloo.fixedfield ) %]
819                                                 <input type="text"
820                                                     tabindex="1"
821                                                     class="indicator flat"
822                                                     style="display:none;"
823                                                     name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
824                                                     size="1"
825                                                     maxlength="1"
826                                                     value="[% innerloo.indicator1 | html %]" />
827                                                 <input type="text"
828                                                     tabindex="1"
829                                                     class="indicator flat"
830                                                     style="display:none;"
831                                                     name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
832                                                     size="1"
833                                                     maxlength="1"
834                                                     value="[% innerloo.indicator2 | html %]" />
835                                             [% ELSE %]
836                                                 <input type="text"
837                                                     tabindex="1"
838                                                     class="indicator flat"
839                                                     name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
840                                                     size="1"
841                                                     maxlength="1"
842                                                     value="[% innerloo.indicator1 | html %]" />
843                                                 <input type="text"
844                                                     tabindex="1"
845                                                     class="indicator flat"
846                                                     name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
847                                                     size="1"
848                                                     maxlength="1"
849                                                     value="[% innerloo.indicator2 | html %]" />
850                                             [% END # /IF innerloo.fixedfield %] -
851
852                                             [% UNLESS advancedMARCEditor %]
853                                                 <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>
854                                             [% END %]
855
856                                             <span class="field_controls">
857                                                 [% IF ( innerloo.repeatable ) %]
858                                                     <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">
859                                                         <img src="[% interface | html %]/[% theme | html %]/img/repeat-tag.png" alt="Repeat this Tag" />
860                                                     </a>
861                                                 [% END %]
862                                                 <a href="#" tabindex="1" class="buttonMinus" onclick="UnCloneField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;" title="Delete this Tag">
863                                                     <img src="[% interface | html %]/[% theme | html %]/img/delete-tag.png" alt="Delete this Tag" />
864                                                 </a>
865                                             </span> <!-- /.field_controls -->
866                                         </div> <!-- /div.tag_title -->
867
868                                         <ul class="sortable_subfield">
869                                         [% FOREACH subfield_loo IN innerloo.subfield_loop %]
870                                             <!--  One line on the marc editor -->
871                                             <li class="subfield_line" style="[% subfield_loo.visibility | html %]" id="subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]">
872                                                 [% UNLESS advancedMARCEditor %]
873                                                     [% IF ( subfield_loo.fixedfield ) %]
874                                                         <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">
875                                                     [% ELSE %]
876                                                         <label for="tag_[% subfield_loo.tag | html %]_subfield_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]" class="labelsubfield">
877                                                     [% END %]
878                                                 [% END %]
879
880                                                     <span class="subfieldcode">
881                                                             <input type="text"
882                                                                 title="[% subfield_loo.marc_lib | $raw %]"
883                                                                 style=" [% IF ( subfield_loo.fixedfield ) %]display:none; [% END %]border:0;"
884                                                                 name="tag_[% subfield_loo.tag | html %]_code_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]"
885                                                                 value="[% subfield_loo.subfield | html %]"
886                                                                 size="1"
887                                                                 maxlength="1"
888                                                                 class="flat"
889                                                                 tabindex="0" />
890                                                     </span>
891
892                                                 [% UNLESS advancedMARCEditor %]
893                                                         [% IF ( subfield_loo.mandatory ) %]
894                                                             <span class="subfield subfield_mandatory">
895                                                         [% ELSIF ( subfield_loo.important ) %]
896                                                             <span class="subfield subfield_important">
897                                                         [% ELSE %]
898                                                             <span class="subfield">
899                                                         [% END %]
900                                                         [% subfield_loo.marc_lib | $raw %]
901                                                         </span>
902                                                     </label>
903                                                 [% END %]
904
905                                                 [% SET mv = subfield_loo.marc_value %]
906                                                 [% IF ( mv.type == 'text' ) %]
907                                                     [% IF ( mv.readonly == 1 ) %]
908                                                         <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" />
909                                                     [% ELSE %]
910                                                         <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 -%]" />
911                                                     [% END %]
912
913                                                     [% IF ( mv.authtype ) %]
914                                                         <span class="subfield_controls"><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></span>
915                                                     [% END %]
916                                                 [% ELSIF ( mv.type == 'text_complex' ) %]
917                                                     <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 -%]" />
918                                                     <span class="subfield_controls">
919                                                         [% IF mv.noclick %]
920                                                             <span class="buttonDot tag_editor disabled" tabindex="-1" title="Field autofilled by plugin"></span>
921                                                         [% ELSE %]
922                                                             <a href="#" id="buttonDot_[% mv.id | html %]" class="buttonDot tag_editor framework_plugin" tabindex="1" title="Tag editor">Tag editor</a>
923                                                         [% END %]
924                                                     </span>
925                                                     [% mv.javascript | $raw %]
926                                                 [% ELSIF ( mv.type == 'hidden' ) %]
927                                                     <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 -%]" />
928                                                 [% ELSIF ( mv.type == 'textarea' ) %]
929                                                     <textarea cols="70" rows="4" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" class="input_marceditor" tabindex="1">[%- mv.value | html -%]</textarea>
930                                                 [% ELSIF ( mv.type == 'select' ) %]
931                                                     <select name="[%- mv.name | html -%]" tabindex="1" size="1" class="input_marceditor" id="[%- mv.id | html -%]">
932                                                     [% FOREACH aval IN mv.values %]
933                                                         [% IF aval == mv.default %]
934                                                         <option value="[%- aval | html -%]" selected="selected">[%- mv.labels.$aval | html -%]</option>
935                                                         [% ELSE %]
936                                                         <option value="[%- aval | html -%]">[%- mv.labels.$aval | html -%]</option>
937                                                         [% END %]
938                                                     [% END %]
939                                                     </select>
940                                                 [% END  # /IF (mv.type...) %]
941                                                 [% IF ( subfield_loo.mandatory ) %]
942                                                     <span class="required">Required</span>
943                                                 [% ELSIF ( subfield_loo.important ) %]
944                                                     <span class="important">Important</span>
945                                                 [% END %]
946                                                 <span class="subfield_controls">
947                                                     [% IF ( subfield_loo.repeatable ) %]
948                                                         <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;">
949                                                             <img src="[% interface | html %]/[% theme | html %]/img/clone-subfield.png" alt="Clone" title="Clone this subfield" />
950                                                         </a>
951                                                         <a href="#" class="buttonMinus" tabindex="1" onclick="UnCloneField('subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]'); return false;">
952                                                             <img src="[% interface | html %]/[% theme | html %]/img/delete-subfield.png" alt="Delete" title="Delete this subfield" />
953                                                         </a>
954                                                     [% END %]
955                                                 </span>
956                                             </li> <!-- /.subfield_line -->
957                                             <!-- End of the line -->
958                                         [% END # /FOREACH subfield_loop %]
959                                         </ul> <!--  /.sortable_subfield -->
960                                     </li> <!-- /.tag.clearfix -->
961                                 [% END %]<!-- if innerloo.tag -->
962                             [% END # /FOREACH BIG_LOO.innerloop %]
963                             </ul> <!--  /.sortable_field -->
964                         </div> <!-- /#tabXXX -->
965                     [% END # /FOREACH BIG_LOOP %]
966                 </div><!-- /#addbibliotabs -->
967
968                 [%# Fields for fast cataloging %]
969                 <input type="hidden" name="barcode" value="[% barcode | html %]" />
970                 <input type="hidden" name="branch" value="[% branch | html %]" />
971                 <input type="hidden" name="circborrowernumber" value="[% circborrowernumber | html %]" />
972                 <input type="hidden" name="stickyduedate" value="[% stickyduedate | html %]" />
973                 <input type="hidden" name="duedatespec" value="[% duedatespec | html %]" />
974                 [%# End of fields for fast cataloging %]
975             </form> <!-- /name=f -->
976         </div> <!-- /.col-md-10.col-md-offset-1 -->
977     </div> <!-- /.row -->
978
979 [% INCLUDE 'intranet-bottom.inc' %]