View | Details | Raw Unified | Return to bug 32722
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt (-68 / +89 lines)
Lines 541-546 function PopupMARCFieldDoc(field) { Link Here
541
        }
541
        }
542
    }
542
    }
543
543
544
    function get_missing_fields(fields) {
545
        let missingFields = [];
546
        for(var i=0,len=fields.length; i<len; i++){
547
            isempty  = true;
548
            arr      = fields[i];
549
            divid    = "tag_" + arr[0] + "_" + arr[1];
550
            varegexp = new RegExp("^tag_" + arr[0] + "_code_");
551
552
            if(parseInt(arr[0]) >= 10){
553
                elem = document.getElementById(divid);
554
                eleminputs = elem.getElementsByTagName('input');
555
556
                for(var j=0,len2=eleminputs.length; j<len2; j++){
557
558
                    if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
559
                        inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
560
561
                        for( var k=0; k<len2; k++){
562
                            if( eleminputs[k].id.match(inputregexp) ){
563
                                if( eleminputs[k].value ){
564
                                    isempty = false
565
                                }
566
                            }
567
                        }
568
569
                        elemselect = elem.getElementsByTagName('select');
570
                        for( var k=0; k<elemselect.length; k++){
571
                            if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
572
                                isempty = false
573
                            }
574
                        }
575
                    }
576
                }
577
578
                elemtextareas = elem.getElementsByTagName('textarea');
579
                for(var j=0,len2=elemtextareas.length; j<len2; j++){
580
                    // this bit assumes that the only textareas in this context would be for subfields
581
                    if (elemtextareas[j].value) {
582
                        isempty = false;
583
                    }
584
                }
585
586
            } else {
587
                isempty = false;
588
            }
589
590
            if(isempty){
591
                missingFields.push(arr);
592
            }
593
        }
594
        return missingFields;
595
    }
544
    /**
596
    /**
545
     * check if mandatory/important subfields are written
597
     * check if mandatory/important subfields are written
546
     * @param mandatory true to check for mandatories, false for importants
598
     * @param mandatory true to check for mandatories, false for importants
Lines 555-560 function PopupMARCFieldDoc(field) { Link Here
555
        var StrAlert = "<div id='form-errors' class='dialog alert list'>";
607
        var StrAlert = "<div id='form-errors' class='dialog alert list'>";
556
        var notFilledClass = "subfield_not_filled";
608
        var notFilledClass = "subfield_not_filled";
557
609
610
        let allFields = {};
558
        if (mandatory) {
611
        if (mandatory) {
559
            [% FOREACH BIG_LOO IN BIG_LOOP %]
612
            [% FOREACH BIG_LOO IN BIG_LOOP %]
560
                [% FOREACH innerloo IN BIG_LOO.innerloop %]
613
                [% FOREACH innerloo IN BIG_LOO.innerloop %]
Lines 567-572 function PopupMARCFieldDoc(field) { Link Here
567
                            label.push("[% subfield_loo.marc_lib | $raw %]");
620
                            label.push("[% subfield_loo.marc_lib | $raw %]");
568
                        [% END %]
621
                        [% END %]
569
                    [% END %]
622
                    [% END %]
623
                    allFields["[% innerloo.tag %]"] = new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]");
570
                [% END %]
624
                [% END %]
571
            [% END %]
625
            [% END %]
572
            StrAlert += "<h4>" + _("The following mandatory subfields aren't filled:") + "</h4>";
626
            StrAlert += "<h4>" + _("The following mandatory subfields aren't filled:") + "</h4>";
Lines 587-593 function PopupMARCFieldDoc(field) { Link Here
587
            StrAlert += "<h4>" + _("The following important subfields aren’t filled:") + "</h4>";
641
            StrAlert += "<h4>" + _("The following important subfields aren’t filled:") + "</h4>";
588
            notFilledClass = "important_subfield_not_filled";
642
            notFilledClass = "important_subfield_not_filled";
589
        }
643
        }
590
        StrAlert += "<ul>";
591
        for(var i=0,len=subfields.length; i<len ; i++){
644
        for(var i=0,len=subfields.length; i<len ; i++){
592
            var tag=subfields[i].substr(4,3);
645
            var tag=subfields[i].substr(4,3);
593
            var subfield=subfields[i].substr(17,1);
646
            var subfield=subfields[i].substr(17,1);
Lines 614-704 function PopupMARCFieldDoc(field) { Link Here
614
            tabflag[tag+subfield+tagnumber][3] = subfields[i];
667
            tabflag[tag+subfield+tagnumber][3] = subfields[i];
615
        }
668
        }
616
669
617
        for (var tagsubfieldid in tabflag){
618
            if (tabflag[tagsubfieldid][0]==0){
619
                var tag=tagsubfieldid.substr(0,3);
620
                var subfield=tagsubfieldid.substr(3,1);
621
                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>';
622
                flag = true;
623
            }
624
        }
625
        StrAlert += "</ul>";
626
        /* Check for mandatories/importants field(not subfields) */
670
        /* Check for mandatories/importants field(not subfields) */
