/**
 * Removes options and their variants by option identifier
 *
 * @param int $option_id Option identifier
 * @param int $pid Identifier of the product from which the option should be removed (for global options)
 * @return bool True on success, false otherwise
 */
function fn_delete_product_option($option_id, $pid = 0)
{
    /**
     * Adds additional actions before product option deleting
     *
     * @param int $option_id Option identifier
     * @param int $pid       Product identifier
     */
    fn_set_hook('delete_product_option_pre', $option_id, $pid);
    $option_deleted = false;
    if (!empty($option_id)) {
        $condition = fn_get_company_condition('?:product_options.company_id');
        $_otps = db_get_row("SELECT product_id, inventory FROM ?:product_options WHERE option_id = ?i {$condition}", $option_id);
        if (empty($_otps)) {
            return false;
        }
        $product_id = $_otps['product_id'];
        $option_inventory = $_otps['inventory'];
        $product_link = db_get_fields("SELECT product_id FROM ?:product_global_option_links WHERE option_id = ?i AND product_id = ?i", $option_id, $pid);
        if (empty($product_id) && !empty($product_link)) {
            // Linked option
            $option_description = db_get_field("SELECT option_name FROM ?:product_options_descriptions WHERE option_id = ?i AND lang_code = ?s", $option_id, CART_LANGUAGE);
            db_query("DELETE FROM ?:product_global_option_links WHERE product_id = ?i AND option_id = ?i", $pid, $option_id);
            fn_set_notification('W', __('warning'), __('option_unlinked', array('[option_name]' => $option_description)));
        } else {
            // Product option
            db_query("DELETE FROM ?:product_options_descriptions WHERE option_id = ?i", $option_id);
            db_query("DELETE FROM ?:product_options WHERE option_id = ?i", $option_id);
            fn_delete_product_option_variants($option_id);
        }
        if ($option_inventory == "Y" && !empty($product_id)) {
            fn_delete_product_option_combinations($product_id);
        }
        $option_deleted = true;
    }
    /**
     * Adds additional actions after product option deleting
     *
     * @param int  $option_id      Option identifier
     * @param int  $pid            Product identifier
     * @param bool $option_deleted True if option was successfully deleted, false otherwise
     */
    fn_set_hook('delete_product_option_post', $option_id, $pid, $option_deleted);
    return $option_deleted;
}
Beispiel #2
0
function fn_delete_product_option($option_id, $pid = 0)
{
    if (!empty($option_id)) {
        $condition = fn_get_company_condition();
        $_otps = db_get_row("SELECT product_id, inventory FROM ?:product_options WHERE option_id = ?i {$condition}", $option_id);
        if (empty($_otps)) {
            return false;
        }
        $product_id = $_otps['product_id'];
        $option_inventory = $_otps['inventory'];
        $product_link = db_get_fields("SELECT product_id FROM ?:product_global_option_links WHERE option_id = ?i AND product_id = ?i", $option_id, $pid);
        if (empty($product_id) && !empty($product_link)) {
            // Linked option
            $option_description = db_get_field("SELECT option_name FROM ?:product_options_descriptions WHERE option_id = ?i AND lang_code = ?s", $option_id, CART_LANGUAGE);
            db_query("DELETE FROM ?:product_global_option_links WHERE product_id = ?i AND option_id = ?i", $pid, $option_id);
            fn_set_notification('W', fn_get_lang_var('warning'), str_replace('[option_name]', $option_description, fn_get_lang_var('option_unlinked')));
        } else {
            // Product option
            $_vars = db_get_fields("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i", $option_id);
            db_query("DELETE FROM ?:product_options_descriptions WHERE option_id = ?i", $option_id);
            db_query("DELETE FROM ?:product_options WHERE option_id = ?i", $option_id);
            fn_delete_product_option_variants($option_id);
        }
        if ($option_inventory == "Y" && !empty($product_id)) {
            $c_ids = db_get_fields("SELECT combination_hash FROM ?:product_options_inventory WHERE product_id = ?i", $product_id);
            db_query("DELETE FROM ?:product_options_inventory WHERE product_id = ?i", $product_id);
            foreach ($c_ids as $c_id) {
                fn_delete_image_pairs($c_id, 'product_option', '');
            }
        }
        fn_set_hook('delete_product_option', $option_id, $pid);
        return true;
    }
    return false;
}