save cartsguru module

This commit is contained in:
Srv Privilege de marque 2017-05-31 16:44:07 +02:00
parent a196359377
commit 1d15109dca
61 changed files with 4346 additions and 958 deletions

View File

@ -24,227 +24,226 @@
* International Registered Trademark & Property of PrestaShop SA
*/
if ((bool)Configuration::get('PS_MOBILE_DEVICE'))
require_once(_PS_MODULE_DIR_ . '/mobile_theme/Mobile_Detect.php');
if ((bool)Configuration::get('PS_MOBILE_DEVICE') && !class_exists('Mobile_Detect')) {
require_once(_PS_MODULE_DIR_ . '/mobile_theme/Mobile_Detect.php');
}
// Retro 1.3, 'class_exists' cause problem with autoload...
if (version_compare(_PS_VERSION_, '1.4', '<'))
{
// Not exist for 1.3
class Shop extends ObjectModel
{
public $id = 1;
public $id_shop_group = 1;
if (version_compare(_PS_VERSION_, '1.4', '<')) {
// Not exist for 1.3
class Shop extends ObjectModel
{
public $id = 1;
public $id_shop_group = 1;
public function __construct()
{
}
public function __construct()
{
}
public static function getShops()
{
return array(
array('id_shop' => 1, 'name' => 'Default shop')
);
}
public static function getShops()
{
return array(
array('id_shop' => 1, 'name' => 'Default shop')
);
}
public static function getCurrentShop()
{
return 1;
}
}
class Logger
{
public static function AddLog($message, $severity = 2)
{
$fp = fopen(dirname(__FILE__).'/../logs.txt', 'a+');
fwrite($fp, '['.(int)$severity.'] '.Tools::safeOutput($message));
fclose($fp);
}
}
public static function getCurrentShop()
{
return 1;
}
}
class Logger
{
public static function AddLog($message, $severity = 2)
{
$fp = fopen(dirname(__FILE__).'/../logs.txt', 'a+');
fwrite($fp, '['.(int)$severity.'] '.Tools::safeOutput($message));
fclose($fp);
}
}
}
// Not exist for 1.3 and 1.4
class Context
{
/**
* @var Context
*/
protected static $instance;
/**
* @var Context
*/
protected static $instance;
/**
* @var Cart
*/
public $cart;
/**
* @var Cart
*/
public $cart;
/**
* @var Customer
*/
public $customer;
/**
* @var Customer
*/
public $customer;
/**
* @var Cookie
*/
public $cookie;
/**
* @var Cookie
*/
public $cookie;
/**
* @var Link
*/
public $link;
/**
* @var Link
*/
public $link;
/**
* @var Country
*/
public $country;
/**
* @var Country
*/
public $country;
/**
* @var Employee
*/
public $employee;
/**
* @var Employee
*/
public $employee;
/**
* @var Controller
*/
public $controller;
/**
* @var Controller
*/
public $controller;
/**
* @var Language
*/
public $language;
/**
* @var Language
*/
public $language;
/**
* @var Currency
*/
public $currency;
/**
* @var Currency
*/
public $currency;
/**
* @var AdminTab
*/
public $tab;
/**
* @var AdminTab
*/
public $tab;
/**
* @var Shop
*/
public $shop;
/**
* @var Shop
*/
public $shop;
/**
* @var Smarty
*/
public $smarty;
/**
* @var Smarty
*/
public $smarty;
/**
* @ var Mobile Detect
*/
public $mobile_detect;
/**
* @ var Mobile Detect
*/
public $mobile_detect;
/**
* @var boolean|string mobile device of the customer
*/
protected $mobile_device;
/**
* @var boolean|string mobile device of the customer
*/
protected $mobile_device;
public function __construct()
{
global $cookie, $cart, $smarty, $link;
public function __construct()
{
global $cookie, $cart, $smarty, $link;
$this->tab = null;
$this->tab = null;
$this->cookie = $cookie;
$this->cart = $cart;
$this->smarty = $smarty;
$this->link = $link;
$this->cookie = $cookie;
$this->cart = $cart;
$this->smarty = $smarty;
$this->link = $link;
$this->controller = new ControllerBackwardModule();
if (is_object($cookie))
{
$this->currency = new Currency((int)$cookie->id_currency);
$this->language = new Language((int)$cookie->id_lang);
$this->country = new Country((int)$cookie->id_country);
$this->customer = new CustomerBackwardModule((int)$cookie->id_customer);
$this->employee = new Employee((int)$cookie->id_employee);
}
else
{
$this->currency = null;
$this->language = null;
$this->country = null;
$this->customer = null;
$this->employee = null;
}
$this->controller = new ControllerBackwardModule();
if (is_object($cookie)) {
$this->currency = new Currency((int)$cookie->id_currency);
$this->language = new Language((int)$cookie->id_lang);
$this->country = new Country((int)$cookie->id_country);
$this->customer = new CustomerBackwardModule((int)$cookie->id_customer);
$this->employee = new Employee((int)$cookie->id_employee);
} else {
$this->currency = null;
$this->language = null;
$this->country = null;
$this->customer = null;
$this->employee = null;
}
$this->shop = new ShopBackwardModule();
$this->shop = new ShopBackwardModule();
if ((bool)Configuration::get('PS_MOBILE_DEVICE'))
$this->mobile_detect = new Mobile_Detect();
}
if ((bool)Configuration::get('PS_MOBILE_DEVICE')) {
$this->mobile_detect = new Mobile_Detect();
}
}
public function getMobileDevice()
{
if (is_null($this->mobile_device))
{
$this->mobile_device = false;
if ($this->checkMobileContext())
{
switch ((int)Configuration::get('PS_MOBILE_DEVICE'))
{
case 0: // Only for mobile device
if ($this->mobile_detect->isMobile() && !$this->mobile_detect->isTablet())
$this->mobile_device = true;
break;
case 1: // Only for touchpads
if ($this->mobile_detect->isTablet() && !$this->mobile_detect->isMobile())
$this->mobile_device = true;
break;
case 2: // For touchpad or mobile devices
if ($this->mobile_detect->isMobile() || $this->mobile_detect->isTablet())
$this->mobile_device = true;
break;
}
}
}
public function getMobileDevice()
{
if (is_null($this->mobile_device)) {
$this->mobile_device = false;
if ($this->checkMobileContext()) {
switch ((int)Configuration::get('PS_MOBILE_DEVICE')) {
case 0: // Only for mobile device
if ($this->mobile_detect->isMobile() && !$this->mobile_detect->isTablet()) {
$this->mobile_device = true;
}
break;
case 1: // Only for touchpads
if ($this->mobile_detect->isTablet() && !$this->mobile_detect->isMobile()) {
$this->mobile_device = true;
}
break;
case 2: // For touchpad or mobile devices
if ($this->mobile_detect->isMobile() || $this->mobile_detect->isTablet()) {
$this->mobile_device = true;
}
break;
}
}
}
return $this->mobile_device;
}
return $this->mobile_device;
}
protected function checkMobileContext()
{
return isset($_SERVER['HTTP_USER_AGENT'])
&& (bool)Configuration::get('PS_MOBILE_DEVICE')
&& !Context::getContext()->cookie->no_mobile;
}
protected function checkMobileContext()
{
return isset($_SERVER['HTTP_USER_AGENT'])
&& (bool)Configuration::get('PS_MOBILE_DEVICE')
&& !Context::getContext()->cookie->no_mobile;
}
/**
* Get a singleton context
*
* @return Context
*/
public static function getContext()
{
if (!isset(self::$instance))
self::$instance = new Context();
return self::$instance;
}
/**
* Get a singleton context
*
* @return Context
*/
public static function getContext()
{
if (!isset(self::$instance)) {
self::$instance = new Context();
}
return self::$instance;
}
/**
* Clone current context
*
* @return Context
*/
public function cloneContext()
{
return clone $this;
}
/**
* Clone current context
*
* @return Context
*/
public function cloneContext()
{
return clone $this;
}
/**
* @return int Shop context type (Shop::CONTEXT_ALL, etc.)
*/
public static function shop()
{
if (!self::$instance->shop->getContextType())
return ShopBackwardModule::CONTEXT_ALL;
return self::$instance->shop->getContextType();
}
/**
* @return int Shop context type (Shop::CONTEXT_ALL, etc.)
*/
public static function shop()
{
if (!self::$instance->shop->getContextType()) {
return ShopBackwardModule::CONTEXT_ALL;
}
return self::$instance->shop->getContextType();
}
}
/**
@ -252,37 +251,37 @@ class Context
*/
class ShopBackwardModule extends Shop
{
const CONTEXT_ALL = 1;
const CONTEXT_ALL = 1;
public $id = 1;
public $id_shop_group = 1;
public $id = 1;
public $id_shop_group = 1;
public function getContextType()
{
return ShopBackwardModule::CONTEXT_ALL;
}
public function getContextType()
{
return ShopBackwardModule::CONTEXT_ALL;
}
// Simulate shop for 1.3 / 1.4
public function getID()
{
return 1;
}
// Simulate shop for 1.3 / 1.4
public function getID()
{
return 1;
}
/**
* Get shop theme name
*
* @return string
*/
public function getTheme()
{
return _THEME_NAME_;
}
/**
* Get shop theme name
*
* @return string
*/
public function getTheme()
{
return _THEME_NAME_;
}
public function isFeatureActive()
{
return false;
}
public function isFeatureActive()
{
return false;
}
}
/**
@ -291,33 +290,33 @@ class ShopBackwardModule extends Shop
*/
class ControllerBackwardModule
{
/**
* @param $js_uri
* @return void
*/
public function addJS($js_uri)
{
Tools::addJS($js_uri);
}
/**
* @param $js_uri
* @return void
*/
public function addJS($js_uri)
{
Tools::addJS($js_uri);
}
/**
* @param $css_uri
* @param string $css_media_type
* @return void
*/
public function addCSS($css_uri, $css_media_type = 'all')
{
Tools::addCSS($css_uri, $css_media_type);
}
public function addJquery()
{
if (_PS_VERSION_ < '1.5')
$this->addJS(_PS_JS_DIR_.'jquery/jquery-1.4.4.min.js');
elseif (_PS_VERSION_ >= '1.5')
$this->addJS(_PS_JS_DIR_.'jquery/jquery-1.7.2.min.js');
}
/**
* @param $css_uri
* @param string $css_media_type
* @return void
*/
public function addCSS($css_uri, $css_media_type = 'all')
{
Tools::addCSS($css_uri, $css_media_type);
}
public function addJquery()
{
if (_PS_VERSION_ < '1.5') {
$this->addJS(_PS_JS_DIR_.'jquery/jquery-1.4.4.min.js');
} elseif (_PS_VERSION_ >= '1.5') {
$this->addJS(_PS_JS_DIR_.'jquery/jquery-1.7.2.min.js');
}
}
}
/**
@ -326,22 +325,24 @@ class ControllerBackwardModule
*/
class CustomerBackwardModule extends Customer
{
public $logged = false;
/**
* Check customer informations and return customer validity
*
* @since 1.5.0
* @param boolean $with_guest
* @return boolean customer validity
*/
public function isLogged($with_guest = false)
{
if (!$with_guest && $this->is_guest == 1)
return false;
public $logged = false;
/**
* Check customer informations and return customer validity
*
* @since 1.5.0
* @param boolean $with_guest
* @return boolean customer validity
*/
public function isLogged($with_guest = false)
{
if (!$with_guest && $this->is_guest == 1) {
return false;
}
/* Customer is valid only if it can be load and if object password is the same as database one */
if ($this->logged == 1 && $this->id && Validate::isUnsignedId($this->id) && Customer::checkPassword($this->id, $this->passwd))
return true;
return false;
}
/* Customer is valid only if it can be load and if object password is the same as database one */
if ($this->logged == 1 && $this->id && Validate::isUnsignedId($this->id) && Customer::checkPassword($this->id, $this->passwd)) {
return true;
}
return false;
}
}

View File

@ -29,20 +29,21 @@
*/
class BWDisplay extends FrontController
{
// Assign template, on 1.4 create it else assign for 1.5
public function setTemplate($template)
{
if (_PS_VERSION_ >= '1.5')
parent::setTemplate($template);
else
$this->template = $template;
}
// Assign template, on 1.4 create it else assign for 1.5
public function setTemplate($template)
{
if (_PS_VERSION_ >= '1.5') {
parent::setTemplate($template);
} else {
$this->template = $template;
}
}
// Overload displayContent for 1.4
public function displayContent()
{
parent::displayContent();
// Overload displayContent for 1.4
public function displayContent()
{
parent::displayContent();
echo Context::getContext()->smarty->fetch($this->template);
}
echo Context::getContext()->smarty->fetch($this->template);
}
}

View File

@ -30,25 +30,25 @@
*/
// Get out if the context is already defined
if (!in_array('Context', get_declared_classes()))
require_once(dirname(__FILE__).'/Context.php');
if (!in_array('Context', get_declared_classes())) {
require_once(dirname(__FILE__).'/Context.php');
}
// Get out if the Display (BWDisplay to avoid any conflict)) is already defined
if (!in_array('BWDisplay', get_declared_classes()))
require_once(dirname(__FILE__).'/Display.php');
if (!in_array('BWDisplay', get_declared_classes())) {
require_once(dirname(__FILE__).'/Display.php');
}
// If not under an object we don't have to set the context
if (!isset($this))
return;
else if (isset($this->context))
{
// If we are under an 1.5 version and backoffice, we have to set some backward variable
if (_PS_VERSION_ >= '1.5' && isset($this->context->employee->id) && $this->context->employee->id && isset(AdminController::$currentIndex) && !empty(AdminController::$currentIndex))
{
global $currentIndex;
$currentIndex = AdminController::$currentIndex;
}
return;
if (!isset($this)) {
return;
} elseif (isset($this->context)) {
// If we are under an 1.5 version and backoffice, we have to set some backward variable
if (_PS_VERSION_ >= '1.5' && isset($this->context->employee->id) && $this->context->employee->id && isset(AdminController::$currentIndex) && !empty(AdminController::$currentIndex)) {
global $currentIndex;
$currentIndex = AdminController::$currentIndex;
}
return;
}
$this->context = Context::getContext();

View File

@ -2,20 +2,10 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.0.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.0.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.5,1.6
* + Cloud compatible & tested
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

File diff suppressed because it is too large Load Diff

View File

@ -2,25 +2,13 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
abstract class CartGuruMapperAbstract
abstract class CartsGuruMapperAbstract
{
public $id_lang;
public $id_shop_group;

View File

@ -2,27 +2,16 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
class CartGuruAccountMapper extends CartGuruMapperAbstract
class CartsGuruAccountMapper extends CartsGuruMapperAbstract
{
/**
* (non-PHPdoc)
* @see CartGuruMapperAbstract::mappObject()
* @see CartsGuruMapperAbstract::mappObject()
*/
public function mappObject($customer, $params)
{
@ -39,7 +28,7 @@ class CartGuruAccountMapper extends CartGuruMapperAbstract
$country_iso_code = $address['country_iso_code'];
}
return array(
'accountId' => (string) $customer->id, // Account id of the customer
'accountId' => $this->notEmpty($customer->email), // Account id of the customer
'civility' => $gender, // Use string in this list : 'mister','madam'
'lastname' => $this->notEmpty($lastname), // Lastname of the buyer
'firstname' => $this->notEmpty($firstname), // Firstname of the buyer

View File

@ -2,38 +2,32 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
class CartGuruCartMapper extends CartGuruMapperAbstract
class CartsGuruCartMapper extends CartsGuruMapperAbstract
{
/**
* (non-PHPdoc)
* @see CartGuruMapperAbstract::mappObject()
* @see CartsGuruMapperAbstract::mappObject()
*/
public function mappObject($cart, $params)
{
$account_mapped = null;
// Check if we have customer data
if (array_key_exists('customer', $params)) {
$account_mapped = $params['customer'];
}
$customerGroups = Customer::getGroupsStatic((int) $cart->id_customer);
if (defined(_CARTSGURU_ONLY_GROUP_) && !in_array(_CARTSGURU_ONLY_GROUP_, $customerGroups)) {
if (defined('CARTSGURU_ONLY_GROUP') && !in_array(CARTSGURU_ONLY_GROUP, $customerGroups)) {
return null;
}
$cart_items = $cart->getProducts();
$items = array();
$product_mapper = new CartGuruProductMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
$product_mapper = new CartsGuruProductMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
foreach ($cart_items as $cart_item) {
$params = array('id_product_attribute' => (int)$cart_item['id_product_attribute']);
$product = new Product($cart_item['id_product'], false, $this->id_lang);
@ -43,9 +37,12 @@ class CartGuruCartMapper extends CartGuruMapperAbstract
$product_mapped['totalATI'] = (float) $cart_item['total_wt'];
$items[] = $product_mapped;
}
$customer = new Customer((int) $cart->id_customer);
$account_mapper = new CartGuruAccountMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
$account_mapped = $account_mapper->create($customer);
if (!$account_mapped) {
$customer = new Customer((int) $cart->id_customer);
$account_mapper = new CartsGuruAccountMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
$account_mapped = $account_mapper->create($customer);
}
$currency = new Currency((int)$cart->id_currency);
@ -67,10 +64,32 @@ class CartGuruCartMapper extends CartGuruMapperAbstract
return null;
}
// Add Custom fields
$cart_mapped['custom'] = $this->getCustomFields($cart, $cart_mapped, $customerGroups);
return $cart_mapped;
}
public function getCartRecoverUrl($cart, $step = 1)
/**
* Get custom fields of cart, can be overrided for custom use
*
* @param $cart
* @param $cart_mapped
* @param $customerGroups
* @return array
*/
protected function getCustomFields($cart, $cart_mapped, $customerGroups)
{
$context = Context::getContext();
return array(
'language' => $context->language->iso_code,
'customerGroup' => implode(',', CartsGuruHelper::getGroupNames($customerGroups, $context->language)),
'isNewCustomer' => CartsGuruHelper::isNewCustomer($cart_mapped['email'])
);
}
private function getCartRecoverUrl($cart, $step = 1)
{
$order_process = Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order';
$url = '';

View File

@ -0,0 +1,49 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
class CartsGuruHelper
{
/**
* Check count of orders to know if it's a new customer
*
* @param string $email Customer email
* @param boolean $excludeOne Exclude current order, so still a new customer just after first order
*
* @return boolean Returns if it's a new customer
*/
public static function isNewCustomer($email, $excludeOne = false)
{
$isMultiStoreSupported = version_compare(_PS_VERSION_, '1.5.0', '>=');
$sql = "SELECT o.id_order AS id FROM " . _DB_PREFIX_ . "orders o JOIN " . _DB_PREFIX_ . "customer c ON o.id_customer = c.id_customer WHERE c.email = '" . pSQL($email) . "'";
// Need filter on the good shop
if ($isMultiStoreSupported) {
$id_shop = (int)Context::getContext()->shop->id;
$sql .= ' and o.id_shop = ' . (int)$id_shop;
}
$orders = Db::getInstance()->ExecuteS($sql);
return $excludeOne ? count($orders) <= 1 : count($orders) === 0;
}
public static function getGroupNames($customerGroups, $language)
{
$customerGroupNames = array();
foreach ($customerGroups as $id) {
$group = new Group((int)$id);
if ($group) {
array_push($customerGroupNames, $group->name[(int)$language->id]);
}
}
return $customerGroupNames;
}
}

View File

@ -0,0 +1,167 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
class CartsGuruImageManager
{
/**
* Max execution time for image generation
*
* @var int
*/
const MAX_EXECUTION_TIME = 7200;
const THUMB_SIZE = 120;
public static function sortImageByWidth($i, $j)
{
return $i['width'] > $j['width'];
}
public static function findProductThumbnailName()
{
$imageTypes = ImageType::getImagesTypes('products');
$filtered = array();
foreach ($imageTypes as $imageType) {
if ($imageType['height'] >= self::THUMB_SIZE && $imageType['width'] >= self::THUMB_SIZE) {
$filtered[] = $imageType;
}
}
if (empty($filtered)) {
return null;
}
usort($filtered, array(
"CartsGuruImageManager",
"sortImageByWidth"
));
return $filtered[0]['name'];
}
public static function initProductThumbnail()
{
$imageType = self::findProductThumbnailName();
if ($imageType == null) {
self::insertCartsGuruImageType();
Configuration::updateValue('CARTSG_IMAGE_GENERATE', 0);
Configuration::updateValue('CARTSG_IMAGE_TYPE', 'cartsguru');
} else {
Configuration::updateValue('CARTSG_IMAGE_GENERATE', 1);
Configuration::updateValue('CARTSG_IMAGE_TYPE', $imageType);
}
}
public static function insertCartsGuruImageType()
{
$image_type = new ImageType();
$image_type->name = 'cartsguru';
$image_type->width = 120;
$image_type->height = 120;
$image_type->products = 1;
$image_type->categories = 0;
$image_type->manufacturers = 0;
$image_type->suppliers = 0;
$image_type->scenes = 0;
$image_type->stores = 0;
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$image_type->store = 0;
}
$image_type->add();
}
public static function deleteCartsGuruImageType()
{
$image_type = self::getCartsGuruImageType();
if ($image_type) {
self::deleteProductImageCG();
$imageType = new ImageType((int)$image_type['id_image_type']);
if (Validate::isLoadedObject($imageType)) {
$imageType->delete();
}
}
return true;
}
public static function getCartsGuruImageType()
{
return ImageType::getByNameNType('cartsguru', 'products');
}
public static function deleteProductImageCG()
{
$image_type = self::getCartsGuruImageType();
if (!$image_type) {
return;
}
$productsImages = Image::getAllImages();
foreach ($productsImages as $image) {
$imageObj = new Image($image['id_image']);
$imageObj->id_product = $image['id_product'];
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$img_folder = _PS_PROD_IMG_DIR_ . $image['id_product'] . '-' . $image['id_image'];
} else {
$img_folder = _PS_PROD_IMG_DIR_ . $imageObj->getImgFolder();
}
if (file_exists($img_folder)) {
$toDel = scandir($img_folder);
foreach ($toDel as $d) {
if (preg_match('/^[0-9]+\-' . $image_type['name'] . '\.jpg$/', $d)) {
if (file_exists($img_folder . $d)) {
unlink($img_folder . $d);
}
}
}
}
}
}
public static function generateProductImageCG()
{
$start_time = time();
ini_set('max_execution_time', self::MAX_EXECUTION_TIME); // ini_set may be disabled, we need the real value
$max_execution_time = (int)ini_get('max_execution_time');
$errors = array();
$img_cg_type = self::getCartsGuruImageType();
foreach (Image::getAllImages() as $image) {
$imageObj = new Image($image['id_image']);
$existing_img = '';
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$existing_img = _PS_PROD_IMG_DIR_ . $image['id_product'] . '-' . $image['id_image'] . '.jpg';
} else {
$existing_img = _PS_PROD_IMG_DIR_ . $imageObj->getExistingImgPath() . '.jpg';
}
if (file_exists($existing_img) && filesize($existing_img)) {
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$to_img_file_cg = _PS_PROD_IMG_DIR_ . $image['id_product'] . '-' . $image['id_image'] . '-' . Tools::stripslashes($img_cg_type['name']) . '.jpg';
} else {
$to_img_file_cg = _PS_PROD_IMG_DIR_ . $imageObj->getExistingImgPath() . '-' . Tools::stripslashes($img_cg_type['name']) . '.jpg';
}
if (!file_exists($to_img_file_cg)) {
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
if (!imageResize($existing_img, $to_img_file_cg, (int)$img_cg_type['width'], (int)$img_cg_type['height'])) {
$errors[] = sprintf('Original image is corrupt (%s) for product ID %2$d or bad permission on folder', $existing_img, (int)$imageObj->id_product);
}
} else {
if (!ImageManager::resize($existing_img, $to_img_file_cg, (int)$img_cg_type['width'], (int)$img_cg_type['height'])) {
$errors[] = sprintf(Tools::displayError('Original image is corrupt (%s) for product ID %2$d or bad permission on folder'), $existing_img, (int)$imageObj->id_product);
}
}
}
} else {
$errors[] = sprintf('Original image is missing or empty (%1$s) for product ID %2$d', $existing_img, (int)$imageObj->id_product);
}
if (time() - $start_time > $max_execution_time - 4) {
$errors[] = 'timeout';
return $errors;
}
}
if (!empty($errors)) {
return $errors;
}
Configuration::updateValue('CARTSG_IMAGE_GENERATE', 1);
return true;
}
}

View File

@ -2,37 +2,26 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
class CartGuruOrderMapper extends CartGuruMapperAbstract
class CartsGuruOrderMapper extends CartsGuruMapperAbstract
{
/**
* @see CartGuruMapperAbstract::mappObject()
* @see CartsGuruMapperAbstract::mappObject()
*/
public function mappObject($order, $params)
{
$customerGroups = Customer::getGroupsStatic((int) $order->id_customer);
if (defined(_CARTSGURU_ONLY_GROUP_) && !in_array(_CARTSGURU_ONLY_GROUP_, $customerGroups)) {
if (defined('CARTSGURU_ONLY_GROUP') && !in_array(CARTSGURU_ONLY_GROUP, $customerGroups)) {
return null;
}
$order_items = $order->getProducts();
$items = array();
$product_mapper = new CartGuruProductMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
$product_mapper = new CartsGuruProductMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
foreach ($order_items as $order_item) {
$pmap_params = array('id_product_attribute' => $order_item['product_attribute_id']);
$product = new Product($order_item['product_id'], false, $this->id_lang);
@ -51,7 +40,7 @@ class CartGuruOrderMapper extends CartGuruMapperAbstract
}
$customer = new Customer((int) $order->id_customer);
$account_mapper = new CartGuruAccountMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
$account_mapper = new CartsGuruAccountMapper($this->id_lang, $this->id_shop_group, $this->id_shop);
$account_mapped = $account_mapper->create($customer, $params);
$status_cg_name = 'Undefined';
$order_state_id = 0;
@ -82,10 +71,38 @@ class CartGuruOrderMapper extends CartGuruMapperAbstract
'currency' => (string) $currency->iso_code,
'items' => $items
);
if (!empty($order->source)) {
$order_mapped['source'] = $order->source;
}
$order_mapped = array_merge($order_mapped, $account_mapped);
// Add Custom fields
$order_mapped['custom'] = $this->getCustomFields($order, $order_mapped, $customerGroups);
return $order_mapped;
}
/**
* Get custom fields of order, can be overrided for custom use
*
* @param $order
* @param $order_mapped
* @param $customerGroups
* @return array
*/
protected function getCustomFields($order, $order_mapped, $customerGroups)
{
$context = Context::getContext();
return array(
'language' => $context->language->iso_code,
'customerGroup' => implode(',', CartsGuruHelper::getGroupNames($customerGroups, $context->language)),
'isNewCustomer' => CartsGuruHelper::isNewCustomer($order_mapped['email'], true)
);
}
/**
* This method map prestashop status to api status
* priority

View File

@ -2,27 +2,28 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
class CartGuruProductMapper extends CartGuruMapperAbstract
class CartsGuruProductMapper extends CartsGuruMapperAbstract
{
public function getImageSizeName()
{
if (defined('CARTSGURU_IMAGE_SIZE')) {
return CARTSGURU_IMAGE_SIZE;
}
//since plug
$type = Configuration::get('CARTSG_IMAGE_TYPE');
return $type ? $type : 'cartsguru';
}
/**
* (non-PHPdoc)
* @see CartGuruMapperAbstract::mappObject()
* @see CartsGuruMapperAbstract::mappObject()
*/
public function mappObject($product, $params)
{
@ -50,7 +51,7 @@ class CartGuruProductMapper extends CartGuruMapperAbstract
$best_image = $this->getBestImageProduct($product->id, $id_product_attribute);
if ($best_image && (int)$best_image['id_image']) {
$ids = $product->id.'-'.$best_image['id_image'];
$image_cover_url = $this->link->getImageLink($product->link_rewrite, $ids, 'cartsguru');
$image_cover_url = $this->link->getImageLink($product->link_rewrite, $ids, $this->getImageSizeName());
}
return (array(
'id' => (string) $product->id, // SKU or product id

View File

@ -2,25 +2,13 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
class CartGuruRAPI implements Iterator, ArrayAccess
class CartsGuruRAPI implements Iterator, ArrayAccess
{
private $site_id;
private $auth_key;
@ -29,6 +17,8 @@ class CartGuruRAPI implements Iterator, ArrayAccess
public $handle; // cURL resource handle.
public $isOldCurl; // Test result for curl version
// Populated after execution:
public $response; // Response body.
public $headers; // Parsed reponse header object.
@ -45,13 +35,19 @@ class CartGuruRAPI implements Iterator, ArrayAccess
const API_PATH_CARTS = '/carts';
const API_PATH_SUBSCRIBE = '/customers';
const API_PATH_PROGRESS = '/prestashop/setup-progress';
const API_PATH_REGISTER = '/sites/:siteId/register-plugin';
const API_PATH_STATISTICS = '/sites/:siteId/stats/summary';
const API_PATH_IMPORT_ORDERS = '/import/orders';
const API_PATH_IMPORT_CARTS = '/import/carts';
public function __construct($site_id, $auth_key, $options = array())
public function __construct($site_id = null, $auth_key = '', $options = array())
{
$this->site_id = $site_id;
$this->auth_key = $auth_key;
@ -78,6 +74,9 @@ class CartGuruRAPI implements Iterator, ArrayAccess
if (array_key_exists('decoders', $options)) {
$this->options['decoders'] = array_merge($default_options['decoders'], $options['decoders']);
}
$info = curl_version();
$this->isOldCurl = version_compare($info["version"], '7.35.0', '<');
}
public function setOption($key, $value)
@ -140,12 +139,12 @@ class CartGuruRAPI implements Iterator, ArrayAccess
public function offsetSet($key, $value)
{
throw new CartGuruRAPIException("Decoded response data is immutable.");
throw new CartsGuruRAPIException("Decoded response data is immutable.");
}
public function offsetUnset($key)
{
throw new CartGuruRAPIException("Decoded response data is immutable.");
throw new CartsGuruRAPIException("Decoded response data is immutable.");
}
// Request methods:
@ -175,7 +174,7 @@ class CartGuruRAPI implements Iterator, ArrayAccess
* @param array $parameters override parameter
* @param array $headers
* @param string $sync
* @return CartGuruRAPI with initialization (result)
* @return CartsGuruRAPI with initialization (result)
*/
public function execute($path, $method = 'GET', $parameters = array(), $headers = array(), $sync = true)
{
@ -187,7 +186,8 @@ class CartGuruRAPI implements Iterator, ArrayAccess
CURLOPT_HEADER => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => $client->options['user_agent'],
CURLOPT_SSL_VERIFYPEER => false
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => $client->isOldCurl ? 0 : 2
);
if (! $sync) {
/*
@ -285,7 +285,7 @@ class CartGuruRAPI implements Iterator, ArrayAccess
break;
}
list ($key, $value) = explode(':', $line, 2);
list($key, $value) = explode(':', $line, 2);
$key = trim(Tools::strtolower(str_replace('-', '_', $key)));
$value = trim($value);
if (empty($headers[$key])) {
@ -307,7 +307,7 @@ class CartGuruRAPI implements Iterator, ArrayAccess
public function getResponseFormat()
{
if (! $this->response) {
throw new CartGuruRAPIException("A response must exist before it can be decoded.");
throw new CartsGuruRAPIException("A response must exist before it can be decoded.");
}
// User-defined format.
@ -322,7 +322,7 @@ class CartGuruRAPI implements Iterator, ArrayAccess
}
}
throw new CartGuruRAPIException("Response format could not be determined.");
throw new CartsGuruRAPIException("Response format could not be determined.");
}
public function decodeResponse()
@ -330,7 +330,7 @@ class CartGuruRAPI implements Iterator, ArrayAccess
if (empty($this->decoded_response)) {
$format = $this->getResponseFormat();
if (! array_key_exists($format, $this->options['decoders'])) {
throw new CartGuruRAPIException($format.' is not a supported ' . 'format');
throw new CartsGuruRAPIException($format.' is not a supported ' . 'format');
}
$this->decoded_response = call_user_func($this->options['decoders'][$format], $this->response);
@ -344,14 +344,45 @@ class CartGuruRAPI implements Iterator, ArrayAccess
*
* @return bool
*/
public function checkAccess()
public function checkAccess($adminUrl)
{
$fields = array(
'plugin' => 'prestashop',
'pluginVersion' => _CARTSGURU_VERSION_,
'storeVersion' => _PS_VERSION_
'storeVersion' => _PS_VERSION_,
'adminUrl' => $adminUrl
);
$result = $this->post(self::API_PATH_REGISTER, $fields);
return $result;
}
public function getDashboardStatistics($fields)
{
return $this->post(self::API_PATH_STATISTICS, $fields);
}
public function subscribe($data)
{
$fields = array(
'country' => CountryCore::getIsoById($data['country']),
//'state' => $data['state'],
'title' => $data['title'],
'website' => $data['website'],
'phoneNumber' => $data['phoneNumber'],
//user creation
'email' => $data['email'],
'lastname' => $data['lastname'],
'firstname' => $data['firstname'],
'password' => $data['password'],
'plugin' => 'prestashop',
'pluginVersion' => _CARTSGURU_VERSION_,
'storeVersion' => _PS_VERSION_,
'adminUrl' => $data['adminUrl']
);
$result = $this->post(self::API_PATH_SUBSCRIBE, $fields);
return $result;
}
}

View File

@ -2,22 +2,11 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
class CartGuruRAPIException extends Exception
class CartsGuruRAPIException extends Exception
{
}

View File

@ -2,20 +2,9 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

View File

@ -0,0 +1,83 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
class CartsGuruAdminModuleFrontController extends ModuleFrontController
{
public function display()
{
$saved_auth_key = Configuration::get('CARTSG_API_AUTH_KEY');
$cartsguru_auth_key = Tools::getValue('cartsguru_auth_key');
$cartsguru_admin_action = Tools::getValue('cartsguru_admin_action');
$cartsguru_admin_data = Tools::getValue('cartsguru_admin_data');
//Check key
if (empty($saved_auth_key) || empty($cartsguru_auth_key) || $saved_auth_key !== $cartsguru_auth_key) {
die;
}
//Get data
$data = !empty($cartsguru_admin_data) ? Tools::jsonDecode(stripcslashes($cartsguru_admin_data), true) : null;
header('Content-Type: application/json; charset=utf-8');
switch ($cartsguru_admin_action) {
case 'toggleFeatures':
$this->toggleFeatures($data);
break;
case 'displayConfig':
$this->displayConfig();
break;
}
exit;
}
private function toggleFeatures($data)
{
if (!is_array($data)) {
return;
}
// Enable facebook
if ($data['facebook'] && $data['catalogId'] && $data['pixel']) {
Configuration::updateValue('CARTSG_FEATURE_FB', true);
Configuration::updateValue('CARTSG_FB_PIXEL', $data['pixel']);
Configuration::updateValue('CARTSG_FB_CATALOGID', $data['catalogId']);
// return catalogUrl
$catalogUrl = version_compare(_PS_VERSION_, '1.5.0', '<') ? _PS_BASE_URL_.__PS_BASE_URI__ . 'index.php?fc=module&module=cartsguru&controller=catalog' : $this->context->link->getModuleLink('cartsguru', 'catalog');
echo Tools::jsonEncode(array('catalogUrl' => $catalogUrl));
} elseif ($data['facebook'] == false) {
Configuration::updateValue('CARTSG_FEATURE_FB', false);
echo Tools::jsonEncode(array('CARTSG_FEATURE_FB' => false));
}
}
private function displayConfig()
{
$curl_version = null;
try {
$info = curl_version();
$curl_version = $info["version"];
} catch (Exception $e) {
$curl_version = 'No curl';
}
$result = array(
'CARTSG_API_SUCCESS' => Configuration::get('CARTSG_API_SUCCESS'),
'CARTSG_SITE_ID' => Configuration::get('CARTSG_SITE_ID'),
'CARTSG_IMAGE_TYPE' => Configuration::get('CARTSG_IMAGE_TYPE'),
'CARTSG_FEATURE_FB' => Configuration::get('CARTSG_FEATURE_FB'),
'CARTSG_FB_PIXEL' => Configuration::get('CARTSG_FB_PIXEL'),
'CARTSG_FB_CATALOGID' => Configuration::get('CARTSG_FB_CATALOGID'),
'PLUGIN_VERSION'=> _CARTSGURU_VERSION_,
'CURL_VERSION' => $curl_version
);
echo Tools::jsonEncode($result);
}
}

View File

@ -0,0 +1,78 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
class CartsGuruCatalogModuleFrontController extends ModuleFrontController
{
public function display()
{
// Get input values
$offset = Tools::getValue('cartsguru_catalog_offset') ? Tools::getValue('cartsguru_catalog_offset') : 0;
$limit = Tools::getValue('cartsguru_catalog_limit') ? Tools::getValue('cartsguru_catalog_limit') : 50;
$currency = new Currency((int)$this->context->currency->id);
$lang = Configuration::get('PS_LANG_DEFAULT');
$link = new Link();
$processed_products = array();
$isMultiStoreSupported = version_compare(_PS_VERSION_, '1.5.0', '>=');
$sql = 'SELECT p.id_product AS id FROM ' . _DB_PREFIX_ . 'product p JOIN ' . _DB_PREFIX_ . 'product_shop s ON p.id_product = s.id_product';
$sqlTotal = 'SELECT count(p.id_product) as count FROM ' . _DB_PREFIX_ . 'product p JOIN ' . _DB_PREFIX_ . 'product_shop s ON p.id_product = s.id_product';
// Need filter on the good shop
if ($isMultiStoreSupported) {
$id_shop = (int)Context::getContext()->shop->id;
$sql .= ' WHERE id_shop = ' . $id_shop;
$sqlTotal .= ' WHERE id_shop = ' . $id_shop;
}
// Set limit and offset
$sql .= ' LIMIT ' . pSQL($limit) . ' OFFSET ' . pSQL($offset);
if ($results = Db::getInstance()->ExecuteS($sql)) {
foreach ($results as $row) {
$product = new Product($row['id'], false, $lang);
$image_link = '';
$image = Image::getImages((int)($this->context->language->id), $product->id);
if (is_array($image) && count($image) > 0) {
$image_link = Tools::getProtocol() . $link->getImageLink($product->getLink(), $image[0]['id_image'], ImageType::getFormatedName('large'));
}
$short_description = strip_tags($product->description_short);
$description = strip_tags($product->description);
$description = trim($short_description) === '' ? $description : $short_description;
if (trim($description) === '') {
continue;
}
$data = array(
'id' => $product->id,
'title' => $product->name,
'description' => $description,
'price' => Tools::ps_round($product->getPrice(), 2) . ' ' . $currency->iso_code,
'link' => $link->getproductLink($product->id),
'image_link' => $image_link,
'availability' => $product->available_for_order == '1' ? 'in stock' : 'out of stock'
);
$processed_products[] = $data;
}
// Get total
$total = Db::getInstance()->getRow($sqlTotal);
header('Content-Type: application/json');
echo Tools::jsonEncode(
array(
'url' => Tools::getShopDomainSsl(true, true),
'store_name' => Configuration::get('PS_SHOP_NAME'),
'products' => $processed_products,
'total' => isset($total['count']) ? $total['count'] : 0
)
);
}
exit;
}
}

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,63 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
class CartsGuruTrackingModuleFrontController extends ModuleFrontController
{
public function display()
{
$fields = array('email', 'homePhoneNumber', 'firstname', 'lastname', 'mobilePhoneNumber', 'countryCode');
$customerData = array();
foreach ($fields as $field) {
$value = Tools::getValue($field);
if ($value) {
$customerData[$field] = $value;
}
}
// If no email do not proceed
if (!$customerData['email']) {
die;
}
// Process country
if (array_key_exists('countryCode', $customerData)) {
$customerData['countryCode'] = CountryCore::getIsoById($customerData['countryCode']);
}
// Set account id
$customerData['accountId'] = $customerData['email'];
$cart = $this->context->cart;
$cartsguru = Module::getInstanceByName('cartsguru');
if (isset($cart) && (int) $cart->id) {
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$cartsguru->callCG(
CartsGuruRAPI::API_PATH_CARTS,
'cart',
$cart,
0,
0,
false,
array('customer' => $customerData)
);
} else {
$cartsguru->callCG(
CartsGuruRAPI::API_PATH_CARTS,
'cart',
$cart,
(int) $cart->id_shop_group,
(int) $cart->id_shop,
false,
array('customer' => $customerData)
);
}
die('success');
}
die;
}
}

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,67 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
include(dirname(__FILE__).'/../../../config/config.inc.php');
include(dirname(__FILE__).'/../../../init.php');
include_once(dirname(__FILE__).'/./../cartsguru.php');
$saved_auth_key = Configuration::get('CARTSG_API_AUTH_KEY');
$cartsguru_auth_key = Tools::getValue('cartsguru_auth_key');
$cartsguru_admin_action = Tools::getValue('cartsguru_admin_action');
$cartsguru_admin_data = Tools::getValue('cartsguru_admin_data');
//Check key
if (empty($saved_auth_key) || empty($cartsguru_auth_key) || $saved_auth_key !== $cartsguru_auth_key) {
die;
}
//Get data
$data = !empty($cartsguru_admin_data) ? Tools::jsonDecode(stripcslashes($cartsguru_admin_data), true) : null;
header('Content-Type: application/json; charset=utf-8');
switch ($cartsguru_admin_action) {
case 'toggleFeatures':
// Enable facebook
if ($data['facebook'] && $data['catalogId'] && $data['pixel']) {
Configuration::updateValue('CARTSG_FEATURE_FB', true);
Configuration::updateValue('CARTSG_FB_PIXEL', $data['pixel']);
Configuration::updateValue('CARTSG_FB_CATALOGID', $data['catalogId']);
// return catalogUrl
$catalogUrl = _PS_BASE_URL_.__PS_BASE_URI__ . 'modules/cartsguru/controllers14/catalog.php';
echo Tools::jsonEncode(array('catalogUrl' => $catalogUrl));
} elseif ($data['facebook'] == false) {
Configuration::updateValue('CARTSG_FEATURE_FB', false);
echo Tools::jsonEncode(array('CARTSG_FEATURE_FB' => false));
}
break;
case 'displayConfig':
$curl_version = null;
try {
$info = curl_version();
$curl_version = $info["version"];
} catch (Exception $e) {
$curl_version = 'No curl';
}
$result = array(
'CARTSG_API_SUCCESS' => Configuration::get('CARTSG_API_SUCCESS'),
'CARTSG_SITE_ID' => Configuration::get('CARTSG_SITE_ID'),
'CARTSG_IMAGE_TYPE' => Configuration::get('CARTSG_IMAGE_TYPE'),
'CARTSG_FEATURE_FB' => Configuration::get('CARTSG_FEATURE_FB'),
'CARTSG_FB_PIXEL' => Configuration::get('CARTSG_FB_PIXEL'),
'CARTSG_FB_CATALOGID' => Configuration::get('CARTSG_FB_CATALOGID'),
'PLUGIN_VERSION'=> _CARTSGURU_VERSION_,
'CURL_VERSION' => $curl_version
);
echo Tools::jsonEncode($result);
break;
}
exit;

View File

@ -0,0 +1,84 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
include(dirname(__FILE__).'/../../../config/config.inc.php');
include(dirname(__FILE__).'/../../../init.php');
if (!class_exists('Context')) {
include(dirname(__FILE__).'/../backward_compatibility/Context.php');
}
// Get input values
$offset = Tools::getValue('cartsguru_catalog_offset') ? Tools::getValue('cartsguru_catalog_offset') : 0;
$limit = Tools::getValue('cartsguru_catalog_limit') ? Tools::getValue('cartsguru_catalog_limit') : 50;
$context = Context::getContext();
$currency = new Currency((int)$context->currency->id);
$lang = Configuration::get('PS_LANG_DEFAULT');
$link = new Link();
$processed_products = array();
$isMultiStoreSupported = version_compare(_PS_VERSION_, '1.5.0', '>=');
$sql = 'SELECT p.id_product AS id FROM ' . _DB_PREFIX_ . 'product p';
$sqlTotal = 'SELECT count(p.id_product) as count FROM ' . _DB_PREFIX_ . 'product p';
// Need filter on the good shop
if ($isMultiStoreSupported) {
$id_shop = (int)Context::getContext()->shop->id;
$sql .= ' JOIN ' . _DB_PREFIX_ . 'product_shop s ON p.id_product = s.id_product WHERE id_shop = ' . $id_shop;
$sqlTotal .= ' JOIN ' . _DB_PREFIX_ . 'product_shop s ON p.id_product = s.id_product WHERE id_shop = ' . $id_shop;
}
// Set limit and offset
$sql .= ' LIMIT ' . pSQL($limit) . ' OFFSET ' . pSQL($offset);
$results = Db::getInstance()->ExecuteS($sql);
if ($results) {
foreach ($results as $row) {
$product = new Product($row['id'], false, $lang);
$image_link = '';
$image = Image::getImages((int)($context->language->id), $product->id);
if (is_array($image) && count($image) > 0) {
$imageObj = new Image($image[0]['id_image']);
$image_type = ImageType::getByNameNType('large', 'products');
$image_link = $link->getImageLink($product->getLink(), $image[0]['id_image'], $image_type['name']);
}
$short_description = strip_tags($product->description_short);
$description = strip_tags($product->description);
$description = trim($short_description) === '' ? $description : $short_description;
if (trim($description) === '') {
continue;
}
$data = array(
'id' => $product->id,
'title' => $product->name,
'description' => $description,
'price' => Tools::ps_round($product->getPrice(), 2) . ' ' . $currency->iso_code,
'link' => $link->getproductLink($product->id),
'image_link' => $image_link,
'availability' => $product->available_for_order == '1' ? 'in stock' : 'out of stock'
);
$processed_products[] = $data;
}
// Get total
$total = Db::getInstance()->getRow($sqlTotal);
header('Content-Type: application/json');
echo Tools::jsonEncode(
array(
'url' => Tools::getShopDomainSsl(true, true),
'store_name' => Configuration::get('PS_SHOP_NAME'),
'products' => $processed_products,
'total' => isset($total['count']) ? $total['count'] : 0
)
);
}
exit;

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,67 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
include(dirname(__FILE__).'/../../../config/config.inc.php');
include(dirname(__FILE__).'/../../../init.php');
if (!class_exists('CountryCore')) {
include(dirname(__FILE__).'/../../../classes/Country.php');
}
if (!class_exists('Context')) {
include(dirname(__FILE__).'/../backward_compatibility/Context.php');
}
$context = Context::getContext();
$fields = array('email', 'homePhoneNumber', 'firstname', 'lastname', 'mobilePhoneNumber', 'countryCode');
$customerData = array();
foreach ($fields as $field) {
$value = Tools::getValue($field);
if ($value) {
$customerData[$field] = $value;
}
}
// If no email do not proceed
if (!array_key_exists('email', $customerData)) {
die;
}
// If no email do not proceed
if (array_key_exists('countryCode', $customerData)) {
$customerData['countryCode'] = CountryCore::getIsoById($customerData['countryCode']);
}
// Set account id
$customerData['accountId'] = $customerData['email'];
$cartsguru = Module::getInstanceByName('cartsguru');
if (isset($context->cart) && (int) $context->cart->id) {
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$cartsguru->callCG(
CartsGuruRAPI::API_PATH_CARTS,
'cart',
$context->cart,
0,
0,
false,
array('customer' => $customerData)
);
} else {
$cartsguru->callCG(
CartsGuruRAPI::API_PATH_CARTS,
'cart',
$context->cart,
(int) $context->cart->id_shop_group,
(int) $context->cart->id_shop,
false,
array('customer' => $customerData)
);
}
die('success');
}
die;

View File

@ -2,20 +2,9 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

View File

@ -1,29 +1,104 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
global $_MODULE;
$_MODULE = array();
/* cartsguru.php */
//Module Title
$_MODULE['<{cartsguru}prestashop>cartsguru_2052043f39909e620bd65573706463f6'] = 'Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_dfc39a358ca340a9846a2a8c162de1b9'] = 'The first targeted and automated follow-up solution for abandoned carts through phone and text message !';
//Module description
$_MODULE['<{cartsguru}prestashop>cartsguru_502a5a0f558857bb13531cafc2d8d246'] = 'Your multichannel solution for easily recovering your abandoned shopping carts. Use Email & SMS Retargeting, Automatic Calls and Social Media!';
//Error cURL lib not available, plugin can not be used
$_MODULE['<{cartsguru}prestashop>cartsguru_a12b6c219f12145e967c09ea898a7fbd'] = 'cURL librairy is not available.';
$_MODULE['<{cartsguru}prestashop>cartsguru_aade6fe424276a463381d738d31d04dd'] = 'The module is not configured';
$_MODULE['<{cartsguru}prestashop>cartsguru_62ce11347fffa067e1ebb94e019ce31c'] = 'Your store is properly linked with Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_83e4eef9715a6044ffd2165cc3bf9152'] = 'Product images for Cart Guru were successfully regenerated';
$_MODULE['<{cartsguru}prestashop>cartsguru_d4f225ec09e4b0eba6558753f4bd8edd'] = 'Only part of the images have been regenerated. The server timed out before finishing.';
$_MODULE['<{cartsguru}prestashop>cartsguru_632cd307bc981033384b4f42b7a52d34'] = 'Use \"Product image generation\" form with option erase to false and click to the button generate.';
$_MODULE['<{cartsguru}prestashop>cartsguru_60a5980f8b948d9ad23af03206a11620'] = 'Impossible to connect with this credential.';
$_MODULE['<{cartsguru}prestashop>cartsguru_d63e8b98064ce2cd9f753412cc53cde1'] = 'Field \'%1$s\' is required';
$_MODULE['<{cartsguru}prestashop>cartsguru_f76cf338d1c364144e7bc74edc5ae195'] = 'Auth key';
$_MODULE['<{cartsguru}prestashop>cartsguru_305fe996f5b22c6230470bcfabe112ad'] = 'Site ID';
$_MODULE['<{cartsguru}prestashop>cartsguru_c888438d14855d7d96a2724ee9c306bd'] = 'Settings updated ';
$_MODULE['<{cartsguru}prestashop>cartsguru_54eebac864cda3659a446e61c111b28e'] = 'To resume the operation, select no for \"Erase previous images\", and click \"Generate\".';
$_MODULE['<{cartsguru}prestashop>cartsguru_112afb3cda4a3d63415b4156737b6894'] = 'Carts Guru authentification';
$_MODULE['<{cartsguru}prestashop>cartsguru_eea26af48ce417a70acc5eb96a8f3592'] = 'The multistore option is enabled. If you want configure the module, you must select store.';
$_MODULE['<{cartsguru}prestashop>cartsguru_414dfa338951d9eca8a2acd2b361300f'] = 'Provided by Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_c9cc8cce247e49bae79f15173ce97354'] = 'Save';
$_MODULE['<{cartsguru}prestashop>cartsguru_d795a8d004d37e375541d838c0c84f15'] = 'Product images generation for Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_fb6df7abfeaae40427dac2b8a4a423dc'] = 'The operation is required only if you not see your product images in Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_d379cadd41b68efe7c945b4d85c72085'] = 'Erase previous images';
$_MODULE['<{cartsguru}prestashop>cartsguru_62275efff59edb02173db8524943db89'] = 'Select \"No\" if your server timed out and you need to resume the regeneration.';
$_MODULE['<{cartsguru}prestashop>cartsguru_93cba07454f06a4a960172bbd6e2a435'] = 'Yes';
$_MODULE['<{cartsguru}prestashop>cartsguru_bafd7322c6e97d25b6299b5d6fe8920b'] = 'No';
$_MODULE['<{cartsguru}prestashop>cartsguru_32b919d18cfaca89383f6000dcc9c031'] = 'Generate';
//Module not configured warning (in modules list)
$_MODULE['<{cartsguru}prestashop>cartsguru_543c108a7f01cd8df3d8ea24d60fd6e0'] = 'The module is not configured';
//Confirmation message when save configuration (site id & auth key)
$_MODULE['<{cartsguru}prestashop>cartsguru_c888438d14855d7d96a2724ee9c306bd'] = 'Settings updated';
//Product image success
$_MODULE['<{cartsguru}prestashop>cartsguru_854de6c1f642b597dcba56164d31cb97'] = 'Image product for Cart Guru were successfully generated.';
//Product image error
$_MODULE['<{cartsguru}prestashop>cartsguru_497295a4b41a60552bb2b03cd16164ef'] = 'Only part of the images have been generated. The server timed out before finishing it.';
//Sign up error
$_MODULE['<{cartsguru}prestashop>cartsguru_52b766c02af601d61d77774a0fa83b22'] = 'An error occurs during the registration. Please contact us on https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_a33c92bc6fb01f41a3bc7b00f8f75074'] = 'Your country is not supported for now. Please contact us on https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_c713f366e44b2fcc505883744aef81b6'] = 'This email is already associated to an existing account';
//Sign in error
$_MODULE['<{cartsguru}prestashop>cartsguru_481d6b8c4898d64f0983a567e344d68d'] = 'It was not possible to connect with your current credentials.';
/* dashboard_zone_one.tpl */
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_917043f2ee73dd34f4cdf8a8adc3e870'] = 'Carts Guru';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_63a6a88c066880c5ac42394a22803ca6'] = 'Refresh';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_8d11e11ef5eb59e689f2bd5f02403f9e'] = 'Processed Carts';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Orders';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_910a58229f2e6842d4e993569c0ee687'] = 'Revenue Recovered';
/* welcome.tpl - main view */
$_MODULE['<{cartsguru}prestashop>welcome_46c46a775b80eef48f58efed3051d5d5'] = 'The best way to recover your abandoned carts';
$_MODULE['<{cartsguru}prestashop>welcome_44791981f8a25f9c63c43ba4d979b898'] = 'Carts Guru is the all-in-one solution to recover your abandoned carts and turn them into sales. Use Emails, SMS, Automatic Calls, Facebook & Instagram to convert more than 20% of your lost customers into sales.';
$_MODULE['<{cartsguru}prestashop>welcome_9a7342bdc64a7abd154cd3227c40cd11'] = 'Enjoy all features during your 14-Days / $5,000 Revenue Free Trial';
$_MODULE['<{cartsguru}prestashop>welcome_7edaed702d94d2c7807d20d662c7067a'] = 'I have an account';
$_MODULE['<{cartsguru}prestashop>welcome_103ccf94ed36e31ecea1decd3c88dd18'] = 'Try it now for free';
/* welcome.tpl - main view - top list */
$_MODULE['<{cartsguru}prestashop>welcome_4cde30a43458a349110b69a71661f24d'] = 'Performance-based pricing';
$_MODULE['<{cartsguru}prestashop>welcome_b22939c7405d616e5a13e9e2e117004b'] = 'see details here';
$_MODULE['<{cartsguru}prestashop>welcome_7a3a7be24b5992655610b1ecf407c434'] = 'Run unlimited campaigns, with unlimited actions';
$_MODULE['<{cartsguru}prestashop>welcome_b97da5945c83ba339a75eebc78e53d24'] = 'Easy-to-use, incredibly intuitive solution';
$_MODULE['<{cartsguru}prestashop>welcome_a389c7d8e2f7b3442deccd1310e3146a'] = 'Risk Free. No credit cards required. Cancel any time';
/* welcome.tpl - main view - features */
$_MODULE['<{cartsguru}prestashop>welcome_98f770b0af18ca763421bac22b4b6805'] = 'Features';
$_MODULE['<{cartsguru}prestashop>welcome_d59048f21fd887ad520398ce677be586'] = 'Learn more';
$_MODULE['<{cartsguru}prestashop>welcome_08fa955704ed60bd92121421efe1dba5'] = 'Automatic calls';
$_MODULE['<{cartsguru}prestashop>welcome_e0b30405b5e360a6a9d3935e1b5ee99d'] = 'Save this for your most important products and customers. Contact your customer automatically.';
$_MODULE['<{cartsguru}prestashop>welcome_d311128c6b9f34f85e6b0e29bcbcd165'] = 'Conversion rate';
$_MODULE['<{cartsguru}prestashop>welcome_71241798130f714cbd2786df3da2cf0b'] = 'Average cart value';
$_MODULE['<{cartsguru}prestashop>welcome_16b8986716da520abefdaec42d79cde7'] = 'Email retargeting';
$_MODULE['<{cartsguru}prestashop>welcome_f2cd56fb5b2b77bfe56ab4791a053317'] = 'Customize campaigns with your brand. Launch them at the perfect moment with automation.';
$_MODULE['<{cartsguru}prestashop>welcome_9194d247411aa51baae262692c740a71'] = 'Open rate';
$_MODULE['<{cartsguru}prestashop>welcome_4c51ca7dfcba263c58e914182e78704b'] = 'Click rate';
$_MODULE['<{cartsguru}prestashop>welcome_fb82b0e1a9cdd45d75c0316b489dc2f4'] = 'SMS retargeting';
$_MODULE['<{cartsguru}prestashop>welcome_b0efdff12e68896d7eeaef2e138ffa80'] = 'With an outstanding 97% open rate. Add SMS Marketing to your mix.';
$_MODULE['<{cartsguru}prestashop>welcome_4551ffc5f55de732e0512bec68dfffde'] = 'Unsubscription';
$_MODULE['<{cartsguru}prestashop>welcome_6a4e2a43c2d0e44b33c2f7dba1fd72ab'] = 'Facebook & Instagram';
$_MODULE['<{cartsguru}prestashop>welcome_4514e9f52d04fc7a152f8068f814613c'] = 'Reach your buyers where they are! Use dynamic retargeting to recover buyers with CPC ads.';
$_MODULE['<{cartsguru}prestashop>welcome_e7b031d00b6b531d99eb2a32094b8b74'] = 'Click through rate';
$_MODULE['<{cartsguru}prestashop>welcome_fcfebe7da3976f7fff336462ed1ce2b1'] = 'Prone to convert';
/* welcome.tpl - subscribe form */
$_MODULE['<{cartsguru}prestashop>welcome_0557fa923dcee4d0f86b1409f5c2167f'] = 'Back';
$_MODULE['<{cartsguru}prestashop>welcome_e79d694c8ca35f005a9dde7bcfdd15b0'] = 'Youre one step away from your free trial';
$_MODULE['<{cartsguru}prestashop>welcome_20db0bfeecd8fe60533206a2b5e9891a'] = 'First Name';
$_MODULE['<{cartsguru}prestashop>welcome_8d3f5eff9c40ee315d452392bed5309b'] = 'Last Name';
$_MODULE['<{cartsguru}prestashop>welcome_1f8261d17452a959e013666c5df45e07'] = 'Phone Number';
$_MODULE['<{cartsguru}prestashop>welcome_3a0853edb6b77ac1bced734358cab8c2'] = 'Email Address';
$_MODULE['<{cartsguru}prestashop>welcome_59716c97497eb9694541f7c3d37b1a4d'] = 'Country';
$_MODULE['<{cartsguru}prestashop>welcome_dc647eb65e6711e155375218212b3964'] = 'Password';
$_MODULE['<{cartsguru}prestashop>welcome_0606da1bfc8cff393a415f647ec06e8f'] = 'Website URL';
/* welcome.tpl - success view */
$_MODULE['<{cartsguru}prestashop>welcome_51dfd5a9635ce9e8c30311df73a40d03'] = 'You successfuly installed Carts Guru';
$_MODULE['<{cartsguru}prestashop>welcome_7474c8f58df1491cc0fc42341f868345'] = 'Edit my settings';
$_MODULE['<{cartsguru}prestashop>welcome_ad84b784ad8d81a7c82b3209e15f1553'] = 'Access to Carts Guru platform';
/* welcome.tpl - multistore view */
$_MODULE['<{cartsguru}prestashop>welcome_94fdcdc729c564170e5de6e0abbd5e39'] = 'The multistore option is enabled. If you want to set the module, please select a store.';
/* welcome.tpl - connect store view */
$_MODULE['<{cartsguru}prestashop>welcome_2f3f00178ef7de520b79a3ccd70f9447'] = 'Plug Carts Guru into your PrestaShop store';
$_MODULE['<{cartsguru}prestashop>welcome_b250a007769c7ffe655c74cfb8176b8c'] = 'Site ID';
$_MODULE['<{cartsguru}prestashop>welcome_e8ceedcb9972298e932cc156f9dcee42'] = 'Auth Key';
$_MODULE['<{cartsguru}prestashop>welcome_b6e06824a3667995a0291dc280c4cfb4'] = 'Connect it now';
$_MODULE['<{cartsguru}prestashop>welcome_0e458e0073e1ec08092620c539801c95'] = 'Don\'t know this information?';
$_MODULE['<{cartsguru}prestashop>welcome_faabe822494cb7cad1e540ca367eba60'] = 'Access it here';
/* welcome.tpl - footer */
$_MODULE['<{cartsguru}prestashop>welcome_36ce9091bb449adc40d7c4600889e0a5'] = 'Access Carts Guru\'s website';

