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

Return to bug 32722