This commit is contained in:
2025-04-01 00:38:54 +02:00
parent d4d4c0c09d
commit 87da06293a
22351 changed files with 5168854 additions and 7538 deletions

View File

@@ -0,0 +1,12 @@
# Smartsupp plugin - PrestaShop 1.6+
## Compatibility
Versions: 1.6.0.4 - 1.7.x.x
## Way to install
Visit [Smartsupp free live chat Module](https://addons.prestashop.com/en/support-online-chat/21260-smartsupp-free-live-chat.html) PrestaShop plugin detail page.
## Copyright
Copyright (c) 2018 [Smartsupp.com](https://www.smartsupp.com/)

View File

@@ -0,0 +1,348 @@
<?php
/*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2014 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if ((bool)Configuration::get('PS_MOBILE_DEVICE')) {
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;
public function __construct()
{
}
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);
}
}
}
// Not exist for 1.3 and 1.4
class Context
{
/**
* @var Context
*/
protected static $instance;
/**
* @var Cart
*/
public $cart;
/**
* @var Customer
*/
public $customer;
/**
* @var Cookie
*/
public $cookie;
/**
* @var Link
*/
public $link;
/**
* @var Country
*/
public $country;
/**
* @var Employee
*/
public $employee;
/**
* @var Controller
*/
public $controller;
/**
* @var Language
*/
public $language;
/**
* @var Currency
*/
public $currency;
/**
* @var AdminTab
*/
public $tab;
/**
* @var Shop
*/
public $shop;
/**
* @var Smarty
*/
public $smarty;
/**
* @ var Mobile Detect
*/
public $mobile_detect;
/**
* @var boolean|string mobile device of the customer
*/
protected $mobile_device;
public function __construct()
{
global $cookie, $cart, $smarty, $link;
$this->tab = null;
$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->shop = new ShopBackwardModule();
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;
}
}
}
return $this->mobile_device;
}
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;
}
/**
* 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();
}
}
/**
* Class Shop for Backward compatibility
*/
class ShopBackwardModule extends Shop
{
const CONTEXT_ALL = 1;
public $id = 1;
public $id_shop_group = 1;
public function getContextType()
{
return ShopBackwardModule::CONTEXT_ALL;
}
// Simulate shop for 1.3 / 1.4
public function getID()
{
return 1;
}
/**
* Get shop theme name
*
* @return string
*/
public function getTheme()
{
return _THEME_NAME_;
}
public function isFeatureActive()
{
return false;
}
}
/**
* Class Controller for a Backward compatibility
* Allow to use method declared in 1.5
*/
class ControllerBackwardModule
{
/**
* @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');
}
}
}
/**
* Class Customer for a Backward compatibility
* Allow to use method declared in 1.5
*/
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;
}
/* 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

@@ -0,0 +1,49 @@
<?php
/*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2014 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
/**
* Class allow to display tpl on the FO
*/
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;
}
}
// Overload displayContent for 1.4
public function displayContent()
{
parent::displayContent();
echo Context::getContext()->smarty->fetch($this->template);
}
}

View File

@@ -0,0 +1 @@
version = 0.4

View File

@@ -0,0 +1,55 @@
<?php
/*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2014 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
/**
* Backward function compatibility
* Need to be called for each module in 1.4
*/
// Get out if the context is already defined
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 not under an object we don't have to set the context
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();
$this->smarty = $this->context->smarty;

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2014 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
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,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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,30 @@
{
"name": "smartsupp/live-chat",
"description": "Popular live chat for Prestashop stores. Start a personal conversation with your visitors and turn them into happy customers.",
"authors": [
{
"name": "Marek Gach",
"email": "gach@kurzor.net"
}
],
"require": {
"php": ">=5.6.0",
"smartsupp/chat-code-generator": "^1.0",
"smartsupp/php-partner-client": "^1.0"
},
"autoload": {
"psr-4": {
"Smartsupp\\LiveChat\\": "src/"
},
"classmap": [
"classes/"
],
"exclude-from-classmap": []
},
"config": {
"preferred-install": "dist",
"prepend-autoloader": false
},
"type": "prestashop-module",
"license": "GPL-2.0-or-later"
}

105
modules/smartsupp/composer.lock generated Normal file
View File