View File

@ -0,0 +1,104 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
global $_MODULE;
$_MODULE = array();
/* cartsguru.php */
//Module Title
$_MODULE['<{cartsguru}prestashop>cartsguru_2052043f39909e620bd65573706463f6'] = 'Carts Guru';
//Module description
$_MODULE['<{cartsguru}prestashop>cartsguru_502a5a0f558857bb13531cafc2d8d246'] = 'Tu solución multicanal para recuperar carritos de compra abandonados de manera fácil. Usa el Retargeting con Correos, SMS, Llamadas y Redes Sociales.';
//Error cURL lib not available, plugin can not be used
$_MODULE['<{cartsguru}prestashop>cartsguru_a12b6c219f12145e967c09ea898a7fbd'] = 'La librería cURL no está disponible.';
//Module not configured warning (in modules list)
$_MODULE['<{cartsguru}prestashop>cartsguru_543c108a7f01cd8df3d8ea24d60fd6e0'] = 'El módulo no está configurado.';
//Confirmation message when save configuration (site id & auth key)
$_MODULE['<{cartsguru}prestashop>cartsguru_c888438d14855d7d96a2724ee9c306bd'] = 'La configuración ha sido actualizada.';
//Product image success
$_MODULE['<{cartsguru}prestashop>cartsguru_854de6c1f642b597dcba56164d31cb97'] = 'La imagen de producto para Carts Guru ha sido generada correctamente.';
//Product image error
$_MODULE['<{cartsguru}prestashop>cartsguru_497295a4b41a60552bb2b03cd16164ef'] = 'Solamente parte de las imágenes han sido generadas. El servidor se ha interrumpido antes de terminarlo.';
//Sign up error
$_MODULE['<{cartsguru}prestashop>cartsguru_52b766c02af601d61d77774a0fa83b22'] = 'Ocurrió un error durante el registro. Por favor, contáctanos a través de https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_a33c92bc6fb01f41a3bc7b00f8f75074'] = 'Aún no somos compatibles con tu país. Por favor, contáctanos a través de https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_7880b2798d342da5b5bbe66398101c4b'] = 'Ya existe una cuenta asociada a este correo';
//Sign in error
$_MODULE['<{cartsguru}prestashop>cartsguru_481d6b8c4898d64f0983a567e344d68d'] = 'Não foi possível conectá-lo com suas credenciais atuais.';
/* dashboard_zone_one.tpl */
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_917043f2ee73dd34f4cdf8a8adc3e870'] = 'Carts Guru';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_63a6a88c066880c5ac42394a22803ca6'] = 'Refresh';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_8d11e11ef5eb59e689f2bd5f02403f9e'] = 'Carritos procesados';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Pedidos';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_910a58229f2e6842d4e993569c0ee687'] = 'Valor recuperado';
/* welcome.tpl - main view */
$_MODULE['<{cartsguru}prestashop>welcome_46c46a775b80eef48f58efed3051d5d5'] = 'La mejor forma de recuperar tus carritos abandonados';
$_MODULE['<{cartsguru}prestashop>welcome_44791981f8a25f9c63c43ba4d979b898'] = 'Carts Guru es la solución integral para recuperar tus carritos abandonados y convertirlos en ventas. Utiliza correos, SMS, llamadas, Facebook e Instagram para convertir a más del 20% de tus clientes perdidos.';
$_MODULE['<{cartsguru}prestashop>welcome_9a7342bdc64a7abd154cd3227c40cd11'] = 'Todas las funciones durante tu prueba gratuita de 14 días / 5.000€ recuperados';
$_MODULE['<{cartsguru}prestashop>welcome_7edaed702d94d2c7807d20d662c7067a'] = 'TENGO CUENTA';
$_MODULE['<{cartsguru}prestashop>welcome_103ccf94ed36e31ecea1decd3c88dd18'] = 'PRUÉBALO YA GRATIS';
/* welcome.tpl - main view - top list */
$_MODULE['<{cartsguru}prestashop>welcome_4cde30a43458a349110b69a71661f24d'] = 'Precios basados en el rendimiento';
$_MODULE['<{cartsguru}prestashop>welcome_b22939c7405d616e5a13e9e2e117004b'] = 'más información';
$_MODULE['<{cartsguru}prestashop>welcome_7a3a7be24b5992655610b1ecf407c434'] = 'Lleva a cabo campañas y acciones ilimitadas';
$_MODULE['<{cartsguru}prestashop>welcome_b97da5945c83ba339a75eebc78e53d24'] = 'Fácil de usar, solución altamente intuitiva';
$_MODULE['<{cartsguru}prestashop>welcome_a389c7d8e2f7b3442deccd1310e3146a'] = 'Sin riesgos, sin tarjeta. Cancela cuando quieras';
/* welcome.tpl - main view - features */
$_MODULE['<{cartsguru}prestashop>welcome_98f770b0af18ca763421bac22b4b6805'] = 'FUNCIONES';
$_MODULE['<{cartsguru}prestashop>welcome_d59048f21fd887ad520398ce677be586'] = 'MÁS INFORMACIÓN';
$_MODULE['<{cartsguru}prestashop>welcome_08fa955704ed60bd92121421efe1dba5'] = 'Llamadas automáticas';
$_MODULE['<{cartsguru}prestashop>welcome_e0b30405b5e360a6a9d3935e1b5ee99d'] = 'Para tus productos y clientes más importantes. Ponte en contacto de forma automática con el cliente.';
$_MODULE['<{cartsguru}prestashop>welcome_d311128c6b9f34f85e6b0e29bcbcd165'] = 'TASA DE CONVERSIÓN';
$_MODULE['<{cartsguru}prestashop>welcome_71241798130f714cbd2786df3da2cf0b'] = 'VALOR MEDIO DEL CARRITO';
$_MODULE['<{cartsguru}prestashop>welcome_16b8986716da520abefdaec42d79cde7'] = 'Retargeting por email';
$_MODULE['<{cartsguru}prestashop>welcome_f2cd56fb5b2b77bfe56ab4791a053317'] = 'Personaliza campañas con tu marca. Lánzalas en el momento más adecuado de forma automática.';
$_MODULE['<{cartsguru}prestashop>welcome_9194d247411aa51baae262692c740a71'] = 'TASA DE APERTURA';
$_MODULE['<{cartsguru}prestashop>welcome_4c51ca7dfcba263c58e914182e78704b'] = 'PORCENTAJE DE CLICS';
$_MODULE['<{cartsguru}prestashop>welcome_fb82b0e1a9cdd45d75c0316b489dc2f4'] = 'Retargeting por SMS';
$_MODULE['<{cartsguru}prestashop>welcome_b0efdff12e68896d7eeaef2e138ffa80'] = 'Añade Marketing por SMS, con una excelente tasa de apertura del 97%';
$_MODULE['<{cartsguru}prestashop>welcome_4551ffc5f55de732e0512bec68dfffde'] = 'BAJA VOLUNTARIA';
$_MODULE['<{cartsguru}prestashop>welcome_6a4e2a43c2d0e44b33c2f7dba1fd72ab'] = 'Facebook & Instagram';
$_MODULE['<{cartsguru}prestashop>welcome_4514e9f52d04fc7a152f8068f814613c'] = '¡Llega a tus compradores allá donde estén! Usa retargeting dinámico para recuperar compradores.';
$_MODULE['<{cartsguru}prestashop>welcome_e7b031d00b6b531d99eb2a32094b8b74'] = 'TASA DE CLICS';
$_MODULE['<{cartsguru}prestashop>welcome_fcfebe7da3976f7fff336462ed1ce2b1'] = 'PROBABILIDAD DE CONVERSIÓN';
/* welcome.tpl - subscribe form */
$_MODULE['<{cartsguru}prestashop>welcome_0557fa923dcee4d0f86b1409f5c2167f'] = 'Volver';
$_MODULE['<{cartsguru}prestashop>welcome_e79d694c8ca35f005a9dde7bcfdd15b0'] = 'Estás a solo un paso de tu prueba gratuita';
$_MODULE['<{cartsguru}prestashop>welcome_20db0bfeecd8fe60533206a2b5e9891a'] = 'Nombre';
$_MODULE['<{cartsguru}prestashop>welcome_8d3f5eff9c40ee315d452392bed5309b'] = 'Apellido';
$_MODULE['<{cartsguru}prestashop>welcome_1f8261d17452a959e013666c5df45e07'] = 'Número de teléfono';
$_MODULE['<{cartsguru}prestashop>welcome_3a0853edb6b77ac1bced734358cab8c2'] = 'Correo electrónico';
$_MODULE['<{cartsguru}prestashop>welcome_59716c97497eb9694541f7c3d37b1a4d'] = 'País';
$_MODULE['<{cartsguru}prestashop>welcome_dc647eb65e6711e155375218212b3964'] = 'Contraseña';
$_MODULE['<{cartsguru}prestashop>welcome_0606da1bfc8cff393a415f647ec06e8f'] = 'URL del sitio web';
/* welcome.tpl - success view */
$_MODULE['<{cartsguru}prestashop>welcome_51dfd5a9635ce9e8c30311df73a40d03'] = 'Has instalado Carts Guru con éxito';
$_MODULE['<{cartsguru}prestashop>welcome_7474c8f58df1491cc0fc42341f868345'] = 'Editar mis ajustes';
$_MODULE['<{cartsguru}prestashop>welcome_ad84b784ad8d81a7c82b3209e15f1553'] = 'Accede a Carts Guru';
/* welcome.tpl - multistore view */
$_MODULE['<{cartsguru}prestashop>welcome_94fdcdc729c564170e5de6e0abbd5e39'] = 'La opción de tiendas múltiples está activada. Si quieres configurar tu módulo, por favor, selecciona tu tienda.';
/* welcome.tpl - connect store view */
$_MODULE['<{cartsguru}prestashop>welcome_2f3f00178ef7de520b79a3ccd70f9447'] = 'Conecta Carts Guru a tu tienda PrestaShop';
$_MODULE['<{cartsguru}prestashop>welcome_b250a007769c7ffe655c74cfb8176b8c'] = 'ID de la web';
$_MODULE['<{cartsguru}prestashop>welcome_e8ceedcb9972298e932cc156f9dcee42'] = 'Código de autorización';
$_MODULE['<{cartsguru}prestashop>welcome_b6e06824a3667995a0291dc280c4cfb4'] = 'CONÉCTALO AHORA';
$_MODULE['<{cartsguru}prestashop>welcome_0e458e0073e1ec08092620c539801c95'] = '¿No conoces esta información?';
$_MODULE['<{cartsguru}prestashop>welcome_faabe822494cb7cad1e540ca367eba60'] = 'Encuéntrala aquí';
/* welcome.tpl - footer */
$_MODULE['<{cartsguru}prestashop>welcome_36ce9091bb449adc40d7c4600889e0a5'] = 'VISITA LA WEB DE CARTS GURU';

