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 . '"> </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;
}