@@ -0,0 +1,105 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "8c62af103569bb882c558226bd17bdcd",
"packages": [
{
"name": "smartsupp/chat-code-generator",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/smartsupp/chat-code-generator.git",
"reference": "1f63b44aeb90a1cd9e37b260a35b0ccb3377feea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/smartsupp/chat-code-generator/zipball/1f63b44aeb90a1cd9e37b260a35b0ccb3377feea",
"reference": "1f63b44aeb90a1cd9e37b260a35b0ccb3377feea",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "4.7.*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Smartsupp": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"authors": [
{
"name": "Marek Gach",
"role": "lead"
}
],
"description": "This simple PHP class allows you to easily generate Smartsupp.com JS chat code.",
"homepage": "https://www.smartsupp.com/",
"keywords": [
"chat"
],
"time": "2018-11-08T15:36:32+00:00"
},
{
"name": "smartsupp/php-partner-client",
"version": "1.1",
"source": {
"type": "git",
"url": "https://github.com/smartsupp/php-auth-client.git",
"reference": "caa587a89ae551f1356f083baf29d31567468020"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/smartsupp/php-auth-client/zipball/caa587a89ae551f1356f083baf29d31567468020",
"reference": "caa587a89ae551f1356f083baf29d31567468020",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "4.8.*"
},
"type": "library",
"autoload": {
"psr-0": {
"Smartsupp": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"authors": [
{
"name": "Marek Gach",
"role": "lead"
}
],
"description": "API client allows to register and login (obtain API key) from Smartsupp partner API.",
"homepage": "https://www.smartsupp.com/",
"keywords": [
"chat"
],
"time": "2019-09-30T15:08:09+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=5.6.0"
},
"platform-dev": []
}

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<module>
<name>smartsupp</name>
<displayName><![CDATA[Smartsupp Live Chat]]></displayName>
<version><![CDATA[2.2.0]]></version>
<description><![CDATA[Smartsupp combines live chat and chatbots to save your time.]]></description>
<author><![CDATA[Smartsupp]]></author>
<tab><![CDATA[advertising_marketing]]></tab>
<confirmUninstall><![CDATA[Opravdu chcete odinstalovat Smartsupp? Ztratíte tak všechna data uložená v modulu.]]></confirmUninstall>
<is_configurable>1</is_configurable>
<need_instance>0</need_instance>
</module>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<module>
<name>smartsupp</name>
<displayName><![CDATA[Smartsupp Live Chat &amp; AI Chatbots]]></displayName>
<version><![CDATA[2.2.0]]></version>
<description><![CDATA[Smartsupp is your personal online shopping assistant, built to increase conversion rates and sales via visitor engagement in real-time, at the right time.]]></description>
<author><![CDATA[Smartsupp]]></author>
<tab><![CDATA[advertising_marketing]]></tab>
<confirmUninstall><![CDATA[Are you sure you want to uninstall Smartsupp Live Chat? You will lose all the data related to this module.]]></confirmUninstall>
<is_configurable>1</is_configurable>
<need_instance>0</need_instance>
<limited_countries></limited_countries>
</module>

View File

@@ -0,0 +1,95 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @author Smartsupp <vladimir@smartsupp.com>
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
* @package Smartsupp
* @link http://www.smartsupp.com
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Text Domain: smartsupp
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
use \Smartsupp\Auth\Api;
class AdminSmartsuppAjaxController extends ModuleAdminController
{
const FILE_NAME = 'AdminSmartsuppAjaxController';
public $ssl = true;
private $partnerKey = 'h4w6t8hln9';
private $response = [];
public function init()
{
$api = new Api();
switch (Tools::getValue('action')) {
case 'login':
$this->response = $api->login([
'email' => Tools::getValue('email'),
'password' => Tools::getValue('password'),
'platform' => 'Prestashop ' . _PS_VERSION_,
]);
$this->updateCredentials();
break;
case 'create':
$this->response = $api->create([
'email' => Tools::getValue('email'),
'password' => Tools::getValue('password'),
'partnerKey' => $this->partnerKey,
'consentTerms' => 1,
'platform' => 'Prestashop ' . _PS_VERSION_,
]);
$this->updateCredentials();
break;
case 'deactivate':
Configuration::updateValue('SMARTSUPP_KEY', '');
Configuration::updateValue('SMARTSUPP_EMAIL', '');
break;
}
header('Content-Type: application/json');
$responseData = [
'key' => Configuration::get('SMARTSUPP_KEY'),
'email' => Configuration::get('SMARTSUPP_EMAIL'),
'error' => isset($this->response['error']) ? $this->response['error'] : null,
'message' => isset($this->response['message']) ? $this->response['message'] : null,
];
$responseData = array_filter($responseData, function ($val) {
return $val !== null;
});
die(json_encode($responseData));
}
/**
* @return void
*/
private function updateCredentials()
{
if (isset($this->response['account']['key'])) {
Configuration::updateValue('SMARTSUPP_KEY', $this->response['account']['key']);
Configuration::updateValue('SMARTSUPP_EMAIL', Tools::getValue('email'));
return;
}
$this->response['error'] = isset($this->response['error']) ? $this->response['error'] : $this->module->l('Unknown Error Occurred', self::FILE_NAME);
$this->response['message'] = isset($this->response['message']) ? $this->response['message'] : $this->module->l('Unknown Error Occurred', self::FILE_NAME);
Configuration::updateValue('SMARTSUPP_KEY', '');
Configuration::updateValue('SMARTSUPP_EMAIL', '');
}
}

View File

@@ -0,0 +1,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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;

BIN
modules/smartsupp/logo.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 998 B

BIN
modules/smartsupp/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
modules/smartsupp/logo.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

View File

@@ -0,0 +1,372 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @author Smartsupp <vladimir@smartsupp.com>
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
* @package Smartsupp
* @link http://www.smartsupp.com
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
use Smartsupp\LiveChat\Utility\VersionUtility;
if (!defined('_PS_VERSION_')) {
exit;
}
class Smartsupp extends Module
{
public function __construct()
{
$this->name = 'smartsupp';
$this->tab = 'advertising_marketing';
$this->version = '2.2.0';
$this->author = 'Smartsupp';
$this->need_instance = 0;
$this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_);
$this->bootstrap = true;
$this->module_key = 'da5110815a9ea717be24a57b804d24fb';
parent::__construct();
$this->displayName = $this->l('Smartsupp Live Chat & AI Chatbots');
$this->description = $this->l('Smartsupp is your personal online shopping assistant, built to increase conversion rates and sales via visitor engagement in real-time, at the right time.');
$confirm = $this->l('Are you sure you want to uninstall Smartsupp Live Chat? ');
$confirm .= $this->l('You will lose all the data related to this module.');
$this->confirmUninstall = $this->l($confirm);
if (version_compare(_PS_VERSION_, '1.5', '<')) {
include _PS_MODULE_DIR_ . $this->name . '/backward_compatibility/backward.php';
}
$this->autoload();
if (!Configuration::get('SMARTSUPP_KEY')) {
$this->warning = $this->l('No Smartsupp key provided.');
}
}
public function install()
{
if (version_compare(_PS_VERSION_, '1.6', '>=') && Shop::isFeatureActive()) {
Shop::setContext(Shop::CONTEXT_ALL);
}
$tab = new Tab();
$tab->active = 1;
$tab->class_name = 'AdminSmartsuppAjax';
$tab->name = array();
foreach (Language::getLanguages(true) as $lang) {
$tab->name[$lang['id_lang']] = 'Smartsupp';
}
$tab->id_parent = -1;
$tab->module = $this->name;
if (VersionUtility::isPsVersionGreaterThan('1.6')) {
$this->registerHook('displayBackOfficeHeader');
} else {
$this->registerHook('backOfficeHeader');
}
if (!$tab->add()
|| !parent::install()
|| !$this->registerHook('header')
|| !Configuration::updateValue('SMARTSUPP_KEY', '')
|| !Configuration::updateValue('SMARTSUPP_EMAIL', '')
|| !Configuration::updateValue('SMARTSUPP_CUSTOMER_ID', '1')
|| !Configuration::updateValue('SMARTSUPP_CUSTOMER_NAME', '1')
|| !Configuration::updateValue('SMARTSUPP_CUSTOMER_EMAIL', '1')
|| !Configuration::updateValue('SMARTSUPP_CUSTOMER_PHONE', '1')
|| !Configuration::updateValue('SMARTSUPP_CUSTOMER_ROLE', '1')
|| !Configuration::updateValue('SMARTSUPP_CUSTOMER_SPENDINGS', '1')
|| !Configuration::updateValue('SMARTSUPP_CUSTOMER_ORDERS', '1')
|| !Configuration::updateValue('SMARTSUPP_OPTIONAL_API', '')
) {
return false;
}
if (VersionUtility::isPsVersionGreaterThan('1.6')) {
$this->registerHook('displayBackOfficeHeader');
} else {
$this->registerHook('backOfficeHeader');
}
return true;
}
public function uninstall()
{
if (VersionUtility::isPsVersionGreaterOrEqualTo('1.7.1')) {
$id_tab = $this->get('prestashop.core.admin.tab.repository')->findOneIdByClassName('AdminSmartsuppAjax');
} else {
$id_tab = (int) Tab::getIdFromClassName('AdminSmartsuppAjax');
}
if ($id_tab) {
$tab = new Tab($id_tab);
$tab->delete();
}
if (VersionUtility::isPsVersionGreaterThan('1.6')) {
$this->unregisterHook('displayBackOfficeHeader');
} else {
$this->unregisterHook('backOfficeHeader');
}
if (!parent::uninstall()
|| !$this->unregisterHook('header')
|| !Configuration::deleteByName('SMARTSUPP_KEY')
|| !Configuration::deleteByName('SMARTSUPP_EMAIL')
|| !Configuration::deleteByName('SMARTSUPP_CUSTOMER_ID', '')
|| !Configuration::deleteByName('SMARTSUPP_CUSTOMER_NAME', '')
|| !Configuration::deleteByName('SMARTSUPP_CUSTOMER_EMAIL', '')
|| !Configuration::deleteByName('SMARTSUPP_CUSTOMER_PHONE', '')
|| !Configuration::deleteByName('SMARTSUPP_CUSTOMER_ROLE', '')
|| !Configuration::deleteByName('SMARTSUPP_CUSTOMER_SPENDINGS', '')
|| !Configuration::deleteByName('SMARTSUPP_CUSTOMER_ORDERS', '')
|| !Configuration::deleteByName('SMARTSUPP_OPTIONAL_API', '')
) {
return false;
}
return true;
}
public function displayForm()
{
$default_lang = (int) Configuration::get('PS_LANG_DEFAULT');
$helper = new HelperForm();
// Module, token and currentIndex
$helper->module = $this;
$helper->name_controller = $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->currentIndex = AdminController::$currentIndex . '&configure=' . $this->name;
// Language
$helper->default_form_language = $default_lang;
$helper->allow_employee_form_lang = $default_lang;
// Title and toolbar
$helper->title = $this->displayName;
$helper->show_toolbar = true;
$helper->toolbar_scroll = true;
$helper->submit_action = 'submit' . $this->name;
$helper->toolbar_btn = array(
'save' =>
array(
'desc' => $this->l('Save'),
'href' => AdminController::$currentIndex . '&configure=' . $this->name . '&save' . $this->name .
'&token=' . Tools::getAdminTokenLite('AdminModules'),
),
'back' => array(
'href' => AdminController::$currentIndex . '&token=' . Tools::getAdminTokenLite('AdminModules'),
'desc' => $this->l('Back to list')
)
);
$fields_form = array();
$fields_desc = $this->l('Don\'t put the chat code here - this box is for ');
$fields_desc .= $this->l('(optional) advanced customizations via ') . '#.';
$fields_form[0]['form'] = array(
'legend' => array(
'title' => $this->l('Settings')
),
'input' => array(
array(
'type' => 'textarea',
'label' => $this->l('Optional API'),
'name' => 'SMARTSUPP_OPTIONAL_API',
'desc' => $this->l($fields_desc),
'autoload_rte' => false,
'rows' => 5
)
),
'submit' => array(
'title' => $this->l('Save')
)
);
$helper->fields_value['SMARTSUPP_OPTIONAL_API'] = Configuration::get('SMARTSUPP_OPTIONAL_API');
return $helper->generateForm($fields_form);
}
public function getContent()
{
$output = '';
if (Tools::isSubmit('submit' . $this->name)) {
$smartsupp_key = Configuration::get('SMARTSUPP_KEY');
if ($smartsupp_key) {
$output .= $this->displayConfirmation($this->l('Settings updated successfully'));
}
Configuration::updateValue('SMARTSUPP_OPTIONAL_API', Tools::getValue('SMARTSUPP_OPTIONAL_API'));
}
if (version_compare(_PS_VERSION_, '1.6', '>=')) {
$output .= $this->displayForm();
}
$ajax_controller_url = $this->context->link->getAdminLink('AdminSmartsuppAjax');
$this->context->smarty->assign(
array(
'ajax_controller_url' => $ajax_controller_url,
'smartsupp_key' => Configuration::get('SMARTSUPP_KEY'),
'smartsupp_email' => Configuration::get('SMARTSUPP_EMAIL'),
)
);
return $this->display(__FILE__, 'views/templates/admin/landing_page.tpl') .
$this->display(__FILE__, 'views/templates/admin/connect_account.tpl') .
$this->display(__FILE__, 'views/templates/admin/configuration.tpl') .
$output;
}
/**
* @param $smartsupp_key
* @return string
* @throws Exception
*/
protected function getSmartsuppJs($smartsupp_key)
{
if (empty($smartsupp_key)) {
return '';
}
/*
NEVER ever put it into use statement as this will break Presta 1.6 installation
- they use eval which does not run PSR autoloader
*/
$chat = new \Smartsupp\ChatGenerator($smartsupp_key);
$chat->setPlatform('Prestashop ' . _PS_VERSION_);
$chat->setCookieDomain('.' . Tools::getHttpHost(false));
$customer = $this->context->customer;
if ($customer->id) {
if (Configuration::get('SMARTSUPP_CUSTOMER_ID')) {
$chat->setVariable('id', $this->l('ID'), $customer->id);
}
if (Configuration::get('SMARTSUPP_CUSTOMER_NAME')) {
$customer_name = $customer->firstname . ' ' . $customer->lastname;
$chat->setVariable('name', $this->l('Name'), $customer_name);
$chat->setName($customer_name);
}
if (Configuration::get('SMARTSUPP_CUSTOMER_EMAIL')) {
$chat->setVariable('email', $this->l('Email'), $customer->email);
$chat->setEmail($customer->email);
}
if (Configuration::get('SMARTSUPP_CUSTOMER_PHONE')) {
$addresses = $this->context->customer->getAddresses($this->context->language->id);
if (!empty($addresses[0])) {
$first_address = $addresses[0];
$phone = !empty($first_address['phone_mobile'])
? $first_address['phone_mobile'] : $first_address['phone'];
$chat->setVariable('phone', $this->l('Phone'), $phone);
}
}
if (Configuration::get('SMARTSUPP_CUSTOMER_ROLE')) {
$group = new Group($customer->id_default_group, $this->context->language->id, $this->context->shop->id);
$chat->setVariable('role', $this->l('Role'), $group->name);
}
if (Configuration::get('SMARTSUPP_CUSTOMER_SPENDINGS') || Configuration::get('SMARTSUPP_CUSTOMER_ORDERS')) {
$orders = Order::getCustomerOrders($customer->id, true);
$count = 0;
$spending = 0;
foreach ($orders as $order) {
if ($order['valid']) {
$count++;
$spending += $order['total_paid_real'];
}
}
if (Configuration::get('SMARTSUPP_CUSTOMER_SPENDINGS')) {
$chat->setVariable(
'spending',
$this->l('Spendings'),
Tools::displayPrice(
$spending,
$this->context->currency->id
)
);
}
if (Configuration::get('SMARTSUPP_CUSTOMER_ORDERS')) {
$chat->setVariable('orders', $this->l('Orders'), $count);
}
}
}
$custom_code = '<script type="text/javascript">';
$custom_code .= trim(Configuration::get('SMARTSUPP_OPTIONAL_API'));
$custom_code .= '</script>';
return $chat->render() . $custom_code;
}
public function hookHeader()
{
$smartsupp_key = Configuration::get('SMARTSUPP_KEY');
$this->smarty->assign(array('smartsupp_js' => $this->getSmartsuppJs($smartsupp_key)));
return $this->display(__FILE__, './views/templates/front/chat_widget.tpl');
}
public function hookBackOfficeHeader()
{
$js = '';
if (strcmp(Tools::getValue('configure'), $this->name) === 0) {
$path = $this->_path;
$js .= '<script type="text/javascript" src="' . $path . 'views/js/smartsupp.js"></script>';
$js .= '<link rel="stylesheet" href="' . $path . 'views/css/smartsupp.css" type="text/css" />';
$js .= '<link rel="stylesheet" href="' . $path . 'views/css/smartsupp-nobootstrap.css" type="text/css" />';
}
return $js;
}
public function hookDisplayBackOfficeHeader()
{
$js = '';
if (strcmp(Tools::getValue('configure'), $this->name) === 0) {
$path = $this->_path;
$this->context->controller->addJquery();
$this->context->controller->addJs($path . 'views/js/smartsupp.js');
$this->context->controller->addCSS($path . 'views/css/smartsupp.css');
$this->context->controller->addCSS($path . 'views/css/smartsupp-nobootstrap.css');
}
return $js;
}
protected function getAdminDir()
{
return basename(_PS_ADMIN_DIR_);
}
private function autoload()
{
include_once "{$this->getLocalPath()}vendor/autoload.php";
}
}

View File

@@ -0,0 +1,35 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
namespace Smartsupp\LiveChat\Utility;
class VersionUtility
{
public static function isPsVersionGreaterThan($version)
{
return version_compare(_PS_VERSION_, $version, '>');
}
public static function isPsVersionGreaterOrEqualTo($version)
{
return version_compare(_PS_VERSION_, $version, '>=');
}
}

View File

@@ -0,0 +1,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Chat en vivo de Smartsupp';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'Smartsupp combina chat en vivo y chatbots para ahorrarte tiempo y ayudarte a convertir a los visitantes en clientes leales.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Falta la clave de Smartsupp';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Ahorrar';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Atrás';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Ajustes avanzados';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (opcional)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Guardado';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Nombre';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Teléfono';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Oficio';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Gasto';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Pedidos';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = '¿Ya tienes una cuenta?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Iniciar sesión';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Crea una cuenta nueva';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Inicia una conversación personal con tus visitantes hoy.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Contraseña:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Quiero recibir consejos sobre cómo acelerar mis ventas con Smartsupp';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'Al registrarte, aceptas los';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'Términos';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'y';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = '¿Aún no eres usuario de Smartsupp?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Crea una cuenta nueva';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Inicia una conversación personal con tus visitantes hoy.';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Contraseña:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Olvidé mi contraseña';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Desactivar chat';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Todo listo y funcionando';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = '¡Felicidades! El chat en vivo de Smartsupp ya está visible en tu sitio web.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Chatea con tus visitantes';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'o';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'configura';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'primero el diseño de la caja de chat';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'SOLUCIÓN DE CHAT POPULAR DE WEBSHOPS Y SITIOS WEB EUROPEOS';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Únete a las 500 000 empresas y emprendedores que confían en Smartsupp';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'MULTICANAL';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Responde a los chats y correos electrónicos de los clientes desde un solo lugar';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Involucra a tus visitantes con un bot de chat automatizado';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'APLICACIÓN MOVIL';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Chatea con clientes sobre la marcha con la aplicación para iOS y Android';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Explora todas las funciones en nuestro sitio web';

View File

@@ -0,0 +1,55 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b82eb30ace208db211486bdb42475ee5'] = 'Smartsupp je váš osobní online nákupní asistent, vytvořený pro zvýšení míry konverze a prodeje prostřednictvím zapojení návštěvníků v reálném čase a ve správný čas.';
$_MODULE['<{smartsupp}prestashop>smartsupp_b62af1ad4918b402f148fc2e7841677f'] = 'Opravdu chcete odinstalovat Smartsupp Live Chat?';
$_MODULE['<{smartsupp}prestashop>smartsupp_4f1adf15fc9b2682736ce1c6749c2175'] = 'Ztratíte všechna data související s tímto modulem.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Chybí Smartsupp klíč.';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Uložit';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Zpět';
$_MODULE['<{smartsupp}prestashop>smartsupp_5b4b55bc08ab8887708ec6188b33f238'] = 'Neuvádějte zde kód chatu toto pole je pro';
$_MODULE['<{smartsupp}prestashop>smartsupp_aacbc2c9886e5520a4714cec4c72f1d4'] = '(volitelně) pokročilé přizpůsobení prostřednictvím ';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Pokročilé nastavení';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (volitelné)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Nastavení uloženo';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Jméno';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Telefon';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Role';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Útrata';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Objednávky';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Máte již účet?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Přihlásit se';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Založit účet zdarma';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Začněte osobní komunikaci se svými zákazníky už dnes.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'E-mail:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Heslo:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Chci dostávat tipy a triky, jak využít Smartsupp na maximum';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'Četl/a jsem a souhlasím s';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'podmínkami';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'a';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Deaktivovat chat';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Všechno je nastavené a funkční';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Gratulujeme! Smartsupp live chat je teď nasazený na vaší stránce.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Komunikujte se svými zákazníky';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'nebo nejprve';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'nastavte';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'vzhled chat boxu';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Nemáte účet?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Založit účet zdarma';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Přihlásit se';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'E-mail:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Heslo:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Zapomněl/a jsem heslo';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'NEJOBLÍBENĚJŠÍ CHAT ĆESKÝCH WEBŮ A ESHOPŮ';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Přidejte se k více než 500 000 společnostem a živnostníkům spoléhajícím na Smartsupp po celém světě';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'MULTICHANNEL';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Odpovídejte na chat a e-maily z jednoho místa';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Zaujměte své zákazníky automatizovaným chatbotem';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'MOBILNÍ APLIKACE';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Buďte zákazníkům stále nablízku s mobilními aplikacemi iOS a Android';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Prozkoumejte všechny funkce na našem webu';

View File

@@ -0,0 +1,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'Smartsupp kombiniert Live-Chat und Chatbots, um Ihnen Zeit zu sparen und Besucher zu treuen Kunden zu machen.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Smartsupp-Schlüssel fehlt';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Speichern';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Zurück';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Erweiterte Einstellungen';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (optional)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Gespeichert';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Name';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Telefon';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Rolle';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Ausgaben';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Bestellungen';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Haben Sie bereits ein Konto?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Einloggen';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Erstellen Sie einen kostenlosen Account';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Starten Sie noch heute persönliches Gespräch mit Ihren Besuchern.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Passwort:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Ich möchte Tipps erhalten, wie ich meine Verkäufe mit Smartsupp beschleunigen kann';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'Mit der Anmeldung stimmen Sie den';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'Bedingungen';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'und';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA zu';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Sind Sie noch kein Smartsupp-Benutzer?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Erstellen Sie einen kostenlosen Account';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Einloggen';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Passwort:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Ich habe mein Passwort vergessen';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Chat deaktivieren';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Alles bereit und funktionierend';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Herzliche Glückwünsche! Der Smartsupp Live-Chat ist bereits auf Ihrer Website sichtbar.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Chatten Sie mit Ihren Besuchern';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'oder';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'oder Richten Sie';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'zuerst das Chat-Box-Design ein';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'BELIEBTE CHAT-LÖSUNG VON EUROPÄISCHEN WEBSHOPS UND WEBSITES';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Schließen Sie sich den 500 000 Unternehmen und Freiberuflern an, die sich auf Smartsupp verlassen';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'MEHRKANAL';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Antworten Sie auf Chats und E-Mails von Kunden von einem Ort aus';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Binden Sie Ihre Besucher mit einem automatisierten Chatbot ein';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'MOBILE APP';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Chatten Sie mit Kunden auch unterwegs mit der App für iOS und Android';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Entdecken Sie alle Funktionen auf unserer Website';

View File

@@ -0,0 +1,57 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_d3a313dc870b6246b569f4532bd8a778'] = 'Smartsupp Live Chat & AI Chatbots';
$_MODULE['<{smartsupp}prestashop>smartsupp_b82eb30ace208db211486bdb42475ee5'] = 'Smartsupp is your personal online shopping assistant, built to increase conversion rates and sales via visitor engagement in real-time, at the right time.';
$_MODULE['<{smartsupp}prestashop>smartsupp_b62af1ad4918b402f148fc2e7841677f'] = 'Are you sure you want to uninstall Smartsupp Live Chat? ';
$_MODULE['<{smartsupp}prestashop>smartsupp_4f1adf15fc9b2682736ce1c6749c2175'] = 'You will lose all the data related to this module.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'No Smartsupp key provided.';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Save';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Back to list';
$_MODULE['<{smartsupp}prestashop>smartsupp_5b4b55bc08ab8887708ec6188b33f238'] = 'Don\'t put the chat code here - this box is for ';
$_MODULE['<{smartsupp}prestashop>smartsupp_aacbc2c9886e5520a4714cec4c72f1d4'] = '(optional) advanced customizations via ';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Settings';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (Optional)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Settings updated successfully';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Name';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Phone';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Role';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Spendings';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Orders';
$_MODULE['<{smartsupp}prestashop>adminsmartsuppajax_364fca2fd3206702e62d2e1df8ea1176'] = 'Unknown Error Occurred';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Already have an account?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Log in';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Create a free account';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Start personal conversation with your visitors today.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'E-mail:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Password:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'I want to get tips on how to use Smartsupp chat to the maximum and do excellent customer care';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'I have read and agree with';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'Terms';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'and';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = ' Deactivate chat';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'All set and running';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Congratulations! Smartsupp live chat is already visible on your website.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Chat with your visitors';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'or';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'Set up';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'chat box design first';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Not a Smartsupp user yet?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Create a free account';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Log in';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'E-mail:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Password:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'I forgot my password';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'POPULAR CHAT SOLUTION OF EUROPEAN WEBSHOPS AND WEBSITES';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Join the 469 000 companies and freelancers relying on Smartsupp';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'MULTICHANNEL';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Respond to customer\'s chats and emails from one place';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHAT BOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Engage your visitors with automated chat bot';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'MOBILE APP';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Chat with customers on the go with app for iOS & Android';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Explore All Features on our website';

View File

@@ -0,0 +1,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Chat en vivo de Smartsupp';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'Smartsupp combina chat en vivo y chatbots para ahorrarte tiempo y ayudarte a convertir a los visitantes en clientes leales.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Falta la clave de Smartsupp';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Ahorrar';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Atrás';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Ajustes avanzados';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (opcional)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Guardado';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Nombre';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Teléfono';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Oficio';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Gasto';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Pedidos';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = '¿Ya tienes una cuenta?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Iniciar sesión';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Crea una cuenta nueva';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Inicia una conversación personal con tus visitantes hoy.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Contraseña:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Quiero recibir consejos sobre cómo acelerar mis ventas con Smartsupp';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'Al registrarte, aceptas los';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'Términos';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'y';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = '¿Aún no eres usuario de Smartsupp?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Crea una cuenta nueva';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Inicia una conversación personal con tus visitantes hoy.';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Contraseña:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Olvidé mi contraseña';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Desactivar chat';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Todo listo y funcionando';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = '¡Felicidades! El chat en vivo de Smartsupp ya está visible en tu sitio web.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Chatea con tus visitantes';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'o';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'configura';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'primero el diseño de la caja de chat';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'SOLUCIÓN DE CHAT POPULAR DE WEBSHOPS Y SITIOS WEB EUROPEOS';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Únete a las 500 000 empresas y emprendedores que confían en Smartsupp';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'MULTICANAL';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Responde a los chats y correos electrónicos de los clientes desde un solo lugar';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Involucra a tus visitantes con un bot de chat automatizado';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'APLICACIÓN MOVIL';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Chatea con clientes sobre la marcha con la aplicación para iOS y Android';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Explora todas las funciones en nuestro sitio web';

View File

@@ -0,0 +1,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'Smartsupp combine le chat en direct et les chatbots pour vous faire gagner du temps et vous aider à transformer les visiteurs en clients fidèles.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Clé Smartsupp manquante';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Sauvegarder';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Retour';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Paramètres avancés';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (facultatif)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Sauvegardé';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Nom';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Téléphone';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Rôle';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Dépenses';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Commandes';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Vous avez déjà un compte?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Se connecter';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Créer un compte gratuit';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Commencez dès aujourd\'hui une conversation personnelle avec vos visiteurs.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Mot de passe:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Je veux recevoir des conseils pour accélérer mes ventes avec Smartsupp.';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'En vous inscrivant, vous acceptez les ';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'conditions d\'utilisation';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'et le';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Vous n\'êtes pas encore un utilisateur de Smartsupp?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Créer un compte gratuit';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Se connecter';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Mot de passe:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'J\'ai oublié mon mot de passe';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Désactiver le chat';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Tout est prêt et fonctionne';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Félicitations! Le chat en direct de Smartsupp est déjà visible sur votre site web.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Chattez avec vos visiteurs';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'ou';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'Configurez';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'd\'abord le design de la boîte de discussion';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'SOLUTION DE CHAT POPULAIRE AUPRÈS DES BOUTIQUES EN LIGNE ET DES SITES WEB EUROPÉENS';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Rejoignez les 500 000 entreprises et indépendants qui font confiance à Smartsupp.';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'CANAUX MULTIPLES';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Répondre aux chats et aux emails des clients à partir d\'un seul endroit';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Faites participer vos visiteurs grâce à un robot de chat automatisé';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'APPLICATION MOBILE';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Dialoguez avec vos clients lors de vos déplacements grâce à une application pour iOS et Android.';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Explorez toutes les fonctionnalités sur notre site web';

View File

@@ -0,0 +1,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'A Smartsupp egyesíti az élő csevegést és a chatbotokat, így időt takaríthat meg, és segíthet abban, hogy a látogatók hűséges ügyfelekké váljanak.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Hiányzik a Smartsupp kulcs.';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Mentés';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Vissza';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Haladó beállítások';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (opcionális)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Elmentett';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Név';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Telefon';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Szerep';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Elköltött összeg';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Rendelések';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Már van fiókja?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Belépés';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Hozzon létre egy ingyenes fiókot';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Kezdjen személyes beszélgetést a látogatóival még ma.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Jelszó:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Tippeket szeretnék, hogy hogyan növelhetem eladásaimat a Smartsupp segítségével';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'A regisztrációval elfogadja a';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'feltételeket';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'és az';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'adatkezelési megállapodást';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Még nem Smartsupp felhasználó?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Hozzon létre egy ingyenes fiókot';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Belépés';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Jelszó:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Elfelejtettem a jelszavamat';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'A csevegés kikapcsolása';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Minden kész és fut';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Gratulálunk! A Smartsupp élő csevegés már látható a webhelyén.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Csevegjen a látogatóival';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'vagy először';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'állítsa';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'be a csevegőablak kialakítását';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'AZ EURÓPAI WEBSHOPOK ÉS WEBOLDALAK GYAKRAN HASZNÁLT CHAT ESZKÖZE';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Csatlakozzon a Smartsuppra támaszkodó 500 000 céghez és szabadúszóhoz';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'TÖBBCSATORNÁS';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Válaszoljon az ügyfelek csevegéseire és emailjeire egy helyről';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Nyerje meg a látogatókat az automatikus csevegőrobot segítségével';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'MOBIL ALKALMAZÁS';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Csevegjen az ügyfelekkel útközben az iOS és Android alkalmazással';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Fedezze fel weboldalunk összes funkcióját';

View File

@@ -0,0 +1,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'Smartsupp combina live chat e chatbot per farti risparmiare tempo e aiutarti a trasformare i visitatori in clienti fedeli.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Manca la chiave di Smartsupp';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Salva';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Indietro';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Impostazioni avanzate';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (opzionale)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Salvato';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Nome';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Telefono';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Ruolo';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Spesa';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Ordini';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Hai già un account?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Accedere';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Crea un account gratis';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Inizia oggi una conversazione personale con i tuoi visitatori.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Password:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Voglio ricevere consigli su come accelerare le mie vendite con Smartsupp';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'Iscrivendosi, l\'utente accetta i';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'termini';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'e la';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'protezione dei dati';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Non sei ancora un utente di Smartsupp?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Crea un account gratis';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Accedere';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Password:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Ho dimenticato la mia password';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Disattiva chat';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Tutto pronto e funzionante';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Congratulazioni! La live chat di Smartsupp è già visibile sul tuo sito web.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Chatta con i tuoi visitatori';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'o';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'imposta';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'prima il design della chat box';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'SOLUZIONE DI CHAT POPOLARE DI WEBSHOP E SITI WEB EUROPEI';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Unisciti alle 500 000 aziende e liberi professionisti che si affidano a Smartsupp';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'MULTICANALE';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Rispondi alle chat e alle email dei clienti da un unico posto';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Coinvolgi i tuoi visitatori con il chatbot automatizzato';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'APP MOBILE';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Chatta con i clienti anche in viaggio con l\'app per iOS e Android';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Esplora tutte le funzionalità sul nostro sito web';

View File

@@ -0,0 +1,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'Smartsupp combineert live chat en chatbots om u tijd te besparen en u te helpen bezoekers in loyale klanten te veranderen.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Smartsupp sleutel mist.';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Opslaan';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Terug';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Geadvanceerd instellingen';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (optioneel)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Opgeslagen';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Naam';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Telefon';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Rol';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Uitgaven';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Bestellingen';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Heeft u al een account?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Inloggen';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Maak een gratis account aan';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Begin vandaag een persoonlijk gesprek met uw bezoekers.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Wachtwoord:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Ik wil tips ontvangen over hoe ik mijn sales met Smartsupp verhoog';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'Door te registreren gaat u akkoord met de';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'voorwaarden';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'en';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Maakt u nog geen gebruik van Smartsupp?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Maak een gratis account aan';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Inloggen';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Wachtwoord:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Ik ben mijn wachtwoord vergeten.';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Chat deactiveren';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Alles is ingesteld en werkt';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Gefeliciteerd! De Smartsupp live chat is al zichtbaar op uw website.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Chat met uw bezoekers';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'of';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'Stel';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'eerst een ontwerp voor uw chatbot in';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'POPULAIRE CHAT OPLOSSING VAN EUROPESE WEBSHOPS EN WEBSITES';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Sluit u aan bij 500 000 bedrijven en freelancers die op Smartsupp vertrouwen';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'MULTIKANAAL';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Beantwoord de chats en emails van klanten op een plek';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CHATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Bereik uw bezoekers met een geautomatiseerde chatbot';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'MOBIELE APP';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Chat ook onderweg met klanten met de app voor iOS & Android';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Ontdek Alle Functies op onze website';

View File

@@ -0,0 +1,52 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_32c9a2cba97ffc0669ab2c2a139865da'] = 'Smartsupp łączy czat na żywo i chatboty, aby zaoszczędzić Twój czas i zamienić Twoich odwiedzających w zadowolonych klientów.';
$_MODULE['<{smartsupp}prestashop>smartsupp_5db4230515f342afbaee33d685410f04'] = 'Brak klucza Smartsupp';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Zapisz';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Wróć';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Zawansowane ustawienia';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (opcjonalne)';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Zapisane';
$_MODULE['<{smartsupp}prestashop>smartsupp_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
$_MODULE['<{smartsupp}prestashop>smartsupp_49ee3087348e8d44e1feda1917443987'] = 'Imię';
$_MODULE['<{smartsupp}prestashop>smartsupp_ce8ae9da5b7cd6c3df2929543a9af92d'] = 'Email';
$_MODULE['<{smartsupp}prestashop>smartsupp_bcc254b55c4a1babdf1dcb82c207506b'] = 'Telefon';
$_MODULE['<{smartsupp}prestashop>smartsupp_bbbabdbe1b262f75d99d62880b953be1'] = 'Rola';
$_MODULE['<{smartsupp}prestashop>smartsupp_d06ce84f89526b7bac0002dbbc1e8297'] = 'Wydatki';
$_MODULE['<{smartsupp}prestashop>smartsupp_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Zamówienia';
$_MODULE['<{smartsupp}prestashop>landing_page_21bdc5689c12595ae14298354d5550d5'] = 'Masz już konto?';
$_MODULE['<{smartsupp}prestashop>landing_page_bffe9a3c9a7e00ba00a11749e022d911'] = 'Zaloguj się';
$_MODULE['<{smartsupp}prestashop>landing_page_8ea211024d4a6ad6119a33549dae10d6'] = 'Załóż darmowe konto';
$_MODULE['<{smartsupp}prestashop>landing_page_0a9418234e36ce6a08748a204146fc0b'] = 'Rozpocznij osobistą rozmowę z odwiedzającymi już dziś.';
$_MODULE['<{smartsupp}prestashop>landing_page_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>landing_page_b341a59d5636ed3d6a819137495b08a0'] = 'Hasło:';
$_MODULE['<{smartsupp}prestashop>landing_page_7672d2c61224c106588f9a306296fe69'] = 'Chcę otrzymywać wskazówki, jak mogę zwiększyć moją sprzedaż dzięki Smartsupp';
$_MODULE['<{smartsupp}prestashop>landing_page_ca1efe2bfa38190699e573ea733c821c'] = 'Rejestrując się, zgadzasz się z';
$_MODULE['<{smartsupp}prestashop>landing_page_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'Warunkami korzystania z usługi';
$_MODULE['<{smartsupp}prestashop>landing_page_be5d5d37542d75f93a87094459f76678'] = 'i';
$_MODULE['<{smartsupp}prestashop>landing_page_a50a1efe5421320d2dc8ba27e1f7463d'] = 'DPA';
$_MODULE['<{smartsupp}prestashop>connect_account_3dc3748ee6772a392b583c399cb96fe5'] = 'Nie jesteś jeszcze użytkownikiem Smartsupp?';
$_MODULE['<{smartsupp}prestashop>connect_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Załóż darmowe konto';
$_MODULE['<{smartsupp}prestashop>connect_account_bffe9a3c9a7e00ba00a11749e022d911'] = 'Zaloguj się';
$_MODULE['<{smartsupp}prestashop>connect_account_df1555fe48479f594280a2e03f9a8186'] = 'Email:';
$_MODULE['<{smartsupp}prestashop>connect_account_b341a59d5636ed3d6a819137495b08a0'] = 'Hasło:';
$_MODULE['<{smartsupp}prestashop>connect_account_b05d72142020283dc6812fd3a9bc691c'] = 'Zapomniałem hasło';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Dezaktywacja czatu';
$_MODULE['<{smartsupp}prestashop>configuration_bfc719af6420fa1d34b6f3cc858d3494'] = 'Wszystko gotowe i działa';
$_MODULE['<{smartsupp}prestashop>configuration_ca546d2931eac2cb8f292a583aa2e3fa'] = 'Gratulacje! Live czat Smartsupp jest już widoczny na Twojej stronie.';
$_MODULE['<{smartsupp}prestashop>configuration_866e05fd4e69717004f77431d4f4254b'] = 'Rozmawiaj z odwiedzającymi';
$_MODULE['<{smartsupp}prestashop>configuration_e81c4e4f2b7b93b481e13a8553c2ae1b'] = 'lub najpierw';
$_MODULE['<{smartsupp}prestashop>configuration_b191593bc602ff910417b3f85bb496ca'] = 'Skonfiguruj';
$_MODULE['<{smartsupp}prestashop>configuration_b0c2b3626fad53c9cdd6cdd9d3251e90'] = 'wygląd okna czatu';
$_MODULE['<{smartsupp}prestashop>clients_9f07b115f358391fc5118f1488f69965'] = 'POPULARNE ROZWIĄZANIE CZATU WŚRÓD EUROPEJSKICH SKLEPÓW I STRON INTERNETOWYCH';
$_MODULE['<{smartsupp}prestashop>clients_79733ba6c329916522a8369f2b94ac99'] = 'Dołącz do 500 000 firm i freelancerów polegających na Smartsupp';
$_MODULE['<{smartsupp}prestashop>features_9e9a9f11d422e372100a4c07df22f849'] = 'WIELOKANAŁOWOŚĆ';
$_MODULE['<{smartsupp}prestashop>features_a96627a506be3fbd87b861728da657ac'] = 'Odpowiadaj na czaty i e-maile klientów z jednego miejsca';
$_MODULE['<{smartsupp}prestashop>features_a1dc17a7b450524cfec7279a19bfccce'] = 'CZATBOT';
$_MODULE['<{smartsupp}prestashop>features_9da11588f9c75aca71a65f6cfa6e00cb'] = 'Zaangażuj odwiedzających dzięki automatycznemu czat botowi';
$_MODULE['<{smartsupp}prestashop>features_164519fe933d8d599404b1c01ffa794a'] = 'APLIKACJE MOBILNE';
$_MODULE['<{smartsupp}prestashop>features_33277b7baee53349f61e081ea8e3a08b'] = 'Rozmawiaj z klientami nawet będąc w podróży dzięki aplikacji dla iOS i Androida';
$_MODULE['<{smartsupp}prestashop>features_fc0306f1bff57840ffc39b40b5b7fd0d'] = 'Dowiedz się więcej o wszystkich funkcjach Smartsupp na naszej stronie internetowej';

View File

@@ -0,0 +1,45 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_9d14fbf35749969b286b92a556c6ef7f'] = 'Seus clientes estão em seu site agora mesmo. Converse com eles e verifique como se comportam.';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Guardar';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Voltar Atrás';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Configurações avançadas';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API opcional';
$_MODULE['<{smartsupp}prestashop>smartsupp_78a81f0852c850f502d91479f1465761'] = 'Não coloque o código do da caixa de chat aqui - esta caixa é para personalizações avançadas (opcionais) via #.';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Alterações guardadas';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Desativar o chat';
$_MODULE['<{smartsupp}prestashop>configuration_c8e4e8d8641fdf8ef491f4aab52ff61c'] = 'A caixa de chat do Smartsupp está agora visível em seu website.';
$_MODULE['<{smartsupp}prestashop>configuration_5ddb04464522cd99200438718a85972f'] = 'Vá ara o Smartsupp para conversar com os visitantes, personalize o design da caixa de chat e acesse todas as funcionalidades.';
$_MODULE['<{smartsupp}prestashop>configuration_c89a4a5d0c73f23d8f403bb2f816a6a3'] = 'Acessar o Smartsupp';
$_MODULE['<{smartsupp}prestashop>configuration_a07ef3c4692e96ee239a6d19173a64a9'] = 'Abrirá uma nova aba';
$_MODULE['<{smartsupp}prestashop>connect_account_bf3d32970e1a38ead1cc0a8de3712203'] = 'Criar conta grátis';
$_MODULE['<{smartsupp}prestashop>connect_account_976107f51b15cc1480f74887886c3bae'] = 'Conecte conta existente';
$_MODULE['<{smartsupp}prestashop>connect_account_1e884e3078d9978e216a027ecd57fb34'] = 'E-mail';
$_MODULE['<{smartsupp}prestashop>connect_account_dc647eb65e6711e155375218212b3964'] = 'Senha';
$_MODULE['<{smartsupp}prestashop>connect_account_49ab28040dfa07f53544970c6d147e1e'] = 'Conectar';
$_MODULE['<{smartsupp}prestashop>connect_account_d3713216c89a9500a08b3f93c31cbb40'] = 'Confiado por mais de 55 000 empresas';
$_MODULE['<{smartsupp}prestashop>create_account_976107f51b15cc1480f74887886c3bae'] = 'Conecte conta existente';
$_MODULE['<{smartsupp}prestashop>create_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Criar conta grátis';
$_MODULE['<{smartsupp}prestashop>create_account_1e884e3078d9978e216a027ecd57fb34'] = 'E-mail';
$_MODULE['<{smartsupp}prestashop>create_account_dc647eb65e6711e155375218212b3964'] = 'Senha';
$_MODULE['<{smartsupp}prestashop>create_account_d9776f0775997b2e698c6975420b5c5d'] = 'Cadastrar';
$_MODULE['<{smartsupp}prestashop>create_account_d3713216c89a9500a08b3f93c31cbb40'] = 'Confiado por mais de 55 000 empresas';
$_MODULE['<{smartsupp}prestashop>landing_page_976107f51b15cc1480f74887886c3bae'] = 'Conecte conta existente';
$_MODULE['<{smartsupp}prestashop>landing_page_027fd673293b09fa932cad903c50ff11'] = 'Chat ao vivo grátis com gravação de visitantes';
$_MODULE['<{smartsupp}prestashop>landing_page_040996aabe10ba8b6608e33ecf246b3b'] = 'Seus clientes estão em seu site agora mesmo.';
$_MODULE['<{smartsupp}prestashop>landing_page_1936f8806532107cf691364644ad398e'] = 'Converse com eles e verifique como se comportam.';
$_MODULE['<{smartsupp}prestashop>landing_page_bf3d32970e1a38ead1cc0a8de3712203'] = 'Criar conta grátis';
$_MODULE['<{smartsupp}prestashop>landing_page_141e6bd9def045d737614d2f8e2d9695'] = 'Usufrua para sempre de um chat grátis com agentes ilimitados';
$_MODULE['<{smartsupp}prestashop>landing_page_bd60f8b09bc55c85970427a56b0bd583'] = 'e tire proveito de pacotes premium com funcionalidades avançadas.';
$_MODULE['<{smartsupp}prestashop>landing_page_2fca91c8cca39f3cf7c7297d0fd4e563'] = 'Consulte todas as funcionalidades em';
$_MODULE['<{smartsupp}prestashop>landing_page_0b7295085251bffdb17613549f204d76'] = 'nosso site';
$_MODULE['<{smartsupp}prestashop>landing_page_2430f300d1596ae71b44c237b971c009'] = 'Converse com os visitantes em tempo real';
$_MODULE['<{smartsupp}prestashop>landing_page_1c25219a63b6dde7d3db07b40c7afc9d'] = 'Responder a perguntas na hora aumenta a fidelidade e ajuda a construir relações mais próximas com seus clientes.';
$_MODULE['<{smartsupp}prestashop>landing_page_7aa382a6085feb5b747253bee7ec0d7c'] = 'Aumente as vendas online';
$_MODULE['<{smartsupp}prestashop>landing_page_bb853bc22fe6c9b9e70be8f44aae8576'] = 'Transforme seus visitantes em clientes. Os visitantes que conversam com você compram até 5x mais - mensurável no Google Analytics.';
$_MODULE['<{smartsupp}prestashop>landing_page_05ed652e812cf2ebdad85175c71e5494'] = 'Gravação da tela dos visitantes';
$_MODULE['<{smartsupp}prestashop>landing_page_5f92fec67a727c49e26f05fcfaf0d197'] = 'Verifique o comportamento dos visitantes em sua loja. É possível ver a tela, o movimento do mouse, onde clicam e como preenchem os formulários.';
$_MODULE['<{smartsupp}prestashop>landing_page_d3713216c89a9500a08b3f93c31cbb40'] = 'Confiado por mais de 55 000 empresas';

View File

@@ -0,0 +1,50 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{smartsupp}prestashop>smartsupp_b10e4b6a10e84bd7b5312f076d2f3ea7'] = 'Smartsupp Live Chat';
$_MODULE['<{smartsupp}prestashop>smartsupp_9d14fbf35749969b286b92a556c6ef7f'] = 'Vaši zákazníci jsou právě teď na vašem PrestaShopu. Komunikujte s nimi a dívejte se, co dělají.';
$_MODULE['<{smartsupp}prestashop>smartsupp_a20e991223473d0779ade2d16211bed4'] = 'Opravdu chcete odinstalovat Smartsupp? Ztratíte tak všechna data uložená v modulu.';
$_MODULE['<{smartsupp}prestashop>smartsupp_c9cc8cce247e49bae79f15173ce97354'] = 'Uložit';
$_MODULE['<{smartsupp}prestashop>smartsupp_630f6dc397fe74e52d5189e2c80f282b'] = 'Zpět';
$_MODULE['<{smartsupp}prestashop>smartsupp_f4f70727dc34561dfde1a3c529b6205c'] = 'Pokročilé nastavení';
$_MODULE['<{smartsupp}prestashop>smartsupp_6a9187ca4a2a8b1b97b58c1decd1a494'] = 'API (volitelné)';
$_MODULE['<{smartsupp}prestashop>smartsupp_78a81f0852c850f502d91479f1465761'] = 'Nevkládejte zde chat kód - toto pole je určeno pro (volitelné) pokročilé úpravy pomocí #.';
$_MODULE['<{smartsupp}prestashop>smartsupp_462390017ab0938911d2d4e964c0cab7'] = 'Nastavení uloženo';
$_MODULE['<{smartsupp}prestashop>configuration_9f0e8ccbad931f6a5970bcf9d80482c3'] = 'Deaktivovat chat';
$_MODULE['<{smartsupp}prestashop>configuration_c8e4e8d8641fdf8ef491f4aab52ff61c'] = 'Smartsupp chat box je nyní vidět na vašem webu.';
$_MODULE['<{smartsupp}prestashop>configuration_5ddb04464522cd99200438718a85972f'] = 'Přejděte na Smartsupp, chatujte s návštěvníky, upravte design chat boxu a získejte přístup ke všem funkcím.';
$_MODULE['<{smartsupp}prestashop>configuration_c89a4a5d0c73f23d8f403bb2f816a6a3'] = 'Přihlásit se do Smartsupp chatu';
$_MODULE['<{smartsupp}prestashop>configuration_a07ef3c4692e96ee239a6d19173a64a9'] = 'tlačítko otevře novou záložku';
$_MODULE['<{smartsupp}prestashop>connect_account_bf3d32970e1a38ead1cc0a8de3712203'] = 'Vytvořit účet zdarma';
$_MODULE['<{smartsupp}prestashop>connect_account_976107f51b15cc1480f74887886c3bae'] = 'Propojit existující účet';
$_MODULE['<{smartsupp}prestashop>connect_account_1e884e3078d9978e216a027ecd57fb34'] = 'E-mail';
$_MODULE['<{smartsupp}prestashop>connect_account_dc647eb65e6711e155375218212b3964'] = 'Heslo';
$_MODULE['<{smartsupp}prestashop>connect_account_49ab28040dfa07f53544970c6d147e1e'] = 'Propojit';
$_MODULE['<{smartsupp}prestashop>connect_account_d3713216c89a9500a08b3f93c31cbb40'] = 'Důvěřuje nám více jak 55 000 firem';
$_MODULE['<{smartsupp}prestashop>create_account_976107f51b15cc1480f74887886c3bae'] = 'Propojit existující účet';
$_MODULE['<{smartsupp}prestashop>create_account_8ea211024d4a6ad6119a33549dae10d6'] = 'Založit účet zdarma';
$_MODULE['<{smartsupp}prestashop>create_account_1e884e3078d9978e216a027ecd57fb34'] = 'E-mail';
$_MODULE['<{smartsupp}prestashop>create_account_dc647eb65e6711e155375218212b3964'] = 'Heslo';
$_MODULE['<{smartsupp}prestashop>create_account_ca1efe2bfa38190699e573ea733c821c'] = 'Četl jsem a souhlasím s';
$_MODULE['<{smartsupp}prestashop>create_account_6f1bf85c9ebb3c7fa26251e1e335e032'] = 'Podmínkami';
$_MODULE['<{smartsupp}prestashop>create_account_be5d5d37542d75f93a87094459f76678'] = 'a';
$_MODULE['<{smartsupp}prestashop>create_account_a50a1efe5421320d2dc8ba27e1f7463d'] = 'Zprac. smlouvou';
$_MODULE['<{smartsupp}prestashop>create_account_d9776f0775997b2e698c6975420b5c5d'] = 'Vytvořit účet';
$_MODULE['<{smartsupp}prestashop>create_account_d3713216c89a9500a08b3f93c31cbb40'] = 'Důvěřuje nám více jak 55 000 firem';
$_MODULE['<{smartsupp}prestashop>landing_page_976107f51b15cc1480f74887886c3bae'] = 'Propojit existující účet';
$_MODULE['<{smartsupp}prestashop>landing_page_027fd673293b09fa932cad903c50ff11'] = 'První live chat s video nahrávkami návštěvníků';
$_MODULE['<{smartsupp}prestashop>landing_page_040996aabe10ba8b6608e33ecf246b3b'] = 'Vaši zákazníci jsou právě teď na vašem PrestaShopu.';
$_MODULE['<{smartsupp}prestashop>landing_page_1936f8806532107cf691364644ad398e'] = 'Komunikujte s nimi a dívejte se, co dělají.';
$_MODULE['<{smartsupp}prestashop>landing_page_bf3d32970e1a38ead1cc0a8de3712203'] = 'Založit účet zdarma';
$_MODULE['<{smartsupp}prestashop>landing_page_141e6bd9def045d737614d2f8e2d9695'] = 'Jeden operátor a neomezený počet chatů zdarma.';
$_MODULE['<{smartsupp}prestashop>landing_page_bd60f8b09bc55c85970427a56b0bd583'] = 'Prémiové balíčky s pokročilými funkcemi.';
$_MODULE['<{smartsupp}prestashop>landing_page_2fca91c8cca39f3cf7c7297d0fd4e563'] = 'Podívejte se na ceník a přehled funkcí na';
$_MODULE['<{smartsupp}prestashop>landing_page_0b7295085251bffdb17613549f204d76'] = 'Smartsupp webu';
$_MODULE['<{smartsupp}prestashop>landing_page_2430f300d1596ae71b44c237b971c009'] = 'Chatujte s návštěvníky v reálném čase';
$_MODULE['<{smartsupp}prestashop>landing_page_1c25219a63b6dde7d3db07b40c7afc9d'] = 'Odpovídejte okamžitě na dotazy vašich zákazníků, vybudujete s nimi osobnější vztah a budou se častěji vracet.';
$_MODULE['<{smartsupp}prestashop>landing_page_7aa382a6085feb5b747253bee7ec0d7c'] = 'Zvyšte prodej na webu';
$_MODULE['<{smartsupp}prestashop>landing_page_bb853bc22fe6c9b9e70be8f44aae8576'] = 'Proměňte návštěvníky v zákazníky. Návštěvníci, kteří s vámi chatují, nakupují až 5x častěji - měřitelné v Google Analytics.';
$_MODULE['<{smartsupp}prestashop>landing_page_05ed652e812cf2ebdad85175c71e5494'] = 'Video nahrávky';
$_MODULE['<{smartsupp}prestashop>landing_page_5f92fec67a727c49e26f05fcfaf0d197'] = 'Dívejte se na chování návštěvníků. Ukážeme vám obrazovku návštěvníka a jeho pohyb na vašem e-shopu.';
$_MODULE['<{smartsupp}prestashop>landing_page_d3713216c89a9500a08b3f93c31cbb40'] = 'Důvěřuje nám více jak 55 000 firem';

View File

@@ -0,0 +1,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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,37 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @author Smartsupp <vladimir@smartsupp.com>
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
* @package Smartsupp
* @link http://www.smartsupp.com
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Text Domain: smartsupp
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
use Smartsupp\LiveChat\Utility\VersionUtility;
/**
* @param Module $module
*
* @return bool
*/
function upgrade_module_2_2_0($module)
{
if (VersionUtility::isPsVersionGreaterThan('1.6')) {
$module->registerHook('displayBackOfficeHeader');
$module->unregisterHook('backOfficeHeader');
}
return true;
}

10
modules/smartsupp/vendor/.htaccess vendored Normal file
View File

@@ -0,0 +1,10 @@
# Apache 2.2
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
# Apache 2.4
<IfModule mod_authz_core.c>
Require all denied
</IfModule>

7
modules/smartsupp/vendor/autoload.php vendored Normal file
View File

@@ -0,0 +1,7 @@
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit99ce7f53aeb8a13d0239412668564219::getLoader();

View File

@@ -0,0 +1,572 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
(array) $paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
(array) $paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
(array) $paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
(array) $paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
(array) $paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
(array) $paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders indexed by their corresponding vendor directories.
*
* @return self[]
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
* @private
*/
function includeFile($file)
{
include $file;
}

View File

@@ -0,0 +1,350 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require its presence, you can require `composer-runtime-api ^2.0`
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints($constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = require __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
$installed[] = self::$installed;
return $installed;
}
}

View File

@@ -0,0 +1,21 @@
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,10 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
);

View File

@@ -0,0 +1,10 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Smartsupp' => array($vendorDir . '/smartsupp/chat-code-generator/src', $vendorDir . '/smartsupp/php-partner-client/src'),
);

View File

@@ -0,0 +1,10 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Smartsupp\\LiveChat\\' => array($baseDir . '/src'),
);

View File

@@ -0,0 +1,57 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit99ce7f53aeb8a13d0239412668564219
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit99ce7f53aeb8a13d0239412668564219', 'loadClassLoader'), true, false);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit99ce7f53aeb8a13d0239412668564219', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit99ce7f53aeb8a13d0239412668564219::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(false);
return $loader;
}
}

