예제 #1
0
function fn_delete_group($group_id)
{
    db_query("DELETE FROM ?:conf_groups WHERE group_id = ?i", $group_id);
    db_query("DELETE FROM ?:conf_group_products WHERE group_id = ?i", $group_id);
    db_query("DELETE FROM ?:conf_product_groups WHERE group_id = ?i", $group_id);
    db_query("DELETE FROM ?:conf_group_descriptions WHERE group_id = ?i", $group_id);
    fn_delete_image_pairs($group_id, 'conf_group');
    // Reset all classes in this group
    db_query("UPDATE ?:conf_classes SET group_id = 0 WHERE group_id = ?i", $group_id);
}
         $inventory_ids[] = $i['combination_hash'];
     }
     fn_attach_aditional_image_pairs('product_option_add_additional', 'product_option', 0, CART_LANGUAGE, $inventory_ids);
     if (!empty($_REQUEST['inventory'])) {
         foreach ($_REQUEST['inventory'] as $k => $v) {
             db_query("UPDATE ?:product_options_inventory SET ?u WHERE combination_hash = ?s", $v, $k);
             if ($inventory[$k]['amount'] <= 0 && $v['amount'] > 0) {
                 fn_send_product_notifications($_REQUEST['product_id']);
             }
         }
     }
     $suffix = ".inventory?product_id={$_REQUEST['product_id']}";
 }
 if ($mode == 'm_delete_combinations') {
     foreach ($_REQUEST['combination_hashes'] as $v) {
         fn_delete_image_pairs($v, 'product_option');
         db_query("DELETE FROM ?:product_options_inventory WHERE combination_hash = ?i", $v);
     }
     $suffix = ".inventory?product_id={$_REQUEST['product_id']}";
 }
 // Apply global options to the selected products
 if ($mode == 'apply') {
     if (!empty($_REQUEST['apply_options']['options'])) {
         $_data = $_REQUEST['apply_options'];
         foreach ($_data['options'] as $key => $value) {
             $products_ids = empty($_data['product_ids']) ? array() : explode(',', $_data['product_ids']);
             foreach ($products_ids as $k) {
                 $updated_products[$k] = db_get_row("SELECT a.product_id, a.company_id, b.product FROM ?:products as a" . " LEFT JOIN ?:product_descriptions as b ON a.product_id = b.product_id" . " AND lang_code = ?s" . " WHERE a.product_id = ?i", CART_LANGUAGE, $k);
                 if ($_data['link'] == 'N') {
                     fn_clone_product_options(0, $k, $value);
                 } else {
예제 #3
0
파일: exim.php 프로젝트: arpad9/bygmarket
/**
 * Import image pair
 *
 * @param string $prefix path prefix
 * @param string $image_file thumbanil path or filename
 * @param string $detailed_path detailed image path or filename
 * @param string $position image position
 * @param string $type pair type
 * @param int $object_id ID of object to attach images to
 * @param string $object name of object to attach images to
 * @return array|bool True if images were imported
 */
function fn_import_images($prefix, $image_file, $detailed_file, $position, $type, $object_id, $object)
{
    static $updated_products = array();
    if (!empty($object_id)) {
        // Process multilang requests
        if (!is_array($object_id)) {
            $object_id = array($object_id);
        }
        foreach ($object_id as $_id) {
            if (empty($updated_products[$_id]) && !empty($_REQUEST['import_options']['remove_images']) && $_REQUEST['import_options']['remove_images'] == 'Y') {
                $updated_products[$_id] = true;
                fn_delete_image_pairs($_id, $object, 'A');
            }
            $_REQUEST["server_import_image_icon"] = '';
            $_REQUEST["type_import_image_icon"] = '';
            // Get image alternative text if exists
            if (!empty($image_file) && strpos($image_file, '#') !== false) {
                list($image_file, $image_alt) = explode('#', $image_file);
            }
            if (!empty($detailed_file) && strpos($detailed_file, '#') !== false) {
                list($detailed_file, $detailed_alt) = explode('#', $detailed_file);
            }
            if (!empty($image_alt)) {
                preg_match_all('/\\[([A-Za-z]+?)\\]:(.*?);/', $image_alt, $matches);
                if (!empty($matches[1]) && !empty($matches[2])) {
                    $image_alt = array_combine(array_values($matches[1]), array_values($matches[2]));
                }
            }
            if (!empty($detailed_alt)) {
                preg_match_all('/\\[([A-Za-z]+?)\\]:(.*?);/', $detailed_alt, $matches);
                if (!empty($matches[1]) && !empty($matches[2])) {
                    $detailed_alt = array_combine(array_values($matches[1]), array_values($matches[2]));
                }
            }
            $type_image_detailed = strpos($detailed_file, '://') === false ? 'server' : 'url';
            $type_image_icon = strpos($image_file, '://') === false ? 'server' : 'url';
            $_REQUEST["type_import_image_icon"] = array($type_image_icon);
            $_REQUEST["type_import_image_detailed"] = array($type_image_detailed);
            $image_file = fn_find_file($prefix, $image_file);
            if ($image_file !== false) {
                if ($type_image_icon == 'url') {
                    $_REQUEST["file_import_image_icon"] = array($image_file);
                } elseif (strpos($image_file, Registry::get('config.dir.root')) === 0) {
                    $_REQUEST["file_import_image_icon"] = array(str_ireplace(fn_get_files_dir_path(), '', $image_file));
                } else {
                    fn_set_notification('E', __('error'), __('error_images_need_located_root_dir'));
                    $_REQUEST["file_import_image_detailed"] = array();
                }
            } else {
                $_REQUEST["file_import_image_icon"] = array();
            }
            $detailed_file = fn_find_file($prefix, $detailed_file);
            if ($detailed_file !== false) {
                if ($type_image_detailed == 'url') {
                    $_REQUEST["file_import_image_detailed"] = array($detailed_file);
                } elseif (strpos($detailed_file, Registry::get('config.dir.root')) === 0) {
                    $_REQUEST["file_import_image_detailed"] = array(str_ireplace(fn_get_files_dir_path(), '', $detailed_file));
                } else {
                    fn_set_notification('E', __('error'), __('error_images_need_located_root_dir'));
                    $_REQUEST["file_import_image_detailed"] = array();
                }
            } else {
                $_REQUEST["file_import_image_detailed"] = array();
            }
            $_REQUEST['import_image_data'] = array(array('type' => $type, 'image_alt' => empty($image_alt) ? '' : $image_alt, 'detailed_alt' => empty($detailed_alt) ? '' : $detailed_alt, 'position' => empty($position) ? 0 : $position));
            $result = fn_attach_image_pairs('import', $object, $_id);
        }
        return $result;
    }
    return false;
}
예제 #4
0
/**
 * Deletes logo by type
 * @param string $type logo type
 * @param integer $company_id - ID of company to delete logo for
 * @return bool always true
 */
function fn_delete_logo($type, $company_id = null, $style_id = '')
{
    $condition = '';
    if (!empty($company_id)) {
        $condition .= db_quote(" AND company_id = ?i", $company_id);
    }
    if (!empty($style_id)) {
        $condition .= db_quote(" AND style_id = ?s", $style_id);
    }
    $logo_ids = db_get_fields("SELECT logo_id FROM ?:logos WHERE type = ?s ?p", $type, $condition);
    foreach ($logo_ids as $logo_id) {
        fn_delete_image_pairs($logo_id, 'logos');
    }
    db_query("DELETE FROM ?:logos WHERE logo_id IN (?n)", $logo_ids);
    return true;
}
예제 #5
0
파일: func.php 프로젝트: heg-arc-ne/cscart
function fn_banners_update_banner($data, $banner_id, $lang_code = DESCR_SL)
{
    if (isset($data['timestamp'])) {
        $data['timestamp'] = fn_parse_date($data['timestamp']);
    }
    $data['localization'] = empty($data['localization']) ? '' : fn_implode_localizations($data['localization']);
    if (!empty($banner_id)) {
        db_query("UPDATE ?:banners SET ?u WHERE banner_id = ?i", $data, $banner_id);
        db_query("UPDATE ?:banner_descriptions SET ?u WHERE banner_id = ?i AND lang_code = ?s", $data, $banner_id, $lang_code);
        $banner_image_id = fn_get_banner_image_id($banner_id, $lang_code);
        $banner_image_exist = !empty($banner_image_id);
        $banner_is_multilang = Registry::get('addons.banners.banner_multilang') == 'Y';
        $image_is_update = fn_banners_need_image_update();
        if ($banner_is_multilang) {
            if ($banner_image_exist && $image_is_update) {
                fn_delete_image_pairs($banner_image_id, 'promo');
                db_query("DELETE FROM ?:banner_images WHERE banner_id = ?i AND lang_code = ?s", $banner_id, $lang_code);
                $banner_image_exist = false;
            }
        } else {
            if (isset($data['url'])) {
                db_query("UPDATE ?:banner_descriptions SET url = ?s WHERE banner_id = ?i", $data['url'], $banner_id);
            }
        }
        if ($image_is_update && !$banner_image_exist) {
            $banner_image_id = db_query("INSERT INTO ?:banner_images (banner_id, lang_code) VALUE(?i, ?s)", $banner_id, $lang_code);
        }
        $pair_data = fn_attach_image_pairs('banners_main', 'promo', $banner_image_id, $lang_code);
        if (!$banner_is_multilang && !$banner_image_exist) {
            fn_banners_image_all_links($banner_id, $pair_data, $lang_code);
        }
    } else {
        $banner_id = $data['banner_id'] = db_query("REPLACE INTO ?:banners ?e", $data);
        foreach (Languages::getAll() as $data['lang_code'] => $v) {
            db_query("REPLACE INTO ?:banner_descriptions ?e", $data);
        }
        if (fn_banners_need_image_update()) {
            $data_banner_image = array('banner_id' => $banner_id, 'lang_code' => $lang_code);
            $banner_image_id = db_get_next_auto_increment_id('banner_images');
            $pair_data = fn_attach_image_pairs('banners_main', 'promo', $banner_image_id, $lang_code);
            if (!empty($pair_data)) {
                db_query("INSERT INTO ?:banner_images ?e", $data_banner_image);
                fn_banners_image_all_links($banner_id, $pair_data, $lang_code);
            }
        }
    }
    return $banner_id;
}
예제 #6
0
function fn_delete_banner_by_id($banner_id)
{
    db_query("DELETE FROM ?:banners WHERE banner_id = ?i", $banner_id);
    db_query("DELETE FROM ?:banner_descriptions WHERE banner_id = ?i", $banner_id);
    fn_set_hook('delete_banners', $banner_id);
    fn_clean_block_items('banners', $banner_id);
    fn_delete_image_pairs($banner_id, 'banner');
}
예제 #7
0
function fn_banners_install()
{
    $banners = db_get_hash_multi_array("SELECT ?:banners.banner_id, ?:banner_images.banner_image_id, ?:banner_images.lang_code FROM ?:banners LEFT JOIN ?:banner_images ON ?:banner_images.banner_id = ?:banners.banner_id", array('lang_code', 'banner_id'));
    $langs = array_keys(Languages::getAll());
    $need_clone_langs = array_diff($langs, array_keys($banners));
    if (!empty($need_clone_langs)) {
        $clone_lang = DEFAULT_LANGUAGE;
        if (in_array(DEFAULT_LANGUAGE, $need_clone_langs)) {
            $clone_lang = 'en';
        }
        foreach ($banners[$clone_lang] as $banner_id => &$banner) {
            $banner['main_pair'] = fn_get_image_pairs($banner['banner_image_id'], 'promo', 'M', true, false, $clone_lang);
        }
        foreach ($need_clone_langs as $need_clone_lang) {
            fn_banners_clone($banners[$clone_lang], $need_clone_lang);
        }
    }
    foreach ($banners['en'] as $banner_id => &$banner) {
        $banner['main_pair'] = fn_get_image_pairs($banner['banner_image_id'], 'promo', 'M', true, false, 'en');
    }
    if (!in_array('en', $langs)) {
        $banner_images_ids = db_get_fields("SELECT banner_image_id FROM ?:banner_images WHERE lang_code = ?s", 'en');
        foreach ($banner_images_ids as $banner_image_id) {
            fn_delete_image_pairs($banner_image_id, 'promo');
        }
        if (!empty($banner_images_ids)) {
            db_query("DELETE FROM ?:banner_images WHERE banner_image_id IN (?n)", $banner_images_ids);
        }
    }
    return true;
}
예제 #8
0
/**
 * Update product option
 *
 * @param array $option_data option data array
 * @param int $option_id option ID (empty if we're adding the option)
 * @param string $lang_code language code to add/update option for
 * @return int ID of the added/updated option
 */
function fn_update_product_option($option_data, $option_id = 0, $lang_code = DESCR_SL)
{
    // Add option
    if (empty($option_id)) {
        if (empty($option_data['product_id'])) {
            $option_data['product_id'] = 0;
        }
        $option_data['option_id'] = $option_id = db_query('INSERT INTO ?:product_options ?e', $option_data);
        foreach ((array) Registry::get('languages') as $option_data['lang_code'] => $_v) {
            db_query("INSERT INTO ?:product_options_descriptions ?e", $option_data);
        }
        // Update option
    } else {
        db_query("UPDATE ?:product_options SET ?u WHERE option_id = ?i", $option_data, $option_id);
        db_query("UPDATE ?:product_options_descriptions SET ?u WHERE option_id = ?i AND lang_code = ?s", $option_data, $option_id, $lang_code);
    }
    if (!empty($option_data['variants'])) {
        $var_ids = array();
        // Generate special variants structure for checkbox (2 variants, 1 hidden)
        if ($option_data['option_type'] == 'C') {
            $option_data['variants'] = array_slice($option_data['variants'], 0, 1);
            // only 1 variant should be here
            reset($option_data['variants']);
            $_k = key($option_data['variants']);
            $option_data['variants'][$_k]['position'] = 1;
            // checked variant
            $v_id = db_get_field("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i AND position = 0", $option_id);
            $option_data['variants'][] = array('position' => 0, 'variant_id' => $v_id);
        }
        $variant_images = array();
        foreach ($option_data['variants'] as $k => $v) {
            if ((!isset($v['variant_name']) || $v['variant_name'] == '') && $option_data['option_type'] != 'C') {
                continue;
            }
            // Update product options variants
            if (isset($v['modifier'])) {
                $v['modifier'] = floatval($v['modifier']);
                if (floatval($v['modifier']) > 0) {
                    $v['modifier'] = '+' . $v['modifier'];
                }
            }
            if (isset($v['weight_modifier'])) {
                $v['weight_modifier'] = floatval($v['weight_modifier']);
                if (floatval($v['weight_modifier']) > 0) {
                    $v['weight_modifier'] = '+' . $v['weight_modifier'];
                }
            }
            $v['option_id'] = $option_id;
            if (empty($v['variant_id']) || !empty($v['variant_id']) && !db_get_field("SELECT variant_id FROM ?:product_option_variants WHERE variant_id = ?i", $v['variant_id'])) {
                $v['variant_id'] = db_query("INSERT INTO ?:product_option_variants ?e", $v);
                foreach ((array) Registry::get('languages') as $v['lang_code'] => $_v) {
                    db_query("INSERT INTO ?:product_option_variants_descriptions ?e", $v);
                }
            } else {
                db_query("UPDATE ?:product_option_variants SET ?u WHERE variant_id = ?i", $v, $v['variant_id']);
                db_query("UPDATE ?:product_option_variants_descriptions SET ?u WHERE variant_id = ?i AND lang_code = ?s", $v, $v['variant_id'], $lang_code);
            }
            $var_ids[] = $v['variant_id'];
            if ($option_data['option_type'] == 'C') {
                fn_delete_image_pairs($v['variant_id'], 'variant_image');
                // force deletion of variant image for "checkbox" option
            } else {
                $variant_images[$k] = $v['variant_id'];
            }
        }
        if ($option_data['option_type'] != 'C' && !empty($variant_images)) {
            fn_attach_image_pairs('variant_image', 'variant_image', 0, $lang_code, $variant_images);
        }
        // Delete obsolete variants
        $condition = !empty($var_ids) ? db_quote('AND variant_id NOT IN (?n)', $var_ids) : '';
        $deleted_variants = db_get_fields("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i {$condition}", $option_id, $var_ids);
        if (!empty($deleted_variants)) {
            db_query("DELETE FROM ?:product_option_variants WHERE variant_id IN (?n)", $deleted_variants);
            db_query("DELETE FROM ?:product_option_variants_descriptions WHERE variant_id IN (?n)", $deleted_variants);
            foreach ($deleted_variants as $v_id) {
                fn_delete_image_pairs($v_id, 'variant_image');
            }
        }
    }
    // Rebuild exceptions
    if (!empty($option_data['product_id'])) {
        fn_update_exceptions($option_data['product_id']);
    }
    return $option_id;
}
예제 #9
0
/**
 * Deletes images when uninstalling
 */
function fn_staff_uninstall()
{
    $user_ids = db_get_fields('SELECT user_id FROM ?:staff');
    if (!empty($user_ids)) {
        foreach ($user_ids as $user_id) {
            fn_delete_image_pairs($user_id, 'staff');
        }
    }
}
예제 #10
0
function fn_delete_banner($banner_id)
{
    if (empty($banner_id)) {
        return false;
    }
    $banner_type = db_get_field("SELECT type FROM ?:aff_banners WHERE banner_id = ?i", $banner_id);
    db_query("DELETE FROM ?:aff_banner_descriptions WHERE banner_id = ?i", $banner_id);
    db_query("DELETE FROM ?:aff_banners WHERE banner_id = ?i", $banner_id);
    if ($banner_type == 'G') {
        fn_delete_image_pairs($banner_id, 'common', 'aff_banners');
    }
    return true;
}
예제 #11
0
function fn_projects_delete_page($page_id)
{
    fn_delete_image_pairs($page_id, 'projects');
    db_query("DELETE FROM ?:projects_authors WHERE page_id = ?i", $page_id);
}
예제 #12
0
function fn_blog_delete_page($page_id)
{
    fn_delete_image_pairs($page_id, 'blog');
    db_query("DELETE FROM ?:blog_authors WHERE page_id = ?i", $page_id);
}
예제 #13
0
function fn_update_product_feature($feature_data, $feature_id, $lang_code = DESCR_SL)
{
    $deleted_variants = array();
    // If this feature belongs to the group, get categories assignment from this group
    if (!empty($feature_data['parent_id'])) {
        $gdata = db_get_row("SELECT categories_path, display_on_product, display_on_catalog FROM ?:product_features WHERE feature_id = ?i", $feature_data['parent_id']);
        $feature_data = fn_array_merge($feature_data, $gdata);
    }
    if (!intval($feature_id)) {
        // check for intval as we use "0G" for new group
        $feature_data['feature_id'] = $feature_id = db_query("INSERT INTO ?:product_features ?e", $feature_data);
        foreach (Registry::get('languages') as $feature_data['lang_code'] => $_d) {
            db_query("INSERT INTO ?:product_features_descriptions ?e", $feature_data);
        }
    } else {
        db_query("UPDATE ?:product_features SET ?u WHERE feature_id = ?i", $feature_data, $feature_id);
        db_query('UPDATE ?:product_features_descriptions SET ?u WHERE feature_id = ?i AND lang_code = ?s', $feature_data, $feature_id, $lang_code);
    }
    // If this feature is group, set its categories to all children
    if ($feature_data['feature_type'] == 'G') {
        $u = array('categories_path' => $feature_data['categories_path'], 'display_on_product' => $feature_data['display_on_product'], 'display_on_catalog' => $feature_data['display_on_catalog']);
        db_query("UPDATE ?:product_features SET ?u WHERE parent_id = ?i", $u, $feature_id);
    }
    // Delete variants for simple features
    if (strpos('SMNE', $feature_data['feature_type']) === false) {
        $var_ids = db_get_fields("SELECT variant_id FROM ?:product_feature_variants WHERE feature_id = ?i", $feature_id);
        if (!empty($var_ids)) {
            db_query("DELETE FROM ?:product_feature_variants WHERE variant_id IN (?n)", $var_ids);
            db_query("DELETE FROM ?:product_feature_variant_descriptions WHERE variant_id IN (?n)", $var_ids);
            db_query("DELETE FROM ?:product_features_values WHERE variant_id IN (?n)", $var_ids);
            foreach ($var_ids as $v_id) {
                fn_delete_image_pairs($v_id, 'feature_variant');
            }
        }
    } elseif (!empty($feature_data['variants'])) {
        $var_ids = array();
        foreach ($feature_data['variants'] as $k => $v) {
            if (empty($v['variant'])) {
                continue;
            }
            $v['feature_id'] = $feature_id;
            if (empty($v['variant_id'])) {
                $v['variant_id'] = db_query("INSERT INTO ?:product_feature_variants ?e", $v);
                foreach (Registry::get('languages') as $v['lang_code'] => $_v) {
                    db_query("INSERT INTO ?:product_feature_variant_descriptions ?e", $v);
                }
            } else {
                db_query("UPDATE ?:product_feature_variants SET ?u WHERE variant_id = ?i", $v, $v['variant_id']);
                db_query("UPDATE ?:product_feature_variant_descriptions SET ?u WHERE variant_id = ?i AND lang_code = ?s", $v, $v['variant_id'], $lang_code);
            }
            if ($feature_data['feature_type'] == 'N') {
                // number
                db_query('UPDATE ?:product_features_values SET ?u WHERE variant_id = ?i AND lang_code = ?s', array('value_int' => $v['variant']), $v['variant_id'], $lang_code);
            }
            $var_ids[$k] = $v['variant_id'];
            $feature_data['variants'][$k]['variant_id'] = $v['variant_id'];
            // for addons
        }
        if (!empty($var_ids)) {
            fn_attach_image_pairs('variant_image', 'feature_variant', 0, $lang_code, $var_ids);
        }
        // Delete obsolete variants
        $deleted_variants = db_get_fields("SELECT variant_id FROM ?:product_feature_variants WHERE feature_id = ?i AND variant_id NOT IN (?n)", $feature_id, $var_ids);
        if (!empty($deleted_variants)) {
            db_query("DELETE FROM ?:product_feature_variants WHERE variant_id IN (?n)", $deleted_variants);
            db_query("DELETE FROM ?:product_feature_variant_descriptions WHERE variant_id IN (?n)", $deleted_variants);
            db_query("DELETE FROM ?:product_features_values WHERE variant_id IN (?n)", $deleted_variants);
            foreach ($deleted_variants as $v_id) {
                fn_delete_image_pairs($v_id, 'feature_variant');
            }
        }
    }
    fn_set_hook('update_product_feature', $feature_data, $feature_id, $deleted_variants, $lang_code);
    return $feature_id;
}
예제 #14
0
/**
 * Deletes options combination
 *
 * @param string $combination_hash Combination hash
 * @return bool true
 */
function fn_delete_option_combination($combination_hash)
{
    /**
     * Makes additional actions before deleting options combination
     *
     * @param string $combination_hash Combination hash
     */
    fn_set_hook('delete_option_combination_pre', $combination_hash);
    db_query("DELETE FROM ?:product_options_inventory WHERE combination_hash = ?i", $combination_hash);
    fn_delete_image_pairs($combination_hash, 'product_option');
    return true;
}
예제 #15
0
        }
    }
    if (!empty($_REQUEST['product_id'])) {
        $_options = fn_get_product_options($_REQUEST['product_id']);
        if (empty($_options)) {
            $view->display('views/product_options/manage.tpl');
        }
        exit;
    }
    return array(CONTROLLER_STATUS_REDIRECT, "product_options.manage");
} elseif ($mode == 'rebuild_combinations') {
    fn_rebuild_product_options_inventory($_REQUEST['product_id']);
    return array(CONTROLLER_STATUS_OK, "product_options.inventory?product_id={$_REQUEST['product_id']}");
} elseif ($mode == 'delete_combination') {
    if (!empty($_REQUEST['combination_hashe'])) {
        fn_delete_image_pairs($_REQUEST['combination_hashe'], 'product_option');
        db_query("DELETE FROM ?:product_options_inventory WHERE combination_hash = ?i", $_REQUEST['combination_hashe']);
    }
    return array(CONTROLLER_STATUS_REDIRECT, "product_options.inventory?product_id={$_REQUEST['product_id']}");
} elseif ($mode == 'delete_exception') {
    if (!empty($_REQUEST['exception_id'])) {
        db_query("DELETE FROM ?:product_options_exceptions WHERE exception_id = ?i", $_REQUEST['exception_id']);
    }
    return array(CONTROLLER_STATUS_REDIRECT, "product_options.exceptions?product_id={$_REQUEST['product_id']}");
}
if (!empty($_REQUEST['product_id'])) {
    $view->assign('product_id', $_REQUEST['product_id']);
}
function fn_get_product_option_data($option_id, $lang_code = DESCR_SL)
{
    $extra_variant_fields = '';
예제 #16
0
 /**
  * Deletes layout and assigned data (logos)
  * @param  int     $layout_id layout ID
  * @return boolean always true
  */
 public function delete($layout_id)
 {
     // Delete locations, containers, grids and snappings
     $location_ids = db_get_fields("SELECT location_id FROM ?:bm_locations WHERE layout_id = ?i", $layout_id);
     if (!empty($location_ids)) {
         foreach ($location_ids as $location_id) {
             Location::instance($layout_id)->remove($location_id, true);
         }
     }
     db_query("DELETE FROM ?:bm_layouts WHERE layout_id = ?i", $layout_id);
     // Delete logos
     $logo_ids = db_get_fields("SELECT logo_id FROM ?:logos WHERE layout_id = ?i", $layout_id);
     if (!empty($logo_ids)) {
         foreach ($logo_ids as $logo_id) {
             fn_delete_image_pairs($logo_id, 'logos');
         }
         db_query("DELETE FROM ?:logos WHERE logo_id IN (?n)", $logo_ids);
     }
     return true;
 }
예제 #17
0
/**
 * Updates product option
 *
 * @param array $option_data option data array
 * @param int $option_id option ID (empty if we're adding the option)
 * @param string $lang_code language code to add/update option for
 * @return int ID of the added/updated option
 */
function fn_update_product_option($option_data, $option_id = 0, $lang_code = DESCR_SL)
{
    /**
     * Changes parameters before update option data
     *
     * @param array  $option_data Option data
     * @param int    $option_id   Option identifier
     * @param string $lang_code   Two-letter language code (e.g. 'en', 'ru', etc.)
     */
    fn_set_hook('update_product_option_pre', $option_data, $option_id, $lang_code);
    // Add option
    if (empty($option_id)) {
        if (empty($option_data['product_id'])) {
            $option_data['product_id'] = 0;
        }
        $option_data['option_id'] = $option_id = db_query('INSERT INTO ?:product_options ?e', $option_data);
        foreach (fn_get_translation_languages() as $option_data['lang_code'] => $_v) {
            db_query("INSERT INTO ?:product_options_descriptions ?e", $option_data);
        }
        $create = true;
        // Update option
    } else {
        // if option inventory changed from Y to N, we should clear option combinations
        if (!empty($option_data['product_id']) && !empty($option_data['inventory']) && $option_data['inventory'] == 'N') {
            $condition = fn_get_company_condition('?:product_options.company_id');
            $old_option_inventory = db_get_field("SELECT inventory FROM ?:product_options WHERE option_id = ?i {$condition}", $option_id);
            if ($old_option_inventory == 'Y') {
                $inventory_filled = db_get_field('SELECT COUNT(*) FROM ?:product_options_inventory WHERE product_id = ?i', $option_data['product_id']);
                if ($inventory_filled) {
                    fn_delete_product_option_combinations($option_data['product_id']);
                }
            }
        }
        if (fn_allowed_for('ULTIMATE') && !empty($option_data['product_id']) && fn_ult_is_shared_product($option_data['product_id']) == 'Y') {
            $product_company_id = db_get_field('SELECT company_id FROM ?:products WHERE product_id = ?i', $option_data['product_id']);
            $option_id = fn_ult_update_shared_product_option($option_data, $option_id, Registry::ifGet('runtime.company_id', $product_company_id), $lang_code);
            if (Registry::get('runtime.company_id') && Registry::get('runtime.company_id') != $product_company_id) {
                $deleted_variants = array();
                fn_set_hook('update_product_option_post', $option_data, $option_id, $deleted_variants, $lang_code);
                return $option_id;
            }
        }
        db_query("UPDATE ?:product_options SET ?u WHERE option_id = ?i", $option_data, $option_id);
        db_query("UPDATE ?:product_options_descriptions SET ?u WHERE option_id = ?i AND lang_code = ?s", $option_data, $option_id, $lang_code);
    }
    if (fn_allowed_for('ULTIMATE')) {
        // options of shared product under the shared store hasn't a company_id. No necessary for updating.
        if (!empty($option_data['company_id'])) {
            fn_ult_update_share_object($option_id, 'product_options', $option_data['company_id']);
        }
        if (!empty($option_data['product_id'])) {
            fn_ult_share_product_option($option_id, $option_data['product_id']);
        }
    }
    if (!empty($option_data['variants'])) {
        $var_ids = array();
        // Generate special variants structure for checkbox (2 variants, 1 hidden)
        if ($option_data['option_type'] == 'C') {
            $option_data['variants'] = array_slice($option_data['variants'], 0, 1);
            // only 1 variant should be here
            reset($option_data['variants']);
            $_k = key($option_data['variants']);
            $option_data['variants'][$_k]['position'] = 1;
            // checked variant
            $v_id = db_get_field("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i AND position = 0", $option_id);
            $option_data['variants'][] = array('position' => 0, 'variant_id' => $v_id);
        }
        $variant_images = array();
        foreach ($option_data['variants'] as $k => $v) {
            if ((!isset($v['variant_name']) || $v['variant_name'] == '') && $option_data['option_type'] != 'C') {
                continue;
            }
            // Update product options variants
            if (isset($v['modifier'])) {
                $v['modifier'] = floatval($v['modifier']);
                if (floatval($v['modifier']) > 0) {
                    $v['modifier'] = '+' . $v['modifier'];
                }
            }
            if (isset($v['weight_modifier'])) {
                $v['weight_modifier'] = floatval($v['weight_modifier']);
                if (floatval($v['weight_modifier']) > 0) {
                    $v['weight_modifier'] = '+' . $v['weight_modifier'];
                }
            }
            //            if (isset($v['set_by_user'])) {
            //
            //            }
            $v['option_id'] = $option_id;
            if (empty($v['variant_id']) || !empty($v['variant_id']) && !db_get_field("SELECT variant_id FROM ?:product_option_variants WHERE variant_id = ?i", $v['variant_id'])) {
                $v['variant_id'] = db_query("INSERT INTO ?:product_option_variants ?e", $v);
                foreach (fn_get_translation_languages() as $v['lang_code'] => $_v) {
                    db_query("INSERT INTO ?:product_option_variants_descriptions ?e", $v);
                }
            } else {
                db_query("DELETE FROM ?:product_option_variants_disabled WHERE product_id=?i AND option_id =?i AND variant_id=?i", $option_data['extraProductId'], $option_id, $v['variant_id']);
                if ($v['status'] == 'Y') {
                    $vd = array('product_id' => $option_data['extraProductId'], 'option_id' => $option_id, 'variant_id' => $v['variant_id']);
                    db_query("INSERT INTO ?:product_option_variants_disabled ?e", $vd);
                    unset($v['status']);
                }
                db_query("UPDATE ?:product_option_variants SET ?u WHERE variant_id = ?i", $v, $v['variant_id']);
                db_query("UPDATE ?:product_option_variants_descriptions SET ?u WHERE variant_id = ?i AND lang_code = ?s", $v, $v['variant_id'], $lang_code);
            }
            $var_ids[] = $v['variant_id'];
            if ($option_data['option_type'] == 'C') {
                fn_delete_image_pairs($v['variant_id'], 'variant_image');
                // force deletion of variant image for "checkbox" option
            } else {
                $variant_images[$k] = $v['variant_id'];
            }
        }
        if ($option_data['option_type'] != 'C' && !empty($variant_images)) {
            fn_attach_image_pairs('variant_image', 'variant_image', 0, $lang_code, $variant_images);
        }
        // Delete obsolete variants
        $condition = !empty($var_ids) ? db_quote('AND variant_id NOT IN (?n)', $var_ids) : '';
        $deleted_variants = db_get_fields("SELECT variant_id FROM ?:product_option_variants WHERE option_id = ?i {$condition}", $option_id, $var_ids);
        if (!empty($deleted_variants)) {
            db_query("DELETE FROM ?:product_option_variants WHERE variant_id IN (?n)", $deleted_variants);
            db_query("DELETE FROM ?:product_option_variants_descriptions WHERE variant_id IN (?n)", $deleted_variants);
            foreach ($deleted_variants as $v_id) {
                fn_delete_image_pairs($v_id, 'variant_image');
            }
        }
    }
    if (!fn_allowed_for('ULTIMATE:FREE')) {
        // Rebuild exceptions
        if (!empty($create) && !empty($option_data['product_id'])) {
            fn_update_exceptions($option_data['product_id']);
        }
    }
    /**
     * Update product option (running after fn_update_product_option() function)
     *
     * @param array  $option_data      Array with option data
     * @param int    $option_id        Option identifier
     * @param array  $deleted_variants Array with deleted variants ids
     * @param string $lang_code        Language code to add/update option for
     */
    fn_set_hook('update_product_option_post', $option_data, $option_id, $deleted_variants, $lang_code);
    return $option_id;
}
예제 #18
0
function fn_delete_category($category_id, $recurse = true)
{
    // Log category deletion
    fn_log_event('categories', 'delete', array('category_id' => $category_id));
    fn_clean_block_items('categories', $category_id);
    fn_clean_block_links('categories', $category_id);
    $category_ids = array();
    $category_ids[] = $category_id;
    if (!empty($category_ids[0])) {
        // Delete all subcategories
        if ($recurse == true) {
            $id_path = db_get_field("SELECT id_path FROM ?:categories WHERE category_id = ?i", $category_id);
            $category_ids = db_get_fields("SELECT category_id FROM ?:categories WHERE category_id = ?i OR id_path LIKE ?l", $category_id, "{$id_path}/%");
        }
        foreach ($category_ids as $k => $v) {
            $category_id = $v;
            fn_clean_block_items('categories', $category_id);
            // Deleting category
            db_query("DELETE FROM ?:categories WHERE category_id = ?i", $category_id);
            db_query("DELETE FROM ?:category_descriptions WHERE category_id = ?i", $category_id);
            // Deleting additional product associations without deleting products itself
            db_query("DELETE FROM ?:products_categories WHERE category_id = ?i AND link_type = 'A'", $category_id);
            // Remove this category from features assignments
            db_query("UPDATE ?:product_features SET categories_path = ?p", fn_remove_from_set('categories_path', $v));
            // Deleting main products association with deleting products
            $products_to_delete = db_get_fields("SELECT product_id FROM ?:products_categories WHERE category_id = ?i AND link_type = 'M'", $category_id);
            if (!empty($products_to_delete)) {
                foreach ($products_to_delete as $key => $value) {
                    fn_delete_product($value);
                }
            }
            // Deleting category images
            fn_delete_image_pairs($category_id, 'category');
            // Executing delete_category functions from active addons
            fn_set_hook('delete_category', $category_id);
        }
        return $category_ids;
        // Returns ids of deleted categories
    } else {
        return false;
    }
}