+ $output ='
'.$h2_cart_samples.'
<
@@ -389,7 +391,7 @@ function getSamples($pdo, $categoryID){
$url_contents = 'index.php?page=product&id=';
$url_contents .= $additional_product['url_slug'] ? $additional_product['url_slug'] : $additional_product['id'];
$additional_product_url = url($url_contents);
- echo'
+ $output .='
';
}
}
- echo '
+ $output .='
>
';
+ return $output;
}
function createGiftCart($pdo, $orderID){
@@ -542,7 +545,7 @@ function generateInvoice($pdo, $orderID){
//Generate invoice
ob_start();
- include dirname(__FILE__).'/custom/order-invoice-template.php';
+ include dirname(__FILE__).'/custom/email/order-invoice-template.php';
$order_invoice_template = ob_get_clean();
return array($order_invoice_template,$customer_email,$order_id);
diff --git a/product.php b/product.php
index 0644006..1a00956 100644
--- a/product.php
+++ b/product.php
@@ -1,115 +1,75 @@
prepare('SELECT * FROM products WHERE status = 1 AND (id = ? OR url_slug = ?)');
- $stmt->execute([ $_GET['id'], $_GET['id'] ]);
- // Fetch the product from the database and return the result as an Array
- $product = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ //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!');
}
- // Select the product images (if any) from the products_images table
- $stmt = $pdo->prepare('SELECT m.*, pm.position FROM products_media pm JOIN media m ON m.id = pm.media_id WHERE pm.product_id = ? ORDER BY pm.position ASC');
- $stmt->execute([ $product['id'] ]);
- // Fetch the product images from the database and return the result as an Array
- $product_media = $stmt->fetchAll(PDO::FETCH_ASSOC);
- // Select the product options (if any) from the products_options table
- $stmt = $pdo->prepare('SELECT CONCAT(title, "::", type, "::", required) AS k, name, quantity, price, price_modifier, weight, weight_modifier, type, id, required FROM products_options WHERE product_id = ? ORDER BY position ASC');
- $stmt->execute([ $product['id'] ]);
- // Fetch the product options from the database and return the result as an Array
- $product_options = $stmt->fetchAll(PDO::FETCH_GROUP);
+
// Add the HTML meta data (for SEO purposes)
$meta = '
-
-
+
+
';
- if (isset($product_media[0]) && file_exists($product_media[0]['full_path'])) {
- $meta .= '
';
+ if (isset($product['full_path'])) {
+ $meta .= '
';
}
+
+ //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['quantity']) && is_numeric($_POST['quantity'])) {
- // abs() function will prevent minus quantity and (int) will ensure the value is an integer (number)
- $quantity = abs((int)$_POST['quantity']);
- // Get product options
- $options = '';
- $options_price = (float)$product['price'];
- $options_weight = (float)$product['weight'];
- // Iterate post data
- foreach ($_POST as $k => $v) {
- if (strpos($k, 'option-') !== false) {
- if (is_array($v)) {
- // Option is checkbox or radio element
- foreach ($v as $vv) {
- if (empty($vv)) continue;
- $options .= str_replace(['_', 'option-'], [' ', ''], $k) . '-' . $vv . ',';
- $stmt = $pdo->prepare('SELECT * FROM products_options WHERE title = ? AND name = ? AND product_id = ?');
- $stmt->execute([ str_replace(['_', 'option-'], [' ', ''], $k), $vv, $product['id'] ]);
- $option = $stmt->fetch(PDO::FETCH_ASSOC);
- $options_price = $option['price_modifier'] == 'add' ? $options_price + $option['price'] : $options_price - $option['price'];
- $options_weight = $option['weight_modifier'] == 'add' ? $options_weight + $option['weight'] : $options_weight - $option['weight'];
- }
- } else {
- if (empty($v)) continue;
- $options .= str_replace(['_', 'option-'], [' ', ''], $k) . '-' . $v . ',';
- //------------------
- //Update name otherwise option is not found
- //------------------
- $name_update = '%|^|'.$v;
- $stmt = $pdo->prepare('SELECT * FROM products_options WHERE title = ? AND name like ? AND product_id = ?');
- $stmt->execute([ str_replace(['_', 'option-'], [' ', ''], $k), $name_update, $product['id'] ]);
- //------------------
- // OLD CODE
- //------------------
- //$stmt = $pdo->prepare('SELECT * FROM products_options WHERE title = ? AND name = ? AND product_id = ?');
- //$stmt->execute([ str_replace(['_', 'option-'], [' ', ''], $k), $v, $product['id'] ]);
- //------------------
- $option = $stmt->fetch(PDO::FETCH_ASSOC);
- if (!$option) {
- // Option is text or datetime element
- $stmt = $pdo->prepare('SELECT * FROM products_options WHERE title = ? AND product_id = ?');
- $stmt->execute([ str_replace(['_', 'option-'], [' ', ''], $k), $product['id'] ]);
- $option = $stmt->fetch(PDO::FETCH_ASSOC);
- }
- $options_price = $option['price_modifier'] == 'add' ? $options_price + $option['price'] : $options_price - $option['price'];
- $options_weight = $option['weight_modifier'] == 'add' ? $options_weight + $option['weight'] : $options_weight - $option['weight'];
- }
- }
- }
- $options_price = $options_price < 0 ? 0 : $options_price;
- $options = rtrim($options, ',');
+ 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 ($quantity > 0) {
+ 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['id'], $options);
+ $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'][] = [
- 'id' => $product['id'],
- 'quantity' => $quantity,
- 'options' => $options,
- 'options_price' => $options_price,
- 'options_weight' => $options_weight,
- 'shipping_price' => 0.00
- ];
+ $_SESSION['cart'][] = $product_to_cart;
}
}
// Prevent form resubmission...
- header('Location: ' . url('index.php?page=cart'));
-
- exit;
+ header('Location: ' . url('index.php?page=cart'));
+ exit;
}
@@ -120,16 +80,11 @@ if (isset($_GET['id'])) {
exit('Product does not exist!');
}
-//get all media
-$stmt = $pdo->query('SELECT id, full_path, caption FROM media');
-$stmt->execute();
-$media2 = $stmt->fetchAll(PDO::FETCH_ASSOC);
-
//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['id']));
+$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 - when 1 user ask for product notification
$notifier = 0;
if (isset($_POST["notifier"])){
@@ -140,226 +95,242 @@ if (isset($_POST["notifier"])){
send_product_notification_email($email, $_POST["product_details"]);
$notifier = 1;
}
-//CREATE OPTION_PICTURE ARRAY FOR USE IN OPTION OVERVIEW
-$option_profile = json_decode($product['product_config']) ?? '';
-if (!empty($option_profile) && $option_profile !=''){
- //CREATE OPTION PICTURE ARRAY
- $option_picture[] = '';
- foreach ($option_profile as $option){
- //CHECK FOR RELATED MEDIA
- foreach ($media2 as $media_item2){
- if ($media_item2['id'] == $option->IMG_large_id){
- $option_picture[$option->option_id] = $media_item2['full_path'];
- }
- }
- }
+*/
+$view = '';
+template_header((${$product['productname']} ?? $product['productname']), $meta);
+
+if ($error){
+
+$view .='
'.$error.'
';
+
}
-?>
-=template_header($product['name'], $meta)?>
-
-
-
-
=$error?>
-
-
-
+else {
+$view .='
-
-
- option_id == $_GET['option_id']){
- $IMG_large_id = $option->IMG_large_id;
- foreach ($media2 as $media_item2){
- if ($media_item2['id'] == $IMG_large_id){
-
- $IMG_large_path = $media_item2['full_path'];
- echo '
-
-
-
';
+
';
+ 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 .='
+
+
+
';
+ break 2; // Exit all loops once found
}
}
}
- }
- ?>
-
-
-
-
-
-
-
-
+
+
';
+ }
+ $view .='
+
';
//Show small images
foreach ($product_media as $media){
- if (isset($_GET['option_id']) && !empty($_GET['option_id']) && $_GET['option_id'] !='' && show_option_images != true){
- $option_profile = json_decode($product['product_config']);
- //create array with all option imagesIDs
- $option_images = [];
- foreach($option_profile as $option){
- $option_images[] = $option->IMG_large_id;
- }
- if (in_array($media['id'], $option_images)){
- //Do nothing
- } else {
- echo '
';
- }
+
+ $view .='
';
}
- else {
- //No Option profile - show all images
- echo '
';
- }
- }
- ?>
+$view .='
-
-
=$product['name']?>
+
+
'.(${$product['productname']} ?? $product['productname']).'
- =currency_code?>=number_format($product['price'],2)?>
- 0): ?>
- =currency_code?>=number_format($product['rrp'],2)?>
-
-
-
-
-
-
'.$stock_status.'
- ';
- ?>
-
-
- '.currency_code.''.number_format($product['price'],2).'';
+ if ($product['rrp'] > 0){
+ $view .= '
'.currency_code.''.number_format($product['rrp'],2).' ';
+ }
+$view .='
+
';
+ //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 .= '
+ '.$stock_status.'
+ ';
+$view .='
';
+ //FREE SHIPMENT INDICATOR
if (free_shipment_indicator){
freeShipment($product['price'],'div');
+ }
+
+$view .='
';
+
+ break;
+ }
+ }
}
- ?>
-
-
- =$product['description']?>
+ '.(${$product['productdescription']} ?? $product['productdescription']).'
+
+
';
-
-
+$view .= '
+ ';
}
+//OUTPUT
+echo $view;
-
+template_footer();
-=template_footer()?>
\ No newline at end of file
+?>
\ No newline at end of file
diff --git a/products.php b/products.php
index 9681e47..afdb3df 100644
--- a/products.php
+++ b/products.php
@@ -140,7 +140,7 @@ $view .= '