332 lines
17 KiB
PHP
332 lines
17 KiB
PHP
<?php
|
|
// Prevent direct access to file
|
|
defined(security_key) or exit;
|
|
|
|
// Check to make sure the id parameter is specified in the URL
|
|
if (isset($_GET['id'])) {
|
|
|
|
//GET CATALOG DATA
|
|
$product = ioAPIv2('/v2/catalog/product_id='.$_GET['id'],'',$clientsecret);
|
|
$product = json_decode($product,true);
|
|
$product = $product[0] ?? '';
|
|
|
|
// Check if the product exists (array is not empty)
|
|
if (!$product) {
|
|
// Output simple error if the id for the product doesn't exists (array is empty)
|
|
http_response_code(404);
|
|
exit('Product does not exist!');
|
|
}
|
|
|
|
// Add the HTML meta data (for SEO purposes)
|
|
$meta = '
|
|
<meta property="og:url" content="' . url('index.php?page=product&id=' . ($product['url_slug'] ? $product['url_slug'] : $product['rowID'])) . '">
|
|
<meta property="og:title" content="' . (${$product['productname']} ?? $product['productname']) . '">
|
|
';
|
|
if (isset($product['full_path'])) {
|
|
$meta .= '<meta property="og:image" content="'.img_url.$product['full_path'].'">';
|
|
}
|
|
|
|
//GET RELATED MEDIA
|
|
$product_media = ioAPIv2('/v2/products_media/product_id='.$product['rowID'],'',$clientsecret);
|
|
$product_media = json_decode($product_media,true);
|
|
|
|
// If the user clicked the add to cart button
|
|
if (isset($_POST['product'])) {
|
|
//VALIDATE THE INPUT FOR THE SHOPPING CART
|
|
$payload = json_encode($_POST['product'], JSON_UNESCAPED_UNICODE);
|
|
$product_to_cart = ioAPIv2('/v2/shopping_cart/',$payload,$clientsecret);
|
|
$product_to_cart = json_decode($product_to_cart,true);
|
|
// Check if the product exists (array is not empty)
|
|
if ($product_to_cart['quantity'] > 0) {
|
|
// Product exists in database, now we can create/update the session variable for the cart
|
|
if (!isset($_SESSION['cart'])) {
|
|
// Shopping cart session variable doesnt exist, create it
|
|
$_SESSION['cart'] = [];
|
|
}
|
|
$cart_product = &get_cart_product($product_to_cart['id'], $product_to_cart['options']);
|
|
if ($cart_product) {
|
|
// Product exists in cart, update the quanity
|
|
$cart_product['quantity'] += $quantity;
|
|
} else {
|
|
// Product is not in cart, add it
|
|
$_SESSION['cart'][] = $product_to_cart;
|
|
}
|
|
}
|
|
// Prevent form resubmission...
|
|
header('Location: ' . url('index.php?page=cart'));
|
|
exit;
|
|
}
|
|
|
|
|
|
} else {
|
|
// Output simple error if the id wasn't specified
|
|
http_response_code(404);
|
|
exit('Product does not exist!');
|
|
}
|
|
|
|
//LINK to products page:
|
|
$products_link = url(link_to_collection);
|
|
$product_link = url('index.php?page=product&id='.($product['url_slug'] ? $product['url_slug'] : $product['rowID']));
|
|
|
|
/*Notifier - when 1 user ask for product notification
|
|
$notifier = 0;
|
|
|
|
if (isset($_POST["notifier"])){
|
|
$stmt = $pdo->prepare('SELECT * FROM accounts WHERE id = ?');
|
|
$stmt->execute([ $_SESSION['account_id'] ]);
|
|
$account = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
$email = $account['email'];
|
|
send_product_notification_email($email, $_POST["product_details"]);
|
|
$notifier = 1;
|
|
}
|
|
*/
|
|
$view = '';
|
|
template_header((${$product['productname']} ?? $product['productname']), $meta);
|
|
|
|
if ($error){
|
|
|
|
$view .='<p class="content-wrapper error">'.$error.'</p>';
|
|
|
|
}
|
|
else {
|
|
$view .='
|
|
<div class="product content-wrapper">
|
|
<div class="product-imgs">';
|
|
if (isset($_GET['option_id']) && !empty($_GET['option_id']) && $_GET['option_id'] !=''){
|
|
|
|
$fullPath = null;
|
|
foreach ($product['configurations'] as $configuration) {
|
|
if (isset($configuration['attributes'])) {
|
|
foreach ($configuration['attributes'] as $attribute) {
|
|
if ($attribute['attribute_id'] == $_GET['option_id']) {
|
|
$fullPath = $attribute['alternative_media_full_path'] ?? $attribute['full_path'];
|
|
$altTitle = $attribute['alternative_media_title'] ?? $attribute['title'];
|
|
$view .='
|
|
<div class="product-img-large">
|
|
<img src="'.img_url.$fullPath.'" id="'.$product['rowID'].'" alt="'.$altTitle.'">
|
|
</div>';
|
|
break 2; // Exit all loops once found
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} elseif (isset($product['full_path']) && $product['full_path'] != ''){
|
|
$view .='
|
|
<div class="product-img-large">
|
|
<img src="'.img_url.$product['full_path'].'" id="'.$product['rowID'].'" alt="'.(${$product['productname']} ?? $product['productname']).'">
|
|
</div>';
|
|
}
|
|
$view .='
|
|
<div class="product-small-imgs">';
|
|
//Show small images
|
|
foreach ($product_media as $media){
|
|
|
|
$view .=' <div class="product-img-small '.($media['position']==1?' selected':'').'">
|
|
<img src="'.img_url.$media['full_path'].'" width="150" height="150" alt="">
|
|
</div>';
|
|
}
|
|
$view .='
|
|
</div>
|
|
</div>
|
|
<div class="product-wrapper">
|
|
|
|
<div class="breadcrum">
|
|
<a href="'.$products_link.'">'.$breadcrum_products.'</a> <p>/ '.(${$product['productname']} ?? $product['productname']).'</p>
|
|
</div>
|
|
|
|
<h1 class="name">'.(${$product['productname']} ?? $product['productname']).'</h1>
|
|
|
|
<div class="prices">
|
|
<span class="price" data-price="'.$product['price'].'">'.currency_code.''.number_format($product['price'],2).'</span>';
|
|
if ($product['rrp'] > 0){
|
|
$view .= '<span class="rrp" data-rrp="'.$product['rrp'].'">'.currency_code.''.number_format($product['rrp'],2).'</span>';
|
|
}
|
|
$view .='</div>
|
|
<div class="stock">';
|
|
//Stock status
|
|
$stock_status = ($product['quantity'] != 0) ? $product_on_stock : $out_of_stock;
|
|
$style = ($stock_status == $product_on_stock) ? 'style="color:green;font-weight: bold;"' : 'style="color:gray;font-weight: lighter;"';
|
|
$view .= '<span class="stock_product">
|
|
<p '.$style.'> '.$stock_status.' </p>
|
|
</span>';
|
|
$view .='</div>';
|
|
//FREE SHIPMENT INDICATOR
|
|
if (free_shipment_indicator){
|
|
freeShipment($product['price'],'div');
|
|
}
|
|
|
|
$view .='<form id="product-form" action="" method="post">';
|
|
|
|
//CHECK FOR OPTIONS ASSIGNED
|
|
if(isset($product['configurations'])){
|
|
foreach ($product['configurations'] as $configuration) {
|
|
//CHECK FOR GROUPS
|
|
if (isset($configuration['type']) && $configuration['type'] == 'product'){
|
|
|
|
$view .= '<input id="product" type="hidden" name="product[option][products][]" value="'.$configuration['assignment'].'">';
|
|
}
|
|
|
|
//CHECK FOR GROUPS
|
|
if (isset($configuration['type']) && $configuration['type'] == 'group'){
|
|
|
|
$view .= '<label for="">'.(${$configuration['assignment_name']} ?? $configuration['assignment_name']).'</label>';
|
|
|
|
//BASED ON GROUP TYPE CREATE INPUT FORM
|
|
switch($configuration['group_type']) {
|
|
case 0: //Radiobutton
|
|
|
|
$output ='';
|
|
|
|
foreach ($configuration['attributes'] as $attribute){
|
|
|
|
if(isset($attribute['full_path']) && $attribute['full_path'] !=''){
|
|
|
|
$onclick ='';
|
|
//ADD updateOption to change pictures when GROUP is IN configuration
|
|
if(isset($product['config_setting']) && $product['config_setting'] == $configuration['assignment']){
|
|
|
|
$IMG_large_id = img_url.$attribute['alternative_media_full_path']; //URL TO LARGE IMAGE
|
|
$onclick = 'onclick="updateOption(\''.$product['rowID'].'\',\''.$IMG_large_id.'\')"';
|
|
}
|
|
|
|
$IMG_small_id = img_url.$attribute['full_path']; //URL TO SMALL IMAGE
|
|
|
|
$output .= '
|
|
<label class="picture_select_label">
|
|
<input id="'.$attribute['attribute_id'].'" class="option radio" value="'.$attribute['attribute_id'].'" name="product[option]['.$configuration['assignment'].'][]" type="radio" data-price="'.($attribute['price'] ?? 0).'" data-rrp="'.($attribute['rrp'] ?? 0).'" data-modifier="'.($attribute['price_modifier'] ?? 1).'" '.(($configuration['group_mandatory'] == 1 ) ? ' required' : '').'>
|
|
<span class="picture_select"><img '.$onclick.' src="'.$IMG_small_id.'"></span>
|
|
</label>';
|
|
|
|
} else {
|
|
$output .= '
|
|
<label>
|
|
<input id="'.$attribute['attribute_id'].'>" class="option radio" value="'.$attribute['attribute_id'].'" name="product[option]['.$configuration['assignment'].'][]" type="radio" data-price="'.($attribute['price'] ?? 0).'" data-rrp="'.($attribute['rrp'] ?? 0).'" data-modifier="'.($attribute['price_modifier'] ?? 1).'" '.(($configuration['group_mandatory'] == 1 ) ? ' required' : '').'>'.(${$attribute['item_name']} ?? $attribute['item_name']).'
|
|
</label>';
|
|
}
|
|
|
|
|
|
}
|
|
$view .= '<div class="radio-checkbox">'.$output.'</div>';
|
|
|
|
break;
|
|
case 1: //Checkbox
|
|
$output ='';
|
|
|
|
foreach ($configuration['attributes'] as $attribute){
|
|
|
|
if(isset($attribute['full_path']) && $attribute['full_path'] !=''){
|
|
|
|
$onclick ='';
|
|
//ADD updateOption to change pictures when GROUP is IN configuration
|
|
if(isset($product['config_setting']) && $product['config_setting'] == $configuration['assignment']){
|
|
|
|
$IMG_large_id = img_url.$attribute['alternative_media_full_path']; //URL TO LARGE IMAGE
|
|
$onclick = 'onclick="updateOption(\''.$product['rowID'].'\',\''.$IMG_large_id.'\')"';
|
|
}
|
|
|
|
$IMG_small_id = img_url.$attribute['full_path']; //URL TO SMALL IMAGE
|
|
|
|
$output .= '
|
|
<label class="picture_select_label">
|
|
<input id="'.$attribute['attribute_id'].'>" class="option checkbox" value="'.$attribute['attribute_id'].'" name="product[option]['.$configuration['assignment'].'][]" type="checkbox" data-price="'.($attribute['price'] ?? 0).'" data-rrp="'.($attribute['rrp'] ?? 0).'" data-modifier="'.($attribute['price_modifier'] ?? 1).'" '.(($configuration['group_mandatory'] == 1 ) ? ' required' : '').'>
|
|
<span class="picture_select"><img '.$onclick.' src="'.$IMG_small_id.'"></span>
|
|
</label>';
|
|
|
|
} else {
|
|
$output .= '
|
|
<label>
|
|
<input id="'.$attribute['attribute_id'].'>" class="option checkbox" value="'.$attribute['attribute_id'].'" name="product[option]['.$configuration['assignment'].'][]" type="checkbox" data-price="'.($attribute['price'] ?? 0).'" data-rrp="'.($attribute['rrp'] ?? 0).'" data-modifier="'.($attribute['price_modifier'] ?? 1).'" '.(($configuration['group_mandatory'] == 1 ) ? ' required' : '').'>'.(${$attribute['item_name']} ?? $attribute['item_name']).'
|
|
</label>';
|
|
}
|
|
|
|
|
|
}
|
|
$view .= '<div class="radio-checkbox">'.$output.'</div>';
|
|
|
|
break;
|
|
|
|
case 2: //Dropdown
|
|
$output ='
|
|
<select id="'.$configuration['assignment'].'" class="option select" name="product[option]['.$configuration['assignment'].']" '.(($configuration['group_mandatory'] == 1 ) ? ' required' : '').'>
|
|
<option value="" selected disabled style="display:none">'.$configuration['assignment_name'].'</option>
|
|
';
|
|
|
|
foreach ($configuration['attributes'] as $attribute){
|
|
|
|
if(isset($attribute['full_path']) && $attribute['full_path'] !=''){
|
|
|
|
$onclick ='';
|
|
//ADD updateOption to change pictures when GROUP is IN configuration
|
|
if(isset($product['config_setting']) && $product['config_setting'] == $configuration['assignment']){
|
|
|
|
$IMG_large_id = img_url.$attribute['alternative_media_full_path']; //URL TO LARGE IMAGE
|
|
$onclick = 'onclick="updateOption(\''.$product['rowID'].'\',\''.$IMG_large_id.'\')"';
|
|
}
|
|
|
|
$IMG_small_id = img_url.$attribute['full_path']; //URL TO SMALL IMAGE
|
|
|
|
$output .= '
|
|
<option id="'.$attribute['attribute_id'].'" value="'.$attribute['attribute_id'].'" data-price="'.($attribute['price'] ?? 0).'" data-rrp="'.($attribute['rrp'] ?? 0).'" data-modifier="'.($attribute['price_modifier'] ?? 1).'">'.(${$attribute['item_name']} ?? $attribute['item_name']).'</option>';
|
|
|
|
|
|
} else {
|
|
$output .= '
|
|
<option id="'.$attribute['attribute_id'].'" value="'.$attribute['attribute_id'].'" data-price="'.($attribute['price'] ?? 0).'" data-rrp="'.($attribute['rrp'] ?? 0).'" data-modifier="'.($attribute['price_modifier'] ?? 1).'">'.(${$attribute['item_name']} ?? $attribute['item_name']).'</option>';
|
|
}
|
|
|
|
|
|
}
|
|
$view .= $output.'</select></div>';
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$view .='
|
|
<label for="quantity">'.$product_quantity.'</label>
|
|
<input id="quantity" type="number" name="product[quantity]" value="1" min="1" placeholder="Quantity" required>
|
|
<input id="product" type="hidden" name="product[product]" value="'.$product['rowID'].'">
|
|
<input id="product" type="hidden" name="product[version]" value="'.($product['version_id'] ?? '').'">
|
|
|
|
<input type="submit" value="'.$add_to_basket.'" class="btn">
|
|
</form>
|
|
<div class="description">
|
|
'.(${$product['productdescription']} ?? $product['productdescription']).'
|
|
</div>
|
|
</div>
|
|
</div>';
|
|
|
|
$view .= '
|
|
<script>
|
|
//Read urlstring
|
|
const queryString = window.location.href;
|
|
const option_id = queryString.substring(queryString.lastIndexOf(\'/\') + 1);
|
|
|
|
const url_slug = "'.($product['url_slug'] ?? $product['rowID']).'";
|
|
|
|
//Check for option_id
|
|
if (option_id != url_slug){
|
|
document.getElementById(option_id).checked = true;
|
|
} else {
|
|
// Get all radio buttons
|
|
const radioButtons = document.querySelectorAll(\'.picture_select_label input[type="radio"]\');
|
|
|
|
// Select the first radio button if any exist
|
|
if (radioButtons.length > 0) {
|
|
radioButtons[0].checked = true;
|
|
}
|
|
|
|
}
|
|
|
|
</script>';
|
|
}
|
|
|
|
//OUTPUT
|
|
echo $view;
|
|
|
|
template_footer();
|
|
|
|
?>
|