/** * Checks and rebuilds product options inventory if necessary * * @param int $product_id Product identifier * @param int $amount Default combination amount * @return boolean Always true */ function fn_rebuild_product_options_inventory($product_id, $amount = 50) { /** * Changes parameters for rebuilding product options inventory * @param int $product_id Product identifier * @param int $amount Default combination amount */ fn_set_hook('rebuild_product_options_inventory_pre', $product_id, $amount); $_options = db_get_fields("SELECT a.option_id FROM ?:product_options as a LEFT JOIN ?:product_global_option_links as b ON a.option_id = b.option_id WHERE (a.product_id = ?i OR b.product_id = ?i) AND a.option_type IN ('S','R','C') AND a.inventory = 'Y' ORDER BY position", $product_id, $product_id); if (empty($_options)) { return; } db_query("UPDATE ?:product_options_inventory SET temp = 'Y' WHERE product_id = ?i", $product_id); foreach ($_options as $k => $option_id) { $variants[$k] = db_get_fields("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i ORDER BY position", $option_id); } $combinations = fn_look_through_variants($product_id, $amount, $_options, $variants); // Delete image pairs assigned to old combinations $hashes = db_get_fields("SELECT combination_hash FROM ?:product_options_inventory WHERE product_id = ?i AND temp = 'Y'", $product_id); foreach ($hashes as $v) { fn_delete_image_pairs($v, 'product_option'); } // Delete old combinations db_query("DELETE FROM ?:product_options_inventory WHERE product_id = ?i AND temp = 'Y'", $product_id); /** * Adds additional actions after rebuilding product options inventory * * @param int $product_id Product identifier */ fn_set_hook('rebuild_product_options_inventory_post', $product_id); return true; }
/** * Checks and rebuilds product options inventory if necessary * * @param int $product_id Product identifier * @param int $amount Default combination amount * @return boolean Always true */ function fn_rebuild_product_options_inventory($product_id, $amount = 50) { /** * Changes parameters for rebuilding product options inventory * @param int $product_id Product identifier * @param int $amount Default combination amount */ fn_set_hook('rebuild_product_options_inventory_pre', $product_id, $amount); $_defaultOptions = db_get_fields("SELECT a.option_id " . "FROM ?:product_options as a " . "LEFT JOIN ?:product_global_option_links as b ON a.option_id = b.option_id " . "LEFT JOIN ?:product_option_variants as c ON a.option_id = c.option_id " . "WHERE (a.product_id = ?i OR b.product_id = ?i) " . "AND (c.modifier>0 OR c.weight_modifier>0 OR c.point_modifier>0) " . "AND a.option_type IN ('S','R','C','Y') " . " GROUP BY a.option_id " . "ORDER BY a.position", $product_id, $product_id); //OR c.modifier<0 OR c.weight_modifier<0 OR c.point_modifier<0 if (!empty($_defaultOptions)) { $o_data_variants_disabled = db_get_array("SELECT * FROM ?:product_option_variants_disabled WHERE product_id=?i ", $product_id); $disabledVariants = array(); if (!empty($o_data_variants_disabled)) { foreach ($o_data_variants_disabled as $variant_disabled) { $disabledVariants[$variant_disabled['option_id']][] = $variant_disabled['variant_id']; } } db_query("UPDATE ?:product_options_inventory_prices SET temp = 1 WHERE product_id = ?i", $product_id); foreach ($_defaultOptions as $k1 => $option_id1) { $defaultVariants[$k1] = db_get_fields("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i AND status='A' ORDER BY position", $option_id1); if (!empty($disabledVariants[$option_id1])) { $defaultVariants[$k1] = array_diff($defaultVariants[$k1], $disabledVariants[$option_id1]); } } $combinationsDefault = fn_look_through_variants_prices($product_id, $_defaultOptions, $defaultVariants); db_query("DELETE FROM ?:product_options_inventory_prices WHERE product_id = ?i AND temp = 1", $product_id); } $_options = db_get_fields("SELECT a.option_id FROM ?:product_options as a LEFT JOIN ?:product_global_option_links as b ON a.option_id = b.option_id WHERE (a.product_id = ?i OR b.product_id = ?i) AND a.option_type IN ('S','R','C','Y') AND a.inventory = 'Y' ORDER BY position", $product_id, $product_id); if (empty($_options)) { return; } db_query("UPDATE ?:product_options_inventory SET temp = 'Y' WHERE product_id = ?i", $product_id); foreach ($_options as $k => $option_id) { $variants[$k] = db_get_fields("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i AND status='A' ORDER BY position", $option_id); if (!empty($disabledVariants[$option_id])) { $variants[$k] = array_diff($variants[$k], $disabledVariants[$option_id]); } } $combinations = fn_look_through_variants($product_id, $amount, $_options, $variants); // Delete image pairs assigned to old combinations $hashes = db_get_fields("SELECT combination_hash FROM ?:product_options_inventory WHERE product_id = ?i AND temp = 'Y'", $product_id); foreach ($hashes as $v) { fn_delete_image_pairs($v, 'product_option'); } // Delete old combinations db_query("DELETE FROM ?:product_options_inventory WHERE product_id = ?i AND temp = 'Y'", $product_id); /** * Adds additional actions after rebuilding product options inventory * * @param int $product_id Product identifier */ fn_set_hook('rebuild_product_options_inventory_post', $product_id); return true; }
function fn_rebuild_product_options_inventory($product_id, $amount = 50) { $_options = db_get_fields("SELECT a.option_id FROM ?:product_options as a LEFT JOIN ?:product_global_option_links as b ON a.option_id = b.option_id WHERE (a.product_id = ?i OR b.product_id = ?i) AND a.option_type IN ('S','R','C') AND a.inventory = 'Y' ORDER BY position", $product_id, $product_id); if (empty($_options)) { return; } db_query("UPDATE ?:product_options_inventory SET temp = 'Y' WHERE product_id = ?i", $product_id); foreach ($_options as $k => $option_id) { $variants[$k] = db_get_fields("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i ORDER BY position", $option_id); } $combinations = fn_look_through_variants($product_id, $amount, $_options, $variants, '', 0); // Delete image pairs assigned to old combinations $hashes = db_get_fields("SELECT combination_hash FROM ?:product_options_inventory WHERE product_id = ?i AND temp = 'Y'", $product_id); foreach ($hashes as $v) { fn_delete_image_pairs($v, 'product_option'); } // Delete old combinations db_query("DELETE FROM ?:product_options_inventory WHERE product_id = ?i AND temp = 'Y'", $product_id); }