/**
  * Récupère le pilotage de prix, le nombre de produit avec un prix incohérent, le type de l'entité et la langue de la boutique. 
  * Parcours la tableau de donnée avec la nouvelle valeur des prix par produit incohérent puis met à jour tout les autres prix de 
  * ce produit. Ensuite renvoie le template avec le nombre de prix incohérent qui on été corrigé et le template de la méthode :
  * ajax_checking_products_values si des produits incohérents sont toujours présent. / Get the price piloting, the number of 
  * product with an inconsistent price, type of the entity and the language of the shop. Browse the given table with the new
  * new value pricing of the inconsistent product and updates any other price of this product. Then display the template 
  * of the number of corrected product and the template of the method : ajax_checking_products_values if inconsistent product
  * already present.
  * 
  * @param array $_POST['product_price'] List of the new price for the product like array( $id_product => $new_price )
  * @return JSON Response
  */
 public function ajax_save_product_price()
 {
     header('Content-Type: application/json');
     $response = array();
     $price_piloting_option = get_option('wpshop_shop_price_piloting');
     $inconsistent_product_number = !empty($_POST['product_price']) ? count($_POST['product_price']) : 0;
     $consistent_product_number = 0;
     $entity_type_id = wpshop_entities::get_entity_identifier_from_code(WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT);
     $language = WPSHOP_CURRENT_LOCALE;
     if (!empty($_REQUEST['icl_post_language'])) {
         $query = $wpdb->prepare("SELECT locale FROM " . $wpdb->prefix . "icl_locale_map WHERE code = %s", $_REQUEST['icl_post_language']);
         $language = $wpdb->get_var($query);
     }
     if (!empty($_POST['product_price'])) {
         foreach ($_POST['product_price'] as $product_id => $price) {
             try {
                 if ($price_piloting_option == 'TTC') {
                     wpshop_attributes::saveAttributeForEntity(array('decimal' => array('product_price' => $price)), $entity_type_id, $product_id, $language, 'wpshop_products');
                 } else {
                     wpshop_attributes::saveAttributeForEntity(array('decimal' => array('price_ht' => $price)), $entity_type_id, $product_id, $language, 'wpshop_product');
                 }
                 wpshop_products::calculate_price($product_id);
                 $consistent_product_number++;
             } catch (Exception $e) {
             }
         }
     }
     $response['template_number'] = __(sprintf('Number of processed product : %d/%d', $consistent_product_number, $inconsistent_product_number), 'wps-product');
     $list_product = wps_product_ctr::get_inconsistent_product();
     ob_start();
     require wpshop_tools::get_template_part(WPS_PRODUCT_DIR, WPS_PRODUCT_TEMPLATES_MAIN_DIR, "backend", "product_check_data");
     $response['template'] = ob_get_clean();
     wp_die(json_encode($response));
 }
 /**
  * Add a product to the cart
  * @param   string	product_id	contains the id of the product to add to the cart
  * @param   string	quantity	contains the quantity of the item to add
  */
 function add_to_cart($product_list, $quantity, $type = 'normal', $extra_params = array(), $from_admin = '', $order_meta = '', $order_id = '')
 {
     global $wpdb;
     /** Check if a cart already exist. If there is already a cart that is not the same type (could be a cart or a quotation)	*/
     if (empty($from_admin)) {
         if (isset($_SESSION['cart']['cart_type']) && $type != $_SESSION['cart']['cart_type']) {
             return __('You have another element type into your cart. Please finalize it by going to cart page.', 'wpshop');
         } else {
             $_SESSION['cart']['cart_type'] = $type;
         }
         $order_meta = $_SESSION['cart'];
     }
     $order_items = array();
     foreach ($product_list as $pid => $product_more_content) {
         if (count($product_list) == 1) {
             if (!isset($quantity[$pid])) {
                 $quantity[$pid] = 1;
             }
             $product = wpshop_products::get_product_data($product_more_content['id']);
             /** Check if the selected product exist	*/
             if ($product === false) {
                 return __('This product does not exist', 'wpshop');
             }
             /** Get information about the product price	*/
             $product_price_check = wpshop_prices::get_product_price($product, 'check_only');
             if ($product_price_check !== true) {
                 return $product_price_check;
             }
             $the_quantity = 1;
             if (!empty($product_more_content['defined_variation_priority']) && $product_more_content['defined_variation_priority'] == 'combined' && !empty($product_more_content['variations']) && !empty($product_more_content['variations'][0])) {
                 /** Get the asked quantity for each product and check if there is enough stock	*/
                 $the_quantity = $quantity[$pid];
             } else {
                 /** Get the asked quantity for each product and check if there is enough stock	*/
                 $the_quantity = $quantity[$pid];
             }
             $quantity[$pid] = $the_quantity;
             $variation_id = 0;
             if (!empty($product_more_content) && !empty($product_more_content['variations']) && !empty($product_more_content['variations'][0]) && !empty($product_more_content['defined_variation_priority']) && $product_more_content['defined_variation_priority'] == 'combined') {
                 $variation_id = $product_more_content['variations'][0];
             }
             $quantity_to_check = !empty($_SESSION) && !empty($_SESSION['cart']) && !empty($_SESSION['cart']['order_items']) && !empty($_SESSION['cart']['order_items'][$pid]) && !empty($_SESSION['cart']['order_items'][$pid]['item_qty']) ? $_SESSION['cart']['order_items'][$pid]['item_qty'] + $the_quantity : $the_quantity;
             $wps_product_ctr = new wps_product_ctr();
             $product_stock = $wps_product_ctr->check_stock($product_more_content['id'], $quantity_to_check, $variation_id);
             if ($product_stock !== true) {
                 return $product_stock;
             }
         }
         $order_items[$pid]['product_id'] = $product_more_content['id'];
         $order_items[$pid]['product_qty'] = $quantity[$pid];
         /** For product with variation	*/
         $order_items[$pid]['product_variation_type'] = !empty($product_more_content['variation_priority']) ? $product_more_content['variation_priority'] : '';
         $order_items[$pid]['free_variation'] = !empty($product_more_content['free_variation']) ? $product_more_content['free_variation'] : '';
         $order_items[$pid]['product_variation'] = '';
         if (!empty($product_more_content['variations'])) {
             foreach ($product_more_content['variations'] as $variation_id) {
                 $order_items[$pid]['product_variation'][] = $variation_id;
             }
         }
     }
     $current_cart = !empty($order_meta) ? $order_meta : array();
     $order = $this->calcul_cart_information($order_items, $extra_params, $current_cart);
     if (empty($from_admin)) {
         self::store_cart_in_session($order);
         /** Store the cart into database for connected user */
         if (get_current_user_id()) {
             $this->persistent_cart_update();
         }
     } else {
         update_post_meta($order_id, '_order_postmeta', $order);
     }
     return 'success';
 }
 public static function product_mini_output($product_id, $category_id, $output_type = 'list', $current_item_position = 1, $grid_element_nb_per_line = WPSHOP_DISPLAY_GRID_ELEMENT_NUMBER_PER_LINE)
 {
     $content = '';
     $product_information = $product_class = '';
     /** Get the product thumbnail	*/
     $productThumbnail = wpshop_display::display_template_element('product_thumbnail_default', array());
     if (has_post_thumbnail($product_id)) {
         $productThumbnail = get_the_post_thumbnail($product_id, 'thumbnail');
     }
     $product = self::get_product_data($product_id);
     /**	Get the product information for output	*/
     if (!empty($product)) {
         $product_title = $product['post_title'];
         $product_name = $product['post_name'];
         $product_link = get_permalink($product_id);
         $product_more_informations = $product['product_content'];
         $product_excerpt = $product['product_excerpt'];
         if (strpos($product['product_content'], '<!--more-->')) {
             $post_content = explode('<!--more-->', $product['product_content']);
             $product_more_informations = $post_content[0];
         }
     } else {
         $productThumbnail = wpshop_display::display_template_element('product_thumbnail_default', array());
         $product_title = '<i>' . __('This product does not exist', 'wpshop') . '</i>';
         $product_link = '';
         $product_more_informations = '';
         $product_excerpt = '';
     }
     /** Retrieve product price	*/
     $price_attribute = wpshop_attributes::getElement('product_price', "'valid'", 'code');
     $price_display = wpshop_attributes::check_attribute_display($price_attribute->is_visible_in_front_listing, $product['custom_display'], 'attribute', 'product_price', 'mini_output');
     $catalog_options = get_option('wpshop_catalog_main_option', array());
     $productPrice = '';
     $wpshop_price_piloting_option = get_option('wpshop_shop_price_piloting');
     $check_product_price = wpshop_prices::check_product_price($product);
     $result_price_piloting = !empty($wpshop_price_piloting_option) && $wpshop_price_piloting_option == 'HT' ? $check_product_price['et'] : $check_product_price['ati'];
     if ($price_display && !(!empty($catalog_options) && (!empty($catalog_options['wpshop_catalog_empty_price_behaviour']) && $catalog_options['wpshop_catalog_empty_price_behaviour'] == 'yes') && $result_price_piloting == 0)) {
         $product_price_infos = get_post_meta($product_id, '_wps_price_infos', true);
         if (!empty($product_price_infos)) {
             $tpl_component_price = array();
             /** Price piloting **/
             $price_ploting = get_option('wpshop_shop_price_piloting');
             $tpl_component_price['CROSSED_OUT_PRICE'] = !empty($product_price_infos['CROSSED_OUT_PRICE']) ? (!empty($product_price_infos['PRICE_FROM']) ? __('Price from', 'wpshop') . ' ' : '') . wpshop_display::display_template_element('product_price_template_crossed_out_price', array('CROSSED_OUT_PRICE_VALUE' => $product_price_infos['CROSSED_OUT_PRICE'])) : '';
             $tpl_component_price['PRODUCT_PRICE'] = empty($product_price_infos['CROSSED_OUT_PRICE']) && !empty($product_price_infos['PRICE_FROM']) ? __('Price from', 'wpshop') . ' ' . $product_price_infos['PRODUCT_PRICE'] : $product_price_infos['PRODUCT_PRICE'];
             $tpl_component_price['MESSAGE_SAVE_MONEY'] = $product_price_infos['MESSAGE_SAVE_MONEY'];
             $tpl_component_price['TAX_PILOTING'] = !empty($price_ploting) && $price_ploting == 'HT' ? __('ET', 'wpshop') : '';
             $product_price_infos['MESSAGE_SAVE_MONEY'];
             $productPrice = wpshop_display::display_template_element('product_price_template_mini_output', $tpl_component_price);
         } else {
             $productPrice = wpshop_prices::get_product_price($product, 'price_display', array('mini_output', $output_type));
         }
     }
     /** Check if there is at less 1 product in stock	*/
     $wps_product_ctr = new wps_product_ctr();
     $productStock = $wps_product_ctr->check_stock($product_id, 1);
     $productStock = $productStock === true ? 1 : null;
     /** Define "Add to cart" button	*/
     $add_to_cart_button_display_state = wpshop_attributes::check_attribute_display(WPSHOP_DEFINED_SHOP_TYPE == 'sale' ? 'yes' : 'no', $product['custom_display'], 'product_action_button', 'add_to_cart', 'mini_output');
     $display_price_state_when_price_is_empty = false;
     if (empty($productPrice) && (!empty($catalog_options) || !empty($catalog_options['wpshop_catalog_empty_price_behaviour']) && $catalog_options['wpshop_catalog_empty_price_behaviour'] == 'yes')) {
         $display_price_state_when_price_is_empty = false;
     } else {
         if (!empty($productPrice)) {
             $display_price_state_when_price_is_empty = true;
         }
     }
     $add_to_cart_button = true === $add_to_cart_button_display_state && true === $display_price_state_when_price_is_empty ? self::display_add_to_cart_button($product_id, $productStock, 'mini') : '';
     $product_quantity_chooser_input = true === $add_to_cart_button_display_state ? wpshop_display::display_template_element('product_complete_sheet_quantity_chooser', array('PRODUCT_ID' => $product_id)) : '';
     /** Define "Ask a quotation" button	*/
     $quotation_button = self::display_quotation_button($product_id, !empty($product['quotation_allowed']) ? $product['quotation_allowed'] : null);
     $product_new_def = self::display_product_special_state('declare_new', $output_type, !empty($product['declare_new']) ? $product['declare_new'] : 'no', !empty($product['set_new_from']) ? $product['set_new_from'] : '', !empty($product['set_new_to']) ? $product['set_new_to'] : '');
     $product_new = $product_new_def['output'];
     $product_class .= $product_new_def['class'];
     $product_featured_def = self::display_product_special_state('highlight_product', $output_type, !empty($product['highlight_product']) ? $product['highlight_product'] : 'no', !empty($product['highlight_from']) ? $product['highlight_from'] : '', !empty($product['highlight_to']) ? $product['highlight_to'] : '');
     $product_featured = $product_featured_def['output'];
     $product_class .= $product_featured_def['class'];
     if (!($current_item_position % $grid_element_nb_per_line)) {
         $product_class .= ' wpshop_last_product_of_line';
     }
     if (!empty($product['product_id'])) {
         /** Template parameters	*/
         $template_part = 'product_mini_' . $output_type;
         $tpl_component = array();
         $tpl_component['PRODUCT_THUMBNAIL_MEDIUM'] = '<img src="' . WPSHOP_DEFAULT_PRODUCT_PICTURE . '" alt="" />';
         $tpl_component['PRODUCT_ID'] = $product_id;
         $tpl_component['PRODUCT_CLASS'] = $product_class;
         $tpl_component['PRODUCT_BUTTON_ADD_TO_CART'] = $add_to_cart_button;
         $tpl_component['PRODUCT_BUTTON_QUOTATION'] = $quotation_button;
         $tpl_component['PRODUCT_QUANTITY_CHOOSER'] = $product_quantity_chooser_input;
         $tpl_component['PRODUCT_BUTTONS'] = $tpl_component['PRODUCT_BUTTON_ADD_TO_CART'] . $tpl_component['PRODUCT_BUTTON_QUOTATION'];
         $tpl_component['PRODUCT_PRICE'] = $productPrice;
         $tpl_component['PRODUCT_PERMALINK'] = $product_link;
         $tpl_component['PRODUCT_TITLE'] = !empty($product_title) ? $product_title : '';
         $tpl_component['PRODUCT_NAME'] = $product_name;
         $tpl_component['PRODUCT_DESCRIPTION'] = $product_more_informations;
         $tpl_component['PRODUCT_IS_NEW'] = $product_new;
         $tpl_component['PRODUCT_IS_FEATURED'] = $product_featured;
         $tpl_component['PRODUCT_EXTRA_STATE'] = $tpl_component['PRODUCT_IS_NEW'] . $tpl_component['PRODUCT_IS_FEATURED'];
         $tpl_component['PRODUCT_THUMBNAIL'] = $productThumbnail;
         if (has_post_thumbnail($product_id)) {
             $image_attributes = wp_get_attachment_metadata(get_post_thumbnail_id($product_id));
             if (!empty($image_attributes) && !empty($image_attributes['sizes']) && is_array($image_attributes['sizes'])) {
                 $existing_image_sizes = get_intermediate_image_sizes();
                 foreach ($existing_image_sizes as $size_name) {
                     $tpl_component['PRODUCT_THUMBNAIL_' . strtoupper($size_name)] = wp_get_attachment_image(get_post_thumbnail_id($product_id), $size_name);
                     $tpl_component['PRODUCT_THUMBNAIL_' . strtoupper($size_name)] = !empty($tpl_component['PRODUCT_THUMBNAIL_' . strtoupper($size_name)]) ? $tpl_component['PRODUCT_THUMBNAIL_' . strtoupper($size_name)] : WPSHOP_DEFAULT_PRODUCT_PICTURE;
                 }
             }
         }
         $tpl_component['PRODUCT_EXCERPT'] = $product_excerpt;
         $tpl_component['PRODUCT_OUTPUT_TYPE'] = $output_type;
         $tpl_component = apply_filters('wps-filter-product-mini-output', $tpl_component, $product_id);
         /** Build template	*/
         $tpl_way_to_take = wpshop_display::check_way_for_template($template_part);
         if ($tpl_way_to_take[0] && !empty($tpl_way_to_take[1])) {
             /**	Include the old way template part	*/
             ob_start();
             require wpshop_display::get_template_file($tpl_way_to_take[1]);
             $content = ob_get_contents();
             ob_end_clean();
         } else {
             $content = wpshop_display::display_template_element($template_part, $tpl_component);
         }
         unset($tpl_component);
     }
     return $content;
 }
 /**
  * Checking stock in differents checkout steps
  */
 function checking_stock()
 {
     if (!empty($_SESSION) && !empty($_SESSION['cart']) && !empty($_SESSION['cart']['order_items'])) {
         foreach ($_SESSION['cart']['order_items'] as $item_id => $item) {
             $wps_product = new wps_product_ctr();
             $checking = $wps_product->check_stock($item['item_id'], $item['item_qty'], $item_id);
             if ($checking !== true) {
                 unset($_SESSION['cart']['order_items'][$item_id]);
                 $wps_cart_ctr = new wps_cart();
                 $order = $wps_cart_ctr->calcul_cart_information(array());
                 $wps_cart_ctr->store_cart_in_session($order);
             }
         }
     }
 }