View File

@ -1,41 +1,94 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
global $_MODULE;
$_MODULE = array();
/* cartsguru.php */
$_MODULE['<{cartsguru}prestashop>cartsguru_2052043f39909e620bd65573706463f6'] = 'Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_dfc39a358ca340a9846a2a8c162de1b9'] = 'La première solution de ciblage et de relance automatisée des paniers abandonnés et des échecs de paiement par téléphone et SMS';
$_MODULE['<{cartsguru}prestashop>cartsguru_502a5a0f558857bb13531cafc2d8d246'] = 'La première solution de ciblage et de relance automatisée des paniers abandonnés et des échecs de paiement par relances par e-mail, SMS, appels automatiques, Facebook et Instagram';
$_MODULE['<{cartsguru}prestashop>cartsguru_a12b6c219f12145e967c09ea898a7fbd'] = 'La librairie cURL n\'est pas disponible';
$_MODULE['<{cartsguru}prestashop>cartsguru_543c108a7f01cd8df3d8ea24d60fd6e0'] = 'Le module n\'est pas configuré';
$_MODULE['<{cartsguru}prestashop>cartsguru_62ce11347fffa067e1ebb94e019ce31c'] = 'Votre boutique est connectée à Carts Guru.';
$_MODULE['<{cartsguru}prestashop>cartsguru_83e4eef9715a6044ffd2165cc3bf9152'] = 'Les images produits pour Carts Guru ont été générées avec succès.';
$_MODULE['<{cartsguru}prestashop>cartsguru_d4f225ec09e4b0eba6558753f4bd8edd'] = 'Seulement une partit des images ont été régénérées. Le serveur a mis trop de temps pour finaliser le processus.';
$_MODULE['<{cartsguru}prestashop>cartsguru_632cd307bc981033384b4f42b7a52d34'] = 'Relancer la génération avec l\'option supprimer à non et cliquer sur le bouton générer';
$_MODULE['<{cartsguru}prestashop>cartsguru_60a5980f8b948d9ad23af03206a11620'] = 'Impossible de se connecter avec ces identifiants';
$_MODULE['<{cartsguru}prestashop>cartsguru_d63e8b98064ce2cd9f753412cc53cde1'] = 'Champs \'%1$s\' est requis';
$_MODULE['<{cartsguru}prestashop>cartsguru_f76cf338d1c364144e7bc74edc5ae195'] = 'Clef d\'authentification';
$_MODULE['<{cartsguru}prestashop>cartsguru_305fe996f5b22c6230470bcfabe112ad'] = 'Identifiant du site';
$_MODULE['<{cartsguru}prestashop>cartsguru_c888438d14855d7d96a2724ee9c306bd'] = 'Configuration modifiée';
$_MODULE['<{cartsguru}prestashop>cartsguru_54eebac864cda3659a446e61c111b28e'] = 'Pour continuer l\'opération, sélectionnez non pour \"Effacer les images précédentes\" et cliquer sur \"Générer\".';
$_MODULE['<{cartsguru}prestashop>cartsguru_112afb3cda4a3d63415b4156737b6894'] = 'Carts Guru identification';
$_MODULE['<{cartsguru}prestashop>cartsguru_eea26af48ce417a70acc5eb96a8f3592'] = 'L\'option multi-boutique est activée. Si vous voulez configurer le module, vous devez sélectionner une boutique.';
$_MODULE['<{cartsguru}prestashop>cartsguru_414dfa338951d9eca8a2acd2b361300f'] = 'Fournit par Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_c9cc8cce247e49bae79f15173ce97354'] = 'Sauvegarder';
$_MODULE['<{cartsguru}prestashop>cartsguru_d795a8d004d37e375541d838c0c84f15'] = 'Génération des images produits pour Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_fb6df7abfeaae40427dac2b8a4a423dc'] = 'L\'opération est nécessaire si vous ne visualisez pas vos images produits sur votre interface Carts Guru';
$_MODULE['<{cartsguru}prestashop>cartsguru_d379cadd41b68efe7c945b4d85c72085'] = 'Effacer les images précédentes';
$_MODULE['<{cartsguru}prestashop>cartsguru_62275efff59edb02173db8524943db89'] = 'Sélectionnez \"Non\" si le serveur a mis trop de temps pour finaliser le processus et que vous voulez continuer l\'opération.';
$_MODULE['<{cartsguru}prestashop>cartsguru_93cba07454f06a4a960172bbd6e2a435'] = 'Oui';
$_MODULE['<{cartsguru}prestashop>cartsguru_bafd7322c6e97d25b6299b5d6fe8920b'] = 'Non';
$_MODULE['<{cartsguru}prestashop>cartsguru_32b919d18cfaca89383f6000dcc9c031'] = 'Générer';
$_MODULE['<{cartsguru}prestashop>cg_conf_form14_112afb3cda4a3d63415b4156737b6894'] = 'Carts Guru identification';
$_MODULE['<{cartsguru}prestashop>cg_conf_form14_f76cf338d1c364144e7bc74edc5ae195'] = 'Clef d\'authentification';
$_MODULE['<{cartsguru}prestashop>cg_conf_form14_305fe996f5b22c6230470bcfabe112ad'] = 'Identifiant du site';
$_MODULE['<{cartsguru}prestashop>cg_conf_form14_c9cc8cce247e49bae79f15173ce97354'] = 'Sauvegarder';
$_MODULE['<{cartsguru}prestashop>cg_conf_form14_19f823c6453c2b1ffd09cb715214813d'] = 'Champs requis';
$_MODULE['<{cartsguru}prestashop>cg_img_form14_d795a8d004d37e375541d838c0c84f15'] = 'Génération des images produits pour Carts Guru';
$_MODULE['<{cartsguru}prestashop>cg_img_form14_fb6df7abfeaae40427dac2b8a4a423dc'] = 'L\'opération est nécessaire si vous ne visualisez pas vos images produits sur votre interface Carts Guru';
$_MODULE['<{cartsguru}prestashop>cg_img_form14_d379cadd41b68efe7c945b4d85c72085'] = 'Effacer les images précédentes';
$_MODULE['<{cartsguru}prestashop>cg_img_form14_93cba07454f06a4a960172bbd6e2a435'] = 'Oui';
$_MODULE['<{cartsguru}prestashop>cg_img_form14_bafd7322c6e97d25b6299b5d6fe8920b'] = 'Non';
$_MODULE['<{cartsguru}prestashop>cg_img_form14_62275efff59edb02173db8524943db89'] = 'Sélectionnez \"Non\" si le serveur a mis trop de temps pour finaliser le processus et que vous voulez continuer l\'opération.';
$_MODULE['<{cartsguru}prestashop>cg_img_form14_c9cc8cce247e49bae79f15173ce97354'] = 'Sauvegarder';
$_MODULE['<{cartsguru}prestashop>cartsguru_c888438d14855d7d96a2724ee9c306bd'] = 'Les paramètres ont été mis à jour';
$_MODULE['<{cartsguru}prestashop>cartsguru_854de6c1f642b597dcba56164d31cb97'] = 'Les images produits pour Carts Guru ont été générées avec succès.';
$_MODULE['<{cartsguru}prestashop>cartsguru_497295a4b41a60552bb2b03cd16164ef'] = 'Seulement une partie des images ont été générées. Le serveur a mis trop de temps pour finaliser le processus.';
$_MODULE['<{cartsguru}prestashop>cartsguru_52b766c02af601d61d77774a0fa83b22'] = 'Une erreur est survenue. Veuillez nous contacter via https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_a33c92bc6fb01f41a3bc7b00f8f75074'] = 'Votre pays n\'est pas supporté actuellement. Veuillez nous contacter via https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_7880b2798d342da5b5bbe66398101c4b'] = 'Cet e-mail est déjà associé à un compte existant';
$_MODULE['<{cartsguru}prestashop>cartsguru_481d6b8c4898d64f0983a567e344d68d'] = 'Impossible de se connecter avec ces identifiants';
/* dashboard_zone_one.tpl */
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_917043f2ee73dd34f4cdf8a8adc3e870'] = 'Carts Guru';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_63a6a88c066880c5ac42394a22803ca6'] = 'Rafraîchir';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_8d11e11ef5eb59e689f2bd5f02403f9e'] = 'Paniers traités';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Commandes';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_910a58229f2e6842d4e993569c0ee687'] = 'Chiffre d\'affaires';
/* welcome.tpl - main view */
$_MODULE['<{cartsguru}prestashop>welcome_46c46a775b80eef48f58efed3051d5d5'] = 'Solution de relance multicanal pour convertir vos paniers abandonnés en vente';
$_MODULE['<{cartsguru}prestashop>welcome_44791981f8a25f9c63c43ba4d979b898'] = 'Carts Guru est la solution ultime pour réengager vos visiteurs ayant abandonné leurs achats.
Combinez les relances par e-mail, SMS, appels automatiques, Facebook et Instagram pour convertir plus de 20 % de vos clients perdus en acheteurs.';
$_MODULE['<{cartsguru}prestashop>welcome_9a7342bdc64a7abd154cd3227c40cd11'] = 'Profitez de toutes les fonctionnalités gratuitement pendant 14 jours/jusquà 5 000 € de revenus générés';
$_MODULE['<{cartsguru}prestashop>welcome_7edaed702d94d2c7807d20d662c7067a'] = 'J\'ai un compte';
$_MODULE['<{cartsguru}prestashop>welcome_103ccf94ed36e31ecea1decd3c88dd18'] = 'J\'essaie gratuitement';
/* welcome.tpl - main view - top list */
$_MODULE['<{cartsguru}prestashop>welcome_4cde30a43458a349110b69a71661f24d'] = 'Ne payez que les ventes générées par Carts Guru.';
$_MODULE['<{cartsguru}prestashop>welcome_b22939c7405d616e5a13e9e2e117004b'] = 'Voir les détails ici';
$_MODULE['<{cartsguru}prestashop>welcome_7a3a7be24b5992655610b1ecf407c434'] = 'Créez des campagnes et des actions illimitées';
$_MODULE['<{cartsguru}prestashop>welcome_b97da5945c83ba339a75eebc78e53d24'] = 'Solution simple et intuitive';
$_MODULE['<{cartsguru}prestashop>welcome_a389c7d8e2f7b3442deccd1310e3146a'] = 'Sans risque, sans carte de crédit. Annulez à tout moment';
/* welcome.tpl - main view - features */
$_MODULE['<{cartsguru}prestashop>welcome_98f770b0af18ca763421bac22b4b6805'] = 'Fonctionnalités';
$_MODULE['<{cartsguru}prestashop>welcome_d59048f21fd887ad520398ce677be586'] = 'En savoir plus';
$_MODULE['<{cartsguru}prestashop>welcome_08fa955704ed60bd92121421efe1dba5'] = 'Appels automatiques';
$_MODULE['<{cartsguru}prestashop>welcome_e0b30405b5e360a6a9d3935e1b5ee99d'] = 'Automatisez la mise en relation téléphonique entre vous et vos prospects sans effort. Levez les freins à lachat sur les produits à forte valeur ajoutée.';
$_MODULE['<{cartsguru}prestashop>welcome_d311128c6b9f34f85e6b0e29bcbcd165'] = 'Taux de conversion';
$_MODULE['<{cartsguru}prestashop>welcome_71241798130f714cbd2786df3da2cf0b'] = 'De valeur moyenne sur le panier';
$_MODULE['<{cartsguru}prestashop>welcome_16b8986716da520abefdaec42d79cde7'] = 'E-mail retargeting';
$_MODULE['<{cartsguru}prestashop>welcome_f2cd56fb5b2b77bfe56ab4791a053317'] = 'Relancez vos clients avec des e-mails personnalisés';
$_MODULE['<{cartsguru}prestashop>welcome_9194d247411aa51baae262692c740a71'] = 'Taux d\'ouverture';
$_MODULE['<{cartsguru}prestashop>welcome_4c51ca7dfcba263c58e914182e78704b'] = 'Taux de clics';
$_MODULE['<{cartsguru}prestashop>welcome_fb82b0e1a9cdd45d75c0316b489dc2f4'] = 'SMS retargeting';
$_MODULE['<{cartsguru}prestashop>welcome_b0efdff12e68896d7eeaef2e138ffa80'] = 'Avec un taux douverture exceptionnel de 97 %. Le canal ultime pour convertir vos paniers abandonnés.';
$_MODULE['<{cartsguru}prestashop>welcome_4551ffc5f55de732e0512bec68dfffde'] = 'De désinscription';
$_MODULE['<{cartsguru}prestashop>welcome_6a4e2a43c2d0e44b33c2f7dba1fd72ab'] = 'Facebook & Instagram';
$_MODULE['<{cartsguru}prestashop>welcome_4514e9f52d04fc7a152f8068f814613c'] = 'Touchez vos prospects là où ils passent le plus de temps ! Utilisez le dynamic Ads sur Facebook & instagram pour conquérir de nouveaux clients et transformer vos paniers abandonnés en ventes.';
$_MODULE['<{cartsguru}prestashop>welcome_e7b031d00b6b531d99eb2a32094b8b74'] = 'Taux de clics';
$_MODULE['<{cartsguru}prestashop>welcome_fcfebe7da3976f7fff336462ed1ce2b1'] = 'Enclins à la conversion';
/* welcome.tpl - subscribe form */
$_MODULE['<{cartsguru}prestashop>welcome_0557fa923dcee4d0f86b1409f5c2167f'] = 'Retour';
$_MODULE['<{cartsguru}prestashop>welcome_e79d694c8ca35f005a9dde7bcfdd15b0'] = 'Dernière étape avant votre offre d\'essai gratuite';
$_MODULE['<{cartsguru}prestashop>welcome_20db0bfeecd8fe60533206a2b5e9891a'] = 'Prénom';
$_MODULE['<{cartsguru}prestashop>welcome_8d3f5eff9c40ee315d452392bed5309b'] = 'Nom';
$_MODULE['<{cartsguru}prestashop>welcome_1f8261d17452a959e013666c5df45e07'] = 'Téléphone';
$_MODULE['<{cartsguru}prestashop>welcome_3a0853edb6b77ac1bced734358cab8c2'] = 'Adresse e-mail';
$_MODULE['<{cartsguru}prestashop>welcome_59716c97497eb9694541f7c3d37b1a4d'] = 'Pays';
$_MODULE['<{cartsguru}prestashop>welcome_dc647eb65e6711e155375218212b3964'] = 'Mot de passe';
$_MODULE['<{cartsguru}prestashop>welcome_0606da1bfc8cff393a415f647ec06e8f'] = 'Site web';
/* welcome.tpl - success view */
$_MODULE['<{cartsguru}prestashop>welcome_51dfd5a9635ce9e8c30311df73a40d03'] = 'Le plugin Carts Guru a été installé avec succès.';
$_MODULE['<{cartsguru}prestashop>welcome_7474c8f58df1491cc0fc42341f868345'] = 'Modifier mes paramètres';
$_MODULE['<{cartsguru}prestashop>welcome_ad84b784ad8d81a7c82b3209e15f1553'] = 'Accéder à Carts Guru';
/* welcome.tpl - multistore view */
$_MODULE['<{cartsguru}prestashop>welcome_94fdcdc729c564170e5de6e0abbd5e39'] = 'L\'option multi-boutiques est activée. Veuillez sélectionner une boutique pour configurer le plugin.';
/* welcome.tpl - connect store view */
$_MODULE['<{cartsguru}prestashop>welcome_2f3f00178ef7de520b79a3ccd70f9447'] = 'Connectez Carts Guru à votre boutique';
$_MODULE['<{cartsguru}prestashop>welcome_b250a007769c7ffe655c74cfb8176b8c'] = 'Identifiant du site';
$_MODULE['<{cartsguru}prestashop>welcome_e8ceedcb9972298e932cc156f9dcee42'] = 'Clef d\'authentification';
$_MODULE['<{cartsguru}prestashop>welcome_b6e06824a3667995a0291dc280c4cfb4'] = 'Démarrer';
$_MODULE['<{cartsguru}prestashop>welcome_0e458e0073e1ec08092620c539801c95'] = 'Vous n\'avez pas cette information ?';
$_MODULE['<{cartsguru}prestashop>welcome_faabe822494cb7cad1e540ca367eba60'] = 'Accédez ici';
/* welcome.tpl - footer */
$_MODULE['<{cartsguru}prestashop>welcome_36ce9091bb449adc40d7c4600889e0a5'] = 'Accèder au site Carts Guru';

