HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/deensekroon.komma-mediadesign.nl/wwwroot/php/page_product.php
<?php

/*
	Deense Kroon
	Product

	Mike Ontwerpt 2012
	www.mikeontwerpt.nl

*/

include $_SERVER['DOCUMENT_ROOT'] . '/php/products/ProductRepository.php';


function initProduct(){
	$output = '';
	if(isset($_POST['add-to-cart'])){
		validateAddProducts();
	}
	else
    {
        // Get id for product
        $productId = null;
        if(defined('URL_SUB'))
        {
            $temp = explode('-',URL_SUB);
            $productId = $temp[count($temp)-1];
        }

        // Return product
        $output .= showProduct($productId);
	}
	
	return $output;	
}

function showProduct($productId){

    if($productId == null) return false;

    Url_Pin::set();

    $productRepository = new ProductRepository();

	include './lang/'.$_SESSION['lang'].'.php';

    include_once $_SERVER['DOCUMENT_ROOT'] . '/php/discount/DiscountService.php';
    $discountService = new DiscountService();

	// get productId


	// Add this product to the "products-viewed" array
	if(isset($_SESSION['products-viewed']) && !existInArray($productId, $_SESSION['products-viewed']))
        $_SESSION['products-viewed'][] = $productId;

    // Get product from database
    if( ! $product = $productRepository->productById($productId))
    {
        return 'Er is geen artikel gevonden';
    }

    // Set default language to nl
    $title = $product->title_nl;
    $linkTitle = linkname($product->title_nl);
    $description = $product->description_nl;
    $specs = $product->specifications_nl;

    // Overwrite to English if necessary
    switch ($_SESSION['lang'])
    {
        case 'en':
            if( ! empty($product->title_en)) $title = $product->title_en;
            if( ! empty($product->description_en)) $description = $product->description_en;
            if( ! empty($product->specifications_en)) $specs = $product->specifications_en;
            break;
    }

    // Make sure color is not empty
    empty($product->color) ? $color = "85b8c9" : $color = $product->color;

    # get price
    $price = $product->price;

    //empty($record['discountPrice']) ? $discountPrice = '' : $discountPrice = $product->discount_price;;
    $discountPrice = $product->discount_price;

    if( ! empty($discountPrice))
    {
        // het product is hard afgeprijsd
        $oldPrice = $price;
        $displayOldPrice = displayPrice($oldPrice, false);
        $price = $discountPrice;
        $displayPrice = displayPrice($price, false);
    }
    else
    {
        $price = $product->price * 100;
        $oldPrice = 0;
        $discountFactor = $discountService->getDiscountFactorOnProduct($productId);
        if($discountFactor > 0 && $discountFactor < 1)
        {
            $oldPrice = $price;
            $price = round($price * $discountFactor);
        }
        $displayOldPrice = displayPrice($oldPrice / 100, false);
        $displayPrice = displayPrice($price / 100, false);
    }


    # get thumbnails of instances
    $thumbnails = array();
    $thumb = '/images/structure/noimage.jpg';
    $galleryString = '';

    $i = 0;

    // Create query string
    $index=0;
    foreach($productRepository->imagesByProductId($productId) as $image)
    {
        $thumbnails[$i]['instanceId'] = $image->image_id;

        // Select
        if( ! empty($image->small) && is_file(DOCUMENT_ROOT . '/images/uploads/' . $image->small))
        {
            $thumbnails[$i]['thumb'] = '/images/uploads/' . $image->small;
        }
        else if( ! empty($image->medium) && is_file(DOCUMENT_ROOT . '/images/uploads/' . $image->medium))
        {
            $thumbnails[$i]['thumb'] = '/images/uploads/' . $image->medium;
        }
        else
        {
            $thumbnails[$i]['thumb'] = '/images/structure/noimage.jpg';
        }

        // Select thumb
        if($image->short_code == $product->thumb)
        {
            $index = $i;
            $thumb = '/images/uploads/' . $image->medium;
        }

        // Create string
        ///images/image1.jpg(src),400(w),300(h),/images/image1.jpg(hover),400(hw),300(hh),naam van de afbeelding(alt)|enz..
        $largeImage = $largeHover = $image->large;
        list($iW, $iH) = getimagesize(DOCUMENT_IMAGE_ROOT . 'uploads/' . $largeImage);

        $galleryString .= '/images/uploads/' . $largeImage . ',' . $iW . ',' . $iH . ',' . $title . '|';
        $i++;
    }
    $galleryString = substr($galleryString, 0, -1);


    // Available by size or by product?
    if(categoryHasSize($product->category_id))
    {
        $available = 0;
        if($sizes = checkAvailableSizes($productId))
        {
            if(count($sizes) > 0)
            {
                $available = 1;
            }
        }
    }
    else
    {
        $available = checkAvailableInStock($productId);
    }


    $output = '';


    $linkBrand = linkname($product->brand_title);
    $link = '/toont-haar-collectie/van-het-merk/' . $linkBrand . '/';

    // Container
    $output .= '<div class="contained-layout image-text">';

    /**
     *  Block containing images
     */

    $output .= '<div class="col-3 product-page-image-container">';
    $output .= '<div class="product-page-image-section">';

    // Image
    $output .= '<div class="product-page-image-holder">';
    $output .= '<img src="' . $thumb . '" alt="' . $title . '" />';

    # div to activate hover function
    $output .= '<div id="activate-hover" class="showGalleryImages" data-galstr="' . $galleryString . '" data-index="' . $index . '">&nbsp;</div>';

    $output .= '</div>';// End product-page-image-holder

    // Thumbnails
    $output .= '<div class="product-smallthumb-row">';

    foreach ($thumbnails as $key => $thumbnail)
    {
        $output .= '<div class="product-smallthumb-holder';
        if( ! (($key + 1) % 4)) $output .= ' no-margin';
        $output .= '">';
        $output .= '<div class="product-smallthumb-image showGalleryImages" 
                         data-galstr="' . $galleryString . '" 
                         data-index="' . $key . '">';
        $output .= '<img src="' . $thumbnail['thumb'] . '" alt="Deense Kroon | ' . $title . '" width="72"/>';
        $output .= '</div>'; // End product-smallthumb-image
        $output .= '</div>'; // End product-smallthumb-holder

        // New row
        if( ! (($key + 1) % 4) && ($key + 1) != count($thumbnails)) $output .= '</div><div class="product-smallthumb-row">';
    }
    $output .= '</div>'; // product-smallthumb-holder
    $output .= '</div>'; // End product-page-image-section
    $output .= '</div>'; // End col-3

    /**
     *  Block containing main product information
     */

    $output .= '<div class="col-3 product-page-main-container">';
    $output .= '<div class="product-page-main-section">';

    // Brand
    $output .= '<a class="product-page-brand" href="' . $link . '">' . $product->brand_title . '</a>';

    // Title
    $output .= '<h1 class="product-page-title">' . $title . '</h1>';

    // Product price

    // Show original price when discount
    if( ! empty($oldPrice)) $output .= '<span class="product-page-oldprice">' . $displayOldPrice . '</span>';

    // Current price
    $output .= '<span class="product-page-currentprice">' . $displayPrice . '</span>';

    // Stock
    if($available > 0) $output .= '<span class="product-page-instock">' . $siteLabels['inStock'] . '</span><br />';
    if($available <= 0) $output .= '<span class="product-page-notinstock">' . $siteLabels['soldOut'] . '</span><br />';

    // Form
    $output .= '<form action="" method="post">';

        // Sizes
        if($sizes = checkAvailableSizes($productId))
        {
            // Show error when no size selected
            if(isset($_SESSION['clothing_size_error']))
            {
                $output .= '<span class="cloth_error">' . $_SESSION['clothing_size_error'] . '</span>';
                unset($_SESSION['clothing_size_error']);
            }

            // Show select box
            $output .= '<select name="size" id="select_size">';
            $output .= '<option value="kies_maat">' . $siteLabels['choose_size'] . '</option>';
            foreach ($sizes as $size => $inStock)
            {
                $output .= '<option value="' . $size . '">' . strtoupper($size) . '</option>';
            }
            $output .= '</select>';
        }

        // Show add to cart button
        if($available > 0)
        {
            $output .= '<div class="button-add-to-cart btnhover-extra">';
                $output .= '<input type="submit" name="add-to-cart" value="" />';
                $output .= '<span class="text">' . $siteLabels['addArticle'] . '</span><span class="icon-arrow"></span>';
                $output .= '<div class="over"></div>';
                $output .= '<div class="off"></div>';
            $output .= '</div>';
        }

        $output .= '<input type="hidden" name="location" value="/toont-uw-winkelwagen/"/>';
        $output .= '<input type="hidden" name="productId" value="' . $productId . '"/>';
        $output .= '<input type="hidden" name="count" value="1" class="num-products"/>';

    $output .= '</form>'; // End form

    // Description
    $output .= '<span class="product-page-description">' . $description . '</span>';

    // Social media

    # Mail
    $output .= '<div class="sm">';
    $link = urlencode(BASE_ROOT . 'naar/' . $productId . '/');
    $output .= '<a href="mailto:?body=Bekijk%20dit%20artikel%20op%20Deense%20Kroon:%0D%0A' . $link . '&subject=Leuk%20artikel%20op%20Deense%20Kroon!"><img src="/images/structure/mail_icon.jpg" alt="share by mail" /></a>';
    $output .= '</div>';

    $output .= '</div>'; // End product-page-main-section
    $output .= '</div>'; // End col-3
    $output .= '</div>'; // End contained-layout

    /**
     *  Block containing specifications
     */
    $output .= '<div class="contained-layout">';

    $output .= '<div class="col-3 product-page-specs-container">';
    $output .= '<div class="product-page-specs-section">';

    // Specifications
    $output .= '<div class="specs-holder">';
        $output .= '<span class="specs-title">' . $siteLabels['specs'] . '</span><br />';
        $specs = str_replace('<p>', '', $specs);
        $specs = str_replace('</p>', '<br/>', $specs);
        $output .= $specs;
    $output .= '</div>';

    $output .= '<br />Heb je vragen over dit item? We helpen je graag!<br/>Bel ons tijdens openingstijden op <br /><strong>040 - 251 11 88</strong>';


    $output .= '</div>'; // End product-page-specs-section
    $output .= '</div>'; // End col-3

    /**
     *  Block containing "You may also like"
     */
    $output .= '<div class="col-3 product-page-relevant-products-container">';
    $output .= '<div class="product-page-relevant-products-section">';

    // Get all products from the same category
    $relevantProducts = $productRepository->getRelevantProductsFromCategory($product->category_id, $productId);

    // Mix up the products
    if($relevantProducts)
    {
        # recommending
        $output .= '<span class="recommend-title">You may also like</span>';
        $output .= '<div class="centered-area">
                    <span class="icon-arrow-down" id="product-recommend-arrow-down"></span>
                    </div>';

        # start first row
        $output .= '<div class="product-recommend-row">';

        shuffle($relevantProducts);

        $i = 1;
        foreach ($relevantProducts as $relevantProduct)
        {
            if($i > 6) break;

            $output .= '<div class="product-recommend-holder ';
            if( ! ($i % 3)) $output .= ' no-margin';
            $output .= '">';

            //output image
            $output .= '<div class="product-thumb-image">';

            //new ?
            if($relevantProduct['isNew'] == 1) $output .= '<div class="product-thumb-new">NEW</div>';

            $output .= '<a href="/' . $relevantProduct['route_nl'] . '">';

            // if empty hover show original image as hover
            if( ! empty($relevantProduct['hover'])) $output .= '<img src="' . $relevantProduct['hover'] . '" alt="' . $relevantProduct['titleNL'] . '" class="collection_hover" id="product' . $relevantProduct['productId'] . '"/>';

            $output .= '<img src="' . $relevantProduct['thumb'] . '" alt="' . $relevantProduct['titleNL'] . '"  class="non-hover preload"/>';
            $output .= '</a>';

            $output .= '</div>';
            $output .= '</div>';

            if( ! ($i % 3) && $i != 6) $output .= '</div><div class="product-recommend-row">';
            $i++;
        }

        $output .= '<div class="clear"></div>';
        # end row
        $output .= '</div>';
    }

    $output .= '</div>'; // End product-page-relevant-products-section
    $output .= '</div>'; // End col-3

    $output .= '</div>'; // End contained-layout


    # some extra space
    $output .= '<div class="bottom-space"></div>';
    $output .= '</div>';

    $output .= '<div class="clear"></div>';

    return $output;
}


