Neu JTL SHop - loescheWarenkorbPositionen() - löscht unter umständen nicht

broesHPB

Mitglied
9. Dezember 2020
13
1
Betrifft: 4.06 (Build: 17)[ICODE] - [ICODE]includes/warenkorb_inc.php - loescheWarenkorbPositionen():

Ist-Zustand:
Es wird return benutzt.

PHP:
foreach ($nPos_arr as $nPos) {
    //Kupons bearbeiten
    if (!isset($_SESSION['Warenkorb']->PositionenArr[$nPos])) {
        return;
    }
    if ($_SESSION['Warenkorb']->PositionenArr[$nPos]->nPosTyp != C_WARENKORBPOS_TYP_ARTIKEL &&
        $_SESSION['Warenkorb']->PositionenArr[$nPos]->nPosTyp != C_WARENKORBPOS_TYP_GRATISGESCHENK
       ) {
        return;
    }
    $cUnique = $_SESSION['Warenkorb']->PositionenArr[$nPos]->cUnique;
    // Kindartikel?
    if (strlen($cUnique) > 0 && $_SESSION['Warenkorb']->PositionenArr[$nPos]->kKonfigitem > 0) {
        return;
    }
    executeHook(HOOK_WARENKORB_LOESCHE_POSITION, [
        'nPos'     => $nPos,
        'position' => &$_SESSION['Warenkorb']->PositionenArr[$nPos]
    ]);

    if (class_exists('Upload')) {
        Upload::deleteArtikelUploads($_SESSION['Warenkorb']->PositionenArr[$nPos]->kArtikel);
    }

    $cUnique_arr[] = $cUnique;

    unset($_SESSION['Warenkorb']->PositionenArr[$nPos]);
}


Soll-Zustand
Es wird continue benutzt.

PHP:
foreach ($nPos_arr as $nPos) {
    //Kupons bearbeiten
    if (!isset($_SESSION['Warenkorb']->PositionenArr[$nPos])) {
        continue;
    }
    if ($_SESSION['Warenkorb']->PositionenArr[$nPos]->nPosTyp != C_WARENKORBPOS_TYP_ARTIKEL &&
        $_SESSION['Warenkorb']->PositionenArr[$nPos]->nPosTyp != C_WARENKORBPOS_TYP_GRATISGESCHENK
       ) {
        continue;
    }
    $cUnique = $_SESSION['Warenkorb']->PositionenArr[$nPos]->cUnique;
    // Kindartikel?
    if (strlen($cUnique) > 0 && $_SESSION['Warenkorb']->PositionenArr[$nPos]->kKonfigitem > 0) {
        continue;
    }
    executeHook(HOOK_WARENKORB_LOESCHE_POSITION, [
        'nPos'     => $nPos,
        'position' => &$_SESSION['Warenkorb']->PositionenArr[$nPos]
    ]);

    if (class_exists('Upload')) {
        Upload::deleteArtikelUploads($_SESSION['Warenkorb']->PositionenArr[$nPos]->kArtikel);
    }

    $cUnique_arr[] = $cUnique;

    unset($_SESSION['Warenkorb']->PositionenArr[$nPos]);
}

Hintergrund
Wir nutzen diese Methode und haben festgestellt, dass unter bestimmten Bedingungen, in der oben dargestellten Schleife, statt die betreffende Warenkorb-Position zu überspringen, gleich direkt aus der gesamten Funktion gesprungen wird und somit weitere zu löschende Warenkorbpositionen ignoriert werden.

Wir haben das jetzt, wie im Soll-Zustand für uns erstmal gefixt, würden hierzu Eurerseits aber noch Feedback bekommen wollen, warum da return statt continue genutzt wird (kann ja sein, dass dies einen driftigen Grund hat).

Freundliche Grüße
Hape
 

Ähnliche Themen