View File

@ -2,20 +2,9 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

View File

@ -0,0 +1,104 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
global $_MODULE;
$_MODULE = array();
/* cartsguru.php */
//Module Title
$_MODULE['<{cartsguru}prestashop>cartsguru_2052043f39909e620bd65573706463f6'] = 'Carts Guru';
//Module description
$_MODULE['<{cartsguru}prestashop>cartsguru_502a5a0f558857bb13531cafc2d8d246'] = 'Sua solução multicanal para recuperar carrinhos de compra abandonados de maneira fácil. Use o retargeting com Emails, SMS, Ligações e Redes Sociais!';
//Error cURL lib not available, plugin can not be used
$_MODULE['<{cartsguru}prestashop>cartsguru_a12b6c219f12145e967c09ea898a7fbd'] = 'A livraria cURL não está disponível.';
//Module not configured warning (in modules list)
$_MODULE['<{cartsguru}prestashop>cartsguru_543c108a7f01cd8df3d8ea24d60fd6e0'] = 'O módulo não está configurado';
//Confirmation message when save configuration (site id & auth key)
$_MODULE['<{cartsguru}prestashop>cartsguru_c888438d14855d7d96a2724ee9c306bd'] = 'A configuração foi atualizada.';
//Product image success
$_MODULE['<{cartsguru}prestashop>cartsguru_854de6c1f642b597dcba56164d31cb97'] = 'A imagem do produto para o Carts Guru foi gerada com sucesso.';
//Product image error
$_MODULE['<{cartsguru}prestashop>cartsguru_497295a4b41a60552bb2b03cd16164ef'] = 'Somente parte das imagens foram geradas. O servidor foi interrompido antes de terminá-lo.';
//Sign up error
$_MODULE['<{cartsguru}prestashop>cartsguru_52b766c02af601d61d77774a0fa83b22'] = 'Ocorreu um erro durante seu registro. Por favor, entre em contato conosco através do https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_a33c92bc6fb01f41a3bc7b00f8f75074'] = 'Ainda não somos compatíveis com seu país. Por favor, entre em contato através do https://carts.guru?platform=prestashop';
$_MODULE['<{cartsguru}prestashop>cartsguru_7880b2798d342da5b5bbe66398101c4b'] = 'Este email já está associado a uma conta';
//Sign in error
$_MODULE['<{cartsguru}prestashop>cartsguru_481d6b8c4898d64f0983a567e344d68d'] = 'Não foi possível conectá-lo com suas credenciais atuais.';
/* dashboard_zone_one.tpl */
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_917043f2ee73dd34f4cdf8a8adc3e870'] = 'Carts Guru';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_63a6a88c066880c5ac42394a22803ca6'] = 'Refresh';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_8d11e11ef5eb59e689f2bd5f02403f9e'] = 'Carrinhos Processados';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Pedidos';
$_MODULE['<{cartsguru}prestashop>dashboard_zone_one_910a58229f2e6842d4e993569c0ee687'] = 'Valor Recuperado';
/* welcome.tpl - main view */
$_MODULE['<{cartsguru}prestashop>welcome_46c46a775b80eef48f58efed3051d5d5'] = 'A melhor maneira de recuperar carrinhos abandonados';
$_MODULE['<{cartsguru}prestashop>welcome_44791981f8a25f9c63c43ba4d979b898'] = 'Carts Guru é a solução multifuncional para recuperar seus carrinhos abandonados. Use Emails, SMS, Ligações Automáticas, Facebook e Instagram para converter mais de 20% dos seus clientes perdidos em vendas.';
$_MODULE['<{cartsguru}prestashop>welcome_9a7342bdc64a7abd154cd3227c40cd11'] = 'Todas as funcionalidades durante seu Teste Grátis de 14 dias / US$5.000 recuperados';
$_MODULE['<{cartsguru}prestashop>welcome_7edaed702d94d2c7807d20d662c7067a'] = 'TENHO UMA CONTA';
$_MODULE['<{cartsguru}prestashop>welcome_103ccf94ed36e31ecea1decd3c88dd18'] = 'EXPERIMENTE AGORA GRÁTIS';
/* welcome.tpl - main view - top list */
$_MODULE['<{cartsguru}prestashop>welcome_4cde30a43458a349110b69a71661f24d'] = 'Preços com base no desempenho';
$_MODULE['<{cartsguru}prestashop>welcome_b22939c7405d616e5a13e9e2e117004b'] = 'mais detalhes';
$_MODULE['<{cartsguru}prestashop>welcome_7a3a7be24b5992655610b1ecf407c434'] = 'Crie campanhas ilimitadas, com ações ilimitadas';
$_MODULE['<{cartsguru}prestashop>welcome_b97da5945c83ba339a75eebc78e53d24'] = 'Solução fácil de usar e incrivelmente intuitiva';
$_MODULE['<{cartsguru}prestashop>welcome_a389c7d8e2f7b3442deccd1310e3146a'] = 'Sem riscos, sem de cartão. Cancele quando quiser';
/* welcome.tpl - main view - features */
$_MODULE['<{cartsguru}prestashop>welcome_98f770b0af18ca763421bac22b4b6805'] = 'FUNCIONALIDADES';
$_MODULE['<{cartsguru}prestashop>welcome_d59048f21fd887ad520398ce677be586'] = 'SAIBA MAIS';
$_MODULE['<{cartsguru}prestashop>welcome_08fa955704ed60bd92121421efe1dba5'] = 'Ligações Automáticas';
$_MODULE['<{cartsguru}prestashop>welcome_e0b30405b5e360a6a9d3935e1b5ee99d'] = 'Guarde-as para os produtos e clientes mais importantes. Entre em contato automaticamente.';
$_MODULE['<{cartsguru}prestashop>welcome_d311128c6b9f34f85e6b0e29bcbcd165'] = 'TAXA DE CONVERSÃO';
$_MODULE['<{cartsguru}prestashop>welcome_71241798130f714cbd2786df3da2cf0b'] = 'VALOR MÉDIO DO CARRINHO';
$_MODULE['<{cartsguru}prestashop>welcome_16b8986716da520abefdaec42d79cde7'] = 'Retargeting com email';
$_MODULE['<{cartsguru}prestashop>welcome_f2cd56fb5b2b77bfe56ab4791a053317'] = 'Personalize as campanhas com sua marca. Programe os emails para o momento ideal.';
$_MODULE['<{cartsguru}prestashop>welcome_9194d247411aa51baae262692c740a71'] = 'TAXA DE ABERTURA';
$_MODULE['<{cartsguru}prestashop>welcome_4c51ca7dfcba263c58e914182e78704b'] = 'TAXA DE CLIQUES';
$_MODULE['<{cartsguru}prestashop>welcome_fb82b0e1a9cdd45d75c0316b489dc2f4'] = 'Retargeting com SMS';
$_MODULE['<{cartsguru}prestashop>welcome_b0efdff12e68896d7eeaef2e138ffa80'] = 'Com uma incrível abertura de 97%. Coloque o Marketing com SMS no seu mix.';
$_MODULE['<{cartsguru}prestashop>welcome_4551ffc5f55de732e0512bec68dfffde'] = 'DESCADASTRAM-SE';
$_MODULE['<{cartsguru}prestashop>welcome_6a4e2a43c2d0e44b33c2f7dba1fd72ab'] = 'Facebook e Instagram';
$_MODULE['<{cartsguru}prestashop>welcome_4514e9f52d04fc7a152f8068f814613c'] = 'Esteja onde seus compradores mais estão. Use o retargeting dinâmico para recuperá-los.';
$_MODULE['<{cartsguru}prestashop>welcome_e7b031d00b6b531d99eb2a32094b8b74'] = 'TAXA DE CLIQUES';
$_MODULE['<{cartsguru}prestashop>welcome_fcfebe7da3976f7fff336462ed1ce2b1'] = 'PROPENSO À CONVERSÃO';
/* welcome.tpl - subscribe form */
$_MODULE['<{cartsguru}prestashop>welcome_0557fa923dcee4d0f86b1409f5c2167f'] = 'Voltar';
$_MODULE['<{cartsguru}prestashop>welcome_e79d694c8ca35f005a9dde7bcfdd15b0'] = 'Você está a um passo do seu teste grátis';
$_MODULE['<{cartsguru}prestashop>welcome_20db0bfeecd8fe60533206a2b5e9891a'] = 'Nome';
$_MODULE['<{cartsguru}prestashop>welcome_8d3f5eff9c40ee315d452392bed5309b'] = 'Sobrenome';
$_MODULE['<{cartsguru}prestashop>welcome_1f8261d17452a959e013666c5df45e07'] = 'Número de telefone';
$_MODULE['<{cartsguru}prestashop>welcome_3a0853edb6b77ac1bced734358cab8c2'] = 'Endereço de email';
$_MODULE['<{cartsguru}prestashop>welcome_59716c97497eb9694541f7c3d37b1a4d'] = 'País';
$_MODULE['<{cartsguru}prestashop>welcome_dc647eb65e6711e155375218212b3964'] = 'Senha';
$_MODULE['<{cartsguru}prestashop>welcome_0606da1bfc8cff393a415f647ec06e8f'] = 'URL do site';
/* welcome.tpl - success view */
$_MODULE['<{cartsguru}prestashop>welcome_51dfd5a9635ce9e8c30311df73a40d03'] = 'Carts Guru instalado com sucesso!';
$_MODULE['<{cartsguru}prestashop>welcome_7474c8f58df1491cc0fc42341f868345'] = 'EDITAR MINHAS DEFINIÇÕES';
$_MODULE['<{cartsguru}prestashop>welcome_ad84b784ad8d81a7c82b3209e15f1553'] = 'ACESSAR O CARTS GURU';
/* welcome.tpl - multistore view */
$_MODULE['<{cartsguru}prestashop>welcome_94fdcdc729c564170e5de6e0abbd5e39'] = 'A opção de múltiplas lojas está ativada. Se quiser configurar o módulo, por favor, selecione a loja.';
/* welcome.tpl - connect store view */
$_MODULE['<{cartsguru}prestashop>welcome_2f3f00178ef7de520b79a3ccd70f9447'] = 'Conecte o Carts Guru a sua loja PrestaShop';
$_MODULE['<{cartsguru}prestashop>welcome_b250a007769c7ffe655c74cfb8176b8c'] = 'ID do site';
$_MODULE['<{cartsguru}prestashop>welcome_e8ceedcb9972298e932cc156f9dcee42'] = 'Código de autorização';
$_MODULE['<{cartsguru}prestashop>welcome_b6e06824a3667995a0291dc280c4cfb4'] = 'CONECTE AGORA';
$_MODULE['<{cartsguru}prestashop>welcome_0e458e0073e1ec08092620c539801c95'] = 'Não sabe onde encontrar isso?';
$_MODULE['<{cartsguru}prestashop>welcome_faabe822494cb7cad1e540ca367eba60'] = 'Encontre-o aqui';
/* welcome.tpl - footer */
$_MODULE['<{cartsguru}prestashop>welcome_36ce9091bb449adc40d7c4600889e0a5'] = 'ACESSE O SITE DO CARTS GURU';

