function fn_required_products_calculate_cart_items(&$cart, &$cart_products, $auth) { if (!empty($cart['products'])) { foreach ($cart['products'] as $key => $entry) { if (!empty($entry['product_id'])) { $ids = db_get_fields('SELECT req_prod.required_id FROM ?:product_required_products as req_prod LEFT JOIN ?:products ON req_prod.required_id = ?:products.product_id WHERE req_prod.product_id = ?i AND ?:products.status != ?s', $entry['product_id'], 'D'); if (!empty($ids)) { $have = fn_required_products_get_existent($auth, $ids); if (empty($have) || count($have) != count($ids)) { if (empty($entry['extra']['parent'])) { $cart['amount'] -= $entry['amount']; } unset($cart['products'][$key]); unset($cart_products[$key]); } } } } } }
/** * Checks required products on recalculation * * @param array $cart Array of the cart contents and user information necessary for purchase * @param array $cart_products Cart products * @param array $auth Array of user authentication data (e.g. uid, usergroup_ids, etc.) * @return bool Always true */ function fn_check_calculated_required_products(&$cart, &$cart_products, $auth) { if (!empty($cart['products'])) { foreach ($cart['products'] as $key => $entry) { if (!empty($entry['product_id'])) { $ids = fn_get_required_products_ids($entry['product_id']); if (!empty($ids)) { $have = fn_required_products_get_existent($auth, $ids, $cart); if (empty($have) || count($have) != count($ids)) { if (empty($entry['extra']['parent'])) { $cart['amount'] -= $entry['amount']; } unset($cart['products'][$key]); unset($cart_products[$key]); if (isset($cart['product_groups'])) { foreach ($cart['product_groups'] as $key_group => $group) { if (in_array($key, array_keys($group['products']))) { unset($cart['product_groups'][$key_group]['products'][$key]); } } } fn_check_calculated_required_products($cart, $cart_products, $auth); } } } } } return true; }
/** * Checks required products on recalculation * * @param array $cart Array of the cart contents and user information necessary for purchase * @param array $cart_products Cart products * @param array $auth Array of user authentication data (e.g. uid, usergroup_ids, etc.) * @return bool Always true */ function fn_check_calculated_required_products(&$cart, &$cart_products, $auth) { if (!empty($cart['products'])) { foreach ($cart['products'] as $key => $entry) { if (!empty($entry['product_id'])) { //comented the line below to avoid deletion of the main product when deleting a required // $ids = fn_get_required_products_ids($entry['product_id']); $ids = ''; if (!empty($ids)) { $have = fn_required_products_get_existent($auth, $ids); if (empty($have) || count($have) != count($ids)) { if (empty($entry['extra']['parent'])) { $cart['amount'] -= $entry['amount']; } unset($cart['products'][$key]); unset($cart_products[$key]); foreach ($cart['product_groups'] as $key_group => $group) { if (in_array($key, array_keys($group['products']))) { unset($cart['product_groups'][$key_group]['products'][$key]); } } fn_check_calculated_required_products($cart, $cart_products, $auth); } } } } } return true; }