function cw_products_from_scratch($scratch_products, $user_info, $persistent_products, $leave_info = false) { global $addons, $tables, $config, $app_main_dir; global $current_area, $current_language, $customer_id; cw_load('image'); $products = array(); if (empty($scratch_products)) { return $products; } $pids = array(); foreach ($scratch_products as $product_data) { $pids[] = $product_data['product_id']; } $int_res = cw_query_hash("SELECT * FROM {$tables['products_lng']} WHERE code = '{$current_language}' AND product_id IN ('" . implode("','", $pids) . "')", "product_id", false); unset($pids); cw_event('on_before_products_from_scratch', array(&$scratch_products)); $hash = array(); cw_load('warehouse'); foreach ($scratch_products as $product_data) { $product_id = $product_data['product_id']; $cartid = $product_data['cartid']; $amount = $product_data['amount']; $variant_id = $product_data['variant_id']; $warehouse = $product_data['warehouse_customer_id']; if (!cw_warehouse_is_customer($customer_id, $warehouse)) { continue; } if (!is_numeric($amount)) { $amount = 0; } $options = $product_data['options']; $product_options = false; $variant = array(); # kornev, TOFIX if ($addons['product_options'] && !empty($options) && is_array($options)) { if (!cw_check_product_options($product_id, $options)) { continue; } list($variant, $product_options) = cw_get_product_options_data($product_id, $options, $membership_id); if (empty($variant_id) && isset($variant['variant_id'])) { $variant_id = $variant['variant_id']; } } $fields[] = "p.*"; # kornev, supplier has got it's own prices if ($current_area != 'S') { $fields[] = "min(pq.price) as price"; } $fields[] = 'avail'; $status = cw_core_get_required_status($current_area); $products_array = cw_func_call('cw_product_get', array('id' => $product_id, 'variant_id' => $variant_id, 'amount' => $amount, 'user_account' => $user_info, 'info_type' => 8192)); //cw_query_first($sql="select ".implode(', ', $fields)." from $tables[products] as p, $tables[products_prices] as pq, $tables[products_enabled] as pe left join $tables[products_warehouses_amount] as pwa on pwa.product_id=pe.product_id and pwa.variant_id='$variant_id' and pwa.warehouse_customer_id='$warehouse' WHERE p.product_id= pe.product_id and pe.product_id=pq.product_id AND pe.status in (".implode(", ", $status).") AND pe.product_id='$product_id' AND pq.quantity<='$amount' AND pq.membership_id IN(0, '$user_info[membership_id]') AND pq.variant_id = '$variant_id' ORDER BY pq.quantity DESC"); $unlimited_products = true; if ($products_array['avail'] < $amount && in_array($current_area, array('G', 'C'))) { $unlimited_products = cw_query_first_cell("select backorder & " . ($current_area == 'G' ? 2 : 1) . " from {$tables['warehouse_divisions']} where division_id = '{$warehouse}'"); if (!$unlimited_products) { $amount = $products_array['avail']; } } if ($products_array) { $products_array = cw_array_merge($product_data, $products_array); if ($leave_info) { $products_array['price'] = abs($product_data['price']); } $products_array['warehouse_customer_id'] = $warehouse; $hash_key = $product_id . "|" . $warehouse; cw_event('on_product_from_scratch', array(&$products_array)); # # If priduct's price is 0 then use customer-defined price # $free_price = false; if ($products_array['price'] == 0) { $free_price = true; $products_array['taxed_price'] = $products_array['price'] = price_format($product_data['free_price'] ? $product_data['free_price'] : 0); } # kornev, TOFIX if ($addons['product_options'] && $options) { if (!empty($variant)) { # kornev, it's not allow to set the variant price. // unset($variant['price']); if (is_null($variant['pimage_path'])) { cw_unset($variant, "pimage_path", "pimage_x", "pimage_y"); } else { $variant['is_pimage'] = 'W'; } $products_array = cw_array_merge($products_array, $variant); } $hash_key .= "|" . $products_array['variant_id']; if ($product_options === false) { unset($product_options); } else { $variant['price'] = $products_array['price']; $variant['cost'] = $products_array['cost']; $products_array['options_surcharge'] = 0; $products_array['cost_surcharge'] = 0; if ($product_options) { foreach ($product_options as $o) { $products_array['options_surcharge'] += $o['modifier_type'] ? $products_array['price'] * $o['price_modifier'] / 100 : $o['price_modifier']; $products_array['cost_surcharge'] += $o['cost_modifier_type'] ? $products_array['cost'] * $o['cost_modifier'] / 100 : $o['cost_modifier']; } } } } if (!$unlimited_products && !$persistent_products && $products_array['avail'] - $hash[$hash_key] < $amount) { continue; } # Get thumbnail's URL (uses only if images stored in FS) $products_array['image_thumb'] = cw_image_get('products_images_thumb', $product_id); $products_array['price'] += $products_array['options_surcharge']; $products_array['cost'] += $products_array['cost_surcharge']; if ($products_array['price'] < 0) { $products_array['price'] = 0; } if ($products_array['cost'] < 0) { $products_array['cost'] = 0; } if (in_array($current_area, array('C', 'G'))) { $products_array['taxes'] = cw_get_products_taxes($products_array, $user_info, false, '', $current_area == 'G' && $customer_info['usertype'] != 'R'); if ($config['Taxes']['display_taxed_order_totals'] == 'Y') { $products_array['display_price'] = $products_array['taxed_price']; $products_array['display_net_price'] = $products_array['taxed_net_price']; } else { $products_array['display_price'] = $products_array['price']; $products_array['display_net_price'] = $products_array['net_price']; } } $products_array['total'] = $amount * $products_array['price']; $products_array['product_options'] = $product_options; $products_array['options'] = $options; $products_array['amount'] = $amount; $products_array['cartid'] = $cartid; $products_array['product_orig'] = $products_array['product']; if (isset($int_res[$product_id])) { $products_array['product'] = stripslashes($int_res[$product_id]['product']); $products_array['descr'] = stripslashes($int_res[$product_id]['descr']); $products_array['fulldescr'] = stripslashes($int_res[$product_id]['fulldescr']); cw_unset($int_res, $product_id); } if ($products_array['descr'] == strip_tags($products_array['descr'])) { $products_array['descr'] = str_replace("\n", "<br />", $products_array['descr']); } if ($products_array['fulldescr'] == strip_tags($products_array['fulldescr'])) { $products_array['fulldescr'] = str_replace("\n", "<br />", $products_array['fulldescr']); } // Order hash defines how all products in cart will be split by orders // Listen for the event and return own part of hash $order_hash = cw_event('on_build_order_hash', array($products_array), array()); $order_hash[] = 'W' . $products_array['warehouse_customer_id']; $products_array['order_hash'] = join('-', $order_hash); $products[] = $products_array; $hash[$hash_key] += $amount; } } //cw_var_dump($products); return $products; }
function cw_product_get($params, $return = null) { extract($params); global $customer_id, $customer_id_type, $current_area, $cart, $current_location; global $current_language, $tables, $config, $addons; cw_load('files', 'taxes', 'tags'); $lang = $lang ? $lang : $current_language; $variant_id = $variant_id ? $variant_id : 0; $amount = intval($amount > 0 ? $amount : 1); $fields = $from_tbls = $query_joins = $where = array(); # kornev, merge standart and additional variables if ($return) { foreach ($return as $saname => $sadata) { if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) { ${$saname} = $sadata; } } } $from_tbls[] = 'products'; $where[] = "{$tables['products']}.product_id='{$id}'"; # kornev # customer area - all of the checkings # pos area - not check for membership, just available for sale property if (in_array($current_area, array('C'))) { $memberships = array(0); if ($user_account['membership_id'] > 0) { $memberships[] = intval($user_account['membership_id']); } $where[] = "{$tables['products_memberships']}.membership_id IN (" . join(',', $memberships) . ")"; $where[] = "{$tables['products_prices']}.quantity <= {$amount} and {$tables['products_prices']}.membership_id in (" . join(',', $memberships) . ")"; if ($config['Appearance']['categories_in_products'] == '1') { $where[] = "{$tables['categories_memberships']}.membership_id IN (" . join(',', $memberships) . ")"; $query_joins['products_categories'] = array('on' => "{$tables['products_categories']}.product_id = {$tables['products']}.product_id", 'pos' => '0', 'is_straight' => 1); $query_joins['categories'] = array('on' => "{$tables['products_categories']}.category_id = {$tables['categories']}.category_id", 'parent' => 'products_categories'); $query_joins['categories_memberships'] = array('on' => "{$tables['categories_memberships']}.category_id = {$tables['categories']}.category_id", 'parent' => 'categories', 'is_straight' => 1); } $where[] = "{$tables['products']}.status in ('" . implode("', '", cw_core_get_required_status($current_area)) . "')"; } elseif (in_array($current_area, array('G'))) { $where[] = "{$tables['products']}.product_id = {$tables['products_prices']}.product_id AND {$tables['products_prices']}.quantity <= {$amount} and {$tables['products_prices']}.membership_id in (" . join(',', $memberships) . ")"; } $fields[] = "{$tables['products']}.*"; $query_joins['products_warehouses_amount'] = array('on' => "{$tables['products']}.product_id = {$tables['products_warehouses_amount']}.product_id and {$tables['products_warehouses_amount']}.warehouse_customer_id=0 and {$tables['products_warehouses_amount']}.variant_id='{$variant_id}'"); $in_cart = 0; if ($current_area == 'C' && !empty($cart) && !empty($cart['products'])) { foreach ($cart['products'] as $cart_item) { if ($cart_item['product_id'] == $id) { $in_cart += $cart_item['amount']; } } } $fields[] = "{$tables['products_warehouses_amount']}.avail-{$in_cart} AS avail"; # kornev, TOFIX if ($addons['product_options'] && in_array($current_area, array('A', 'P'))) { $query_joins['product_variants'] = array('on' => "{$tables['products']}.product_id = {$tables['product_variants']}.product_id"); $fields[] = "IF({$tables['product_variants']}.product_id IS NULL, '', 'Y') as is_variants"; } /* if ($addons['manufacturers']) { $query_joins['manufacturers'] = array( 'on' => "$tables[manufacturers].manufacturer_id = $tables[products].manufacturer_id", ); $fields[] = "$tables[manufacturers].manufacturer"; } */ // statistic $fields[] = "{$tables['products_stats']}.views_stats"; $fields[] = "{$tables['products_stats']}.sales_stats"; $fields[] = "{$tables['products_stats']}.del_stats"; $fields[] = "{$tables['products_stats']}.add_to_cart"; $query_joins['products_stats'] = array('on' => "{$tables['products_stats']}.product_id = {$tables['products']}.product_id"); if ($current_area == 'A' || $current_area == 'P') { $fields[] = "{$tables['products_prices']}.price"; $fields[] = "{$tables['products_prices']}.list_price"; $query_joins['products_prices'] = array('on' => "{$tables['products_prices']}.product_id={$tables['products']}.product_id AND {$tables['products_prices']}.variant_id = '{$variant_id}' and {$tables['products_prices']}.quantity <= {$amount}"); } else { $query_joins['products_prices'] = array('on' => "{$tables['products_prices']}.product_id={$tables['products']}.product_id", 'is_inner' => 1); # kornev, find the min price and select only this record. $fields[] = "min({$tables['products_prices']}.price) as price"; $fields[] = "{$tables['products_prices']}.variant_id"; $fields[] = "min({$tables['products_prices']}.list_price) as list_price"; } $fields[] = "IF({$tables['products_lng']}.product_id != '', {$tables['products_lng']}.product, {$tables['products']}.product) as product"; $fields[] = "IF({$tables['products_lng']}.product_id != '', {$tables['products_lng']}.descr, {$tables['products']}.descr) as descr"; $fields[] = "IF({$tables['products_lng']}.product_id != '', {$tables['products_lng']}.fulldescr, {$tables['products']}.fulldescr) as fulldescr"; $fields[] = "IF({$tables['products_lng']}.product_id != '', {$tables['products_lng']}.features_text, {$tables['products']}.features_text) as features_text"; $fields[] = "IF({$tables['products_lng']}.product_id != '', {$tables['products_lng']}.specifications, {$tables['products']}.specifications) as specifications"; $query_joins['products_lng'] = array('on' => "{$tables['products_lng']}.code='{$lang}' AND {$tables['products_lng']}.product_id = {$tables['products']}.product_id"); if (in_array($current_area, array('C', 'G', 'S'))) { $fields[] = "{$tables['products_flat']}.*"; $query_joins['products_flat'] = array('on' => "{$tables['products']}.product_id = {$tables['products_flat']}.product_id"); if ($current_area == 'C') { $query_joins['products_memberships'] = array('on' => "{$tables['products_memberships']}.product_id = {$tables['products']}.product_id", 'is_inner' => 1); } } if ($config['Appearance']['categories_in_products'] == '1') { $fields[] = "{$tables['products_categories']}.category_id"; $query_joins['categories'] = array('parent' => 'products_categories', 'on' => "{$tables['categories']}.category_id = {$tables['products_categories']}.category_id"); $query_joins['products_categories'] = array('on' => "{$tables['products_categories']}.product_id = {$tables['products']}.product_id and {$tables['products_categories']}.main=1", 'pos' => '0', 'is_straight' => 1); } $fields[] = "{$tables['products']}.product_id"; $query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, array("{$tables['products']}.product_id"), array(), array()); $product = cw_query_first($query); # Error handling if (!$product || $current_area == 'C' && !$product['category_id'] && $config['Appearance']['categories_in_products'] == '1') { return false; } $product['system'] = cw_call('cw_product_get_system_info', array($product['product_id'])); $product['attribute_class_ids'] = cw_func_call('cw_items_attribute_classes_get', array('item_id' => $product['product_id'], 'item_type' => 'P', 'for_product_modify' => $for_product_modify)); if ($info_type & 1) { $product['membership_ids'] = cw_query_key("select membership_id from {$tables['products_memberships']} where product_id = '{$product['product_id']}'"); } # kornev, TOFIX if ($info_type & 64 && $product['variant_id'] && $addons['product_options']) { $tmp = cw_query_first("SELECT * FROM {$tables['product_variants']} WHERE variant_id = '{$product['variant_id']}'"); if (!empty($tmp)) { cw_unset($tmp, "def"); $product = cw_array_merge($product, $tmp); } else { cw_unset($product, 'variant_id'); } } if ($info_type & 128) { cw_load('image'); $product['image_thumb'] = cw_image_get('products_images_thumb', $id); } if ($info_type & 512) { $product['image_det'] = cw_image_get('products_images_det', $id); # kornev, TOFIX if (in_array($current_area, array('C', 'B')) && $product['variant_id'] && $addons['product_options']) { $var_image = cw_image_get('products_images_var', $id); if (!$var_image['is_default']) { $product['image_det'] = $var_image; } } } # TOFIX if (in_array($current_area, array('C', 'B', 'G'))) { if (!$addons['egoods']) { $product['distribution'] = ''; } $product['display_price'] = $product['price']; if ($current_area == 'C' && $info_type & 8) { $_tmp_price = $product['price']; $product['price'] = $product['list_price']; cw_get_products_taxes($product, $user_account); $product['list_price_net'] = $product['list_price']; $product['list_price'] = $product['taxed_price']; $product['price'] = $_tmp_price; } $product['taxes'] = cw_get_products_taxes($product, $user_account, false, '', $current_area == 'G' && $user_account['usertype'] != 'R'); } if (in_array($current_area, array('C', 'B'))) { $product['descr'] = cw_eol2br($product['descr']); $product['fulldescr'] = cw_eol2br($product['fulldescr']); } $product['uns_shippings'] = unserialize($product['shippings']); $product['tags'] = cw_tags_get_product_tags($id); if ($info_type & 4096 && $product['warranty_id']) { $wr = cw_get_warranty($product['warranty_id'], $lang); $product['warranties'] = $wr['body']; } // TODO: move to addon as on_product_get handler if ($info_type & 8192) { cw_load('warehouse'); if ($addons['warehouse']) { if (AREA_TYPE == 'A') { $product['avail_ordered'] = cw_warehouse_get_avail($id, 0, 'avail_ordered'); $product['avail_sold'] = cw_warehouse_get_avail($id, 0, 'avail_sold'); $product['avail_reserved'] = cw_warehouse_get_avail($id, 0, 'avail_reserved'); } elseif (AREA_TYPE == 'P') { $product['avail'] = cw_warehouse_get_warehouse_avail($customer_id, $id); $product['avail_ordered'] = cw_warehouse_get_warehouse_avail($customer_id, $id, 'avail_ordered'); } else { // TOFIX: $product['avail'] becomes different meanings when info_type & 8192 flag is raised or not // without flag - avail of all variants without products already in cart // with flag - total avail as set in admin per variant // $product['avail'] = cw_warehouse_get_avail_for_customer($id, $product['variant_id']); // $product['avails']= cw_warehouse_get_avails_customer($id); $product['avail'] = cw_warehouse_get_avail_for_customer($id, $product['variant_id']); } } else { $product['avails'] = cw_warehouse_get_avails_customer($id, $product['avail'] + $product['avail_ordered']); } } return $product; }
function cw_gift_get_wishlist($customer_id, $is_md5 = false) { global $tables, $current_area; $cond_customer_id = $is_md5 ? "md5({$tables['wishlist']}.customer_id)" : "{$tables['wishlist']}.customer_id"; $status = cw_core_get_required_status($current_area); $products = cw_query($sql = "select {$tables['wishlist']}.* from {$tables['wishlist']}, {$tables['products']} as p\n\twhere {$cond_customer_id}='{$customer_id}' AND {$tables['wishlist']}.event_id='0'\n\tAND {$tables['wishlist']}.product_id = p.product_id and p.status in ('" . implode("', '", $status) . "')"); return cw_gift_prepare_products($products); }
cw_load('warehouse', 'image', 'category', 'attributes'); global $products, $product_filter, $search_data, $category_page, $use_search_conditions, $mode, $navigation; $search_data =& cw_session_register("search_data", array()); $category_page =& cw_session_register('category_page', array()); if (isset($new_search) || defined('FACET_URL') && !$search_data['products']['customer_search']['redirected_to_facet']) { // New search requested or // Customer puts facet_url directly in address without autoredirect from combination (redirect happens when product filter is used) // see addons/clean_urls/init/abstract.php for related flags $search_data['products']['customer_search'] = array(); unset($new_search, $_GET['new_search']); } else { cw_unset($search_data['products']['customer_search'], 'redirected_to_facet'); } $search_data['products']['customer_search']['flat_search'] = 1; $search_data['products']['customer_search']['status'] = cw_core_get_required_status($current_area); $search_data['products']['customer_search']['objects_per_page'] = $category_page['objects_per_page']; $search_data['products']['customer_search']['sort_field'] = $category_page['sort_field']; $search_data['products']['customer_search']['sort_direction'] = $category_page['sort_direction']; $search_data['products']['customer_search']['info_type'] = $product_list_template == 2 ? 8 + 32 + 128 + 256 : 8 + 32 + 128; # kornev, add product filter $search_data['products']['customer_search']['info_type'] += 1024; $search_data['products']['customer_search']['attributes'] = $att; $use_search_conditions = 'customer_search'; // clean page num for infinite scroll if change display type if ($config['Appearance']['infinite_scroll'] == 'Y' && !$_GET['page'] && (isset($_GET['items_per_page']) || isset($_GET['sort']) || isset($_GET['sort_direction']) || isset($_GET['set_view']))) { $search_data['products'][$use_search_conditions]['page'] = 1; } cw_include('include/products/search.php'); if (count($products)) { # Generate the URL of the search result page for accesing it via GET-request