2nd update

This commit is contained in:
“VeLiTi”
2025-05-26 15:07:22 +02:00
parent cd0e04981c
commit 580f835fff
46 changed files with 16006 additions and 952 deletions

View File

@@ -15,227 +15,252 @@ function get_countries() {
//++++++++++++++++++++++++++++++++++++++++++++++++++++
// Template Header default including MENU
function template_header($title, $head = '') {
function template_header($title,$head) {
include './custom/translations/translations_'.strtoupper($_SESSION['country_code']).'.php';
// Get the amount of items in the shopping cart, this will be displayed in the header.
//variables
$num_items_in_cart = isset($_SESSION['cart']) ? array_sum(array_column($_SESSION['cart'], 'quantity')) : 0;
$home_link = url('index.php');
$products_link = url(link_to_collection);
$about_link = url('index.php?page=about');
$myaccount_link = url('index.php?page=myaccount');
$cart_link = url('index.php?page=cart');
$logout_link = isset($_SESSION['account_loggedin']) ? '<a title="Logout" href="' . url('index.php?page=logout') . '"><i class="fas fa-sign-out-alt"></i></a>' : '';
$site_name = site_name;
$site_title = site_title;
$base_url = base_url;
$icon_image = icon_image;
$basename = url('index.php?');
$default_country = isset($_SESSION['country_code']) ? strtolower($_SESSION['country_code']) : language_code;
//build up settings
$admin_link = isset($_SESSION['account_loggedin'], $_SESSION['account_role']) && $_SESSION['account_role'] == 1 ? '<a href="' . base_url . 'admin/index.php" title="Settings" target="_blank"><i class="fa-solid fa-sliders"></i></a> ': '';
//check for age_consent
if (age_verification_enabled){
if (isset($_POST['age_consent_allow'])){$_SESSION["age_consent"] = 1;}
$age_consent = (isset($_SESSION["age_consent"]) && $_SESSION["age_consent"] == 1) ? '' : consent();
} else {
$age_consent = '';
}
//LINKS
$admin_link = isset($_SESSION['account_loggedin'], $_SESSION['account_role']) && $_SESSION['account_role'] == 1 ? '<a href="' . base_url . 'admin/index.php" aria-label="Settings" target="_blank"><i class="fa-solid fa-sliders"></i></a> ': '';
$logout_link = isset($_SESSION['account_loggedin']) ? '<a title="Logout" href="' . url('index.php?page=logout') . '"><i class="fas fa-sign-out-alt"></i></a>' : '';
if ($title == 'Checkout' || $title == 'Shopping Cart') {$style = 'style="background-image: url(custom/assets/morval_checkout.jpg);"';} else {$style = '';}
//check for age_consent
if (age_verification_enabled){
if (isset($_POST['age_consent_allow'])){$_SESSION["age_consent"] = 1;}
$age_consent = (isset($_SESSION["age_consent"]) && $_SESSION["age_consent"] == 1) ? '' : consent();
} else {
$age_consent = '';
}
//check for maintenanceMode
if (maintenanceMode){$maintenanceMode = maintenanceMode();} else {$maintenanceMode = '';}
//check for maintenanceMode
if (maintenanceMode){$maintenanceMode = maintenanceMode();} else {$maintenanceMode = '';}
$veliti_analytics = '';
if (veliti_analytics){
$veliti_analytics = '<script src="'.$base_url.'/lib/analytics/analytics.js"></script>';
}
// DO NOT INDENT THE BELOW CODE
echo <<<EOT
$view = '
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,minimum-scale=1">
<title>$site_title - $title</title>
<link rel="icon" type="image/png" href="{$base_url}$icon_image">
<link href="{$base_url}custom/css/style.css" rel="stylesheet" type="text/css">
<link href="{$base_url}custom/css/custom.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.0.0/css/all.css">
<script>
// Wait for DOM to be ready before accessing elements
document.addEventListener('DOMContentLoaded', function() {
// Get loading screen element
const loadingScreen = document.getElementById('loadingScreen');
// Only proceed if the element exists
if (!loadingScreen) {
console.error('Loading screen element not found!');
return;
}
// Show loading screen
function showLoading() {
loadingScreen.classList.add('active');
}
// Hide loading screen
function hideLoading() {
loadingScreen.classList.remove('active');
}
// Show loading when page initially loads
showLoading();
// Hide loading when everything is loaded
window.addEventListener('load', hideLoading);
// In case the page loads very quickly
setTimeout(hideLoading, 500);
// Intercept form submissions
setupFormInterception();
// Intercept fetch and XMLHttpRequest
interceptNetworkRequests();
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,minimum-scale=1">
<title>'.$title.' - '.site_title.'</title>
<link rel="icon" type="image/png" href="'.base_url.icon_image.'">
<link href="'.base_url.'custom/css/main.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.0.0/css/all.css">
'.$head.'
<script>
// Wait for DOM to be ready before accessing elements
document.addEventListener(\'DOMContentLoaded\', function() {
// Get loading screen element
const loadingScreen = document.getElementById(\'loadingScreen\');
// Only proceed if the element exists
if (!loadingScreen) {
console.error(\'Loading screen element not found!\');
return;
}
// Show loading screen
function showLoading() {
loadingScreen.classList.add(\'active\');
}
// Hide loading screen
function hideLoading() {
loadingScreen.classList.remove(\'active\');
}
// Show loading when page initially loads
showLoading();
// Hide loading when everything is loaded
window.addEventListener(\'load\', hideLoading);
// In case the page loads very quickly
setTimeout(hideLoading, 500);
// Intercept form submissions
setupFormInterception();
// Intercept fetch and XMLHttpRequest
interceptNetworkRequests();
// Intercept all form submissions
function setupFormInterception() {
const forms = document.querySelectorAll(\'form\');
// Intercept all form submissions
function setupFormInterception() {
const forms = document.querySelectorAll('form');
forms.forEach(form => {
form.addEventListener('submit', function(e) {
// Show loading screen before form submission
showLoading();
});
forms.forEach(form => {
form.addEventListener(\'submit\', function(e) {
// Show loading screen before form submission
showLoading();
});
}
});
}
// Intercept all network requests (fetch and XMLHttpRequest)
function interceptNetworkRequests() {
// Track active requests
let activeRequests = 0;
// Intercept all network requests (fetch and XMLHttpRequest)
function interceptNetworkRequests() {
// Track active requests
let activeRequests = 0;
// Intercept fetch API
const originalFetch = window.fetch;
window.fetch = function() {
showLoading();
activeRequests++;
// Intercept fetch API
const originalFetch = window.fetch;
window.fetch = function() {
showLoading();
activeRequests++;
return originalFetch.apply(this, arguments)
.then(response => {
activeRequests--;
if (activeRequests === 0) hideLoading();
return response;
})
.catch(error => {
activeRequests--;
if (activeRequests === 0) hideLoading();
throw error;
});
};
// Intercept XMLHttpRequest
const originalXHROpen = XMLHttpRequest.prototype.open;
const originalXHRSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.open = function() {
return originalXHROpen.apply(this, arguments);
};
XMLHttpRequest.prototype.send = function() {
showLoading();
activeRequests++;
this.addEventListener('loadend', function() {
return originalFetch.apply(this, arguments)
.then(response => {
activeRequests--;
if (activeRequests === 0) hideLoading();
return response;
})
.catch(error => {
activeRequests--;
if (activeRequests === 0) hideLoading();
throw error;
});
return originalXHRSend.apply(this, arguments);
};
}
});
</script>
$veliti_analytics
$head
</head>
<body $style>
<!-- Loading Bar -->
<div class="loading-container" id="loadingScreen">
<div class="loading-bar">
<div class="progress"></div>
};
// Intercept XMLHttpRequest
const originalXHROpen = XMLHttpRequest.prototype.open;
const originalXHRSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.open = function() {
return originalXHROpen.apply(this, arguments);
};
XMLHttpRequest.prototype.send = function() {
showLoading();
activeRequests++;
this.addEventListener(\'loadend\', function() {
activeRequests--;
if (activeRequests === 0) hideLoading();
});
return originalXHRSend.apply(this, arguments);
};
}
});
</script>
'.$veliti_analytics.'
</head>
<body>
<!-- Loading Bar -->
<div class="loading-container" id="loadingScreen">
<div class="loading-bar">
<div class="progress"></div>
</div>
<div class="loading-text">Loading, please wait...</div>
</div>
<!-- Top Info Bar -->
<div class="top-info-bar">
<div>
<i class="fas fa-home"></i>
'.($header_manufacturing ?? 'Swiss quality and Dutch manufacturing').'
</div>
<div>
<i class="fas fa-euro-sign"></i>
'.($header_shipping ?? 'Free shipping on all of our watches').'
</div>
<div>
<i class="fas fa-truck"></i>
'.($header_delivery ?? 'Fast service and delivery').'
</div>
<div>
<span class="star-rating">★★★★★</span>
'.($header_rating ?? 'Client rate 4.7/5.0').'
</div>
</div>
<!-- Header -->
<header>
<div class="logo">
<a href="'.url('index.php').'" style="color:inherit;text-decoration:inherit;">
<img src="'.base_url.icon_image.'" alt="'.site_name.'" style="width: 50px;height: 50px;padding:1px;border-radius: 10px;">
</a>
</div>
<nav>
<ul class="nav-links">
<li><a href="'.url('index.php').'">'.$home_text.'</a></li>
<li><a href="'.url(link_to_collection).'">'.$products_text.'</a></li>
<li><a href="'.url('index.php?page=about').'">'.$about_text.'</a></li>
</ul>
</nav>
<div class="header-icons">
<a href="'.url('index.php?page=cart').'" aria-label="Shopping Cart">
<i class="fas fa-shopping-cart"></i>
<span class="cart-count">'.$num_items_in_cart.'</span>
</a>
<a href="'.url('index.php?page=myaccount').'" aria-label="Account">
<i class="fas fa-user"></i>
</a>
'.$admin_link.'
'.$logout_link.'
<div class="language-selector">
<button class="language-btn" id="lang-toggle">
<img src="'.base_url.'custom/css/'.$default_country.'.png" alt="English" class="flag-icon">
<i class="fas fa-chevron-down"></i>
</button>
<div class="language-dropdown" id="lang-dropdown">
<a href="'.base_url.'index.php?language=us" class="active">
<img src="'.base_url.'custom/css/us.png" alt="English" class="flag-icon">
<span>English</span>
</a>
<a href="'.base_url.'index.php?language=de">
<img src="'.base_url.'custom/css/de.png" alt="Deutsch" class="flag-icon">
<span>Deutsch</span>
</a>
<a href="'.base_url.'index.php?language=fr">
<img src="'.base_url.'custom/css/fr.png" alt="Français" class="flag-icon">
<span>Français</span>
</a>
<a href="'.base_url.'index.php?language=nl">
<img src="'.base_url.'custom/css/nl.png" alt="Nederlands" class="flag-icon">
<span>Nederlands</span>
</a>
<a href="'.base_url.'index.php?language=es">
<img src="'.base_url.'custom/css/es.png" alt="Español" class="flag-icon">
<span>Español</span>
</a>
</div>
<div class="loading-text">Loading, please wait...</div>
</div>
<header>
<div class="content-wrapper">
<h1>
<a href="$home_link" style="color:inherit;text-decoration:inherit;">
<img src="{$base_url}$icon_image" alt="$site_name" style="width: 50px;height: 50px;padding:1px;border-radius: 10px;">
</a>
</h1>
<nav style="flex-grow: 1;flex-basis: 0px;justify-content: center;align-items: center;text-align:center;">
<a href="$home_link">$home_text</a>
<a href="$products_link">$products_text</a>
<a href="$about_link">$about_text</a>
</nav>
<div class="link-icons">
<div class="search">
<i class="fas fa-search" title="Search"></i>
<input type="text" placeholder="Search...">
</div>
<a href="$cart_link" title="Shopping Cart">
<i class="fas fa-shopping-cart"></i>
<span>$num_items_in_cart</span>
</a>
<a href="$myaccount_link" title="My Account">
<i class="fa fa-user"></i>
</a>
$admin_link
<div class="dropdown">
<img src="{$base_url}custom/css/{$default_country}.png" id="title" alt="{$default_country} Flag" style="width:40px; height:auto; margin-right:10px;">
<div class="dropdown-content">
<a href="{$basename}language=us" style="padding:2px;" onclick="changeLanguage('English', 'us', '{$base_url}custom/css/us.png')">
<img src="{$base_url}custom/css/us.png" style="padding:2px;" alt="US Flag">
</a>
<a href="{$basename}language=es" style="padding:2px;" onclick="changeLanguage('Spanish', 'es', '{$base_url}custom/css/es.png')">
<img src="{$base_url}custom/css/es.png" style="padding:2px;" alt="Spanish Flag">
</a>
<a href="{$basename}language=fr" style="padding:2px;" onclick="changeLanguage('French', 'fr', '{$base_url}custom/css/fr.png')">
<img src="{$base_url}custom/css/fr.png" style="padding:2px;" alt="French Flag">
</a>
<a href="{$basename}language=de" style="padding:2px;" onclick="changeLanguage('German', 'de', '{$base_url}custom/css/de.png')">
<img src="{$base_url}custom/css/de.png" style="padding:2px;" alt="German Flag">
</a>
<a href="{$basename}language=it" style="padding:2px;" onclick="changeLanguage('Italian', 'it', '{$base_url}custom/css/it.png')">
<img src="{$base_url}custom/css/it.png" style="padding:2px;" alt="Italian Flag">
</a>
<a href="{$basename}language=nl" style="padding:2px;" onclick="changeLanguage('Dutch', 'nl', '{$base_url}custom/css/nl.png')">
<img src="{$base_url}custom/css/nl.png" style="padding:2px;" alt="Italian Flag">
</a>
</div>
</div>
$logout_link
<a class="responsive-toggle" onclick="openMenu('header nav')" href="#">
<i class="fas fa-bars"></i>
</a>
</div>
</div>
</header>
<main>
$age_consent
$maintenanceMode
EOT;
}
</div>
<button class="hamburger" id="menu-btn">
<i class="fas fa-bars"></i>
</button>
</header>
<!-- Mobile Menu -->
<div class="mobile-menu" id="mobile-menu">
<button class="close-menu" id="close-menu-btn">
<i class="fas fa-times"></i>
</button>
<ul class="mobile-nav-links">
<li><a href="'.url('index.php').'">'.$home_text.'</a></li>
<li><a href="'.url(link_to_collection).'">'.$products_text.'</a></li>
<li><a href="'.url('index.php?page=about').'">'.$about_text.'</a></li>
<li><a href="'.url('index.php?page=cart').'">Cart</a></li>
<li><a href="'.url('index.php?page=myaccount').'">Account</a></li>
</ul>
</div>
'. $age_consent.'
'.$maintenanceMode;
return $view;
}
// Template Header (related to MENU function)
function template_header_top($title, $head = '') {
@@ -487,67 +512,133 @@ function template_menu(){
// Template footer
function template_footer() {
include './custom/translations/translations_'.strtoupper($_SESSION['country_code']).'.php';
$base_url = base_url;
$rewrite_url = rewrite_url ? 'true' : 'false';
$year = date('Y');
$currency_code = currency_code;
$site_name = site_name;
$home_link = url('index.php');
$products_link = url('index.php?page=products');
$about_link = url('index.php?page=about');
$privacy_link = privacy_link;
$terms_link = termsandconditions_link;
$faq_link = url('index.php?page=faq');
$myaccount_link = url('index.php?page=myaccount');
$cart_link = url('index.php?page=cart');
$footer_city = footer_city;
$footer_country = footer_country;
$footer_phone = footer_phone;
$footer_email = footer_email;
$facebook_link = facebook_link;
$instagram_link = instagram_link;
// DO NOT INDENT THE BELOW CODE
echo <<<EOT
</main>
<footer>
<div class="container neutral-footer-section-1">
<div class="container neutral-footer-three-columns">
<div class="container description-logos-footer">
<h4 class="neutral-headline-footer">$social_punch_line</h4>
<div class="container social-footer-wrapper">
<a href="$facebook_link" target="_blank" class="social-image neutral-social-icon left-align"><img class="facebook-icon" src="{$base_url}socialicons/webicon-facebook.png" alt="Social Icon" width="100" height="100"></a>
<a href="$instagram_link" target="_blank" class="social-image neutral-social-icon"><img class="instagram-icon" src="{$base_url}socialicons/webicon-instagram.png" alt="Social Icon" width="100" height="100"></a>
</div>
</div>
<div class="container container-links-footer-wrapper">
<a class="link-text neutral-nav-link-footer" href="$home_link">$home_text</a>
<a class="link-text neutral-nav-link-footer" href="$products_link">$products_text</a>
<a class="link-text neutral-nav-link-footer" href="$about_link">$about_text</a>
<a class="link-text neutral-nav-link-footer" href="$faq_link">$faq_text</a>
<a class="link-text neutral-nav-link-footer" href="$privacy_link" target="blank">$privacy_text</a>
<a class="link-text neutral-nav-link-footer" href="$terms_link" target="blank">$terms_text</a>
</div>
<div class="container container-direction-footer">
<p class="paragraph direction-footer">$footer_city<br>$footer_country</p>
<div class="container container-telephone-footer"><span class="glyph icon-footer"><i class="coffeecup-icons-phone2"></i></span>
<a class="link-text nav-link-footer" href="#">$footer_phone</a>
</div>
<a class="link-text nav-link-footer" href="mailto:$footer_email?subject=Contact Us">$footer_email</a>
</div>
</div>
</div>
</footer>
<script>
const currency_code = "$currency_code", base_url = "$base_url", rewrite_url = $rewrite_url;
</script>
<script src="{$base_url}script.js"></script>
</body>
</html>
EOT;
}
$footer = '
<section class="newsletter">
<div class="container newsletter-container">
<div class="newsletter-text">
<h2>'.($newsletter_h2 ?? 'Sign up for<br>the newsletter').'</h2>
<p>'.($newsletter_p ?? 'Stay connected with our latest updates, tips, and exclusive offers—straight to your inbox.').'</p>
</div>
<div class="newsletter-form">
<div class="form-group">
<input type="text" class="form-control" placeholder="'.($shipping_first_name ?? 'Name').' - '.($shipping_last_name ?? 'surname').' *" required>
</div>
<div class="form-group">
<input type="email" class="form-control" placeholder="'.($account_create_email ?? 'E-mailaddress').' *" required>
</div>
<div class="checkbox-group">
<label>
<input type="checkbox" required>
'.($newsletter_confirm ?? 'I have read and agree with the privacy policy').'
</label>
</div>
<button type="submit" class="btn-submit">'.($newsletter_submit ?? 'submit').'</button>
</div>
</div>
</section>
<footer class="footer">
<div class="container footer-container">
<div class="footer-info">
<h3>'.company_name.'</h3>
<p>'.footer_city.' - '.footer_country.'</p>
<p>Tel: '.footer_phone.' - '.footer_email.'</p>
</div>
<div class="social-icons">
<a href="'.instagram_link.'" class="social-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.5 7.5V16.5C21.5 19 19.5 21 17 21H7C4.5 21 2.5 19 2.5 16.5V7.5C2.5 5 4.5 3 7 3H17C19.5 3 21.5 5 21.5 7.5Z" stroke="#1f3d6b" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 15.5C13.933 15.5 15.5 13.933 15.5 12C15.5 10.067 13.933 8.5 12 8.5C10.067 8.5 8.5 10.067 8.5 12C8.5 13.933 10.067 15.5 12 15.5Z" stroke="#1f3d6b" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.5 7.5H17.51" stroke="#1f3d6b" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
<a href="'.facebook_link.'" class="social-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14 9.3V12.2H16.6C16.8 12.2 16.9 12.4 16.9 12.6L16.5 14.5C16.5 14.6 16.3 14.7 16.2 14.7H14V22H11V14.8H9.3C9.1 14.8 9 14.7 9 14.5V12.6C9 12.4 9.1 12.3 9.3 12.3H11V9C11 7.3 12.3 6 14 6H16.7C16.9 6 17 6.1 17 6.3V8.7C17 8.9 16.9 9 16.7 9H14.3C14.1 9 14 9.1 14 9.3Z" stroke="#1f3d6b" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M15 22H9C4 22 2 20 2 15V9C2 4 4 2 9 2H15C20 2 22 4 22 9V15C22 20 20 22 15 22Z" stroke="#1f3d6b" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
<a href="#" class="social-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 4H8C6.34315 4 5 5.34315 5 7V17C5 18.6569 6.34315 20 8 20H16C17.6569 20 19 18.6569 19 17V7C19 5.34315 17.6569 4 16 4Z" stroke="#1f3d6b" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M9 12V16M9 8.8V9M15 12V16M15 8.8V9" stroke="#1f3d6b" stroke-width="1.5" stroke-linecap="round"/>
</svg>
</a>
</div>
</div>
<div class="container">
<div class="payment-methods">
<img src="'.base_url.'custom/assets/iDEAL.png" alt="iDeal" class="payment-method">
<img src="'.base_url.'custom/assets/mastercard.png" alt="Mastercard" class="payment-method">
<img src="'.base_url.'custom/assets/visa.png" alt="Visa" class="payment-method">
<img src="'.base_url.'custom/assets/paypal.png" alt="Pay Pal" class="payment-method">
</div>
<div class="footer-bottom">
<div class="copyright">
©2025 All rights reserved
</div>
<div class="footer-links">
<a href="'.termsandconditions_link.'">'.$terms_text.'</a>
<a href="'.privacy_link.'">'.$privacy_text.'</a>
</div>
</div>
</div>
</footer>
<script>
//Mobile menu functionality
const menuBtn = document.getElementById(\'menu-btn\');
const closeMenuBtn = document.getElementById(\'close-menu-btn\');
const mobileMenu = document.getElementById(\'mobile-menu\');
menuBtn.addEventListener(\'click\', () => {
mobileMenu.classList.add(\'mobile-menu-open\');
document.body.style.overflow = \'hidden\';
});
closeMenuBtn.addEventListener(\'click\', () => {
mobileMenu.classList.remove(\'mobile-menu-open\');
document.body.style.overflow = \'auto\';
});
</script>
<script>
document.addEventListener(\'DOMContentLoaded\', function() {
// Get the language toggle button and dropdown
const langToggle = document.getElementById(\'lang-toggle\');
const langDropdown = document.getElementById(\'lang-dropdown\');
// Add click event to toggle button
langToggle.addEventListener(\'click\', function(e) {
e.stopPropagation(); // Prevent click from immediately bubbling to document
langDropdown.classList.toggle(\'show\');
});
// Add click events to each language option
const languageLinks = langDropdown.querySelectorAll(\'a\');
languageLinks.forEach(link => {
link.addEventListener(\'click\', function(e) {
// No need to prevent default as we want the href to be followed
// URL will be triggered naturally by the link
langDropdown.classList.remove(\'show\');
});
});
// Close dropdown when clicking elsewhere on the page
document.addEventListener(\'click\', function(e) {
if (!e.target.closest(\'.language-selector\')) {
langDropdown.classList.remove(\'show\');
}
});
});
const currency_code = "'.currency_code.'", base_url = "'.base_url.'", rewrite_url = "'.rewrite_url.'";
</script>
<script src="'.base_url.'script.js"></script>
';
return $footer;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++
// Order email
//++++++++++++++++++++++++++++++++++++++++++++++++++++