Esempio n. 5
0
<?php

/**
 * Plugin Name: WPShop Products
 * Plugin URI: http://www.wpshop.fr/documentations/presentation-wpshop/
 * Description: WpShop Products
 * Version: 0.1
 * Author: Eoxia
 * Author URI: http://eoxia.com/
 */
if (!defined('WPSHOP_VERSION')) {
    die(__("You are not allowed to use this service.", 'wpshop'));
}
DEFINE('WPS_PRODUCT_VERSION', '2.0');
DEFINE('WPS_PRODUCT_DIR', basename(dirname(__FILE__)));
DEFINE('WPS_PRODUCT_PATH', dirname(__FILE__));
DEFINE('WPS_PRODUCT_URL', str_replace(str_replace("\\", "/", ABSPATH), site_url() . '/', str_replace("\\", "/", WPS_PRODUCT_PATH)));
/**	Define the templates directories	*/
DEFINE('WPS_PRODUCT_TEMPLATES_MAIN_DIR', WPS_PRODUCT_PATH . '/templates/');
include plugin_dir_path(__FILE__) . '/model/wps_product_mdl.php';
include plugin_dir_path(__FILE__) . '/controller/wps_product_ctr.php';
include plugin_dir_path(__FILE__) . '/controller/wps_product_ajax_ctr.01.php';
include plugin_dir_path(__FILE__) . '/controller/wps_product_administration_ctr.php';
$wps_product = new wps_product_ctr();
$wps_product->install_modules();
$wps_administration_product = new wps_product_administration_ctr();
 /**
  * Verifty post identifier and run a barcode generator
  * @param string $post_ID Ident of post
  */
 public function insert_barcode($post_ID)
 {
     global $wpdb;
     $types_with_barcode = array(WPSHOP_IDENTIFIER_PRODUCT, WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION, WPSHOP_NEWTYPE_IDENTIFIER_COUPON, WPSHOP_NEWTYPE_IDENTIFIER_ORDER);
     $post = get_post($post_ID);
     /** Si c'est un type qui est dans le tableau $types_with_barcode */
     if (!empty($post->post_type) && in_array($post->post_type, $types_with_barcode)) {
         $conf = get_option('wps_barcode');
         $ref = '';
         if (strlen($post_ID) < 5) {
             $length = 5 - strlen($post_ID);
             for ($i = 0; $i < $length; $i++) {
                 $ref .= '0';
             }
         }
         $ref .= strval($post_ID);
         if ($conf['type'] === 'normal') {
             $array['normal'] = array('country' => $conf['normal_country_code'], 'enterprise' => $conf['normal_enterprise_code'], 'ID' => $ref);
         } else {
             if ($conf['type'] === 'internal') {
                 $pDate = new DateTime($post->post_date);
                 $date = $pDate->format('my');
                 if ($post->post_type === WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT || $post->post_type === WPSHOP_IDENTIFIER_PRODUCT) {
                     $type = $conf['internal_product'];
                 } else {
                     if ($post->post_type === WPSHOP_NEWTYPE_IDENTIFIER_ORDER) {
                         $type = $conf['internal_invoice_client'];
                     } else {
                         if ($post->post_type === WPSHOP_NEWTYPE_IDENTIFIER_COUPON) {
                             $type = $conf['internal_coupons'];
                         } else {
                             $type = '000';
                         }
                     }
                 }
                 $array['internal'] = array('type' => $type, 'date' => $date, 'ID' => $ref);
             }
         }
         $barcode = $this->wps_generate_barcode($array);
         /** For add a product */
         if (isset($_REQUEST['wpshop_product_attribute']['varchar']['barcode'])) {
             if ($_REQUEST['wpshop_product_attribute']['varchar']['barcode'] !== '') {
                 wpeologs_ctr::log_datas_in_files('wps_barcode', array('object_id' => $post_ID, 'message' => sprintf(__('Change barcode: %s replacing %s for %s object ID', 'wps_barcode'), '<b>' . $_REQUEST['wpshop_product_attribute']['varchar']['barcode'] . '</b>', '<b>' . $barcode . '</b>', '<b>' . $post_ID . '</b>')), 0);
                 $barcode = $_REQUEST['wpshop_product_attribute']['varchar']['barcode'];
             } else {
                 wpeologs_ctr::log_datas_in_files('wps_barcode', array('object_id' => $post_ID, 'message' => sprintf(__('Adding barcode: %s for %s object ID', 'wps_barcode'), '<b>' . $barcode . '</b>', '<b>' . $post_ID . '</b>')), 0);
                 $_REQUEST['wpshop_product_attribute']['varchar']['barcode'] = $barcode;
             }
         } else {
             /** On met à jour l'attribut barcode */
             $products = new wps_product_ctr();
             $products->update_the_attribute_for_product($post_ID, 'varchar', 'barcode', $barcode);
         }
     }
 }