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 |
- |
|
|