function validateAddProducts(){
	global $mysqli;
	
	// this function add products to the session \
	if(isset($_POST['add-to-cart'])){
		// add from post (from page_products.php) \\
		$numProducts = $_POST['count'];
		$productId = $_POST['productId'];


        if(isset($_POST['size']) && $_POST['size'] == 'kies_maat')
        {
            $err = 'We willen graag je maat weten.';
            $errors[] = $err;
            $_SESSION['clothing_size_error'] = $err;
        }

		if(empty($numProducts) || empty($productId)){
			$errors[] = 'empty values';
		}
		
		// num products must be above 0 \\
		if($numProducts <= 0){
			$errors[] = 'nothing to add';
		}
		
		// num products must be numeric \\
		if(!is_numeric($numProducts)){
			$errors[] = 'not numeric';
		}
		
		// does the instanceId exists? \\
		$instanceQuery =  'SELECT DISTINCT id FROM product_products WHERE id = "'.$productId.'" LIMIT 1';
		if($instanceResult = $mysqli->query($instanceQuery)){ 
			if($instanceResult->num_rows == 0){
				$errors[] = 'weird instance Id';
			}
		}
		else{
			$errors[] = 'query error';
		}
		
		if(isset($errors)){
			//do nothing
			Url_Pin::redirect();
		}
		else{

            $key = $productId;

            // Check for size ?
            if(isset($_POST['size']) && $_POST['size'] != 'kies_maat')
            {
                // Slash maakt alles kapot
                $key .= '_' . str_replace('/','*',$_POST['size']);
            }

			if(isset($_SESSION['cart']['products'][$key])){
				$_SESSION['cart']['products'][$key] = $_SESSION['cart']['products'][$key] + $numProducts;
			}
			else{
				$_SESSION['cart']['products'][$key] = $numProducts;
			}			

			$location = $_POST['location'];
			header('location: '.$location);
		}
	}
}