View File

@ -0,0 +1,23 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
if (!defined('_PS_VERSION_')) {
exit();
}
// Upgrade module to 1.2.0
function upgrade_module_1_2_0($module)
{
if ($module->registerHeaderAndOrderConfirmationHooks()) {
// Register the new version in API
$module->registerPluginAfterUpdate();
return true;
}
return false;
}

View File

@ -0,0 +1,28 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
if (!defined('_PS_VERSION_')) {
exit();
}
// Upgrade module to 1.2.1
function upgrade_module_1_2_1($module)
{
//New image configuration
Configuration::updateValue('CARTSG_IMAGE_TYPE', 'cartsguru');
$module->registerHook('backOfficeHeader');
if ($module->registerDashboarHooks()) {
// Register the new version in API
$module->registerPluginAfterUpdate();
return true;
}
return false;
}

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="1186px" height="554px" viewBox="0 0 1186 554" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: sketchtool 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>0C3FE253-A9E3-4012-9305-5AC28D53E237</title>
<desc>Created with sketchtool.</desc>
<defs>
<polygon id="path-1" points="0 0.22265625 1442 0.22265625 1440 270.398438 0 553.867187"></polygon>
<rect id="path-3" x="0" y="0" width="1080" height="748"></rect>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="prestashop_home_hover" transform="translate(-254.000000, -149.000000)">
<g id="graph" transform="translate(254.000000, 149.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Mask" fill="#F7F7F7" xlink:href="#path-1"></use>
<g opacity="0.5" mask="url(#mask-2)">
<g transform="translate(487.000000, 317.000000) scale(-1, 1) rotate(-15.000000) translate(-487.000000, -317.000000) translate(-53.000000, -57.000000)">
<mask id="mask-4" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<g id="Mask" stroke="none" fill="none"></g>
<g id="graph" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" mask="url(#mask-4)">
<g transform="translate(718.000000, 509.500000) rotate(-21.000000) translate(-718.000000, -509.500000) translate(-640.000000, 21.000000)" id="Shape" stroke-width="2">
<path d="M13.9647431,760.236193 C13.9647431,760.236193 263.655898,556.651142 459.178033,569.659792 C576.858647,577.487992 543.883387,566.180772 660.160374,582.828863 C714.407372,590.593867 757.762165,477.043648 811.041889,465.70564 C855.601212,456.223002 994.31299,509.012713 1039.85618,514.646878 C1180.52076,532.045219 1177.5957,419.630907 1319.88955,419.434837 C1390.39936,419.337612 1441.86566,494.913527 1510.4011,487.140421 C1566.09653,480.822443 1595.71038,444.855827 1667.95897,426.626216 C1718.82631,413.79095 1817.07019,453.435897 1859.18727,451.381217 C1914.34513,448.689716 1922.50806,360.999618 1965.05652,343.961008 C2010.316,325.835104 2036.57177,404.998606 2124.64848,426.626216 C2187.43669,442.042795 2228.71093,227.741974 2293.66763,220.288089 C2343.99908,214.514568 2418.86909,375.100424 2465.58197,391.353135 C2546.95579,419.664935 2527.51573,299.694652 2527.51573,299.694652 L2611.4695,906.701797 C2611.4695,906.701797 21.5967529,972.714053 13.9647431,976.839617 C6.33107419,980.96518 -6.38949514,760.236193 3.78762398,760.236193 L13.9647431,760.236193 L13.9647431,760.236193 Z" stroke-opacity="0.6" stroke="#F7AE30" fill-opacity="0.6" fill="#FFE0AA"></path>
<path d="M187.481979,636.845621 C192.466013,635.568562 444.901373,505.197471 567.428313,512.219635 C625.84637,515.566523 842.062866,597.24188 923.469864,551.251187 C1004.87686,505.260495 1124.49534,399.805313 1232.48496,426.633493 C1340.47458,453.461674 1609.30881,500.878691 1675.76205,466.386501 C1742.2186,431.892653 1907.11149,276.650432 2010.00757,298.245989 C2070.49623,310.941941 2149.56219,389.588845 2250.90698,353.817938 C2352.25012,318.045372 2370.5238,-23.0387189 2431.99632,1.23534441 C2493.46719,25.5077492 2649.6347,825.9216 2649.6347,825.9216 L332.02063,825.9216 L187.481979,636.845621 L187.481979,636.845621 Z" stroke-opacity="0.8" stroke="#5FB96E" fill-opacity="0.8" fill="#B5E3BC"></path>
<path d="M147.657645,757.587359 C152.671543,756.1544 426.715446,657.296801 540.344457,714.606876 C653.973469,771.915292 747.364381,738.98045 882.714757,681.670375 C1018.06679,624.361959 1071.7248,561.313413 1143.57851,564.177673 C1215.43056,567.043592 1285.99015,656.585297 1376.22374,635.094226 C1466.45898,613.603156 1520.70266,531.821654 1678.82629,551.284358 C1836.95158,570.745403 1864.89469,612.173513 1966.82681,596.412621 C2068.75728,580.653387 2165.75017,289.795842 2249.30243,286.958119 C2332.85136,284.122054 2456.98932,428.791225 2533.85693,454.579515 C2610.72289,480.369463 2715.99485,426.643445 2715.99485,426.643445 L2704.29962,945.349793 C2704.29962,945.349793 201.129828,941.052573 204.471321,945.349793 C207.814473,949.64867 147.657645,757.587359 147.657645,757.587359 L147.657645,757.587359 Z" stroke-opacity="0.6" stroke="#E97171" fill="#FFDDDD"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,17 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -2,20 +2,9 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

View File

@ -0,0 +1,36 @@
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
(function ($) {
// On ready
$(document).ready(function ($) {
// Switch active view
function switchView(view, backToView){
if (!view){
view = window.cg_backto;
window.cg_backto = null;
}
$('#cartsguru-welcome').removeClass();
switch(view){
case 'view-try-it':
case 'view-have-account':
case 'view-success':
case 'view-no-store-selected':
$('#cartsguru-welcome').addClass(view);
}
window.cg_backto = backToView;
}
//Declare global functions
window.cg_switchView = switchView;
});
})(jQuery);

View File

@ -0,0 +1,17 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,10 @@
{*
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*}
<link rel="stylesheet" href="{$path|escape:'urlpathinfo':'UTF-8'}/css/admin.css" type="text/css" />
<script type="text/javascript" src="{$path|escape:'urlpathinfo':'UTF-8'}/js/admin.js"></script>

View File

@ -1,21 +1,11 @@
{*
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.0.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.0.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.5,1.6
* + Cloud compatible & tested
*}
*}
{if $ps_version < "1.6"}
<div class="warn">
{else}
@ -36,4 +26,4 @@
</div></div>
{else}
</div>
{/if}
{/if}

