diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2ed013a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,70 @@
+dist/
+langs/
+node_modules/
+
+# Created by https://www.gitignore.io/api/macos,windows,linux
+
+### macOS ###
+*.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+
+### Windows ###
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b041e71
--- /dev/null
+++ b/README.md
@@ -0,0 +1,138 @@
+## What is this?
+
+The PrestaShop Emails SDK is a toolkit to create custom emails for PrestaShop 1.5, 1.6 and 1.7.
+
+## Installation
+
+You first need to install [Node.js](https://nodejs.org).
+
+Install Gulp:
+
+`npm install -g gulp`
+
+Download or clone the repository
+
+Install all the dependencies:
+
+```
+cd email-templates-sdk
+npm install
+```
+Before anything, you need to download required languages:
+
+`gulp langs:dl`
+
+## Usage
+
+During development, you just need to watch files:
+
+`gulp watch`
+
+This will detect changes on your files and output a compiled version in `./dist/en/`.
+3 languages are available during development but more languages are available when the emails are installed on PrestaShop. More information below.
+
+## Build
+
+To install the emails on PrestaShop, you need to build a package:
+
+`gulp build`
+
+This will create a zip file in `./dist/` with the name you set in the `./src/config/settings.json`.
+
+To install the zip file that contains the emails, you need to use the Emails Manager available in the PrestaShop back office (soon).
+This is also this file you will need to submit on [PrestaShop Addons](https://addons.prestashop.com) if you want to sell it.
+The emails are translated by the module during the installation and the dynamic variables & conditions are processed (see "Dynamic variables" and "Conditions" for more information).
+
+## MJML: Emails made easy
+
+Building emails is not easy. We know that and Mailjet too. This is why they created a framework to develop emails and make sure they will work fine for all email clients.
+
+We chose to use this framework to help you develop your emails for PrestaShop. The better part is that Mailjet improves MJML everyday and you can enjoy it directly.
+
+All the PrestaShop's emails have been converted in a MJML format so you can create your own emails based on it.
+
+You can find a complete documentation on the [official website](https://mjml.io/documentation/).
+
+## Translations
+
+Emails are automatically translated when they are installed. This is why you can find variables like this in your templates:
+
+`${{ lang.my_variable }}$`
+
+Make sure to use these variables and not hard coded text.
+
+## Dynamic variables
+
+In order to allow the merchants to customize they emails, you can create dynamic variables. In your email, you just need to include a variable where you want:
+
+`{{$my_var}}`
+
+For every variable, you need to declare it in `./src/config/settings.json`
+
+```
+{
+ "product_key": "",
+ "name": "preston",
+ "version": "1.0",
+ "inputs": [
+ {
+ "type": "text", // Two types are supported: text or color
+ "name": "my_var",
+ "default": "",
+ "required": false,
+ "label": {
+ "en": "English label",
+ "fr": "French label",
+ ...
+ },
+ "desc": {
+ "en": "English description",
+ "fr": "French description",
+ ...
+ }
+ }
+ ]
+}
+
+```
+
+To help you during your development, you can use the `./src/config/fake.json` to declare fake data. This will replace the variables in the compiled versions.
+
+You can replace :
+
+* Your dynamic variables.
+* Default variables like {shop_name}. The default fake.json already comes with almost all the default variables.
+* Whatever you want!
+
+Note: A few variables for PrestaShop 1.5 are also available in the `fake.json`. When you want to test for this version, just temporarly replace the variables in your templates.
+
+## Conditions
+
+You will sometimes need to add some conditions. Social links are a good example as the merchants are not using all of them.
+
+Your conditions must be really simple and only check if a variable is here.
+
+```html
+{{if $my_var}}
+ // Your code
+{/if}
+```
+You can find real examples in the default template's footer.
+
+## Partials
+
+If you want to include the same code in multiple files, you can use partials. Create a new file in the `./src/partials/` folder and then, include it where you want:
+
+``
+
+## Global CSS
+
+MJML lets you custom every components with attributes and we really recommend you to do it like this but sometimes, you will need to add some global CSS. Media queries are a good example.
+
+Another good example is the `order_conf.html` email. On PrestaShop 1.5, the products list is hard coded and you can't change the HTML so you will need to custom the style. You will have to do it in the global CSS. Take a look at the default template for an example.
+
+Starting 1.6, tpl files are used in the `order_conf.html` and we provide a better version in this SDK. You can edit the files as much as you want, they will replace the default files.
+
+## Tests & Compatibility
+
+We recommend you to test your emails with Litmus. On PrestaShop Addons, we will use it to make sure that your emails are valid on the most common email clients, both desktop and mobile. You can also create a few accounts (GMail, Yahoo...) to test it yourself.
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 0000000..f2141ca
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,132 @@
+var gulp = require('gulp');
+var mjml = require('gulp-mjml')
+var mjmlEngine = require('mjml')
+var i18n = require('gulp-html-i18n')
+var download = require("gulp-download-stream");
+var buffer = require('vinyl-buffer')
+var replace_task = require('gulp-replace-task');
+var ext_replace = require('gulp-ext-replace');
+var zip = require('gulp-zip');
+var replace = require('gulp-replace');
+var rename = require("gulp-rename");
+var clean = require('gulp-clean');
+var fs = require('fs');
+
+var fake = require('./src/config/fake.json');
+var settings = require('./src/config/settings.json');
+
+// Compile files [dev mode]
+gulp.task('build:dev', function () {
+ var css = fs.readFileSync(__dirname+'/src/css/global.css', 'utf8');
+
+ return gulp.src(['src/*.mjml'])
+
+ // Compile MJML to HTML
+ .pipe(mjml(mjmlEngine))
+
+ // Delete conditions
+ .pipe(replace('{{/if}}', ''))
+ .pipe(replace(/{{if \$[a-z_]+}}/ig, ''))
+
+ // We need to decode some curly brackets because of MJML
+ .pipe(replace('%7B%7B', '{{'))
+ .pipe(replace('%7D%7D', '}}'))
+
+ // CSS injection in the header
+ .pipe(replace('', ''))
+
+ // Translate
+ .pipe(i18n({
+ langDir: './langs',
+ trace: true,
+ createLangDirs: true
+ }))
+
+ // Replace variables with fake data
+ .pipe(replace_task({
+ patterns: [{json: fake}],
+ usePrefix: false
+ }))
+
+ .pipe(gulp.dest('./dist/html/'))
+});
+
+// Compile files with MJML
+gulp.task('build:mjml', function () {
+ var css = fs.readFileSync(__dirname+'/src/css/global.css', 'utf8');
+ return gulp.src(['src/*.mjml'])
+
+ // Compile MJML to HTML
+ .pipe(mjml(mjmlEngine))
+
+ // We need to decode some curly brackets because of MJML
+ .pipe(replace('%7B%7B', '{{'))
+ .pipe(replace('%7D%7D', '}}'))
+
+ // CSS injection in the header
+ .pipe(replace('', ''))
+
+ // Rename files
+ .pipe(ext_replace('.tpl'))
+
+ .pipe(gulp.dest('./dist/'+settings.name))
+});
+
+// Copy images in dist folder
+gulp.task('build:copy:img', function() {
+ return gulp.src('src/img/*.{jpg,jpeg,png,gif}')
+ .pipe(gulp.dest('./dist/'+settings.name+'/img/'));
+});
+
+// Copy tpls in dist folder
+gulp.task('build:copy:tpl', function () {
+ return gulp.src('src/*.tpl')
+ .pipe(gulp.dest('./dist/'+settings.name+'/tpl/'));
+});
+
+// Copy preview img in dist folder
+gulp.task('build:copy:preview', function() {
+ return gulp.src('src/preview.jpg')
+ .pipe(gulp.dest('./dist/'+settings.name+'/'));
+});
+
+// Copy settings in dist folder
+gulp.task('build:copy:settings', function() {
+ return gulp.src('src/config/settings.json')
+ .pipe(gulp.dest('./dist/'+settings.name+'/'));
+});
+
+// Compress folder
+gulp.task('build:compress', ['build:copy:settings', 'build:mjml', 'build:copy:tpl', 'build:copy:img', 'build:copy:preview'], function() {
+ return gulp.src('./dist/'+settings.name+'/**/*')
+ .pipe(zip(settings.name+'.zip'))
+ .pipe(gulp.dest('./dist/'));
+});
+
+// Copy images in dist folder
+gulp.task('build', ['build:copy:settings', 'build:mjml', 'build:copy:img', 'build:copy:preview', 'build:copy:tpl', 'build:compress']);
+
+// Watch changes
+gulp.task('watch', function () {
+ gulp.watch('src/**/*.mjml', ['build:dev']);
+ gulp.watch('src/css/global.css', ['build:dev']);
+});
+
+// Download translations
+gulp.task('langs:dl', ['langs:clean'], function () {
+ ['en', 'fr', 'es'].forEach(function(lang) {
+ download('http://scritik.addons.prestashop.net/request/1/contributor/dependencies/6c7a3d34fa01934e71f53aae16f2698b/'+lang)
+ .pipe(buffer())
+ .pipe(rename("lang.json"))
+ .pipe(gulp.dest('langs/'+lang+'/'));
+ })
+});
+
+// Remove previously downloaded langs
+gulp.task('langs:clean', function () {
+ return gulp.src('langs/', {read: false})
+ .pipe(clean());
+});
+
+// Run all tasks if no args
+gulp.task('default', ['watch']);
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..b5ecfeb
--- /dev/null
+++ b/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "ps-mails-sdk",
+ "version": "1.0.0",
+ "description": "PrestaShop emails SDK",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "PrestaShop",
+ "license": "ISC",
+ "devDependencies": {
+ "gulp": "^3.9.1",
+ "gulp-clean": "^0.3.2",
+ "gulp-download-stream": "0.0.13",
+ "gulp-ext-replace": "^0.3.0",
+ "gulp-html-i18n": "^0.6.1",
+ "gulp-mjml": "^1.0.1",
+ "gulp-rename": "^1.2.2",
+ "gulp-replace": "^0.5.4",
+ "gulp-replace-task": "^0.11.0",
+ "gulp-zip": "^3.2.0",
+ "vinyl-buffer": "^1.0.0"
+ }
+}
diff --git a/src/account.mjml b/src/account.mjml
new file mode 100644
index 0000000..ae672cc
--- /dev/null
+++ b/src/account.mjml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+ ${{ lang.thank_you_for_creating_a_customer_account_at_shop_name }}$
+
+
+
+
+
+ ${{ lang.your_shop_name_login_details }}$
+
+ ${{ lang.here_are_your_login_details }}$
+ ${{ lang.email_address }}$ {email}
+
+
+
+
+
+ ${{ lang.important_security_tips }}$
+
+
+
+ - ${{ lang.always_keep_your_account_details_safe }}$
+ - ${{ lang.never_disclose_your_login_details_to_anyone }}$
+ - ${{ lang.change_your_password_regularly }}$
+ - ${{ lang.should_you_suspect_someone_is_using_your_account_illegally_please_notify_us_immediately }}$
+
+
+
+
+
+
+
+
+
diff --git a/src/backoffice_order.mjml b/src/backoffice_order.mjml
new file mode 100644
index 0000000..84c7377
--- /dev/null
+++ b/src/backoffice_order.mjml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.a_new_order_has_been_generated_on_your_behalf }}$
+
+ ${{ lang.please_go_on_order_link_to_finalize_the_payment }}$
+
+
+
+
+
+
+
diff --git a/src/bankwire.mjml b/src/bankwire.mjml
new file mode 100644
index 0000000..977e39e
--- /dev/null
+++ b/src/bankwire.mjml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+ ${{ lang.thank_you_for_shopping_with_shop_name }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.awaiting_wire_payment }}$
+
+ ${{ lang.your_order_with_the_reference_order_name_has_been_placed_successfully_and_will_be_shipped_as_soon_as_we_receive_your_payment }}$
+
+
+
+
+
+ ${{ lang.you_have_selected_to_pay_by_wire_transfer }}$
+
+ ${{ lang.here_are_the_bank_details_for_your_transfer }}$
+ ${{ lang.amount }}$ {total_paid}
+ ${{ lang.account_owner }}$ {bankwire_owner}
+ ${{ lang.account_details }}$ {bankwire_details}
+ ${{ lang.bank_address }}$ {bankwire_address}
+
+
+
+
+
+
+
diff --git a/src/cheque.mjml b/src/cheque.mjml
new file mode 100644
index 0000000..2bc17a6
--- /dev/null
+++ b/src/cheque.mjml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+ ${{ lang.thank_you_for_shopping_with_shop_name }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.awaiting_check_payment }}$
+
+ ${{ lang.your_order_with_the_reference_order_name_has_been_placed_successfully_and_will_be_shipped_as_soon_as_we_receive_your_payment }}$
+
+
+
+
+
+ ${{ lang.you_have_selected_to_pay_by_check }}$
+
+ ${{ lang.here_are_the_bank_details_for_your_check }}$
+ ${{ lang.amount }}$ {total_paid}
+ ${{ lang.payable_to_the_order_of }}$ {cheque_name}
+ ${{ lang.please_mail_your_check_to }}$
+ {cheque_address_html}
+
+
+
+
+
+
+
diff --git a/src/config/fake.json b/src/config/fake.json
new file mode 100644
index 0000000..39b8681
--- /dev/null
+++ b/src/config/fake.json
@@ -0,0 +1,60 @@
+{
+
+ "{{$main_color}}":"#555454",
+ "{{$second_color}}":"#555454",
+ "{{$mails_img_url}}": "../../../src/img/",
+ "{{$facebook_link}}": "https://www.facebook.com/prestashop",
+ "{{$twitter_link}}": "https://www.twitter.com/prestashop",
+ "{{$googleplus_link}}": "https://plus.google.com/+prestashop",
+ "{{$instagram_link}}": "https://www.instagram.com/prestashop/",
+ "{{$youtube_link}}": "https://www.youtube.com/user/prestashop/",
+ "{{$pinterest_link}}": "https://www.pinterest.com/prestashop/",
+ "{shop_logo}": "https://img-cdn.prestashop.com/logo.png",
+ "{shop_name}": "PrestaShop",
+ "{firstname}": "John",
+ "{lastname}": "Doe",
+ "{email}": "addons@prestashop.com",
+ "{order_name}": "HG56787DJSH",
+ "{order_link}": "http://www.google.com",
+ "{date}": "2042-01-01",
+ "{payment}": "Bankwire",
+ "{carrier}": "Post",
+ "{street}": "12 rue d'Amsterdam",
+ "{postcode}": "75009",
+ "{city}": "Paris",
+ "{phone_number}": "+33 (0)1 02 03 04 05",
+ "{total_products}":"120€",
+ "{total_discounts}":"0€",
+ "{total_wrapping}":"0€",
+ "{total_shipping}":"10€",
+ "{total_tax_paid}":"15€60",
+ "{total_paid}": "145€60",
+ "{bankwire_owner}": "PrestaShop",
+ "{bankwire_details}": "Lorem ipsum dolor sit amet",
+ "{bankwire_address}": "12 rue d'Amsterdam
75009 Paris",
+ "{cheque_name}":"PrestaShop",
+ "{cheque_address_html}":"12 rue d'Amsterdam, 75009 Paris",
+ "{message}":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tincidunt sapien augue, vitae tempus ipsum pulvinar at. Suspendisse id purus ligula. Curabitur condimentum nulla tortor, vel sodales turpis feugiat at. Quisque et felis libero. Mauris at sagittis leo. Curabitur ultricies ultricies est, id sagittis nisl semper id. Nullam varius in ipsum non pellentesque. Donec euismod, diam vel tincidunt laoreet, mi erat molestie tortor, non iaculis ante elit eu urna. Integer in ligula nisl. Duis semper tortor ac enim tempus faucibus. Curabitur elit diam, malesuada eu ligula quis, pretium imperdiet ligula. In consectetur convallis est et cursus. Sed vel aliquet metus. Cras eu convallis ante, et suscipit diam. Quisque eu condimentum eros. Suspendisse sagittis enim at libero tempor fringilla.",
+ "{messages}":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam tincidunt sapien augue, vitae tempus ipsum pulvinar at. Suspendisse id purus ligula. Curabitur condimentum nulla tortor, vel sodales turpis feugiat at. Quisque et felis libero. Mauris at sagittis leo. Curabitur ultricies ultricies est, id sagittis nisl semper id. Nullam varius in ipsum non pellentesque. Donec euismod, diam vel tincidunt laoreet, mi erat molestie tortor, non iaculis ante elit eu urna. Integer in ligula nisl. Duis semper tortor ac enim tempus faucibus. Curabitur elit diam, malesuada eu ligula quis, pretium imperdiet ligula. In consectetur convallis est et cursus. Sed vel aliquet metus. Cras eu convallis ante, et suscipit diam. Quisque eu condimentum eros. Suspendisse sagittis enim at libero tempor fringilla.",
+ "{product_name}":"Smartphone",
+ "{attached_file}":"attachment.png",
+ "{nbProducts}":"3",
+ "{employee}":"Preston",
+ "{comment}":"Lorem ipsum dolor sit amet",
+ "{followup}": "http://www.prestashop.com",
+ "{id_order_return}":"FGHTYJ",
+ "{url}":"http://www.prestashop.com",
+ "{reply}":"Lorem ipsum dolor sit amet",
+ "{voucher_num}":"PRESTACODE",
+ "{voucher_amount}":"42€",
+ "{state_order_return}":"Delivered",
+ "{link}":"http://www.prestashop.com",
+ "{delivery_block_html}":"12 rue d'Amsterdam
75009 Paris",
+ "{invoice_block_html}":"12 rue d'Amsterdam
75009 Paris",
+ "{products_15}":"
demo_1 | iPod Nano - Color : Black, Disk space : 16GB | 189,68 € | 1 | 189,68 € |
",
+ "{discounts_15}":"New voucher name | 3€ |
",
+ "{virtualProducts_15}":"",
+ "{products}":"FJKIU | Preston | 60€ | 1 | 60€ |
FJKIU | Preston Customization 1 | 60€ | 1 | 60€ |
Customization 2 | 2 |
",
+ "{discounts}":"New voucher | 3€ |
",
+ "{virtualProducts}":""
+}
diff --git a/src/config/settings.json b/src/config/settings.json
new file mode 100644
index 0000000..b565f5f
--- /dev/null
+++ b/src/config/settings.json
@@ -0,0 +1,21 @@
+{
+ "product_key": "",
+ "name": "preston",
+ "version": "1.0",
+ "inputs": [
+ {
+ "type": "text",
+ "name": "var_name",
+ "default": "foo",
+ "required": false,
+ "label": {
+ "en": "English label",
+ "fr": "French label"
+ },
+ "desc": {
+ "en": "English description",
+ "fr": "French description"
+ }
+ }
+ ]
+}
diff --git a/src/contact.mjml b/src/contact.mjml
new file mode 100644
index 0000000..9fee6f2
--- /dev/null
+++ b/src/contact.mjml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.message_from_a_shop_name_customer }}$
+
+
+
+
+
+ ${{ lang.message }}$
+ {message}
+
+ ${{ lang.order_id }}$ {order_name}
+ ${{ lang.product }}$ {product_name}
+ ${{ lang.attached_file }}$ {attached_file}
+
+
+
+
+
+
+
diff --git a/src/contact_form.mjml b/src/contact_form.mjml
new file mode 100644
index 0000000..4218144
--- /dev/null
+++ b/src/contact_form.mjml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.your_message_to_shop_name_customer_service }}$
+ ${{ lang.your_message_has_been_sent_successfully }}$
+
+
+
+
+
+ ${{ lang.message }}$
+ {message}
+
+ ${{ lang.order_id }}$ {order_name}
+ ${{ lang.product }}$ {product_name}
+ ${{ lang.attached_file }}$ {attached_file}
+
+
+
+
+
+
+
diff --git a/src/credit_slip.mjml b/src/credit_slip.mjml
new file mode 100644
index 0000000..484265b
--- /dev/null
+++ b/src/credit_slip.mjml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.credit_slip_created }}$
+
+ ${{ lang.we_have_generated_a_credit_slip_in_your_name_for_order_with_the_reference_order_name }}$
+
+
+
+
+
+
+ ${{ lang.you_can_review_this_credit_slip_and_download_your_invoice_from_the_my_credit_slips_section_of_your_account_by_clicking_my_account_on_our_shop }}$
+
+
+
+
+
+
+
+
diff --git a/src/css/global.css b/src/css/global.css
new file mode 100644
index 0000000..47b7588
--- /dev/null
+++ b/src/css/global.css
@@ -0,0 +1,65 @@
+/**** Global ****/
+
+div a, div span, div strong, td a{color: {{$second_color}};}
+
+.mj-inline-links a, .mj-inline-links a span{color: #ffffff !important;}
+
+/**** Download Product ****/
+
+ul{color: #818181; font-size: 14px; margin: 0; padding: 0 0 0 25px}
+ul li{padding-bottom: 10px}
+ul li:last-child{padding-bottom: 0}
+ul li a{display: block;}
+
+/**** Order Conf ***/
+th{font-size: 13px; color: #414a56; font-weight: bold; width: 20% !important; font-family: Arial !important;}
+
+table.table-list{font-family: Arial !important;}
+table.table-list tr{background-color: #f8f8f8 !important;}
+table.table-list tr td{border: none !important; border-bottom: 1px solid #D6D4D4 !important; width: 20% !important; color: #919191 !important; padding-left: 10px !important;}
+table.table-list tr td:first-child{text-align: left !important;}
+table.table-list tr td:last-child{text-align: right !important;}
+table.table-list tr.conf_body td{border: none !important; color: #919191 !important;}
+
+/**** Media Query ****/
+
+@media only screen and (max-width: 768px) {
+ .mj-inline-links a{
+ display: block !important;
+ padding: 15px 10px 5px !important;
+ }
+ .mj-inline-links a span{margin-right: 0 !important}
+}
+
+@media only screen and (min-width: 301px) and (max-width: 500px) {
+ .table, .table-recap{width: 295px !important; margin: auto;}
+ .table-recap tr td, .conf_body td{text-align:center !important;}
+ .table-recap tr th{font-size: 10px !important}
+ .table-recap tr td{font-size: 12px !important}
+ table.table-list tr td {width: 100% !important}
+ table.table-list tr td:first-child{text-align: center !important;}
+ table.table-list tr td:last-child{text-align: center !important;}
+ }
+@media only screen and (max-device-width: 480px) {
+ .table{width: 295px!important; margin: auto;}
+ .table tr th{text-align:center!important; padding: 15px 10px !important}
+ .table td{text-align:center!important;}
+ .table td, .table th{width: auto!important;}
+ .table table, .table thead, .table tbody, .table th, .table td, .table tr {
+ display: block !important;
+ }
+ table.table-list tr td {width: 100% !important}
+ table.table-list tr td:first-child{text-align: center !important;}
+ table.table-list tr td:last-child{text-align: center !important;}
+ }
+@media only screen and (max-width: 300px){
+ .table{width: 200px !important; margin: auto;}
+ .table td{text-align:center !important;}
+ .table tr td{font-size: 12px !important}
+ .table table, .table thead, .table tbody, .table th, .table td, .table tr {
+ display: block !important;
+ }
+ table.table-list tr td {width: 100% !important}
+ table.table-list tr td:first-child{text-align: center !important;}
+ table.table-list tr td:last-child{text-align: center !important;}
+}
diff --git a/src/download_product.mjml b/src/download_product.mjml
new file mode 100644
index 0000000..2289935
--- /dev/null
+++ b/src/download_product.mjml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+ ${{ lang.thank_you_for_your_order_with_the_reference_order_name_from_shop_name }}$
+
+
+
+
+
+ ${{ lang.products_now_available_for_download }}$
+
+ ${{ lang.you_have_nbproducts_products_now_available_for_download_using_the_following_links }}$
+ {virtualProducts}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/employee_password.mjml b/src/employee_password.mjml
new file mode 100644
index 0000000..5ed7fff
--- /dev/null
+++ b/src/employee_password.mjml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.your_shop_name_login_information }}$
+
+ ${{ lang.here_is_your_personal_login_information_for_shop_name }}$
+ ${{ lang.first_name }}$ {firstname}
+ ${{ lang.last_name }}$ {lastname}
+ ${{ lang.email_address }}$ {email}
+
+
+
+
+
+
+
diff --git a/src/forward_msg.mjml b/src/forward_msg.mjml
new file mode 100644
index 0000000..13eac37
--- /dev/null
+++ b/src/forward_msg.mjml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.customer_service__forwarded_discussion }}$
+
+ ${{ lang.employee_wanted_to_forward_this_discussion_to_you }}$
+ ${{ lang.discussion_history }}$
+ {messages}
+ ${{ lang.employee_added_comment }}$
+
+
+
+
+
+
+
diff --git a/src/guest_to_customer.mjml b/src/guest_to_customer.mjml
new file mode 100644
index 0000000..144543c
--- /dev/null
+++ b/src/guest_to_customer.mjml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.your_customer_account_creation }}$
+
+ ${{ lang.your_guest_account_for_shop_name_has_been_transformed_into_a_customer_account }}$
+
+ ${{ lang.email_address }}$ {email}
+
+
+
+
+
+
+
diff --git a/src/img/facebook.png b/src/img/facebook.png
new file mode 100644
index 0000000..d291ea4
Binary files /dev/null and b/src/img/facebook.png differ
diff --git a/src/img/instagram.png b/src/img/instagram.png
new file mode 100644
index 0000000..b4c1ed6
Binary files /dev/null and b/src/img/instagram.png differ
diff --git a/src/img/twitter.png b/src/img/twitter.png
new file mode 100644
index 0000000..7e7f28c
Binary files /dev/null and b/src/img/twitter.png differ
diff --git a/src/import.mjml b/src/import.mjml
new file mode 100644
index 0000000..fe08b26
--- /dev/null
+++ b/src/import.mjml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.import_complete }}$
+
+ ${{ lang.the_file_filename_has_been_successfully_imported_to_your_shop }}$
+
+
+
+
+
+
+
diff --git a/src/in_transit.mjml b/src/in_transit.mjml
new file mode 100644
index 0000000..63c2cfb
--- /dev/null
+++ b/src/in_transit.mjml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.in_transit }}$
+
+ ${{ lang.your_order_with_the_reference_order_name_is_currently_in_transit }}$
+
+ ${{ lang.you_can_track_your_package_using_the_following_link }}$
+
+ ${{ lang.followup }}$
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/log_alert.mjml b/src/log_alert.mjml
new file mode 100644
index 0000000..089680f
--- /dev/null
+++ b/src/log_alert.mjml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.you_have_received_a_new_log_alert }}$
+
+ ${{ lang.warning_you_have_received_a_new_log_alert_in_your_back_office }}$
+
+ ${{ lang.you_can_check_for_it_in_the_tools__logs_section_of_your_back_office }}$
+
+
+
+
+
+
+
diff --git a/src/newsletter.mjml b/src/newsletter.mjml
new file mode 100644
index 0000000..159d61d
--- /dev/null
+++ b/src/newsletter.mjml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ {message}
+
+
+
+
+
+
+
diff --git a/src/order_canceled.mjml b/src/order_canceled.mjml
new file mode 100644
index 0000000..f37e96a
--- /dev/null
+++ b/src/order_canceled.mjml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.order_canceled }}$
+
+ ${{ lang.your_order_with_the_reference_order_name_from_shop_name_has_been_canceled }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/order_changed.mjml b/src/order_changed.mjml
new file mode 100644
index 0000000..d509825
--- /dev/null
+++ b/src/order_changed.mjml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.order_changed }}$
+
+ ${{ lang.your_order_with_the_reference_order_name_from_shop_name_has_been_changed_by_the_merchant }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/order_conf.mjml b/src/order_conf.mjml
new file mode 100644
index 0000000..1cc4ff3
--- /dev/null
+++ b/src/order_conf.mjml
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+ ${{ lang.thank_you_for_shopping_with_shop_name }}$
+
+
+
+
+
+ ${{ lang.order_details }}$
+
+ ${{ lang.order }}$ {order_name} ${{ lang.placed_on }}$ {date}
+ ${{ lang.payment }}$ {payment}
+
+
+
+
+
+
+
+
+ ${{ lang.reference }}$ |
+ ${{ lang.product }}$ |
+ ${{ lang.unit_price }}$ |
+ ${{ lang.quantity }}$ |
+ ${{ lang.total_price }}$ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+ ${{ lang.products }}$
+ |
+
+ {total_products}
+ |
+
+
+
+ ${{ lang.discounts }}$
+ |
+
+ {total_discounts}
+ |
+
+
+
+ ${{ lang.giftwrapping }}$
+ |
+
+ {total_wrapping}
+ |
+
+
+
+ ${{ lang.shipping }}$
+ |
+
+ {total_shipping}
+ |
+
+
+
+ ${{ lang.total_tax_paid }}$
+ |
+
+ {total_tax_paid}
+ |
+
+
+
+ ${{ lang.total_paid }}$
+ |
+
+ {total_paid}
+ |
+
+
+
+
+
+
+
+
+ ${{ lang.shipping }}$
+
+ ${{ lang.carrier }}$ {carrier}
+
+
+
+
+
+ ${{ lang.delivery_address }}$
+
+ {delivery_block_html}
+
+
+
+
+
+ ${{ lang.billing_address }}$
+
+ {invoice_block_html}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/order_conf_cart_rules.tpl b/src/order_conf_cart_rules.tpl
new file mode 100644
index 0000000..bf408a7
--- /dev/null
+++ b/src/order_conf_cart_rules.tpl
@@ -0,0 +1,14 @@
+{foreach $list as $cart_rule}
+
+
+
+ {$cart_rule['voucher_name']}
+
+ |
+
+
+ {$cart_rule['voucher_reduction']}
+
+ |
+
+{/foreach}
diff --git a/src/order_conf_product_list.tpl b/src/order_conf_product_list.tpl
new file mode 100644
index 0000000..b548d05
--- /dev/null
+++ b/src/order_conf_product_list.tpl
@@ -0,0 +1,50 @@
+
+
+
+ {$product['reference']}
+
+ |
+
+
+ {$product['name']}
+ {if count($product['customization']) == 1}
+ {foreach $product['customization'] as $customization}
+ {$customization['customization_text']}
+ {/foreach}
+ {/if}
+
+ {hook h='displayProductPriceBlock' product=$product type="unit_price"}
+
+ |
+
+
+ {$product['unit_price']}
+
+ |
+
+
+ {$product['quantity']}
+
+ |
+
+
+ {$product['price']}
+
+ |
+
+{if count($product['customization']) > 1}
+ {foreach $product['customization'] as $customization}
+
+
+
+ {$customization['customization_text']}
+
+ |
+
+
+ {if count($product['customization']) > 1}
+ {$customization['customization_quantity']}
+ {/if}
+
+ |
+
diff --git a/src/order_customer_comment.mjml b/src/order_customer_comment.mjml
new file mode 100644
index 0000000..cae1acf
--- /dev/null
+++ b/src/order_customer_comment.mjml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.message_from_a_customer }}$
+
+ ${{ lang.you_have_received_a_new_message_regarding_order_with_the_reference }}$ {order_name}
+
+ ${{ lang.customer }}$ {firstname} {lastname} ({email})
+ {message}
+
+
+
+
+
+
+
diff --git a/src/order_merchant_comment.mjml b/src/order_merchant_comment.mjml
new file mode 100644
index 0000000..55ad196
--- /dev/null
+++ b/src/order_merchant_comment.mjml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.message_from_shop_name }}$
+
+ ${{ lang.you_have_received_a_new_message_from_shop_name_regarding_order_with_the_reference_order_name }}$
+
+ ${{ lang.message }}$
+ {message}
+
+
+
+
+
+
+
diff --git a/src/order_return_state.mjml b/src/order_return_state.mjml
new file mode 100644
index 0000000..09faf50
--- /dev/null
+++ b/src/order_return_state.mjml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.return_id_order_return__update }}$
+
+ ${{ lang.we_have_updated_the_progress_on_your_return_id_order_return_the_new_status_is }}$ {state_order_return}
+
+
+
+
+
+
+
+
+
diff --git a/src/outofstock.mjml b/src/outofstock.mjml
new file mode 100644
index 0000000..97df15b
--- /dev/null
+++ b/src/outofstock.mjml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+ ${{ lang.thank_you_for_your_order_with_the_reference_order_name_from_shop_name }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.items_out_of_stock }}$
+
+ ${{ lang.unfortunately_one_or_more_items_are_currently_out_of_stock_this_may_cause_a_slight_delay_in_your_delivery_please_accept_our_apologies_and_rest_assured_that_we_are_working_hard_to_rectify_this }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/partials/account.mjml b/src/partials/account.mjml
new file mode 100644
index 0000000..0e000af
--- /dev/null
+++ b/src/partials/account.mjml
@@ -0,0 +1,7 @@
+
+
+
+ ${{ lang.you_can_review_your_order_and_download_your_invoice_from_the_order_history_section_of_your_customer_account_by_clicking_my_account_on_our_shop }}$
+
+
+
diff --git a/src/partials/footer.mjml b/src/partials/footer.mjml
new file mode 100644
index 0000000..1e0e891
--- /dev/null
+++ b/src/partials/footer.mjml
@@ -0,0 +1,21 @@
+
+
+ {{if $twitter}}
+
+
+
+ {{/if}}
+ {{if $facebook}}
+
+
+
+ {{/if}}
+
+
+
+
+
+
+ ${{ lang.shop_name_powered_by_prestashop }}$
+
+
diff --git a/src/partials/guest_to_customer.mjml b/src/partials/guest_to_customer.mjml
new file mode 100644
index 0000000..b4334b7
--- /dev/null
+++ b/src/partials/guest_to_customer.mjml
@@ -0,0 +1,7 @@
+
+
+
+ ${{ lang.if_you_have_a_guest_account_you_can_follow_your_order_via_the_guest_tracking_section_on_our_shop }}$
+
+
+
diff --git a/src/partials/header.mjml b/src/partials/header.mjml
new file mode 100644
index 0000000..cd94a48
--- /dev/null
+++ b/src/partials/header.mjml
@@ -0,0 +1,9 @@
+
+ ${{ lang.message_from_shop_name }}$
+
+
+
+
+
+
+
diff --git a/src/partials/logo.mjml b/src/partials/logo.mjml
new file mode 100644
index 0000000..df5e0e0
--- /dev/null
+++ b/src/partials/logo.mjml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ |
+
+
+
diff --git a/src/password.mjml b/src/password.mjml
new file mode 100644
index 0000000..9a5b217
--- /dev/null
+++ b/src/password.mjml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.your_new_shop_name_login_details }}$
+
+ ${{ lang.email_address }}$ {email}
+
+
+
+
+
+
+ ${{ lang.you_can_review_this_credit_slip_and_download_your_invoice_from_the_my_credit_slips_section_of_your_account_by_clicking_my_account_on_our_shop }}$
+
+
+
+ ${{ lang.if_you_have_a_guest_account_you_can_follow_your_order_via_the_guest_tracking_section_on_our_shop }}$
+
+
+
+
+
+
+
+
diff --git a/src/password_query.mjml b/src/password_query.mjml
new file mode 100644
index 0000000..dd8a92a
--- /dev/null
+++ b/src/password_query.mjml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.password_reset_request_for_shop_name }}$
+
+ ${{ lang.you_have_requested_to_reset_your_shop_name_login_details }}$
+
+ ${{ lang.please_note_that_this_will_change_your_current_password }}$
+
+ ${{ lang.to_confirm_this_action_please_use_the_following_link }}$
+ {url}
+
+
+
+
+
+
+
diff --git a/src/payment.mjml b/src/payment.mjml
new file mode 100644
index 0000000..794e98f
--- /dev/null
+++ b/src/payment.mjml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.payment_processed }}$
+
+ ${{ lang.your_payment_for_order_with_the_reference_order_name_was_successfully_processed }}$
+
+ ${{ lang.thank_you_for_shopping_with_shop_name }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/payment_error.mjml b/src/payment_error.mjml
new file mode 100644
index 0000000..4623c90
--- /dev/null
+++ b/src/payment_error.mjml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.payment_processing_error }}$
+
+ ${{ lang.there_is_a_problem_with_your_payment_for_shop_name_order_with_the_reference_order_name_please_contact_us_at_your_earliest_convenience }}$
+
+ ${{ lang.we_cannot_ship_your_order_until_we_receive_your_payment }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/preparation.mjml b/src/preparation.mjml
new file mode 100644
index 0000000..e1a8f0f
--- /dev/null
+++ b/src/preparation.mjml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.processing }}$
+
+ ${{ lang.we_are_currently_processing_your_shop_name_order_with_the_reference_order_name }}$
+
+ ${{ lang.thank_you_for_shopping_with_shop_name }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/preview.jpg b/src/preview.jpg
new file mode 100644
index 0000000..a1845b8
Binary files /dev/null and b/src/preview.jpg differ
diff --git a/src/refund.mjml b/src/refund.mjml
new file mode 100644
index 0000000..fee90e0
--- /dev/null
+++ b/src/refund.mjml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.refund_processed }}$
+
+ ${{ lang.we_have_processed_your_shop_name_refund_for_order_with_the_reference_order_name }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/reply_msg.mjml b/src/reply_msg.mjml
new file mode 100644
index 0000000..901d2d8
--- /dev/null
+++ b/src/reply_msg.mjml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ {reply}
+
+
+
+
+
+
+ ${{ lang.please_do_not_reply_directly_to_this_email_we_will_not_receive_it }}$
+
+
+
+ ${{ lang.in_order_to_reply_please_use_the_following_link_link }}$
+
+
+
+
+
+
+
+
diff --git a/src/shipped.mjml b/src/shipped.mjml
new file mode 100644
index 0000000..b0b13a3
--- /dev/null
+++ b/src/shipped.mjml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.shipped }}$
+
+ ${{ lang.your_order_with_the_reference_order_name_has_been_shipped }}$
+
+ ${{ lang.thank_you_for_shopping_with_shop_name }}$
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test.mjml b/src/test.mjml
new file mode 100644
index 0000000..d4edec7
--- /dev/null
+++ b/src/test.mjml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hello }}$
+
+
+
+
+
+ ${{ lang.this_is_a_test_email_from_your_shop_if_you_can_read_this_the_test_was_successful }}$
+
+
+
+
+
+
+
diff --git a/src/voucher.mjml b/src/voucher.mjml
new file mode 100644
index 0000000..945a41e
--- /dev/null
+++ b/src/voucher.mjml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.order_order_name }}$ - ${{ lang.voucher_created }}$
+
+ ${{ lang.a_voucher_has_been_created_in_your_name_as_a_result_of_your_order_with_the_reference_order_name }}$
+
+ ${{ lang.voucher_code_voucher_num_in_the_amount_of_voucher_amount }}$
+
+ ${{ lang.simply_copypaste_this_code_during_the_payment_process_for_your_next_order }}$
+
+
+
+
+
+
+
diff --git a/src/voucher_new.mjml b/src/voucher_new.mjml
new file mode 100644
index 0000000..665c8f7
--- /dev/null
+++ b/src/voucher_new.mjml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${{ lang.hi_firstname_lastname }}$
+
+
+
+
+
+ ${{ lang.this_is_to_inform_you_about_the_creation_of_a_voucher }}$
+
+ ${{ lang.here_is_the_code_of_your_voucher }}$ {voucher_num}
+
+ ${{ lang.simply_copypaste_this_code_during_the_payment_process_for_your_next_order }}$
+
+
+
+
+
+
+