627
        /* Loop over array of fields identified as mandatory or
671
        /* Loop over array of fields identified as mandatory or
628
           important to see if at least one subfield is filled */
672
           important to see if at least one subfield is filled */
629
        mandatoryFields = new Object();
673
        missingMandatoryFields = new Object();
630
631
        for(var i=0,len=fields.length; i<len; i++){
632
            isempty  = true;
633
            arr      = fields[i];
634
            divid    = "tag_" + arr[0] + "_" + arr[1];
635
            varegexp = new RegExp("^tag_" + arr[0] + "_code_");
636
674
637
            if(parseInt(arr[0]) >= 10){
675
        let notEmptyFields = [];
638
                elem = document.getElementById(divid);
676
        let missingFields = get_missing_fields(fields);
639
                eleminputs = elem.getElementsByTagName('input');
677
        if ( missingFields.length > 0 ) {
640
678
            flag = true;
641
                for(var j=0,len2=eleminputs.length; j<len2; j++){
679
            missingFields.forEach(f => {
642
643
                    if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
644
                        inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
645
646
                        for( var k=0; k<len2; k++){
647
                            if( eleminputs[k].id.match(inputregexp) ){
648
                                if( eleminputs[k].value ){
649
                                    isempty = false
650
                                }
651
                            }
652
                        }
653
654
                        elemselect = elem.getElementsByTagName('select');
655
                        for( var k=0; k<elemselect.length; k++){
656
                            if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
657
                                isempty = false
658
                            }
659
                        }
660
                    }
661
                }
662
663
                elemtextareas = elem.getElementsByTagName('textarea');
664
                for(var j=0,len2=elemtextareas.length; j<len2; j++){
665
                    // this bit assumes that the only textareas in this context would be for subfields
666
                    if (elemtextareas[j].value) {
667
                        isempty = false;
668
                    }
669
                }
670
671
            } else {
672
                isempty = false;
673
            }
674
675
            if(isempty){
676
                flag = true;
677
                if (mandatory) {
680
                if (mandatory) {
678
                    mandatoryFields[ arr[0] ] = {
681
                    missingMandatoryFields[ f[0] ] = {
679
                        importance: "mandatory",
682
                        importance: "mandatory",
680
                        elemid: "div_indicator_" + divid,
683
                        elemid: "div_indicator_" + divid,
681
                        tab: arr[3]
684
                        tab: f[3]
682
                    }
685
                    }
683
                } else {
686
                } else {
684
                    mandatoryFields[ arr[0] ] = {
687
                    missingMandatoryFields[ f[0] ] = {
685
                        importance: "important",
688
                        importance: "important",
686
                        elemid: "div_indicator_" + divid,
689
                        elemid: "div_indicator_" + divid,
687
                        tab: arr[3]
690
                        tab: f[3]
688
                    }
691
                    }
689
                }
692
                }
690
            }
693
            });
694
        }
691
695
696
        StrAlert += "<ul>";
697
        for (var tagsubfieldid in tabflag){
698
            if (tabflag[tagsubfieldid][0]==0){
699
                var tag=tagsubfieldid.substr(0,3);
700
                var subfield=tagsubfieldid.substr(3,1);
701
                let alert = "<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>';
702
                if ( fields.map(f => f[0]).includes(tag) ) {
703
                    StrAlert += alert;
704
                    flag = true;
705
                } else {
706
                    let allSubfieldsMissing = get_missing_fields([allFields[tag]]).length > 0 ? false : true;
707
                    if ( allSubfieldsMissing ) {
708
                        StrAlert += alert;
709
                        flag = true;
710
                    }
711
                }
712
            }
692
        }
713
        }
714
        StrAlert += "</ul>";
693
715
694
        if( Object.entries(mandatoryFields).length > 0 ){
716
        if( Object.entries(missingMandatoryFields).length > 0 ){
695
            StrAlert += "<h4>" + _("The following fields aren't filled:") + "</h4>";
717
            StrAlert += "<h4>" + _("The following fields aren't filled:") + "</h4>";
696
            StrAlert += "<ul>";
718
            StrAlert += "<ul>";
697
            for( var prop in mandatoryFields ){
719
            for( var prop in missingMandatoryFields ){
698
                if( mandatoryFields[prop]["importance"] == "mandatory" ){
720
                if( missingMandatoryFields[prop]["importance"] == "mandatory" ){
699
                    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>';
721
                    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="' + missingMandatoryFields[prop]["tab"] + '" data-field="' + missingMandatoryFields[prop]["elemid"] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
700
                } else {
722
                } else {
701
                    StrAlert += "<li>" + _("Field %s is important, at least one of its subfields must be filled.").format(prop) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + mandatoryFields[prop]["tab"] + '" data-field="' + mandatoryFields[prop]["elemid"] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
723
                    StrAlert += "<li>" + _("Field %s is important, at least one of its subfields must be filled.").format(prop) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + missingMandatoryFields[prop]["tab"] + '" data-field="' + missingMandatoryFields[prop]["elemid"] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
702
                }
724
                }
703
            }
725
            }
704
            StrAlert += "</ul>";
726
            StrAlert += "</ul>";
705
- 

Return to bug 32722