Esempio n. 1
0
/**
 * 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;
}
Esempio n. 2
0
/**
 * 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;
}
Esempio n. 3
0
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);
}