Skip to content

Commit dffa093

Browse files
committed
Don't warn when segment ID is same as first segment in the group
1 parent e4903a8 commit dffa093

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

src/EDI/Interpreter.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ class Interpreter
115115
*/
116116
private $currentGroup = '';
117117

118+
/**
119+
* @var string
120+
*/
121+
private $currentGroupHeader = '';
122+
118123
/**
119124
* Split multiple messages and process
120125
*
@@ -502,6 +507,9 @@ private function processXmlGroup(\SimpleXMLElement $elm, array &$message, int &$
502507
$groupVisited = false;
503508
$newGroup = [];
504509

510+
$this->currentGroupHeader = $message[$segmentIdx][0];
511+
$this->currentGroup = $elm['id']->__toString();
512+
505513
for ($g = 0; $g < $elm['maxrepeat']; $g++) {
506514
$grouptemp = [];
507515
if ($message[$segmentIdx][0] != $elm->children()[0]['id']) {
@@ -527,8 +535,6 @@ private function processXmlGroup(\SimpleXMLElement $elm, array &$message, int &$
527535
}
528536
}
529537

530-
$this->currentGroup = $elm['id']->__toString();
531-
532538
foreach ($elm->children() as $elm2) {
533539
if ($elm2->getName() == 'group') {
534540
$this->processXmlGroup($elm2, $message, $segmentIdx, $grouptemp, $errors);
@@ -562,6 +568,9 @@ private function processXmlGroup(\SimpleXMLElement $elm, array &$message, int &$
562568
$newGroup[] = $grouptemp;
563569
}
564570

571+
$this->currentGroupHeader = '';
572+
$this->currentGroup = '';
573+
565574
if (\count($newGroup) === 0) {
566575
return;
567576
}
@@ -657,7 +666,11 @@ private function processXmlSegment(\SimpleXMLElement $elm, array &$message, int
657666

658667
// if additional segments are detected we are violating the maxrepeat attribute
659668
$loopMove = 0;
660-
while (isset($message[$segmentIdx]) && \call_user_func($this->comparisonFunction, $message[$segmentIdx+$loopMove], $elm)) {
669+
while (
670+
isset($message[$segmentIdx]) &&
671+
\call_user_func($this->comparisonFunction, $message[$segmentIdx+$loopMove], $elm) &&
672+
(string)$elm['id'] !== $this->currentGroupHeader
673+
) {
661674
$errors[] = [
662675
'text' => $this->messageTextConf['TOOMANYSEGMENTS'].($this->patchFiles ? ' (skipped)' : ''),
663676
'position' => $segmentIdx,

0 commit comments

Comments
 (0)