function getHoverOutput(){
	$output = '';
	global $mysqli;
	$temp = explode('-',URL_SUB);
	$productId = $temp[count($temp)-1];	
	
	if(defined('URL_SUB2')){
		$currentInstance = URL_SUB2;
		$instanceQuery =  'SELECT DISTINCT instanceOrder FROM product_instances WHERE id = '.$currentInstance.'  LIMIT 1'; 
		if($instanceResult = $mysqli->query($instanceQuery)){ 
			$firstInstanceRecord = $instanceResult->fetch_assoc();
			$firstOrder = $firstInstanceRecord['instanceOrder'];
		}
	}
	else{
		$instanceQuery =  'SELECT DISTINCT id AS instanceId , instanceOrder FROM product_instances WHERE productId = '.$productId.' ORDER by instanceOrder DESC LIMIT 1'; 
		if($instanceResult = $mysqli->query($instanceQuery)){ 
			$firstInstanceRecord = $instanceResult->fetch_assoc();
			$currentInstance = $firstInstanceRecord['instanceId'];
			$firstOrder = $firstInstanceRecord['instanceOrder'];
		}
	}
	
	/* load products from database */
	$query = 'SELECT DISTINCT p.id, p.catId, p.titleNL, p.titleEN, p.descriptionNL, p.descriptionEN, p.specsNL, p.specsEN, p.isNew, p.published, p.price, p.discountPrice, p.brandId
		  FROM product_products AS p, content_status AS s
		  WHERE s.active = 1
		  AND s.itemId = p.id
		  AND s.linkname = "product_products"
		  AND p.id = "'.$productId.'"
		  LIMIT 1';
	if($result = $mysqli->query($query)){
		$record = $result->fetch_assoc();
		$title = $record['titleNL'];
		// thumbnail \\
		$instances = array();
		$thumb = '/images/structure/noimage.jpg';
		$color = 'ffffff';
		$instanceQuery =  'SELECT DISTINCT i.id AS instanceId, i.color, i.shortcode, m.path, m.filename_fullhover, i.instanceOrder
							FROM product_instances AS i, media_files AS m, content_status AS s
							WHERE m.shortcode = i.shortcode
							AND i.productId = "'.$productId.'"
							ORDER BY i.instanceOrder DESC';
		if($instanceResult = $mysqli->query($instanceQuery)){
			$i = 0;
			
			if(defined('URL_SUB2')){
				$currentOrder = $instanceResult->num_rows + 1 - $firstOrder;
				//$currentOrder = $firstOrder -1 ;
				//echo $currentOrder.' = '. $instanceResult->num_rows . ' + 1 - ' . $firstOrder;
				//echo $currentOrder . ' = '. $firstOrder . ' -1';
			}
			else{
				$currentOrder = 1;
			}
			
			while($instanceRecord = $instanceResult->fetch_assoc()){
				//echo $i . ' = '. $instanceRecord['instanceOrder']. ' ';
				
				$instances[$i]['instanceOrder'] = $instanceRecord['instanceOrder'];
				$instances[$i]['instanceId'] = $instanceRecord['instanceId'];
				$instances[$i]['thumb'] = '/images/uploads/'.$instanceRecord['path'];
				if(!empty($instanceRecord['filename_fullhover'])) $instances[$i]['hover'] = '/images/uploads/'.$instanceRecord['filename_fullhover'];
				//if there is an instance selected, set color and thumb 
				if(isset($currentInstance)){
					if($currentInstance == $instances[$i]['instanceId']) $thumb = '/images/uploads/'.$instanceRecord['path'];
					if($currentInstance == $instances[$i]['instanceId']) $color = $instanceRecord['color'];
				}
				else{
					//else get the first color and thumb
					if($i == 0) $instances[$i]['thumb'] = '/images/uploads/'.$instanceRecord['path'];
				}
				
				$size = getimagesize($instances[$i]['thumb']);
				$instances[$i]['height'] = $size[1]; 
				$instances[$i]['top'] = ($size[0] / 2) * -1; 
				$instances[$i]['left'] = ($size[1] / 2) * -1;
				
				$i++;
			}
	
			//lightbox holder
			$output .= '<div id="product-lb-holder">';
			
				$output .= '<div id="product-lb-next"></div>';
				$output .= '<div id="product-lb-prev"></div>';
				
				$output .= '<div id="close-hover"></div>';
				
				$output .= '<div id="product-lb-content">';
				
					//echo '<br />';
				
					foreach($instances as $key => $value){
						//$output .= '<div class="product-lb-image">';
						//	echo $key . ' = '. $instances[$key]['instanceOrder']. ' ';
						if(!empty($instances[$key]['hover'])){					
							$output .= '<img src="'.$instances[$key]['hover'].'" alt="Deense Kroon sieraad genaamd '.$title.' / instantie '.$instances[$key]['instanceId'].'" id="productHoverImage'.($key+1).'" 
											class="product-hover-hover" data-original="'.$instances[$key]['height'].'" style="margin-top: '.$instances[$key]['top'].'px; margin-left: '.$instances[$key]['top'].'px; opacity: 0; "/>';	
						}
							$output .= '<img src="'.$instances[$key]['thumb'].'" alt="Deense Kroon sieraad genaamd '.$title.' / instantie '.$instances[$key]['instanceId'].'" id="productImage'.($key+1).'" 
											class="product-hover-image" data-original="'.$instances[$key]['height'].'" style="margin-top: '.$instances[$key]['top'].'px; margin-left: '.$instances[$key]['top'].'px; "/>';
							
						//$output .= '</div>';
					}
				
				$output .= '</div>';
			$output .= '</div>';
			return $output;
		}
	}
	
}

function getProductTitle(){
	global $mysqli; 
	$title = '';
	
	$temp = explode('-',URL_SUB);
	$productId = $temp[count($temp)-1];	
	
	$instanceQuery =  'SELECT p.titleNL, p.brandId, m.title AS brand
	                    FROM product_products AS p, merken as m
	                    WHERE p.id = '.$productId.'
	                    AND p.brandId = m.id
	                    LIMIT 1';
	if($instanceResult = $mysqli->query($instanceQuery)){ 
		$instanceRecord = $instanceResult->fetch_assoc();
		$title = $instanceRecord['titleNL'] . ' | ' .$instanceRecord['brand'];
	}
		
	return $title;
}