/** * Gets additional products data * * @param array $products Array with products * @param array $params Array of flags which determines which data should be gathered * @return array Array of products with additional information */ function fn_gather_additional_products_data(&$products, $params) { /** * Change parameters for gathering additional products data * * @param array $products List of products * @param array $params Parameters for gathering data */ fn_set_hook('gather_additional_products_data_pre', $products, $params); if (empty($products)) { return; } // Set default values to input params $default_params = array('get_icon' => false, 'get_detailed' => false, 'get_additional' => false, 'get_options' => true, 'get_discounts' => true, 'get_features' => false, 'get_extra' => false, 'get_taxed_prices' => true, 'get_for_one_product' => !is_array(reset($products)) ? true : false, 'detailed_params' => true, 'features_display_on' => 'C'); $params = array_merge($default_params, $params); $auth =& $_SESSION['auth']; $allow_negative_amount = Registry::get('settings.General.allow_negative_amount'); $inventory_tracking = Registry::get('settings.General.inventory_tracking'); if ($params['get_for_one_product']) { $products = array($products); } $product_ids = array(); foreach ($products as $v) { $product_ids[] = $v['product_id']; } if ($params['get_icon'] || $params['get_detailed']) { $products_images = fn_get_image_pairs($product_ids, 'product', 'M', $params['get_icon'], $params['get_detailed'], CART_LANGUAGE); } if ($params['get_additional']) { $additional_images = fn_get_image_pairs($product_ids, 'product', 'A', true, true, CART_LANGUAGE); } if ($params['get_options']) { $product_options = fn_get_product_options($product_ids, CART_LANGUAGE); } else { $has_product_options = db_get_hash_array("SELECT a.option_id, a.product_id FROM ?:product_options AS a WHERE a.product_id IN (?n) AND a.status = 'A'", 'product_id', $product_ids); $has_product_options_links = db_get_hash_array("SELECT c.option_id, c.product_id FROM ?:product_global_option_links AS c LEFT JOIN ?:product_options AS a ON a.option_id = c.option_id WHERE a.status = 'A' AND c.product_id IN (?n)", 'product_id', $product_ids); } /** * Changes before gathering additional products data * * @param array $product_ids Array of product identifiers * @param array $params Parameteres for gathering data * @param array $products Array of products * @param mixed $auth Array of user authentication data * @param array $products_images Array with product main images * @param array $additional_images Array with product additional images * @param array $product_options Array with product options * @param array $has_product_options Array of flags determines if product has options * @param array $has_product_options_links Array of flags determines if product has option links */ fn_set_hook('gather_additional_products_data_params', $product_ids, $params, $products, $auth, $products_images, $additional_images, $product_options, $has_product_options, $has_product_options_links); // foreach $products foreach ($products as &$_product) { $product = $_product; $product_id = $product['product_id']; // Get images if ($params['get_icon'] == true || $params['get_detailed'] == true) { if (empty($product['main_pair']) && !empty($products_images[$product_id])) { $product['main_pair'] = reset($products_images[$product_id]); } } if ($params['get_additional'] == true) { if (empty($product['image_pairs']) && !empty($additional_images[$product_id])) { $product['image_pairs'] = $additional_images[$product_id]; } } if (!isset($product['base_price'])) { $product['base_price'] = $product['price']; // save base price (without discounts, etc...) } /** * Changes before gathering product options * * @param array $product Product data * @param mixed $auth Array of user authentication data * @param array $params Parameteres for gathering data */ fn_set_hook('gather_additional_product_data_before_options', $product, $auth, $params); // Convert product categories if (!empty($product['category_ids']) && !is_array($product['category_ids'])) { list($product['category_ids'], $product['main_category']) = fn_convert_categories($product['category_ids']); } $product['selected_options'] = empty($product['selected_options']) ? array() : $product['selected_options']; // Get product options if ($params['get_options'] && !empty($product_options[$product['product_id']])) { if (!isset($product['options_type']) || !isset($product['exceptions_type'])) { $types = db_get_row('SELECT options_type, exceptions_type FROM ?:products WHERE product_id = ?i', $product['product_id']); $product['options_type'] = $types['options_type']; $product['exceptions_type'] = $types['exceptions_type']; } if (empty($product['product_options'])) { if (!empty($product['combination'])) { $selected_options = fn_get_product_options_by_combination($product['combination']); } $product['product_options'] = !empty($selected_options) ? fn_get_selected_product_options($product['product_id'], $selected_options, CART_LANGUAGE) : $product_options[$product_id]; } $product = fn_apply_options_rules($product); if (!empty($params['get_icon']) || !empty($params['get_detailed'])) { // Get product options images if (!empty($product['combination_hash']) && !empty($product['product_options'])) { $image = fn_get_image_pairs($product['combination_hash'], 'product_option', 'M', $params['get_icon'], $params['get_detailed'], CART_LANGUAGE); if (!empty($image)) { $product['main_pair'] = $image; } } } $product['has_options'] = !empty($product['product_options']); if (!fn_allowed_for('ULTIMATE:FREE')) { $product = fn_apply_exceptions_rules($product); } //var_dump($product['product_options']);die(); //var_dump($selected_options); // Change price $selected_options = isset($product['selected_options']) ? $product['selected_options'] : array(); foreach ($product['product_options'] as $option) { if (!empty($option['disabled'])) { unset($selected_options[$option['option_id']]); } } $product['selected_options'] = $selected_options; if (empty($product['modifiers_price'])) { $product['base_modifier'] = fn_apply_options_modifiers($selected_options, $product['base_price'], 'P', array(), array('product_data' => $product)); $old_price = $product['price']; $product['price'] = fn_apply_options_modifiers($selected_options, $product['price'], 'P', array(), array('product_data' => $product)); if (empty($product['original_price'])) { $product['original_price'] = $old_price; } $product['original_price'] = fn_apply_options_modifiers($selected_options, $product['original_price'], 'P', array(), array('product_data' => $product)); $product['modifiers_price'] = $product['price'] - $old_price; } if (!empty($product['list_price'])) { $product['list_price'] = fn_apply_options_modifiers($selected_options, $product['list_price'], 'P', array(), array('product_data' => $product)); } if (!empty($product['prices']) && is_array($product['prices'])) { foreach ($product['prices'] as $pr_k => $pr_v) { $product['prices'][$pr_k]['price'] = fn_apply_options_modifiers($selected_options, $pr_v['price'], 'P', array(), array('product_data' => $product)); } } } else { $product['has_options'] = !empty($has_product_options[$product_id]) || !empty($has_product_options_links[$product_id]) ? true : false; $product['product_options'] = empty($product['product_options']) ? array() : $product['product_options']; } unset($selected_options); /** * Changes before gathering product discounts * * @param array $product Product data * @param mixed $auth Array of user authentication data * @param array $params Parameteres for gathering data */ fn_set_hook('gather_additional_product_data_before_discounts', $product, $auth, $params); // Get product discounts if ($params['get_discounts'] && !isset($product['exclude_from_calculate'])) { fn_promotion_apply('catalog', $product, $auth); if (!empty($product['prices']) && is_array($product['prices'])) { $product_copy = $product; foreach ($product['prices'] as $pr_k => $pr_v) { $product_copy['base_price'] = $product_copy['price'] = $pr_v['price']; fn_promotion_apply('catalog', $product_copy, $auth); $product['prices'][$pr_k]['price'] = $product_copy['price']; } } if (empty($product['discount']) && !empty($product['list_price']) && !empty($product['price']) && floatval($product['price']) && $product['list_price'] > $product['price']) { $product['list_discount'] = fn_format_price($product['list_price'] - $product['price']); $product['list_discount_prc'] = sprintf('%d', round($product['list_discount'] * 100 / $product['list_price'])); } } // FIXME: old product options scheme $product['discounts'] = array('A' => 0, 'P' => 0); if (!empty($product['promotions'])) { foreach ($product['promotions'] as $v) { foreach ($v['bonuses'] as $a) { if ($a['discount_bonus'] == 'to_fixed') { $product['discounts']['A'] += $a['discount']; } elseif ($a['discount_bonus'] == 'by_fixed') { $product['discounts']['A'] += $a['discount_value']; } elseif ($a['discount_bonus'] == 'to_percentage') { $product['discounts']['P'] += 100 - $a['discount_value']; } elseif ($a['discount_bonus'] == 'by_percentage') { $product['discounts']['P'] += $a['discount_value']; } } } } // Add product prices with taxes and without taxes if ($params['get_taxed_prices'] && AREA != 'A' && Registry::get('settings.Appearance.show_prices_taxed_clean') == 'Y' && $auth['tax_exempt'] != 'Y') { fn_get_taxed_and_clean_prices($product, $auth); } if ($params['get_features'] && !isset($product['product_features'])) { $product['product_features'] = fn_get_product_features_list($product, $params['features_display_on']); } if ($params['get_extra'] && !empty($product['is_edp']) && $product['is_edp'] == 'Y') { $product['agreement'] = array(fn_get_edp_agreements($product['product_id'])); } $product['qty_content'] = fn_get_product_qty_content($product, $allow_negative_amount, $inventory_tracking); if ($params['detailed_params']) { $product['detailed_params'] = empty($product['detailed_params']) ? $params : array_merge($product['detailed_params'], $params); } /** * Add additional data to product * * @param array $product Product data * @param mixed $auth Array of user authentication data * @param array $params Parameteres for gathering data */ fn_set_hook('gather_additional_product_data_post', $product, $auth, $params); $_product = $product; } // \foreach $products /** * Add additional data to products after gathering additional products data * * @param array $product_ids Array of product identifiers * @param array $params Parameteres for gathering data * @param array $products Array of products * @param mixed $auth Array of user authentication data */ fn_set_hook('gather_additional_products_data_post', $product_ids, $params, $products, $auth); if ($params['get_for_one_product'] == true) { $products = array_shift($products); } }
/** * Gets additional products data * * @param array $products Array with products * @param array $params Array of flags which determines which data should be gathered * @return array Array of products with additional information */ function fn_gather_additional_products_data(&$products, $params) { /** * Change parameters for gathering additional products data * * @param array $products List of products * @param array $params Parameters for gathering data */ fn_set_hook('gather_additional_products_data_pre', $products, $params); if (empty($products)) { return; } // Set default values to input params $default_params = array('get_icon' => false, 'get_detailed' => false, 'get_additional' => false, 'get_options' => true, 'get_discounts' => true, 'get_features' => false, 'get_extra' => false, 'get_taxed_prices' => true, 'get_for_one_product' => !is_array(reset($products)) ? true : false, 'detailed_params' => true, 'features_display_on' => 'C', 'ls_category_page' => false); $params = array_merge($default_params, $params); $auth =& $_SESSION['auth']; $allow_negative_amount = Registry::get('settings.General.allow_negative_amount'); $inventory_tracking = Registry::get('settings.General.inventory_tracking'); if ($params['get_for_one_product']) { $products = array($products); } $product_ids = array(); foreach ($products as $v) { $product_ids[] = $v['product_id']; } if ($params['get_icon'] || $params['get_detailed']) { $products_images = fn_get_image_pairs($product_ids, 'product', 'M', $params['get_icon'], $params['get_detailed'], CART_LANGUAGE); } if ($params['get_additional']) { $additional_images = fn_get_image_pairs($product_ids, 'product', 'A', true, true, CART_LANGUAGE); //uncoment me } if ($params['get_options']) { $product_options = fn_get_product_options($product_ids, CART_LANGUAGE); } else { $has_product_options = db_get_hash_array("SELECT a.option_id, a.product_id FROM ?:product_options AS a WHERE a.product_id IN (?n) AND a.status = 'A'", 'product_id', $product_ids); $has_product_options_links = db_get_hash_array("SELECT c.option_id, c.product_id FROM ?:product_global_option_links AS c LEFT JOIN ?:product_options AS a ON a.option_id = c.option_id WHERE a.status = 'A' AND c.product_id IN (?n)", 'product_id', $product_ids); } /** * Changes before gathering additional products data * * @param array $product_ids Array of product identifiers * @param array $params Parameteres for gathering data * @param array $products Array of products * @param mixed $auth Array of user authentication data * @param array $products_images Array with product main images * @param array $additional_images Array with product additional images * @param array $product_options Array with product options * @param array $has_product_options Array of flags determines if product has options * @param array $has_product_options_links Array of flags determines if product has option links */ fn_set_hook('gather_additional_products_data_params', $product_ids, $params, $products, $auth, $products_images, $additional_images, $product_options, $has_product_options, $has_product_options_links); // foreach $products foreach ($products as &$_product) { $product = $_product; //var_dump($product['product_options']);echo"<br/>"; $featureVariants = array(); $product_image_pairs_extra = array(); $product_id = $product['product_id']; // Get images if ($params['get_icon'] == true || $params['get_detailed'] == true) { if (empty($product['main_pair']) && !empty($products_images[$product_id])) { $product['main_pair'] = reset($products_images[$product_id]); } } if ($params['get_additional'] == true) { if (empty($product['image_pairs']) && !empty($additional_images[$product_id])) { $product['image_pairs'] = $additional_images[$product_id]; } //generate images for filters - saved in backend caracteristics /* if($params["ls_category_page"]) { $featureVariants = db_get_fields(" SELECT c.variant_id FROM ?:product_features AS a JOIN ?:product_feature_variants AS b ON a.feature_id = b.feature_id JOIN ?:product_features_values AS c ON b.variant_id = c.variant_id WHERE c.product_id =?i GROUP BY c.variant_id",$product_id); // //var_dump($featureVariants);echo "<br/>__<br/>"; if(!empty($featureVariants)){ $product_image_pairs_extra = fn_get_image_pairs($featureVariants, 'p_feature_var_extra', 'M', true, true, $lang_code); foreach($product_image_pairs_extra as $key12=>$product_image_pair_extra){ if(!empty($product_image_pair_extra)){ foreach($product_image_pair_extra as $k1=>$v1){ $product['image_pairs'][$k1] = $v1; $product['image_pairs'][$k1]['pair_id_class'] = 'V'.$key12; } } } } } */ } if (!isset($product['base_price'])) { $product['base_price'] = $product['price']; // save base price (without discounts, etc...) } /** * Changes before gathering product options * * @param array $product Product data * @param mixed $auth Array of user authentication data * @param array $params Parameteres for gathering data */ fn_set_hook('gather_additional_product_data_before_options', $product, $auth, $params); // Convert product categories if (!empty($product['category_ids']) && !is_array($product['category_ids'])) { list($product['category_ids'], $product['main_category']) = fn_convert_categories($product['category_ids']); } $product['selected_options'] = empty($product['selected_options']) ? array() : $product['selected_options']; //var_dump($product['selected_options']); // Get product options if ($params['get_options'] && !empty($product_options[$product['product_id']])) { if (!isset($product['options_type']) || !isset($product['exceptions_type'])) { $types = db_get_row('SELECT options_type, exceptions_type FROM ?:products WHERE product_id = ?i', $product['product_id']); $product['options_type'] = $types['options_type']; $product['exceptions_type'] = $types['exceptions_type']; } $product['product_options'] = $product_options[$product['product_id']]; if (empty($product['product_options'])) { if (!empty($product['combination'])) { $selected_options = fn_get_product_options_by_combination($product['combination']); } $product['product_options'] = !empty($selected_options) ? fn_get_selected_product_options($product['product_id'], $selected_options, CART_LANGUAGE) : $product_options[$product_id]; } $o_data_variants_disabled = db_get_array("SELECT * FROM ?:product_option_variants_disabled WHERE product_id=?i ", $product_id); if (!empty($o_data_variants_disabled)) { foreach ($o_data_variants_disabled as $o_data_variant_disabled) { if ($product['product_options'][$o_data_variant_disabled['option_id']] && $product['product_options'][$o_data_variant_disabled['option_id']]['variants'][$o_data_variant_disabled['variant_id']]) { unset($product['product_options'][$o_data_variant_disabled['option_id']]['variants'][$o_data_variant_disabled['variant_id']]); } } } $product = fn_apply_options_rules($product); if ((!empty($params['get_icon']) || !empty($params['get_detailed'])) && !$params["ls_category_page"]) { // Get product options images if (!empty($product['combination_hash']) && !empty($product['product_options'])) { $image = fn_get_image_pairs($product['combination_hash'], 'product_option', 'M', $params['get_icon'], $params['get_detailed'], CART_LANGUAGE); if (!empty($image)) { //$oldMainImage = $product['main_pair']; //$oldMainImageId = $product['pair_id']; $product['main_pair'] = $image; } $add_image = fn_get_image_pairs($product['combination_hash'], 'product_option', 'A', $params['get_icon'], $params['get_detailed'], CART_LANGUAGE); if (!empty($add_image)) { //$old_image_pairs = $product['image_pairs']; $product['image_pairs'] = $add_image; // if(!empty($image)) $product['image_pairs'][$oldMainImageId] = $oldMainImage; // foreach($old_image_pairs as $key1=>$old_image_pair){ // $product['image_pairs'][$key1] = $old_image_pair; // } } } } //var_dump($product['image_pairs']); $product_image_pairs_extra = array(); if ($_REQUEST['features_hash']) { list($av_ids, $ranges_ids, $fields_ids, $slider_vals, $fields_ids_revert) = fn_parse_features_hash($_REQUEST['features_hash']); if (empty($product_image_pairs_extra) && !empty($av_ids)) { $product_image_pairs_extra = fn_get_image_pairs($av_ids, 'p_feature_var_extra', 'M', true, true, $lang_code, $product_id, false); //var_dump($product_id);echo" ===> ";var_dump($product_image_pairs_extra);echo"<br/>______________________<br/>"; if ($params["ls_category_page"]) { //remove main picture on category page on filter search $product['main_pair'] = array(); if (!isset($product['image_pairs'])) { $product['image_pairs'] = array(); } //add to product['image_pairs'] extra images from backend/characteristics $ls_images_paths = array(); foreach ($product_image_pairs_extra as $k0 => $v0) { foreach ($v0 as $k1 => $v1) { $v1['detailed'] = $v1['icon']; if (in_array($v1['icon']["image_path"], $ls_images_paths)) { continue; } else { $ls_images_paths[] = $v1['icon']["image_path"]; } array_unshift($product['image_pairs'], $v1); } // array_unshift($product['image_pairs'],$v1); } } else { foreach ($product_image_pairs_extra as $key12 => $product_image_pair_extra) { // if(!empty($product_image_pair_extra)){ // foreach($product_image_pair_extra as $k1=>$v1){ // $product['image_pairs'][$k1] = $v1; // $product['image_pairs'][$k1]['pair_id_class'] = 'V'.$key12; // } // } $keys = array_keys($product_image_pair_extra); $product['main_pair'] = $product_image_pair_extra[$keys[0]]; } } } } //var_dump($product_id);echo" ==============> ";var_dump($product['main_pair']);echo"<br/>________________________________________________________________________________________________<br/>"; $product['has_options'] = !empty($product['product_options']); if (!fn_allowed_for('ULTIMATE:FREE')) { $product = fn_apply_exceptions_rules($product); } // Change price $selected_options = isset($product['selected_options']) ? $product['selected_options'] : array(); foreach ($product['product_options'] as $option) { if (!empty($option['disabled'])) { unset($selected_options[$option['option_id']]); } } //var_dump($product_id);echo" =======>";var_dump($selected_options);echo" ----> "; $selected_options = fn_get_new_default_product_selected_options($product_id, $selected_options); //var_dump($selected_options);echo"<br/>"; if ($product['extra'] && $product['extra']['product_options']) { $selected_options = $product['extra']['product_options']; } $product['selected_options'] = $selected_options; if (empty($product['modifiers_price'])) { $addon_price_calculation_price = fn_get_price_by_selected_options($product_id, $product, $selected_options); //var_dump($product_id);echo" ====>";var_dump($selected_options);echo" ----- ";var_dump($addon_price_calculation_price);echo"<br/>------<br/>"; if (intval($addon_price_calculation_price) > 0) { $product['base_modifier'] = 0; $product['original_price'] = $addon_price_calculation_price; $product['price'] = $addon_price_calculation_price; $product['base_price'] = $product['price']; $old_price = $product['price']; } else { $product['base_modifier'] = fn_apply_options_modifiers($selected_options, $product['base_price'], 'P', array(), array('product_data' => $product)); $old_price = $product['price']; //var_dump($product['base_modifier']); $product['price'] = fn_apply_options_modifiers($selected_options, $product['price'], 'P', array(), array('product_data' => $product)); if (empty($product['original_price'])) { $product['original_price'] = $old_price; } $product['original_price'] = fn_apply_options_modifiers($selected_options, $product['original_price'], 'P', array(), array('product_data' => $product)); } $product['modifiers_price'] = $product['price'] - $old_price; if (!empty($product['list_price'])) { $product['list_price'] = fn_apply_options_modifiers($selected_options, $product['list_price'], 'P', array(), array('product_data' => $product)); } if (!empty($product['prices']) && is_array($product['prices'])) { foreach ($product['prices'] as $pr_k => $pr_v) { $product['prices'][$pr_k]['price'] = fn_apply_options_modifiers($selected_options, $pr_v['price'], 'P', array(), array('product_data' => $product)); } } } //echo"1 ===>pid: ";var_dump($product['product_id']);echo" --->op: ";var_dump($product['original_price']);echo" =>p: ";var_dump($product['price']);echo"<br/>"; } else { $product['has_options'] = !empty($has_product_options[$product_id]) || !empty($has_product_options_links[$product_id]) ? true : false; $product['product_options'] = empty($product['product_options']) ? array() : $product['product_options']; } unset($selected_options); /** * Changes before gathering product discounts * * @param array $product Product data * @param mixed $auth Array of user authentication data * @param array $params Parameteres for gathering data */ fn_set_hook('gather_additional_product_data_before_discounts', $product, $auth, $params); //var_dump($product['exclude_from_calculate']);echo"<br/>"; // Get product discounts if ($params['get_discounts'] && !isset($product['exclude_from_calculate'])) { //echo"1 ===> ";var_dump($product['product_id']);echo" ---> ";var_dump($product['original_price']);echo" => ";var_dump($product['price']);echo"<br/>"; fn_promotion_apply('catalog', $product, $auth); //echo"2 ===> ";var_dump($product['product_id']);echo" ---> ";var_dump($product['original_price']);echo" => ";var_dump($product['price']);echo"<br/>"; //var_dump($product['product_id']);echo" ---> ";var_dump($product['promotion_use_color']);echo"<br/>___<br/>"; if (!empty($product['prices']) && is_array($product['prices'])) { $product_copy = $product; foreach ($product['prices'] as $pr_k => $pr_v) { $product_copy['base_price'] = $product_copy['price'] = $pr_v['price']; fn_promotion_apply('catalog', $product_copy, $auth); $product['prices'][$pr_k]['price'] = $product_copy['price']; } } if (empty($product['discount']) && !empty($product['list_price']) && !empty($product['price']) && floatval($product['price']) && $product['list_price'] > $product['price']) { $product['list_discount'] = fn_format_price($product['list_price'] - $product['price']); $product['list_discount_prc'] = sprintf('%d', round($product['list_discount'] * 100 / $product['list_price'])); } } //echo"2 ===> ";var_dump($product['product_id']);echo" ---> ";var_dump($product['original_price']);echo" => ";var_dump($product['price']);echo"<br/>"; // if($product['product_id']==2372){ // var_dump($product['product_id']);echo" ---> ";var_dump($product['original_price']);echo" => ";var_dump($product['price']);echo"<br/>"; // } // FIXME: old product options scheme $product['discounts'] = array('A' => 0, 'P' => 0); if (!empty($product['promotions'])) { foreach ($product['promotions'] as $v) { foreach ($v['bonuses'] as $a) { if ($a['discount_bonus'] == 'to_fixed') { $product['discounts']['A'] += $a['discount']; } elseif ($a['discount_bonus'] == 'by_fixed') { $product['discounts']['A'] += $a['discount_value']; } elseif ($a['discount_bonus'] == 'to_percentage') { $product['discounts']['P'] += 100 - $a['discount_value']; } elseif ($a['discount_bonus'] == 'by_percentage') { $product['discounts']['P'] += $a['discount_value']; } } } } //echo"2 ===> ";var_dump($product['product_id']);echo" ---> ";var_dump($product['original_price']);echo" => ";var_dump($product['price']);echo"<br/>"; // Add product prices with taxes and without taxes if ($params['get_taxed_prices'] && AREA != 'A' && Registry::get('settings.Appearance.show_prices_taxed_clean') == 'Y' && $auth['tax_exempt'] != 'Y') { fn_get_taxed_and_clean_prices($product, $auth); } if ($params['get_features'] && !isset($product['product_features'])) { $product['product_features'] = fn_get_product_features_list($product, $params['features_display_on']); } if ($params['get_extra'] && !empty($product['is_edp']) && $product['is_edp'] == 'Y') { $product['agreement'] = array(fn_get_edp_agreements($product['product_id'])); } $product['qty_content'] = fn_get_product_qty_content($product, $allow_negative_amount, $inventory_tracking); if ($params['detailed_params']) { $product['detailed_params'] = empty($product['detailed_params']) ? $params : array_merge($product['detailed_params'], $params); } /** * Add additional data to product * * @param array $product Product data * @param mixed $auth Array of user authentication data * @param array $params Parameteres for gathering data */ fn_set_hook('gather_additional_product_data_post', $product, $auth, $params); //echo"2 ===> ";var_dump($product['product_id']);echo" ---> ";var_dump($product['original_price']);echo" => ";var_dump($product['price']);echo"<br/>"; $_product = $product; } // \foreach $products /** * Add additional data to products after gathering additional products data * * @param array $product_ids Array of product identifiers * @param array $params Parameteres for gathering data * @param array $products Array of products * @param mixed $auth Array of user authentication data */ fn_set_hook('gather_additional_products_data_post', $product_ids, $params, $products, $auth); if ($params['get_for_one_product'] == true) { $products = array_shift($products); } }
function fn_gather_additional_product_data(&$product, $get_icon = false, $get_detailed = false, $get_options = true, $get_discounts = true, $get_features = false) { $auth =& $_SESSION['auth']; if ($get_icon == true || $get_detailed == true) { if (empty($product['main_pair'])) { $product['main_pair'] = fn_get_image_pairs($product['product_id'], 'product', 'M', $get_icon, $get_detailed, CART_LANGUAGE); if (Registry::get('settings.General.enable_thumbnail_new_stamp') == "Y") { $threshold = strtotime("-" . Registry::get('settings.General.new_stamp_time_threshold') . " days"); } else { $threshold = time(); } if (strtotime($product['timestamp']) > $threshold && $product['main_pair']['new'] == 0) { //new product - update thumbnails and check "new" flag $product['main_pair']['force'] = 'new'; db_query('UPDATE ?:images_links SET new=1 WHERE pair_id=?i', $product['main_pair']['pair_id']); } elseif (strtotime($product['timestamp']) < $threshold && $product['main_pair']['new'] == 1) { //old product - update thumbnails and uncheck "new" flag $product['main_pair']['force'] = 'old'; db_query('UPDATE ?:images_links SET new=0 WHERE pair_id=?i', $product['main_pair']['pair_id']); } } } if (!isset($product['base_price'])) { $product['base_price'] = $product['price']; // save base price (without discounts, etc...) } // Convert product categories if (!empty($product['category_ids']) && !is_array($product['category_ids'])) { $product['category_ids'] = fn_convert_categories($product['category_ids']); } $product['selected_options'] = empty($product['selected_options']) ? array() : $product['selected_options']; // Get product options if ($get_options == true) { if (!isset($product['options_type']) || !isset($product['exceptions_type'])) { $types = db_get_row('SELECT options_type, exceptions_type FROM ?:products WHERE product_id = ?i', $product['product_id']); $product['options_type'] = $types['options_type']; $product['exceptions_type'] = $types['exceptions_type']; } if (empty($product['product_options'])) { if (!empty($product['combination'])) { $selected_options = fn_get_product_options_by_combination($product['combination']); } $product['product_options'] = !empty($selected_options) ? fn_get_selected_product_options($product['product_id'], $selected_options, CART_LANGUAGE) : fn_get_product_options($product['product_id'], CART_LANGUAGE); } $product = fn_apply_options_rules($product); if ($get_icon == true || $get_detailed == true) { // Get product options images if (!empty($product['combination_hash'])) { $image = fn_get_image_pairs($product['combination_hash'], 'product_option', 'M', $get_icon, $get_detailed, CART_LANGUAGE); if (!empty($image)) { $product['main_pair'] = $image; } } } $product['has_options'] = !empty($product['product_options']); $product = fn_apply_exceptions_rules($product); } else { $product['has_options'] = db_get_field("SELECT COUNT(*) FROM ?:product_options as a LEFT JOIN ?:product_global_option_links as c ON c.option_id = a.option_id WHERE (a.product_id = ?i OR c.product_id = ?i) AND a.status = 'A'", $product['product_id'], $product['product_id']); } fn_set_hook('get_additional_product_data_before_discounts', $product, $auth, $get_options); // Get product discounts if ($get_discounts == true && !isset($product['exclude_from_calculate'])) { fn_promotion_apply('catalog', $product, $auth); if (!empty($product['prices']) && is_array($product['prices'])) { $product_copy = $product; foreach ($product['prices'] as $pr_k => $pr_v) { $product_copy['base_price'] = $product_copy['price'] = $pr_v['price']; fn_promotion_apply('catalog', $product_copy, $auth); $product['prices'][$pr_k]['price'] = $product_copy['price']; } } if (empty($product['discount']) && !empty($product['list_price']) && !empty($product['price']) && floatval($product['price']) && $product['list_price'] > $product['price']) { $product['list_discount'] = fn_format_price($product['list_price'] - $product['price']); $product['list_discount_prc'] = sprintf('%d', round($product['list_discount'] * 100 / $product['list_price'])); } } // FIXME: old product options scheme $product['discounts'] = array('A' => 0, 'P' => 0); if (!empty($product['promotions'])) { foreach ($product['promotions'] as $v) { foreach ($v['bonuses'] as $a) { if ($a['discount_bonus'] == 'to_fixed') { $product['discounts']['A'] += $a['discount']; } elseif ($a['discount_bonus'] == 'by_fixed') { $product['discounts']['A'] += $a['discount_value']; } elseif ($a['discount_bonus'] == 'to_percentage') { $product['discounts']['P'] += 100 - $a['discount_value']; } elseif ($a['discount_bonus'] == 'by_percentage') { $product['discounts']['P'] += $a['discount_value']; } } } } // Add product prices with taxes and without taxes if (!empty($product) && AREA != 'A' && Registry::get('settings.Appearance.show_prices_taxed_clean') == 'Y' && $auth['tax_exempt'] != 'Y') { fn_get_taxed_and_clean_prices($product, $auth); } if (!isset($product['product_features']) && $get_features == true) { $product['product_features'] = fn_get_product_features_list($product['product_id']); } if (!empty($product['is_edp']) && $product['is_edp'] == 'Y') { $product['agreement'] = array(fn_get_edp_agreements($product['product_id'])); } $qty_content = array(); if (!empty($product['qty_step'])) { $per_item = 0; if (Registry::get('settings.General.allow_negative_amount') == 'Y' && !empty($product['max_qty'])) { $amount = $product['max_qty']; } else { $amount = isset($product['in_stock']) ? $product['in_stock'] : (isset($product['inventory_amount']) ? $product['inventory_amount'] : $product['amount']); } for ($i = 1; $per_item <= $amount - $product['qty_step']; $i++) { $per_item = $product['qty_step'] * $i; if (!empty($product['list_qty_count']) && $i > $product['list_qty_count']) { break; } if (!empty($product['max_qty']) && $per_item > $product['max_qty'] || !empty($product['min_qty']) && $per_item < $product['min_qty']) { continue; } $qty_content[$i] = $per_item; } } $product['qty_content'] = $qty_content; $product['detailed_params'] = empty($product['detailed_params']) ? array() : $product['detailed_params']; $product['detailed_params'] = array_merge($product['detailed_params'], array('get_icon' => $get_icon, 'get_detailed' => $get_detailed, 'get_options' => $get_options, 'get_discounts' => $get_discounts, 'get_features' => $get_features)); fn_set_hook('get_additional_product_data', $product, $auth, $get_options); }