/**
  *	Define output for product
  *
  *	@param mixed $initialContent The initial product content defined into wordpress basic admin interface
  *	@param integer $product_id The product identifier we want to get and output attribute for
  *
  *	@return mixed $content The content to add or to modify the product output in frontend
  */
 public static function product_complete_sheet_output($initialContent, $product_id)
 {
     $content = $attributeContentOutput = '';
     $wps_product_ctr = new wps_product_ctr();
     /** Log number of view for the current product	*/
     $product_view_number = get_post_meta($product_id, WPSHOP_PRODUCT_VIEW_NB, true);
     $product_view_number++;
     update_post_meta($product_id, WPSHOP_PRODUCT_VIEW_NB, $product_view_number);
     /** Get product definition	*/
     $product = self::get_product_data($product_id);
     wp_cache_set('wpshop_product_data_' . $product_id, $product);
     /** Get the product thumbnail	*/
     $productThumbnail = wpshop_display::display_template_element('product_thumbnail_default', array());
     if (has_post_thumbnail($product_id)) {
         $thumbnail_url = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full');
         $tpl_component = array();
         $tpl_component['PRODUCT_THUMBNAIL_URL'] = $thumbnail_url[0];
         $tpl_component['PRODUCT_THUMBNAIL'] = get_the_post_thumbnail($product_id, 'wpshop-product-galery');
         $tpl_component['PRODUCT_THUMBNAIL_FULL'] = get_the_post_thumbnail($product_id, 'full');
         $image_attributes = wp_get_attachment_metadata(get_post_thumbnail_id());
         if (!empty($image_attributes) && !empty($image_attributes['sizes']) && is_array($image_attributes['sizes'])) {
             foreach ($image_attributes['sizes'] as $size_name => $size_def) {
                 $tpl_component['PRODUCT_THUMBNAIL_' . strtoupper($size_name)] = wp_get_attachment_image(get_post_thumbnail_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;
             }
         }
         $productThumbnail = wpshop_display::display_template_element('product_thumbnail', $tpl_component);
         unset($tpl_component);
     }
     $product_document_galery = wps_media_manager_frontend_ctr::get_product_complete_sheet_attachments($product_id);
     /**	Retrieve product attributes for output	*/
     $attributeContentOutput = wpshop_attributes::attribute_of_entity_to_tab(wpshop_entities::get_entity_identifier_from_code(self::currentPageCode), $product_id, $product);
     /** 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, $product['custom_display'], 'attribute', 'product_price', 'complete_sheet');
     $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)) {
         $productPrice = wpshop_prices::get_product_price($product, 'price_display', 'complete_sheet');
     }
     /** Check if there is at less 1 product in stock	*/
     $productStock = $wps_product_ctr->check_stock($product_id, 1);
     $productStock = $productStock === true ? 1 : null;
     /** if !product stock check product have variation with stock **/
     // 		if ( empty($productStock) ) {
     $product_variation_meta = get_post_meta($product_id, '_wpshop_variation_defining', true);
     if (!empty($product_variation_meta) && !empty($product_variation_meta['options']) && !empty($product_variation_meta['options']['priority']) && in_array('combined', $product_variation_meta['options']['priority'])) {
         $variations = wpshop_products::get_variation($product_id);
         if (!empty($variations)) {
             foreach ($variations as $variation) {
                 if (!empty($variation) && !empty($variation['variation_dif']) && array_key_exists('product_stock', $variation['variation_dif']) && round($variation['variation_dif']['product_stock']) > 0) {
                     $productStock = 1;
                 }
             }
         }
     }
     // 		}
     /** 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', 'complete_sheet');
     $display_price_state_when_price_is_empty = true;
     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, 'complete') : '';
     $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, 'complete');
     /** Template parameters	*/
     $template_part = 'product_complete_tpl';
     $tpl_component = array();
     $tpl_component['PRODUCT_VARIATIONS'] = wpshop_products::wpshop_variation($product_id);
     $tpl_component['PRODUCT_ID'] = $product_id;
     $tpl_component['PRODUCT_TITLE'] = $product['post_title'];
     $tpl_component['PRODUCT_THUMBNAIL'] = $productThumbnail;
     $tpl_component['PRODUCT_GALERY_PICS'] = '';
     $tpl_component['PRODUCT_PRICE'] = $productPrice;
     $modules_option = get_option('wpshop_modules');
     $tpl_component['LOW_STOCK_ALERT_MESSAGE'] = '';
     if (!empty($modules_option) && !empty($modules_option['wpshop_low_stock_alert']) && $modules_option['wpshop_low_stock_alert']['activated'] == 'on') {
         $wps_marketing_tools = new wps_marketing_tools_ctr();
         $tpl_component['LOW_STOCK_ALERT_MESSAGE'] = $wps_marketing_tools->display_alert_stock_message(array('id' => $product_id));
     }
     /** Gallery **/
     $tpl_component['PRODUCT_COMPLETE_SHEET_GALLERY'] = wps_media_manager_frontend_ctr::get_product_complete_sheet_galery($product_id);
     $product_new_def = self::display_product_special_state('declare_new', 'complete', !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', 'complete', !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'];
     $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_INITIAL_CONTENT'] = $initialContent;
     $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_QUOTATION'] . $tpl_component['PRODUCT_BUTTON_ADD_TO_CART'];
     $tpl_component['PRODUCT_GALERY_DOCS'] = $product_document_galery;
     $tpl_component['PRODUCT_FEATURES'] = $attributeContentOutput;
     $tpl_component = apply_filters('wps-filter-product-complete-sheet-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;
 }