View File

@ -2,20 +2,9 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

View File

@ -0,0 +1,233 @@
{*
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*}
<div id="cartsguru-welcome" class="{$activeView|escape:'htmlall':'UTF-8'}">
<div class="header">
<div class="inner-section">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12 text-center">
<img class="logo" src="{$imagesUrl|escape:'urlpathinfo':'UTF-8'}logo_black.png" />
</div>
</div>
<div class="success-message text-center">
<img src="{$imagesUrl|escape:'urlpathinfo':'UTF-8'}success.png" />
<h1>{l s='You successfuly installed Carts Guru' mod='cartsguru'}</h1>
</div>
<div class="no-selected-store-message text-center">
<h1>{l s='The multistore option is enabled. If you want configure the module, please select store.' mod='cartsguru'}</h1>
</div>
<form action="{$formUrl|escape:'htmlall':'UTF-8'}" method="post" class="view-try-it-form form form-big-padding">
<div class="form-title text-center">{l s='You are one step away from your free-trial' mod='cartsguru'}</div>
<button type="button" class="close-form-btn back-btn" onclick="cg_switchView()">
&lt; {l s='Back' mod='cartsguru'}
</button>
<div class="row">
<div class="col-md-6">
<input class="input full-width" name="firstname" placeholder="{l s='First name' mod='cartsguru'}" required value="{$firstname|escape:'htmlall':'UTF-8'}" />
</div>
<div class="col-md-6">
<input class="input full-width" name="lastname" placeholder="{l s='Last name' mod='cartsguru'}" required value="{$lastname|escape:'htmlall':'UTF-8'}"/>
</div>
</div>
<div class="row">
<div class="col-md-6">
<input class="input full-width" name="phoneNumber" placeholder="{l s='Phone number' mod='cartsguru'}" required value="{$phoneNumber|escape:'htmlall':'UTF-8'}" />
</div>
<div class="col-md-6">
<input class="input full-width" type="email" name="email" placeholder="{l s='Email adress' mod='cartsguru'}" required value="{$email|escape:'htmlall':'UTF-8'}" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<select class="input full-width" name="country" required placeholder="{l s='Country' mod='cartsguru'}">
{foreach from=$countries key=id_country item=countryName}
<option value="{$id_country|escape:'htmlall':'UTF-8'}" {if $id_country eq $country}selected="selected"{/if}>{$countryName|escape:'htmlall':'UTF-8'}</option>
{/foreach}
</select>
</div>
<div class="col-md-6">
<input class="input full-width" type="password" name="password" placeholder="{l s='Password' mod='cartsguru'}" required />
</div>
</div>
<div class="row">
<div class="col-md-12">
<input class="input full-width" name="website" placeholder="{l s='Website Url' mod='cartsguru'}" required value="{$website|escape:'htmlall':'UTF-8'}" />
</div>
</div>
<div class="row">
<div class="col-md-12 text-center">
<button class="btn-full" name="submitSubscribe">{l s='Connect it now' mod='cartsguru'}</button>
</div>
</div>
</form>
<div class="row header-text">
<div class="col-lg-12">
<h1>{l s='The best way to recover your abandoned carts' mod='cartsguru'}</h1>
<h2>{l s='Carts Guru is the all-in-one solution to recover your abandoned carts and turn them into sales. Use Emails, SMS, Automatic Calls, Facebook & Instagram to convert more than 20% of your lost customers into sales.' mod='cartsguru'} </h2>
</div>
</div>
<form action="{$formUrl|escape:'htmlall':'UTF-8'}" method="post" class="have-account-form form">
<div class="form-title">{l s='Plug Carts Guru into your PrestaShop store' mod='cartsguru'}</div>
<button type="button" class="close-form-btn" onclick="cg_switchView()">
X
</button>
<div class="row">
<div class="col-md-4">
<input class="input full-width" name="siteid" placeholder="{l s='Site ID' mod='cartsguru'}" required value="{$siteid|escape:'htmlall':'UTF-8'}"/>
</div>
<div class="col-md-4">
<input class="input full-width" name="authkey" placeholder="{l s='Auth Key' mod='cartsguru'}" required value="{$authkey|escape:'htmlall':'UTF-8'}"/>
</div>
<div class="col-md-4">
<button class="btn-full full-width" name="submitConnect">{l s='Connect it now' mod='cartsguru'}</button>
</div>
</div>
<div class="sub-text row">
<div class="col-sm-12">
<span>{l s='Don t know this information?' mod='cartsguru'}</span>
<a class="link" target="_blank" href="https://my.carts.guru">{l s='Access it here' mod='cartsguru'}</a>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="triangle-slice"></div>
<div class="footer">
<div class="inner-section">
<div class="container-fluid">
<div class="success-buttons">
<button class="btn-not-full" onclick="cg_switchView('view-have-account', 'view-success')">{l s='Edit my settings' mod='cartsguru'}</button>
<button class="btn-full" onclick="location.href='https://my.carts.guru?authid={$siteid|escape:'htmlall':'UTF-8'}&authkey={$authkey|escape:'htmlall':'UTF-8'}'">{l s='Access to Carts Guru platform' mod='cartsguru'}</button>
</div>
<div class="try-buttons">
<div class="button-title">{l s='Enjoy all features during your 14-Days / $5,000 Revenue Free Trial' mod='cartsguru'}</div>
<button class="btn-not-full" onclick="cg_switchView('view-have-account')">{l s='I have an account' mod='cartsguru'}</button>
<form action="{$formUrl|escape:'htmlall':'UTF-8'}" class="form-inline" method="post">
<button class="btn-full" name="submitHasNoAccount">{l s='Try it now for free' mod='cartsguru'}</button>
</form>
</div>
<div class="row">
<div class="list">
<div class="col-lg-6">
<div class="list-item">
<img src="{$imagesUrl|escape:'urlpathinfo':'UTF-8'}checkmark.png" />
<span>{l s='Performance-based pricing.' mod='cartsguru'}</span>
(<a class="link" target="_blank" href="https://carts.guru?platform=prestashop">{l s='see details here' mod='cartsguru'}</a>)
</div>
<div class="list-item">
<img src="{$imagesUrl|escape:'urlpathinfo':'UTF-8'}checkmark.png" />
<span>{l s='Easy-to-use, incredibly intuitive solution' mod='cartsguru'}</span>
</div>
</div>
<div class="col-lg-6">
<div class="list-item">
<img src="{$imagesUrl|escape:'urlpathinfo':'UTF-8'}checkmark.png" />
<span>{l s='Run unlimited campaigns, with unlimited actions' mod='cartsguru'}</span>
</div>
<div class="list-item">
<img src="{$imagesUrl|escape:'urlpathinfo':'UTF-8'}checkmark.png" />
<span>{l s='Risk Free. No credit cards required. Cancel any time' mod='cartsguru'}</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 text-center text-bold features-title">{l s='Features' mod='cartsguru'}</div>
</div>
<div class="row">
<div clas="col-sm-12">
<div class="channel-block-list text-center">
<article class="channel-block">
<div class="channel-title">{l s='Email retargeting' mod='cartsguru'}</div>
<div class="channel-picture email"></div>
<div class="channel-link">{l s='Learn more' mod='cartsguru'}</div>
<div class="channel-info">
<div class="channel-block-info-triangle"></div>
<p class="no-margin">{l s='Customize campaigns with your brand. Launch them at the perfect moment with automation.' mod='cartsguru'}</p>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">52%</div>
<div class="channel-ef-t">{l s='Open rate' mod='cartsguru'}</div>
</div>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">14%</div>
<div class="channel-ef-t">{l s='Click rate' mod='cartsguru'}</div>
</div>
</div>
</article>
<article class="channel-block">
<div class="channel-title">{l s='SMS retargeting' mod='cartsguru'}</div>
<div class="channel-picture sms"></div>
<div class="channel-link">{l s='Learn more' mod='cartsguru'}</div>
<div class="channel-info">
<div class="channel-block-info-triangle"></div>
<p class="no-margin">{l s='With an outstanding 97% open rate. Add SMS Marketing to your mix.' mod='cartsguru'}</p>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">20%</div>
<div class="channel-ef-t">{l s='Conversion rate' mod='cartsguru'}</div>
</div>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">1%</div>
<div class="channel-ef-t">{l s='Unsubscription' mod='cartsguru'}</div>
</div>
</div>
</article>
<article class="channel-block">
<div class="channel-title">{l s='Automatic calls' mod='cartsguru'}</div>
<div class="channel-picture call"></div>
<div class="channel-link">{l s='Learn more' mod='cartsguru'}</div>
<div class="channel-info">
<div class="channel-block-info-triangle"></div>
<p class="no-margin">{l s='Save this for your most important products and customers. Contact your customer automatically.' mod='cartsguru'}</p>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">45%</div>
<div class="channel-ef-t">{l s='Conversion rate' mod='cartsguru'}</div>
</div>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">+20%</div>
<div class="channel-ef-t">{l s='Average cart value' mod='cartsguru'}</div>
</div>
</div>
</article>
<article class="channel-block">
<div class="channel-title">{l s='Facebook & Instagram' mod='cartsguru'}</div>
<div class="channel-picture fb"></div>
<div class="channel-link">{l s='Learn more' mod='cartsguru'}</div>
<div class="channel-info">
<div class="channel-block-info-triangle"></div>
<p class="no-margin">{l s='Reach your buyers where they are! Use dynamic retargeting to recover buyers with CPC ads.' mod='cartsguru'}</p>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">+34%</div>
<div class="channel-ef-t">{l s='Click through rate' mod='cartsguru'}</div>
</div>
<div class="col-xs-6 channel-ef-el">
<div class="channel-ef">+70%</div>
<div class="channel-ef-t">{l s='Prone to convert' mod='cartsguru'}</div>
</div>
</div>
</article>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 text-center">
<a class="text-bold features-title" target="_blank" href="https://carts.guru?platform=prestashop">
{l s='Access Carts Guru website' mod='cartsguru'}
</a>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,26 @@
{*
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*}
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">
<title>{$store_name|escape:'htmlall':'UTF-8'}</title>
<link rel="self" href="{$url|escape:'htmlall':'UTF-8'}"/>
{foreach from=$products item=product}
<entry>
<g:id>{$product.id|escape:'htmlall':'UTF-8'}</g:id>
<g:availability>{$product.availability|escape:'htmlall':'UTF-8'}</g:availability>
<g:description><![CDATA[{$product.description|escape:'htmlall':'UTF-8'}]]></g:description>
<g:image_link>{$product.image_link|escape:'htmlall':'UTF-8'}</g:image_link>
<g:link>{$product.link|escape:'htmlall':'UTF-8'}</g:link>
<g:title><![CDATA[{$product.title|escape:'htmlall':'UTF-8'}]]></g:title>
<g:price>{$product.price|escape:'htmlall':'UTF-8'}</g:price>
<g:mpn>{$product.id|escape:'htmlall':'UTF-8'}</g:mpn>
<g:condition>new</g:condition>
</entry>
{/foreach}
</feed>

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,40 @@
{*
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*}
<section id="cartsguru" class="panel widget">
<div class="panel-heading">
<i class="icon-time"></i>{l s='Carts Guru Dashboard' mod='cartsguru'}
<span class="panel-heading-action">
<a class="list-toolbar-btn" href="#" onclick="refreshDashboard('cartsguru'); return false;" title="{l s='Refresh' mod='cartsguru'}">
<i class="process-icon-refresh"></i>
</a>
</span>
</div>
<section id="dash_cg_main" class="">
<ul class="data_list_large">
<li>
<span class="data_label size_l"> {l s='Processed Carts' mod='cartsguru'}</span>
<span class="data_value size_xxl">
<span id="cg_processed_carts"></span>
</span>
</li>
<li>
<span class="data_label size_l"> {l s='Orders' mod='cartsguru'}</span>
<span class="data_value size_xxl">
<span id="cg_sales"></span>
</span>
</li>
<li>
<span class="data_label size_l">{l s='Revenue Recovered' mod='cartsguru'}</span>
<span class="data_value size_xxl">
<span id="cg_turnover"></span>
</span>
</li>
</ul>
</section>
</section>

