public function sanitizeProductidentifier(string $identifier): string
{
$propertyPart = strrchr($identifier, 'x');
$identifierWithoutPropertyId = $propertyPart ? substr($identifier, 0, strlen($propertyPart) * -1) : $identifier;
$identifierParts = str_replace('}', '{', $identifierWithoutPropertyId);
$identifierParts = explode('{', $identifierParts);
foreach ($this->contents as $contentIdentifier => $value) {
$matches = 0;
$contentIdentifierPropertyPart = strrchr($contentIdentifier, 'x');
$contentIdentifierWithoutPropertyId = $contentIdentifierPropertyPart ? substr($contentIdentifier,
0,
strlen($contentIdentifierPropertyPart)
* -1) : $contentIdentifier;
$contentIdentifierParts = str_replace('}', '{', $contentIdentifierWithoutPropertyId);
$contentIdentifierParts = explode('{', $contentIdentifierParts);
if ($propertyPart !== false && $contentIdentifierPropertyPart !== false && $propertyPart !== $contentIdentifierPropertyPart) {
continue;
}
if ($contentIdentifierParts[0] === $identifierParts[0]) {
for ($i = 1; $i < count($contentIdentifierParts); $i += 2) {
for ($j = 1; $j < count($identifierParts); $j += 2) {
if ($contentIdentifierParts[$i] === $identifierParts[$j]
&& $contentIdentifierParts[$i + 1] === $identifierParts[$j + 1]) {
$matches++;
}
}
}
}
if ($matches > 0 && $matches === (count($contentIdentifierParts) - 1) / 2) {
return $contentIdentifier;
}
}
return $identifier;
}
2 Korrekturen:
-
if ($propertyPart !== false && $contentIdentifierPropertyPart !== false && $propertyPart !== $contentIdentifierPropertyPart) {
Die Prüfung auf Eigenschaften war fehlerhaft. Die Inhaltsprüfung darf nur erfolgen, wenn beide Vergleichsartikel Eigenschaften besitzen ( !== false)
2.
if ($matches > 0 && $matches === (count($contentIdentifierParts) - 1) / 2) {
$matches ist standardmäßig 0 und wird bei jedem Attributtreffer hochgezählt. Die Rückgabe einer gefundenen Attributartikelnummer darf nur erfolgen, wenn $matches größer 0 ist. Beim aktuellen Verhalten ist die Bedingung bei Artikeln ohne Attribute immer erfüllt, wodurch der erste Artikel aus dem Warenkorb als Treffer erkennt wird.