View File

@@ -0,0 +1,48 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInit99ce7f53aeb8a13d0239412668564219
{
public static $prefixLengthsPsr4 = array (
'S' =>
array (
'Smartsupp\\LiveChat\\' => 19,
),
);
public static $prefixDirsPsr4 = array (
'Smartsupp\\LiveChat\\' =>
array (
0 => __DIR__ . '/../..' . '/src',
),
);
public static $prefixesPsr0 = array (
'S' =>
array (
'Smartsupp' =>
array (
0 => __DIR__ . '/..' . '/smartsupp/chat-code-generator/src',
1 => __DIR__ . '/..' . '/smartsupp/php-partner-client/src',
),
),
);
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit99ce7f53aeb8a13d0239412668564219::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit99ce7f53aeb8a13d0239412668564219::$prefixDirsPsr4;
$loader->prefixesPsr0 = ComposerStaticInit99ce7f53aeb8a13d0239412668564219::$prefixesPsr0;
$loader->classMap = ComposerStaticInit99ce7f53aeb8a13d0239412668564219::$classMap;
}, null, ClassLoader::class);
}
}

View File

@@ -0,0 +1,97 @@
{
"packages": [
{
"name": "smartsupp/chat-code-generator",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"source": {
"type": "git",
"url": "https://github.com/smartsupp/chat-code-generator.git",
"reference": "1f63b44aeb90a1cd9e37b260a35b0ccb3377feea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/smartsupp/chat-code-generator/zipball/1f63b44aeb90a1cd9e37b260a35b0ccb3377feea",
"reference": "1f63b44aeb90a1cd9e37b260a35b0ccb3377feea",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "4.7.*"
},
"time": "2018-11-08T15:36:32+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Smartsupp": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"authors": [
{
"name": "Marek Gach",
"role": "lead"
}
],
"description": "This simple PHP class allows you to easily generate Smartsupp.com JS chat code.",
"homepage": "https://www.smartsupp.com/",
"keywords": [
"chat"
],
"install-path": "../smartsupp/chat-code-generator"
},
{
"name": "smartsupp/php-partner-client",
"version": "1.1",
"version_normalized": "1.1.0.0",
"source": {
"type": "git",
"url": "https://github.com/smartsupp/php-auth-client.git",
"reference": "caa587a89ae551f1356f083baf29d31567468020"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/smartsupp/php-auth-client/zipball/caa587a89ae551f1356f083baf29d31567468020",
"reference": "caa587a89ae551f1356f083baf29d31567468020",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "4.8.*"
},
"time": "2019-09-30T15:08:09+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-0": {
"Smartsupp": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"authors": [
{
"name": "Marek Gach",
"role": "lead"
}
],
"description": "API client allows to register and login (obtain API key) from Smartsupp partner API.",
"homepage": "https://www.smartsupp.com/",
"keywords": [
"chat"
],
"install-path": "../smartsupp/php-partner-client"
}
],
"dev": true,
"dev-package-names": []
}

View File

@@ -0,0 +1,41 @@
<?php return array(
'root' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'type' => 'prestashop-module',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => 'c05cb67119660d30391dbba0c9b315c8e2ed2572',
'name' => 'smartsupp/live-chat',
'dev' => true,
),
'versions' => array(
'smartsupp/chat-code-generator' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../smartsupp/chat-code-generator',
'aliases' => array(),
'reference' => '1f63b44aeb90a1cd9e37b260a35b0ccb3377feea',
'dev_requirement' => false,
),
'smartsupp/live-chat' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'type' => 'prestashop-module',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => 'c05cb67119660d30391dbba0c9b315c8e2ed2572',
'dev_requirement' => false,
),
'smartsupp/php-partner-client' => array(
'pretty_version' => '1.1',
'version' => '1.1.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../smartsupp/php-partner-client',
'aliases' => array(),
'reference' => 'caa587a89ae551f1356f083baf29d31567468020',
'dev_requirement' => false,
),
),
);