View File

@ -0,0 +1,16 @@
<?php
/**
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;

View File

@ -0,0 +1,19 @@
{*
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*}
<script>
{if isset($order) && $order}
fbq('track', 'Purchase', {
content_ids: ['{$order.products|escape:'htmlall':'UTF-8'}'],
content_type: 'product',
value: {$order.total|escape:'htmlall':'UTF-8'},
currency: '{$currency_iso|escape:'htmlall':'UTF-8'}',
product_catalog_id: {$catalogId|escape:'htmlall':'UTF-8'}
});
{/if}
</script>

View File

@ -0,0 +1,46 @@
{*
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*}
<script>
{literal}
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','//connect.facebook.net/en_US/fbevents.js');
{/literal}
{if isset($pixel) && $pixel}
fbq('init', '{$pixel|escape:'htmlall':'UTF-8'}'); fbq('track', 'PageView');
{if isset($track_product_view) && $track_product_view}
fbq('track', 'ViewContent', {
content_ids: ['{$track_product_view.id|escape:'htmlall':'UTF-8'}'],
content_type: 'product',
value: {$track_product_view.value|escape:'htmlall':'UTF-8'},
currency: '{$currency_iso|escape:'htmlall':'UTF-8'}',
product_catalog_id: '{$catalogId|escape:'htmlall':'UTF-8'}'
});
{/if}
(function($){
$(document).ajaxComplete(function(event, xhr, params) {
if (xhr.responseJSON && xhr.responseJSON.productTotal && xhr.responseJSON.products) {
var products = [];
for (var i = 0; i < xhr.responseJSON.products.length; i++) {
products.push(xhr.responseJSON.products[i].id);
}
fbq('track', 'AddToCart', {
content_ids: products,
content_type: 'product',
value: parseFloat(xhr.responseJSON.productTotal.replace(',', '.')),
currency: '{$currency_iso|escape:'htmlall':'UTF-8'}',
product_catalog_id: '{$catalogId|escape:'htmlall':'UTF-8'}'
});
}
});
})(jQuery);
{/if}
</script>

View File

@ -0,0 +1,100 @@
{*
* Carts Guru
*
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @license Commercial license
*}
<script>
(function($){
$(document).ready(function() {
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
var fieldNames = {
email: ['guest_email', 'email'],
homePhoneNumber: ['phone'],
mobilePhoneNumber: ['phone_mobile'],
firstname: ['firstname', 'customer_firstname'],
lastname: ['lastname', 'customer_lastname'],
countryCode: ['id_country']
};
var fields = {
email: [],
homePhoneNumber: [],
mobilePhoneNumber: [],
firstname: [],
lastname: [],
countryCode: []
};
function setupTracking () {
for (var item in fieldNames) {
if (fieldNames.hasOwnProperty(item)) {
for (var i = 0; i < fieldNames[item].length; i++) {
//Get by name
var els = document.getElementsByName(fieldNames[item][i]);
for (var j = 0; j < els.length; j++) {
fields[item].push(els[j]);
}
//Get by ID
var el = document.getElementById(fieldNames[item][i]);
if (el && el.name !== fieldNames[item][i]){
fields[item].push(el);
}
}
}
}
if (fields.email.length > 0 && fields.firstname.length > 0) {
for (var item in fields) {
if (fields.hasOwnProperty(item)) {
for (var i = 0; i < fields[item].length; i++) {
$(fields[item][i]).bind('blur', trackData);
}
}
}
}
}
function collectData () {
var data = {};
for (var item in fields) {
if (fields.hasOwnProperty(item)) {
for (var i = 0; i < fields[item].length; i++) {
data[item] = $(fields[item][i]).val();
if (data[item] && data[item].trim){
data[item].trim();
}
if (data[item] !== ''){
break;
}
}
}
}
return data;
}
function trackData () {
var data = collectData();
if (data.email) {
$(document).ready(function() {
$.ajax({
url: "{$trackingUrl|escape:'javascript':'UTF-8'}",
type: "POST",
data: data
});
});
}
}
setupTracking();
});
})(jQuery);
</script>

View File

@ -2,20 +2,9 @@
/**
* Carts Guru
*
* @category advertising_marketing
* @author LINKT IT
* @copyright Copyright (c) LINKT IT 2016
* @version 1.1.0
* @license Commercial license
*
*************************************
** CARTS GURU *
** V 1.1.0 *
*************************************
* +
* + Languages: EN, FR
* + PS version: 1.4,1.5,1.6
* + Cloud compatible & tested
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
@ -24,4 +13,4 @@ header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../');
exit;
exit;