View File

@@ -0,0 +1,26 @@
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 50600)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 5.6.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}

View File

@@ -0,0 +1,4 @@
.idea/*
/vendor/
composer.lock
/build/

View File

@@ -0,0 +1,22 @@
language: php
php:
- 5.3
- 5.4
- 5.5
- 5.6
- hhvm
matrix:
allow_failures:
- php: hhvm
before_script:
- composer require satooshi/php-coveralls:1.0.1 squizlabs/php_codesniffer
- composer install
script:
- vendor/bin/phpcs src/ -p --standard=PSR2 --report=summary
- mkdir -p build/logs
- vendor/bin/phpunit --configuration phpunit.xml --coverage-text
after_success:
- sh -c 'if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then php vendor/bin/coveralls -v; fi;'

View File

@@ -0,0 +1,33 @@
[![Build Status](https://travis-ci.org/smartsupp/chat-code-generator.svg)](https://travis-ci.org/smartsupp/chat-code-generator)
[![Coverage Status](https://coveralls.io/repos/smartsupp/chat-code-generator/badge.svg?branch=master&service=github)](https://coveralls.io/github/smartsupp/chat-code-generator?branch=master)
# Smartsupp chat code generator
This is simple PHP class for Smartsupp chat API which helps you to generate chat JavaScript code.
* https://www.smartsupp.com/
* [More info about Smartsupp CHAT API](https://developers.smartsupp.com/chat/configuration) This is "Get started" doc for chat API.
* [More info about Smartsupp CHAT API - Overview](https://developers.smartsupp.com/chat/overview) This is full documentation for chat API. Note, that not all properties are possible to be set using this class.
## Get Started
Here is an example on how to use it:
```php
$chat = new Smartsupp\ChatGenerator;
$chat->setKey('XYZ123456');
$chat->disableSendEmailTranscript();
$chat->enableRating('advanced', true);
$chat->setBoxPosition('left', 'side', 20, 120);
$chat->setName('Johny Depp');
$chat->setEmail('johny@depp.com');
$chat->setVariable('orderTotal', 'Total orders', 150);
$chat->setVariable('lastOrder', 'Last ordered', '2015-07-09');
$chat->setGoogleAnalytics('UA-123456');
$data = $chat->render();
```
## Copyright
Copyright (c) 2016 Smartsupp.com, s.r.o.

View File

@@ -0,0 +1,34 @@
{
"name": "smartsupp/chat-code-generator",
"description": "This simple PHP class allows you to easily generate Smartsupp.com JS chat code.",
"type": "library",
"keywords": [
"chat"
],
"homepage": "https://www.smartsupp.com/",
"authors": [
{
"name": "Marek Gach",
"role": "lead"
}
],
"support": {
"issues": "https://github.com/smartsupp/chat-code-generator/issues",
"wiki": "https://github.com/smartsupp/chat-code-generator/wiki",
"source": "https://github.com/smartsupp/chat-code-generator"
},
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {"Smartsupp": "src/"}
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "4.7.*"
}
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/bootstrap.php" colors="true">
<testsuites>
<testsuite name="Smartsupp JS code generator">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src/</directory>
</whitelist>
</filter>
<logging>
<log type="coverage-clover" target="build/logs/clover.xml"/>
</logging>
</phpunit>

View File

@@ -0,0 +1,481 @@
<?php
namespace Smartsupp;
/**
* Generates widget chat code for Smartsupp.com
*
* PHP version >=5.3
*
* @package Smartsupp
* @author Marek Gach <gach@kurzor.net>
* @copyright since 2015 SmartSupp.com
* @version Git: $Id$
* @link https://github.com/smartsupp/chat-code-generator
* @since File available since Release 0.1
*/
class ChatGenerator
{
/**
* @var array Values which are allowed for ratingType param.
*/
protected $allowed_rating_types = array('advanced', 'simple');
/**
* @var array Values which are allowed for alignX param.
*/
protected $allowed_align_x = array('right', 'left');
/**
* @var array Values which are allowed for alignY param.
*/
protected $allowed_align_y = array('side', 'bottom');
/**
* @var array Values which are allowed for widget param.
*/
protected $allowed_widget = array('button', 'widget');
/**
* @var null|string Your unique chat code. Can be obtained after registration.
*/
protected $key = null;
/**
* @var null|string By default chat conversation is terminated when visitor opens a sub-domain on your website.
*/
protected $cookie_domain = null;
/**
* @var string Chat language.
*/
protected $language = 'en';
/**
* @var string Chat charset defaults to utf-8.
*/
protected $charset = 'utf-8';
/**
* @var null|string Email (basic information).
*/
protected $email = null;
/**
* @var null|string Customer name (basic information).
*/
protected $name = null;
/**
* @var null|array contain additional user information.
*/
protected $variables = null;
/**
* @var bool When the visitor ends the conversation a confirmation window is displayed. This flag defaults to true
* and can be changed.
*/
protected $send_email_transcript = true;
/**
* @var bool Indicate if rating is enabled.
*/
protected $rating_enabled = false;
/**
* @var string Rating type.
*/
protected $rating_type = 'simple';
/**
* @var bool Set if rating comment is enambled.
*/
protected $rating_comment = false;
/**
* @var string Chat X align.
*/
protected $align_x = null;
/**
* @var string Chat Y align.
*/
protected $align_y = null;
/**
* @var int Chat X offset.
*/
protected $offset_x = null;
/**
* @var int Chat Y offset.
*/
protected $offset_y = null;
/**
* @var string Widget type.
*/
protected $widget = null;
/**
* @var null|string Google analytics key value.
*/
protected $ga_key = null;
/**
* @var null|array Google analytics additional options.
*/
protected $ga_options = null;
/**
* @var bool
*/
protected $hide_widget = false;
/**
* @var null|string plugin platform
*/
protected $platform = null;
public function __construct($key = null)
{
$this->key = $key;
}
/**
* Set platform - serves as internal information for Smartsupp to identify which CMS and version is used.
*
* @param string $platform
*/
public function setPlatform($platform)
{
$this->platform = $platform;
}
/**
* Set chat language. Also is checking if language is one of allowed values.
*
* @param string $language
* @throws \Exception when parameter value is incorrect
*/
public function setLanguage($language)
{
$this->language = $language;
}
/**
* Set the charset. Check also if charset is allowed and valid value.
*
* @param string $charset
*/
public function setCharset($charset)
{
$this->charset = $charset;
}
/**
* Allows to set Smartsupp code.
*
* @param string $key Smartsupp chat key.
*/
public function setKey($key)
{
$this->key = $key;
}
/**
* Smartsupp visitor is identified by unique key stored in cookies. By default chat conversation is terminated when
* visitor opens a sub-domain on your website. You should set main domain as cookie domain if you want chat
* conversations uninterrupted across your sub-domains. Insert the cookieDomain parameter in your chat code on main
* domain and all sub-domains where you want the chat conversation uninterrupted.
*
* Example: Use value '.your-domain.com' to let chat work also on all sub-domains and main domain.
*
* @param string $cookie_domain
*/
public function setCookieDomain($cookie_domain)
{
$this->cookie_domain = $cookie_domain;
}
/**
* When the visitor ends the conversation a confirmation window is displayed. In this window there is by default a
* button to send a transcript of the chat conversation to email. You can choose not to show this button.
*/
public function disableSendEmailTranscript()
{
$this->send_email_transcript = false;
}
/**
* After visitors ends a chat conversation, he is prompted to rate the conversation. Rating is disabled by default.
* Together with enabling it you can set additional parameters.
*
* @param string $rating_type
* @param boolean|false $rating_comment
* @throws \Exception when parameter value is incorrect
*/
public function enableRating($rating_type = 'simple', $rating_comment = false)
{
if (!in_array($rating_type, $this->allowed_rating_types)) {
throw new \Exception("Rating type $rating_type is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_rating_types) . ".");
}
$rating_comment = (bool) $rating_comment;
$this->rating_enabled = true;
$this->rating_type = $rating_type;
$this->rating_comment = $rating_comment;
}
/**
* You can send visitor name. So your visitors won't be anonymous and your chat agents will see info about every
* visitor, enabling agents to better focus on VIP visitors and provide customized answers.
*
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* You can send visitor email. So your visitors won't be anonymous and your chat agents will see info about every
* visitor, enabling agents to better focus on VIP visitors and provide customized answers.
*
* @param string $name
*/
public function setEmail($email)
{
$this->email = $email;
}
/**
* Will add additional parameter into Extra user info variables list.
*
* @param $id Parameter ID.
* @param $label Parameter label.
* @param $value Parameter value.
*/
public function setVariable($id, $label, $value)
{
$variable = array('id' => $id, 'label' => $label, 'value' => $value);
$this->variables[] = $variable;
}
/**
* By default the chat box is displayed in bottom right corner of the website. You can change the default position
* along the bottom line or place the chat on right or left side of the website.
*
* @param string $align_x Align to right or left.
* @param string $align_y Align to bottom or side.
* @param int $offset_x Offset from left or right.
* @param int $offset_y Offset from top.
* @throws \Exception When params are not correct.
*/
public function setAlign($align_x = 'right', $align_y = 'bottom', $offset_x = 10, $offset_y = 100)
{
if (!in_array($align_x, $this->allowed_align_x)) {
throw new \Exception("AllignX value $align_x is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_align_x) . ".");
}
if (!in_array($align_y, $this->allowed_align_y)) {
throw new \Exception("AllignY value $align_y is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_align_y) . ".");
}
$this->align_x = $align_x;
$this->align_y = $align_y;
$this->offset_x = $offset_x;
$this->offset_y = $offset_y;
}
/**
* We supports two chat-box layouts, widget and button. By default is activated layout widget.
*
* @param string $widget Parameter value.
* @throws \Exception when parameter value is incorrect
*/
public function setWidget($widget = 'widget')
{
if (!in_array($widget, $this->allowed_widget)) {
throw new \Exception("Widget value $widget is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_widget) . ".");
}
$this->widget = $widget;
}
/**
* Smartsupp is linked with your Google Analytics (GA) automatically. Smartsupp automatically checks your site's
* code for GA property ID and sends data to that account. If you are using Google Tag Manager (GTM) or you don't
* have GA code directly inserted in your site's code for some reason, you have to link your GA account as described
* here.
* If you have sub-domains on your website and you are tracking all sub-domains in one GA account, use the gaOptions
* parameter. You can find more info about gaOptions in Google Analytics documentation
* (@see https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#customizeTracker).
*
* @param $ga_key Google analytics key.
* @param array|null $ga_options Additional gaOptions.
*/
public function setGoogleAnalytics($ga_key, array $ga_options = null)
{
$this->ga_key = $ga_key;
$this->ga_options = $ga_options;
}
/**
* You can hide chat box on certain pages by setting this variable.
*/
public function hideWidget()
{
$this->hide_widget = true;
}
/**
* Function for javascript variable value escaping.
*
* @param $str string String to encode.
* @return string Encoded string.
*/
public function javascriptEscape($str)
{
$new_str = '';
for ($i = 0; $i < mb_strlen($str); $i++) {
// obtain single character
$char = mb_substr($str, $i, 1);
// if is alphanumeric put directly into string
if (!in_array($char, array("'"))) {
$new_str .= $char;
} else { // else encode as hex
$new_str .= '\\x' . bin2hex($char);
}
}
return $new_str;
}
/**
* Will assemble chat JS code. Class property with name key need to be set before rendering.
*
* @param bool|false $print_out Force to echo JS chat code instead of returning it.
* @return string
* @throws \Exception Will reach exception when key param is not set.
*/
public function render($print_out = false)
{
if (empty($this->key)) {
throw new \Exception("At least KEY param must be set!");
}
$params = array();
$params2 = array();
// set cookie domain if not blank
if ($this->cookie_domain) {
$params[] = "_smartsupp.cookieDomain = '%cookie_domain%';";
}
// If is set to false, turn off. Default value is true.
if (!$this->send_email_transcript) {
$params[] = "_smartsupp.sendEmailTanscript = false;";
}
if ($this->rating_enabled) {
$params[] = "_smartsupp.ratingEnabled = true; // by default false";
$params[] = "_smartsupp.ratingType = '" . $this->rating_type . "'; // by default 'simple'";
$params[] = "_smartsupp.ratingComment = " . ($this->rating_comment? 'true':'false') . "; // default false";
}
if ($this->align_x && $this->align_y && $this->widget) {
$params[] = "_smartsupp.alignX = '" . $this->align_x . "'; // or 'left'";
$params[] = "_smartsupp.alignY = '" . $this->align_y . "'; // by default 'bottom'";
$params[] = "_smartsupp.widget = '" . $this->widget . "'; // by default 'widget'";
}
if ($this->offset_x && $this->offset_y) {
$params[] = "_smartsupp.offsetX = " . (int)$this->offset_x . "; // offset from left / right, default 10";
$params[] = "_smartsupp.offsetY = " . (int)$this->offset_y . "; // offset from top, default 100";
}
if ($this->platform) {
$params[] = "_smartsupp.sitePlatform = '" . self::javascriptEscape($this->platform) . "';";
}
// set detailed visitor's info
// basic info
if ($this->email) {
$params2[] = "smartsupp('email', '" . self::javascriptEscape($this->email) . "');";
}
if ($this->name) {
$params2[] = "smartsupp('name', '" . self::javascriptEscape($this->name) . "');";
}
// extra info
if ($this->variables) {
$options = array();
foreach ($this->variables as $key => $value) {
$options[] = self::javascriptEscape($value['id']) .": {label: '" .
self::javascriptEscape($value['label']) . "', value: '" . self::javascriptEscape($value['value']) .
"'}";
}
$params2[] = "smartsupp('variables', {" .
implode(", ", $options) .
"});";
}
// set GA key and additional GA params
if ($this->ga_key) {
$params[] = "_smartsupp.gaKey = '%ga_key%';";
if (!empty($this->ga_options)) {
$options = array();
foreach ($this->ga_options as $key => $value) {
$options[] = "'" . self::javascriptEscape($key) . "': '" . self::javascriptEscape($value) . "'";
}
$params[] = "_smartsupp.gaOptions = {" . implode(", ", $options) . "};";
}
}
// hide widget if needed
if ($this->hide_widget) {
$params[] = "_smartsupp.hideWidget = true;";
}
// create basic code and append params
$code = "<script type=\"text/javascript\">
var _smartsupp = _smartsupp || {};
_smartsupp.key = '%key%';\n" .
implode("\n", $params) . "\n" .
"window.smartsupp||(function(d) {
var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
s=d.getElementsByTagName('script')[0];c=d.createElement('script');
c.type='text/javascript';c.charset='utf-8';c.async=true;
c.src='//www.smartsuppchat.com/loader.js';s.parentNode.insertBefore(c,s);
})(document);"
. implode("\n", $params2) . "
</script>";
$code = str_replace('%key%', self::javascriptEscape($this->key), $code);
$code = str_replace('%cookie_domain%', self::javascriptEscape($this->cookie_domain), $code);
$code = str_replace('%ga_key%', self::javascriptEscape($this->ga_key), $code);
if ($print_out) {
echo $code;
} else {
return $code;
}
}
}

View File

@@ -0,0 +1,481 @@
<?php
namespace Smartsupp;
/**
* Generates widget chat code for Smartsupp.com
*
* PHP version >=5.3
*
* @package Smartsupp
* @author Marek Gach <gach@kurzor.net>
* @copyright since 2015 SmartSupp.com
* @version Git: $Id$
* @link https://github.com/smartsupp/chat-code-generator
* @since File available since Release 0.1
*/
class ChatGenerator
{
/**
* @var array Values which are allowed for ratingType param.
*/
protected $allowed_rating_types = array('advanced', 'simple');
/**
* @var array Values which are allowed for alignX param.
*/
protected $allowed_align_x = array('right', 'left');
/**
* @var array Values which are allowed for alignY param.
*/
protected $allowed_align_y = array('side', 'bottom');
/**
* @var array Values which are allowed for widget param.
*/
protected $allowed_widget = array('button', 'widget');
/**
* @var null|string Your unique chat code. Can be obtained after registration.
*/
protected $key = null;
/**
* @var null|string By default chat conversation is terminated when visitor opens a sub-domain on your website.
*/
protected $cookie_domain = null;
/**
* @var string Chat language.
*/
protected $language = 'en';
/**
* @var string Chat charset defaults to utf-8.
*/
protected $charset = 'utf-8';
/**
* @var null|string Email (basic information).
*/
protected $email = null;
/**
* @var null|string Customer name (basic information).
*/
protected $name = null;
/**
* @var null|array contain additional user information.
*/
protected $variables = null;
/**
* @var bool When the visitor ends the conversation a confirmation window is displayed. This flag defaults to true
* and can be changed.
*/
protected $send_email_transcript = true;
/**
* @var bool Indicate if rating is enabled.
*/
protected $rating_enabled = false;
/**
* @var string Rating type.
*/
protected $rating_type = 'simple';
/**
* @var bool Set if rating comment is enambled.
*/
protected $rating_comment = false;
/**
* @var string Chat X align.
*/
protected $align_x = null;
/**
* @var string Chat Y align.
*/
protected $align_y = null;
/**
* @var int Chat X offset.
*/
protected $offset_x = null;
/**
* @var int Chat Y offset.
*/
protected $offset_y = null;
/**
* @var string Widget type.
*/
protected $widget = null;
/**
* @var null|string Google analytics key value.
*/
protected $ga_key = null;
/**
* @var null|array Google analytics additional options.
*/
protected $ga_options = null;
/**
* @var bool
*/
protected $hide_widget = false;
/**
* @var null|string plugin platform
*/
protected $platform = null;
public function __construct($key = null)
{
$this->key = $key;
}
/**
* Set platform - serves as internal information for Smartsupp to identify which CMS and version is used.
*
* @param string $platform
*/
public function setPlatform($platform)
{
$this->platform = $platform;
}
/**
* Set chat language. Also is checking if language is one of allowed values.
*
* @param string $language
* @throws \Exception when parameter value is incorrect
*/
public function setLanguage($language)
{
$this->language = $language;
}
/**
* Set the charset. Check also if charset is allowed and valid value.
*
* @param string $charset
*/
public function setCharset($charset)
{
$this->charset = $charset;
}
/**
* Allows to set Smartsupp code.
*
* @param string $key Smartsupp chat key.
*/
public function setKey($key)
{
$this->key = $key;
}
/**
* Smartsupp visitor is identified by unique key stored in cookies. By default chat conversation is terminated when
* visitor opens a sub-domain on your website. You should set main domain as cookie domain if you want chat
* conversations uninterrupted across your sub-domains. Insert the cookieDomain parameter in your chat code on main
* domain and all sub-domains where you want the chat conversation uninterrupted.
*
* Example: Use value '.your-domain.com' to let chat work also on all sub-domains and main domain.
*
* @param string $cookie_domain
*/
public function setCookieDomain($cookie_domain)
{
$this->cookie_domain = $cookie_domain;
}
/**
* When the visitor ends the conversation a confirmation window is displayed. In this window there is by default a
* button to send a transcript of the chat conversation to email. You can choose not to show this button.
*/
public function disableSendEmailTranscript()
{
$this->send_email_transcript = false;
}
/**
* After visitors ends a chat conversation, he is prompted to rate the conversation. Rating is disabled by default.
* Together with enabling it you can set additional parameters.
*
* @param string $rating_type
* @param boolean|false $rating_comment
* @throws \Exception when parameter value is incorrect
*/
public function enableRating($rating_type = 'simple', $rating_comment = false)
{
if (!in_array($rating_type, $this->allowed_rating_types)) {
throw new \Exception("Rating type $rating_type is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_rating_types) . ".");
}
$rating_comment = (bool) $rating_comment;
$this->rating_enabled = true;
$this->rating_type = $rating_type;
$this->rating_comment = $rating_comment;
}
/**
* You can send visitor name. So your visitors won't be anonymous and your chat agents will see info about every
* visitor, enabling agents to better focus on VIP visitors and provide customized answers.
*
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* You can send visitor email. So your visitors won't be anonymous and your chat agents will see info about every
* visitor, enabling agents to better focus on VIP visitors and provide customized answers.
*
* @param string $name
*/
public function setEmail($email)
{
$this->email = $email;
}
/**
* Will add additional parameter into Extra user info variables list.
*
* @param $id Parameter ID.
* @param $label Parameter label.
* @param $value Parameter value.
*/
public function setVariable($id, $label, $value)
{
$variable = array('id' => $id, 'label' => $label, 'value' => $value);
$this->variables[] = $variable;
}
/**
* By default the chat box is displayed in bottom right corner of the website. You can change the default position
* along the bottom line or place the chat on right or left side of the website.
*
* @param string $align_x Align to right or left.
* @param string $align_y Align to bottom or side.
* @param int $offset_x Offset from left or right.
* @param int $offset_y Offset from top.
* @throws \Exception When params are not correct.
*/
public function setAlign($align_x = 'right', $align_y = 'bottom', $offset_x = 10, $offset_y = 100)
{
if (!in_array($align_x, $this->allowed_align_x)) {
throw new \Exception("AllignX value $align_x is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_align_x) . ".");
}
if (!in_array($align_y, $this->allowed_align_y)) {
throw new \Exception("AllignY value $align_y is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_align_y) . ".");
}
$this->align_x = $align_x;
$this->align_y = $align_y;
$this->offset_x = $offset_x;
$this->offset_y = $offset_y;
}
/**
* We supports two chat-box layouts, widget and button. By default is activated layout widget.
*
* @param string $widget Parameter value.
* @throws \Exception when parameter value is incorrect
*/
public function setWidget($widget = 'widget')
{
if (!in_array($widget, $this->allowed_widget)) {
throw new \Exception("Widget value $widget is not allowed value. You can use only one of values: " .
implode(', ', $this->allowed_widget) . ".");
}
$this->widget = $widget;
}
/**
* Smartsupp is linked with your Google Analytics (GA) automatically. Smartsupp automatically checks your site's
* code for GA property ID and sends data to that account. If you are using Google Tag Manager (GTM) or you don't
* have GA code directly inserted in your site's code for some reason, you have to link your GA account as described
* here.
* If you have sub-domains on your website and you are tracking all sub-domains in one GA account, use the gaOptions
* parameter. You can find more info about gaOptions in Google Analytics documentation
* (@see https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#customizeTracker).
*
* @param $ga_key Google analytics key.
* @param array|null $ga_options Additional gaOptions.
*/
public function setGoogleAnalytics($ga_key, array $ga_options = null)
{
$this->ga_key = $ga_key;
$this->ga_options = $ga_options;
}
/**
* You can hide chat box on certain pages by setting this variable.
*/
public function hideWidget()
{
$this->hide_widget = true;
}
/**
* Function for javascript variable value escaping.
*
* @param $str string String to encode.
* @return string Encoded string.
*/
public function javascriptEscape($str)
{
$new_str = '';
for ($i = 0; $i < mb_strlen($str); $i++) {
// obtain single character
$char = mb_substr($str, $i, 1);
// if is alphanumeric put directly into string
if (!in_array($char, array("'"))) {
$new_str .= $char;
} else { // else encode as hex
$new_str .= '\\x' . bin2hex($char);
}
}
return $new_str;
}
/**
* Will assemble chat JS code. Class property with name key need to be set before rendering.
*
* @param bool|false $print_out Force to echo JS chat code instead of returning it.
* @return string
* @throws \Exception Will reach exception when key param is not set.
*/
public function render($print_out = false)
{
if (empty($this->key)) {
throw new \Exception("At least KEY param must be set!");
}
$params = array();
$params2 = array();
// set cookie domain if not blank
if ($this->cookie_domain) {
$params[] = "_smartsupp.cookieDomain = '%cookie_domain%';";
}
// If is set to false, turn off. Default value is true.
if (!$this->send_email_transcript) {
$params[] = "_smartsupp.sendEmailTanscript = false;";
}
if ($this->rating_enabled) {
$params[] = "_smartsupp.ratingEnabled = true; // by default false";
$params[] = "_smartsupp.ratingType = '" . $this->rating_type . "'; // by default 'simple'";
$params[] = "_smartsupp.ratingComment = " . ($this->rating_comment? 'true':'false') . "; // default false";
}
if ($this->align_x && $this->align_y && $this->widget) {
$params[] = "_smartsupp.alignX = '" . $this->align_x . "'; // or 'left'";
$params[] = "_smartsupp.alignY = '" . $this->align_y . "'; // by default 'bottom'";
$params[] = "_smartsupp.widget = '" . $this->widget . "'; // by default 'widget'";
}
if ($this->offset_x && $this->offset_y) {
$params[] = "_smartsupp.offsetX = " . (int)$this->offset_x . "; // offset from left / right, default 10";
$params[] = "_smartsupp.offsetY = " . (int)$this->offset_y . "; // offset from top, default 100";
}
if ($this->platform) {
$params[] = "_smartsupp.sitePlatform = '" . self::javascriptEscape($this->platform) . "';";
}
// set detailed visitor's info
// basic info
if ($this->email) {
$params2[] = "smartsupp('email', '" . self::javascriptEscape($this->email) . "');";
}
if ($this->name) {
$params2[] = "smartsupp('name', '" . self::javascriptEscape($this->name) . "');";
}
// extra info
if ($this->variables) {
$options = array();
foreach ($this->variables as $key => $value) {
$options[] = self::javascriptEscape($value['id']) .": {label: '" .
self::javascriptEscape($value['label']) . "', value: '" . self::javascriptEscape($value['value']) .
"'}";
}
$params2[] = "smartsupp('variables', {" .
implode(", ", $options) .
"});";
}
// set GA key and additional GA params
if ($this->ga_key) {
$params[] = "_smartsupp.gaKey = '%ga_key%';";
if (!empty($this->ga_options)) {
$options = array();
foreach ($this->ga_options as $key => $value) {
$options[] = "'" . self::javascriptEscape($key) . "': '" . self::javascriptEscape($value) . "'";
}
$params[] = "_smartsupp.gaOptions = {" . implode(", ", $options) . "};";
}
}
// hide widget if needed
if ($this->hide_widget) {
$params[] = "_smartsupp.hideWidget = true;";
}
// create basic code and append params
$code = "<script type=\"text/javascript\">
var _smartsupp = _smartsupp || {};
_smartsupp.key = '%key%';\n" .
implode("\n", $params) . "\n" .
"window.smartsupp||(function(d) {
var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
s=d.getElementsByTagName('script')[0];c=d.createElement('script');
c.type='text/javascript';c.charset='utf-8';c.async=true;
c.src='//www.smartsuppchat.com/loader.js';s.parentNode.insertBefore(c,s);
})(document);"
. implode("\n", $params2) . "
</script>";
$code = str_replace('%key%', self::javascriptEscape($this->key), $code);
$code = str_replace('%cookie_domain%', self::javascriptEscape($this->cookie_domain), $code);
$code = str_replace('%ga_key%', self::javascriptEscape($this->ga_key), $code);
if ($print_out) {
echo $code;
} else {
return $code;
}
}
}

View File

@@ -0,0 +1,257 @@
<?php
namespace Smartsupp;
class ChatGeneratorTest extends \PHPUnit_Framework_TestCase
{
/**
* @var ChatGenerator
*/
protected $chat;
protected function setUp()
{
parent::setUp();
$this->chat = new ChatGenerator();
}
public function test_javascriptEscape()
{
$ret = $this->chat->javascriptEscape('abc123');
$this->assertEquals('abc123', $ret);
}
public function test_javascriptEscape_someScript()
{
$ret = $this->chat->javascriptEscape("<script>alert('xss')</script>");
$this->assertEquals('<script>alert(\x27xss\x27)</script>', $ret);
}
public function test_javascriptEscape_someSpecialChars()
{
$ret = $this->chat->javascriptEscape("\"'*!@#$%^&*()_+}{:?><.,/`~");
$this->assertEquals('"\x27*!@#$%^&*()_+}{:?><.,/`~', $ret);
}
public function test_hideWidget()
{
$this->chat->hideWidget();
$this->assertTrue(self::getPrivateField($this->chat, 'hide_widget'));
}
public function test_setGoogleAnalytics()
{
$this->chat->setGoogleAnalytics('UA-123456789');
$this->assertEquals('UA-123456789', self::getPrivateField($this->chat, 'ga_key'));
}
public function test_setGoogleAnalytics_withOptions()
{
$options = array('cookieDomain' => 'foo.example.com');
$this->chat->setGoogleAnalytics('UA-123456789', $options);
$this->assertEquals('UA-123456789', self::getPrivateField($this->chat, 'ga_key'));
$this->assertEquals($options, self::getPrivateField($this->chat, 'ga_options'));
}
public function test_widget()
{
$this->chat->setWidget('button');
$this->assertEquals('button', self::getPrivateField($this->chat, 'widget'));
}
/**
* @expectedException \Exception
* @expectedExceptionMessage Widget value foo is not allowed value. You can use only one of values: button, widget.
*/
public function test_widget_badParam()
{
$this->chat->setWidget('foo');
}
public function test_setBoxPosition()
{
$this->chat->setAlign('left', 'side', 20, 120);
$this->assertEquals('left', self::getPrivateField($this->chat, 'align_x'));
$this->assertEquals('side', self::getPrivateField($this->chat, 'align_y'));
$this->assertEquals('20', self::getPrivateField($this->chat, 'offset_x'));
$this->assertEquals('120', self::getPrivateField($this->chat, 'offset_y'));
}
/**
* @expectedException \Exception
* @expectedExceptionMessage AllignX value foo is not allowed value. You can use only one of values: right, left.
*/
public function test_setBoxPosition_badParam()
{
$this->chat->setAlign('foo', 'side', 20, 120);
}
/**
* @expectedException \Exception
* @expectedExceptionMessage AllignY value foo is not allowed value. You can use only one of values: side, bottom.
*/
public function test_setBoxPosition_badParam2()
{
$this->chat->setAlign('left', 'foo', 20, 120);
}
public function test_setVariable()
{
$this->chat->setVariable('userId', 'User ID', 123);
$this->chat->setVariable('orderedPrice', 'Ordered Price in Eshop', '128 000');
$this->assertEquals(
array(
array('id' => 'userId', 'label' => 'User ID', 'value' => 123),
array('id' => 'orderedPrice', 'label' => 'Ordered Price in Eshop', 'value' => '128 000')
),
self::getPrivateField($this->chat, 'variables')
);
}
public function test_setUserBasicInformation()
{
$this->chat->setName('Johny Depp');
$this->chat->setEmail('johny@depp.com');
$this->assertEquals('Johny Depp', self::getPrivateField($this->chat, 'name'));
$this->assertEquals('johny@depp.com', self::getPrivateField($this->chat, 'email'));
}
public function test_enableRating()
{
$this->chat->enableRating('advanced', true);
$this->assertTrue(self::getPrivateField($this->chat, 'rating_enabled'));
$this->assertEquals('advanced', self::getPrivateField($this->chat, 'rating_type'));
$this->assertTrue(self::getPrivateField($this->chat, 'rating_comment'));
}
/**
* @expectedException \Exception
* @expectedExceptionMessage Rating type foo is not allowed value. You can use only one of values: advanced, simple.
*/
public function test_enableRating_badParam()
{
$this->chat->enableRating('foo');
}
public function test_disableSendEmailTranscript()
{
$this->assertTrue(self::getPrivateField($this->chat, 'send_email_transcript'));
$this->chat->disableSendEmailTranscript();
$this->assertFalse(self::getPrivateField($this->chat, 'send_email_transcript'));
}
public function test_setCookieDomain()
{
$this->assertNull(self::getPrivateField($this->chat, 'cookie_domain'));
$this->chat->setCookieDomain('.foo.bar');
$this->assertEquals('.foo.bar', self::getPrivateField($this->chat, 'cookie_domain'));
}
public function test_setKey()
{
$this->assertNull(self::getPrivateField($this->chat, 'key'));
$this->chat->setKey('123456');
$this->assertEquals('123456', self::getPrivateField($this->chat, 'key'));
}
public function test_setCharset()
{
$this->assertEquals('utf-8', self::getPrivateField($this->chat, 'charset'));
$this->chat->setCharset('utf-32');
$this->assertEquals('utf-32', self::getPrivateField($this->chat, 'charset'));
}
public function test_setLanguage()
{
$this->assertEquals('en', self::getPrivateField($this->chat, 'language'));
$this->chat->setLanguage('cs');
$this->assertEquals('cs', self::getPrivateField($this->chat, 'language'));
}
/**
* @expectedException \Exception
* @expectedExceptionMessage At least KEY param must be set!
*/
public function test_render_keyNotSet()
{
$this->chat->render();
}
public function test_render_simple()
{
$this->chat->setKey('XYZ123456');
$ret = $this->chat->render();
$expected = "<script type=\"text/javascript\">
var _smartsupp = _smartsupp || {};
_smartsupp.key = 'XYZ123456';
window.smartsupp||(function(d) {
var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
s=d.getElementsByTagName('script')[0];c=d.createElement('script');
c.type='text/javascript';c.charset='utf-8';c.async=true;
c.src='//www.smartsuppchat.com/loader.js';s.parentNode.insertBefore(c,s);
})(document);
</script>";
$this->assertEquals($expected, $ret);
}
public function test_render_simpleOutput()
{
$this->chat->setKey('XYZ123456');
$ret = $this->chat->render(true);
$this->assertNull($ret);
$this->expectOutputRegex('/.*window.smartsupp.*/');
}
public function test_render_allParams()
{
$this->chat->setKey('XYZ123456');
$this->chat->setCookieDomain('.foo.bar');
$this->chat->disableSendEmailTranscript();
$this->chat->enableRating('advanced', true);
$this->chat->setAlign('left', 'side', 20, 120);
$this->chat->setWidget('button');
$this->chat->setName('Johny Depp');
$this->chat->setEmail('johny@depp.com');
$this->chat->setVariable('orderTotal', 'Total orders', 150);
$this->chat->setVariable('lastOrder', 'Last ordered', '2015-07-09');
$this->chat->setGoogleAnalytics('UA-123456', array('cookieDomain' => '.foo.bar'));
$this->chat->hideWidget();
$ret = $this->chat->render();
$this->assertEquals(file_get_contents(dirname(__FILE__) . '/chat_code.txt'), $ret);
}
/**
* Get private / protected field value using \ReflectionProperty object.
*
* @static
* @param mixed $object object to be used
* @param string $fieldName object property name
* @return mixed given property value
*/
public static function getPrivateField($object, $fieldName)
{
$refId = new \ReflectionProperty($object, $fieldName);
$refId->setAccessible(true);
$value = $refId->getValue($object);
$refId->setAccessible(false);
return $value;
}
}

View File

@@ -0,0 +1,6 @@
<?php
error_reporting(E_ALL | E_STRICT);
require __DIR__ . '/../vendor/autoload.php';
// set multibyte encoding to utf-8 to be sure. Some php configs have not utf-8 by default
mb_internal_encoding('UTF-8');

View File

@@ -0,0 +1,25 @@
<script type="text/javascript">
var _smartsupp = _smartsupp || {};
_smartsupp.key = 'XYZ123456';
_smartsupp.cookieDomain = '.foo.bar';
_smartsupp.sendEmailTanscript = false;
_smartsupp.ratingEnabled = true; // by default false
_smartsupp.ratingType = 'advanced'; // by default 'simple'
_smartsupp.ratingComment = true; // default false
_smartsupp.alignX = 'left'; // or 'left'
_smartsupp.alignY = 'side'; // by default 'bottom'
_smartsupp.widget = 'button'; // by default 'widget'
_smartsupp.offsetX = 20; // offset from left / right, default 10
_smartsupp.offsetY = 120; // offset from top, default 100
_smartsupp.gaKey = 'UA-123456';
_smartsupp.gaOptions = {'cookieDomain': '.foo.bar'};
_smartsupp.hideWidget = true;
window.smartsupp||(function(d) {
var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
s=d.getElementsByTagName('script')[0];c=d.createElement('script');
c.type='text/javascript';c.charset='utf-8';c.async=true;
c.src='//www.smartsuppchat.com/loader.js';s.parentNode.insertBefore(c,s);
})(document);smartsupp('email', 'johny@depp.com');
smartsupp('name', 'Johny Depp');
smartsupp('variables', {orderTotal: {label: 'Total orders', value: '150'}, lastOrder: {label: 'Last ordered', value: '2015-07-09'}});
</script>

View File

@@ -0,0 +1,5 @@
.idea/*
/vendor/
composer.lock
/build/
test.php

View File

@@ -0,0 +1,27 @@
language: php
php:
- 5.6
- 7.0
- 7.1
- 7.2
- 7.3
matrix:
include:
- php: 5.3
dist: precise
- php: 5.4
dist: trusty
- php: 5.5
dist: trusty
before_script:
- composer require satooshi/php-coveralls:1.0.1 squizlabs/php_codesniffer
- composer install
script:
- vendor/bin/phpcs src/ -p --standard=PSR2 --report=summary
- mkdir -p build/logs
- vendor/bin/phpunit --configuration phpunit.xml --coverage-text
after_success:
- sh -c 'if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then php vendor/bin/coveralls -v; fi;'

View File

@@ -0,0 +1,92 @@
[![Build Status](https://travis-ci.org/smartsupp/php-auth-client.svg)](https://travis-ci.org/smartsupp/php-auth-client)
[![Coverage Status](https://coveralls.io/repos/github/smartsupp/php-auth-client/badge.svg?branch=master)](https://coveralls.io/github/smartsupp/php-auth-client?branch=master)
# Smartsupp Authentication API PHP client
* https://www.smartsupp.com/
## Get started
- Response is successfull if not contains `error` property in `$response` array.
- The `error` is machine-readable name of error, and `message` is human-readable description of error.
## create
```php
$api = new Smartsupp\Auth\Api();
$response = $api->create(array(
'email' => 'LOGIN_EMAIL', // required
'password' => 'YOUR_PASSWORD', // optional, min length 6 characters
'name' => 'John Doe', // optional
'lang' => 'en', // optional, lowercase; 2 characters
'partnerKey' => 'PARTNER_API_KEY' // optional
));
// print_r($response); // success response
array(
'account' => array(
'key' => 'CHAT_KEY',
'lang' => 'en'
),
'user' => array(
'email' => 'LOGIN_EMAIL',
'name' => 'John Doe',
'password' => 'YOUR_PASSWORD'
)
);
// print_r($response); // failure response
array(
'error' => 'EmailExists',
'message' => 'Email already exists',
'hint' => 'email'
);
```
### Errors
- `AuthError` - invalid PARTNER_KEY.
- `InvalidParam` - missing or invalid parameter (e.g.: email).
- `EmailExists` - email is already taken.
## login
```php
$api = new Smartsupp\Auth\Api();
$response = $api->login(array(
'email' => 'LOGIN_EMAIL',
'password' => 'YOUR_PASSWORD'
));
// print_r($response); // success response
array(
'account' => array(
'key' => 'CHAT_KEY',
'lang' => 'en'
)
);
// print_r($response); // failure response
array(
'error' => 'InvalidCredential',
'message' => 'Invalid password'
);
```
### Errors
- `AuthError` - invalid PARTNER_KEY.
- `InvalidParam` - missing or invalid parameter (e.g.: email is not valid, password is too short).
- `IdentityNotFound` - account with this email not exists.
- `InvalidCredential` - email exists, bad password is incorrect.
- `LoginFailure` - something is bad with login.
## Requirements
For backward compatibility with multiple plugins library supports PHP starting from version 5.3. It is highly possibly the constraint will change to 5.6+ in near future.
## Copyright
Copyright (c) 2016 Smartsupp.com, s.r.o.

View File

@@ -0,0 +1,29 @@
{
"name": "smartsupp/php-partner-client",
"description": "API client allows to register and login (obtain API key) from Smartsupp partner API.",
"type": "library",
"keywords": [
"chat"
],
"homepage": "https://www.smartsupp.com/",
"authors": [
{
"name": "Marek Gach",
"role": "lead"
}
],
"support": {
"issues": "https://github.com/smartsupp/php-partner-client/issues",
"wiki": "https://github.com/smartsupp/php-partner-client/wiki",
"source": "https://github.com/smartsupp/php-partner-client"
},
"autoload": {
"psr-0": {"Smartsupp": "src/"}
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "4.8.*"
}
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/bootstrap.php" colors="true">
<testsuites>
<testsuite name="Smartsupp partner API client">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src/</directory>
</whitelist>
</filter>
<logging>
<log type="coverage-clover" target="build/logs/clover.xml"/>
</logging>
</phpunit>

View File

@@ -0,0 +1,169 @@
<?php
namespace Smartsupp\Auth;
use Exception;
use Smartsupp\Auth\Request\CurlRequest;
use Smartsupp\Auth\Request\HttpRequest;
/**
* Class to communicate with Smartsupp partner API.
*
* PHP version >=5.3
*
* @package Smartsupp
* @author Marek Gach <gach@kurzor.net>
* @copyright since 2016 SmartSupp.com
* @version Git: $Id$
* @link https://github.com/smartsupp/php-partner-client
*/
class Api
{
/** API call base URL */
const API_BASE_URL = 'https://www.smartsupp.com/';
/** URL paths for all used resources endpoints methods */
const URL_LOGIN = 'account/login',
URL_CREATE = 'account/create';
/**
* @var null|CurlRequest
*/
private $handle = null;
/**
* Api constructor.
*
* @param null|HttpRequest $handle inject custom request handle to better unit test
* @throws Exception
*/
public function __construct(HttpRequest $handle = null)
{
// @codeCoverageIgnoreStart
if (!function_exists('curl_init')) {
throw new Exception('Smartsupp API client needs the CURL PHP extension.');
}
if (!function_exists('json_decode')) {
throw new Exception('Smartsupp API client needs the JSON PHP extension.');
}
// @codeCoverageIgnoreEnd
$this->handle = $handle ?: new CurlRequest();
}
/**
* Allows to create user.
*
* @param array $data
* @return array
*/
public function create($data)
{
return $this->post(self::URL_CREATE, $data);
}
/**
* Allows to log in account and obtain user key.
*
* @param array $data
* @return array
*/
public function login($data)
{
return $this->post(self::URL_LOGIN, $data);
}
/**
* Helper function to execute POST request.
*
* @param string $path request path
* @param array $data optional POST data array
* @return array|string array data or json encoded string of result
* @throws Exception
*/
private function post($path, $data)
{
return $this->run($path, 'post', $data);
}
/**
* Execute request against URL path with given method, optional data array. Also allows
* to specify if json data will be decoded before function return.
*
* @param $path request path
* @param $method request method
* @param null|array $data optional request data
* @param bool $json_decode specify if returned json data will be decoded
* @return string|array JSON data or array containing decoded JSON data
* @throws Exception
*/
private function run($path, $method, $data = null, $json_decode = true)
{
$this->handle->setOption(CURLOPT_URL, self::API_BASE_URL . $path);
$this->handle->setOption(CURLOPT_RETURNTRANSFER, true);
$this->handle->setOption(CURLOPT_FAILONERROR, false);
$this->handle->setOption(CURLOPT_SSL_VERIFYPEER, true);
$this->handle->setOption(CURLOPT_SSL_VERIFYHOST, 2);
$this->handle->setOption(CURLOPT_USERAGENT, 'cURL:php-partner-client');
// forward headers from request
$headers = array(
'X-Forwarded-For: ' . $this->getUserIpAddr(),
'Accept-Language: ' . $this->getAcceptLanguage(),
);
$this->handle->setOption(CURLOPT_HTTPHEADER, $headers);
switch ($method) {
case 'post':
$this->handle->setOption(CURLOPT_POST, true);
$this->handle->setOption(CURLOPT_POSTFIELDS, $data);
break;
}
$response = $this->handle->execute();
if ($response === false) {
throw new Exception($this->handle->getLastErrorMessage());
}
$this->handle->close();
if ($json_decode) {
$response = json_decode($response, true);
if (json_last_error() != JSON_ERROR_NONE) {
throw new Exception('Cannot parse API response JSON. Error: ' . json_last_error_msg());
}
}
return $response;
}
/**
* Return user IP address.
*
* @return string|null
*/
private function getUserIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
// ip from share internet
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// ip pass from proxy
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
// in case is not set - may be in CLI
return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
}
}
/**
* Get Accept-Language header.
*
* @return string|null
*/
private function getAcceptLanguage()
{
return isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : null;
}
}

View File

@@ -0,0 +1,90 @@
<?php
namespace Smartsupp\Auth\Request;
/**
* Class CurlRequest implements basic functionality to handle cURL requests.
* It is used to better mock this communication in PHPUnit tests.
*
* @package Smartsupp\Request
*/
class CurlRequest implements HttpRequest
{
/**
* Curl handler resource.
*
* @var null|resource
*/
private $handle = null;
/**
* CurlRequest constructor.
*
* @param string|null $url URL address to make call for
*/
public function __construct($url = null)
{
$this->init($url);
}
/**
* Init cURL connection object.
*
* @param string|null $url
* @throws Exception
*/
public function init($url = null)
{
$this->handle = curl_init($url);
}
/**
* Set cURL option with given value.
*
* @param string $name option name
* @param string|array $value option value
*/
public function setOption($name, $value)
{
curl_setopt($this->handle, $name, $value);
}
/**
* Execute cURL request.
*
* @return boolean
*/
public function execute()
{
return curl_exec($this->handle);
}
/**
* Get array of information about last request.
*
* @param int $opt options
* @return array info array
*/
public function getInfo($opt = 0)
{
return curl_getinfo($this->handle, $opt);
}
/**
* Close cURL handler connection.
*/
public function close()
{
curl_close($this->handle);
}
/**
* Return last error message as string.
*
* @return string formatted error message
*/
public function getLastErrorMessage()
{
$message = sprintf("cURL failed with error #%d: %s", curl_errno($this->handle), curl_error($this->handle));
return $message;
}
}

View File

@@ -0,0 +1,47 @@
<?php
namespace Smartsupp\Auth\Request;
/**
* Interface HttpRequest serves as base interface for concrete Request implementations.
*
* @package Smartsupp\Request
*/
interface HttpRequest
{
/**
* Allows to set request options.
*
* @param string $name option name
* @param string|array $value option value
*/
public function setOption($name, $value);
/**
* Execute request call.
*
* @return boolean execution status
*/
public function execute();
/**
* Get request status info.
*
* @param int $opt options
* @return array status info array
*/
public function getInfo($opt = 0);
/**
* Close request connection.
*
* @return boolean close status
*/
public function close();
/**
* Get last error message as formated string.
*
* @return string formated error message
*/
public function getLastErrorMessage();
}

View File

@@ -0,0 +1,94 @@
<?php
namespace Smartsupp\Auth;
use Exception;
class ApiTest extends \PHPUnit_Framework_TestCase
{
public function test_constructor()
{
$api = new Api();
$this->assertNotNull($api);
}
public function test_login()
{
$data = array(
'email' => 'test5@kurzor.net',
'password' => 'xxx'
);
$response = array(
'account' => array(
'key' => 'CHAT_KEY',
'lang' => 'en'
)
);
$http = $this->getMock('Smartsupp\Auth\Request\HttpRequest');
$http->expects($this->any())
->method('execute')
->will($this->returnValue(json_encode($response)));
// create class under test using $http instead of a real CurlRequest
$api = new Api($http);
$this->assertEquals($response, $api->login($data));
}
/**
* @expectedException Exception
* @expectedExceptionMessage Foo is at bar!
*/
public function test_response_error()
{
$data = array(
'email' => 'test5@kurzor.net',
'password' => 'xxx'
);
$http = $this->getMock('Smartsupp\Auth\Request\HttpRequest');
$http->expects($this->any())
->method('execute')
->will($this->returnValue(false));
$http->expects($this->any())
->method('getLastErrorMessage')
->will($this->returnValue('Foo is at bar!'));
// create class under test using $http instead of a real CurlRequest
$api = new Api($http);
$api->login($data);
}
public function test_create()
{
$data = array(
'email' => 'LOGIN_EMAIL', // required
'password' => 'YOUR_PASSWORD', // optional, min length 6 characters
'name' => 'John Doe', // optional
'lang' => 'en', // optional, lowercase; 2 characters
'partnerKey' => 'PARTNER_API_KEY' // optional
);
$response = array(
'account' => array(
'key' => 'CHAT_KEY',
'lang' => 'en'
),
'user' => array(
'email' => 'LOGIN_EMAIL',
'name' => 'John Doe',
'password' => 'YOUR_PASSWORD'
)
);
$http = $this->getMock('Smartsupp\Auth\Request\HttpRequest');
$http->expects($this->any())
->method('execute')
->will($this->returnValue(json_encode($response)));
// create class under test using $http instead of a real CurlRequest
$api = new Api($http);
$this->assertEquals($response, $api->create($data));
}
}

View File

@@ -0,0 +1,75 @@
<?php
namespace Smartsupp\Auth\Request;
class CurlRequestTest extends \PHPUnit_Framework_TestCase
{
/**
* @var CurlRequest
*/
protected $curl;
protected function setUp()
{
parent::setUp();
$this->curl = new CurlRequest('https://www.smartsupp.com/cs/product');
}
public function test_constructorVoid()
{
$this->curl = new CurlRequest();
$this->assertInstanceOf('Smartsupp\Auth\Request\CurlRequest', $this->curl);
}
public function test_constructorUrl()
{
$this->curl = new CurlRequest('https://smartsupp.com');
$this->assertInstanceOf('Smartsupp\Auth\Request\CurlRequest', $this->curl);
}
public function test_initError()
{
$this->curl->init('https://smartsupp.com');
}
public function test_setOption()
{
$this->curl->setOption(CURLOPT_HEADER, 0);
}
/**
* @expectedExceptionMessage curl_setopt() expects parameter 1 to be resource, null given
*/
public function test_setOption_notInitialized()
{
$this->curl->setOption(CURLOPT_HEADER, 0);
}
public function test_close()
{
$this->curl->close();
}
public function test_execute()
{
$this->curl->setOption(CURLOPT_RETURNTRANSFER, TRUE);
$this->assertNotEmpty($this->curl->execute());
}
public function test_getInfo()
{
$this->curl->setOption(CURLOPT_RETURNTRANSFER, TRUE);
$this->curl->execute();
$this->assertEquals($this->curl->getInfo(CURLINFO_HTTP_CODE), 200);
}
public function test_getLastErrorMessage()
{
$this->curl->setOption(CURLOPT_URL, 'foo://bar');
$this->curl->setOption(CURLOPT_RETURNTRANSFER, TRUE);
$this->curl->execute();
$this->assertNotEmpty($this->curl->getLastErrorMessage());
}
}

View File

@@ -0,0 +1,6 @@
<?php
error_reporting(E_ALL | E_STRICT);
require __DIR__ . '/../vendor/autoload.php';
// set multibyte encoding to utf-8 to be sure. Some php configs have not utf-8 by default
mb_internal_encoding('UTF-8');

View File

@@ -0,0 +1,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 858 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

View File

@@ -0,0 +1,30 @@
<?php
/**
* Smartsupp Live Chat integration module.
*
* @package Smartsupp
* @author Smartsupp <vladimir@smartsupp.com>
* @link http://www.smartsupp.com
* @copyright 2016 Smartsupp.com
* @license GPL-2.0+
*
* Plugin Name: Smartsupp Live Chat
* Plugin URI: http://www.smartsupp.com
* Description: Adds Smartsupp Live Chat code to PrestaShop.
* Version: 2.2.0
* Author: Smartsupp
* Author URI: http://www.smartsupp.com
* Text Domain: smartsupp
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
header('Expires: Mon, 26 Jul 1998 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: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Some files were not shown because too many files have changed in this diff Show More