Files
bio-concept-pharma/web/modules/migrationproserver/server.php
2019-11-17 19:14:07 +01:00

515 lines
15 KiB
PHP

<?php
require_once(dirname(__FILE__).'../../../config/config.inc.php');
require_once(dirname(__FILE__).'../../../init.php');
define('MP_TOKEN', "213026027");
error_reporting(1);
if (!isset($_SERVER)) {
$_GET = &$HTTP_GET_VARS;
$_POST = &$HTTP_POST_VARS;
$_ENV = &$HTTP_ENV_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
$_REQUEST = array_merge($_GET, $_POST, $_COOKIE);
}
define('MPROOT_BASE_NAME', basename(getcwd()));
define('MPCONNECTOR_BASE_DIR', dirname(__FILE__));
define('MPSTORE_BASE_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR);
class MPServer {
var $action = null;
var $adapter = null;
var $response = null;
function __construct() {
$this->action = $this->_getAction();
$this->adapter = $this->_getAdapter();
$this->response = $this->_getResponse();
}
function run() {
if(empty($_GET)){
echo "MigrationPro: PrestaShop To PrestaShop Connector File Ready to Work!";
return ;
}
if (!$this->_checkToken()) {
$this->response->error('Token is false !', null);
return;
}
$this->action->setConnector($this);
$this->action->run();
}
function _getAdapter() {
$adapter = new MPServerAdapter();
return $adapter;
}
function _getResponse() {
$response = new MPServerResponse();
return $response;
}
function _getAction() {
$action = new MPServerAction();
return $action;
}
function _checkToken() {
if (isset($_GET['token']) && $_GET['token'] == MP_TOKEN) {
return true;
} else {
return false;
}
}
}
class MPServerAction {
var $type = null;
var $connector = null;
function __construct() {
}
function setConnector($connector) {
$this->connector = $connector;
}
function _getActionType($action_type) {
$action = null;
$action_type = strtolower($action_type);
$class_name = __CLASS__ . ucfirst($action_type);
if (class_exists($class_name)) {
$action = new $class_name();
}
return $action;
}
function run() {
if (isset($_GET['action']) && $action = $this->_getActionType($_GET['action'])) {
$action->setConnector($this->connector);
$action->run();
} else {
$response = $this->connector->response;
$response->createResponse('error', 'Action not found !', null);
return;
}
}
function _getResponse() {
return $this->connector->response;
}
function _getAdapter() {
return $this->connector->adapter;
}
function _getCart() {
$adapter = $this->_getAdapter();
$cart = $adapter->getCart();
return $cart;
}
}
class MPServerActionCheck extends MPServerAction {
function __construct() {
parent::__construct();
}
function run() {
$adapter = $this->_getAdapter();
$cart = $this->_getCart();
$obj['cms'] = $adapter->detectCartType();
$response = $this->_getResponse();
if ($cart) {
$obj['image_category'] = $cart->imageDirCategory;
$obj['image_carrier'] = $cart->imageDirCarrier;
$obj['image_product'] = $cart->imageDirProduct;
$obj['image_manufacturer'] = $cart->imageDirManufacturer;
$obj['image_supplier'] = $cart->imageDirSupplier;
$obj['image_employee'] = $cart->imageDirEmployee;
$obj['table_prefix'] = $cart->tablePrefix;
$obj['version'] = $cart->version;
$obj['charset'] = $cart->char_set;
$obj['blowfish_key'] = $cart->blowfish_key;
$obj['cookie_key'] = $cart->cookie_key;
$connect = $cart->connect();
if ($connect && $char_set = $this->_checkDatabaseExist($connect)) {
if($obj['charset'] == ''){
$obj['charset'] = $char_set;
}
$obj['connect'] = array(
'result' => 'success',
'msg' => 'Successful connect to database !'
);
} else {
$obj['connect'] = array(
'result' => 'error',
'msg' => 'Not connect to database !'
);
}
}
// $response = $this->_getResponse();
// $response->success('Successful check CMS !', array($cart));
// return;
$response->success('Successful check CMS !', $obj);
return;
}
function _checkDatabaseExist($connect){
$query = "SHOW VARIABLES LIKE \"ch%\"";
$rows = array();
$char = null;
if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
$result = @mysqli_query($connect, $query);
while ($row = @mysqli_fetch_array($result)) {
$rows[] = $row;
}
} else {
$result = @mysql_query($query,$connect);
while ($row = @mysql_fetch_array($result)) {
$rows[] = $row;
}
}
foreach($rows as $row){
if($row['Variable_name'] == 'character_set_database'){
$char_set = $row['Value'];
}
if(strpos($row['Value'], 'utf8') !== false){
$char = 'utf8';
break ;
}
}
if(!$char){ $char = $char_set;}
return $char;
}
}
class MPServerActionFile extends MPServerAction {
function __construct() {
parent::__construct();
}
function run() {
$obj = array();
$response = $this->_getResponse();
$attachmentFileName = base64_decode($_REQUEST['query']);
if(is_string($attachmentFileName)){
$path = MPSTORE_BASE_DIR.$attachmentFileName;
if(file_exists($path)){
$content = @file_get_contents($path);
$obj[] = $content;
}
}
$response->success(null, $obj);
return ;
}
}
class MPServerActionQuery extends MPServerAction {
function __construct() {
parent::__construct();
}
function run() {
$obj = array();
$response = $this->_getResponse();
$cart = $this->_getCart();
if ($cart) {
$connect = $cart->connect();
if ($connect && isset($_REQUEST['query'])) {
if(isset($_REQUEST['char_set'])){
$char_set = base64_decode($_REQUEST['char_set']);
if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
@mysqli_query($connect, "SET NAMES " . @mysqli_real_escape_string($connect, $char_set));
@mysqli_query($connect, "SET CHARACTER SET " . @mysqli_real_escape_string($connect, $char_set));
@mysqli_query($connect, "SET CHARACTER_SET_CONNECTION=" . @mysqli_real_escape_string($connect, $char_set));
} else {
@mysql_query("SET NAMES " . @mysql_real_escape_string($char_set), $connect);
@mysql_query("SET CHARACTER SET " . @mysql_real_escape_string($char_set), $connect);
@mysql_query("SET CHARACTER_SET_CONNECTION=" . @mysql_real_escape_string($char_set), $connect);
}
}
// $log_file = fopen(__DIR__ . "/log_file.txt", "a+") or die("Unable to open file!");
// fwrite($log_file, " ============================= " . "\n\r");
$query = base64_decode($_REQUEST['query']);
if(isset($_REQUEST['serialize']) && $_REQUEST['serialize']){
$query = unserialize($query);
foreach($query as $key => $string){
// fwrite($log_file, $key . ": " . $string . "\n\r");
$obj[$key] = $this->_getData($string, $connect);
}
} else {
// fwrite($log_file, $query . "\n\r");
$obj = $this->_getData($query, $connect);
}
// fclose($log_file);
$response->success(null, $obj);
return;
} else {
$response->error('Can\'t connect to database or not run query !', null);
return;
}
} else {
$response->error('CMS Cart not found !', null);
return;
}
}
function _getData($query, $connect){
$rows = array();
if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
$res = @mysqli_query($connect, $query);
while($row = @mysqli_fetch_assoc($res)){
$rows[] = $row;
}
} else {
$res = @mysql_query($query, $connect);
while($row = @mysql_fetch_array($res, MYSQL_ASSOC)){
$rows[] = $row;
}
}
return $rows;
}
}
class MPServerAdapter {
var $cart = null;
var $Host = 'localhost';
var $Port = '3306';
var $Username = 'root';
var $Password = '';
var $Dbname = '';
var $tablePrefix = '';
var $imageDir = '';
var $imageDirCategory = '';
var $imageDirCarrier = '';
var $imageDirProduct = '';
var $imageDirManufacturer = '';
var $imageDirSupplier = '';
var $imageDirEmployee = '';
var $version = '';
var $char_set = '';
var $blowfish_key = '';
var $cookie_key = '';
function __construct() {
}
function getCart() {
$cart_type = $this->detectCartType();
$this->cart = $this->_getCartType($cart_type);
return $this->cart;
}
function _getCartType($cart_type) {
$cart = null;
$cart_type = strtolower($cart_type);
$class_name = __CLASS__ . ucfirst($cart_type);
if (class_exists($class_name)) {
$cart = new $class_name();
}
return $cart;
}
function detectCartType() {
if (file_exists(MPSTORE_BASE_DIR . 'config/settings.inc.php')) {
return 'prestashop';
}
return 'Not detect cart !';
}
function setHostPort($source) {
$source = trim($source);
if ($source == '') {
$this->Host = 'localhost';
return;
}
$conf = explode(':', $source);
if (isset($conf[0]) && isset($conf[1])) {
$this->Host = $conf[0];
$this->Port = $conf[1];
} elseif ($source[0] == '/') {
$this->Host = 'localhost';
$this->Port = $source;
} else {
$this->Host = $source;
}
}
function connect()
{
$triesCount = 10;
$link = null;
while (!$link) {
if (!$triesCount--) {
break;
}
if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
$link = @mysqli_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_, _DB_NAME_);
return $link;
} else {
$link = @mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_);
if (!$link) {
sleep(2);
}
}
if ($link) {
@mysql_select_db(_DB_NAME_, $link);
}
}
return $link;
}
function getCartVersionFromDb($field, $tableName, $where)
{
$_link = null;
$version = '';
$_link = $this->connect();
if (!$_link) {
return $version;
}
$sql = 'SELECT ' . $field . ' AS version FROM ' . $this->tablePrefix . $tableName . ' WHERE ' . $where;
if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
$query = mysqli_query($_link, $sql);
if ($query !== false) {
$row = mysqli_fetch_assoc($query);
$version = $row['version'];
}
} else {
$query = mysql_query($sql, $_link);
if ($query !== false) {
$row = mysql_fetch_assoc($query);
$version = $row['version'];
}
}
return $version;
}
}
class MPServerAdapterPrestashop extends MPServerAdapter {
function __construct() {
parent::__construct();
if (file_exists(MPSTORE_BASE_DIR . '/app/config/parameters.php')) {
$config = require_once MPSTORE_BASE_DIR . '/app/config/parameters.php';
$database_host = $config['parameters']['database_host'];
if (!empty($config['parameters']['database_port'])) {
$database_host .= ':'. $config['parameters']['database_port'];
}
define('_DB_SERVER_', $database_host);
define('_DB_NAME_', $config['parameters']['database_name']);
define('_DB_USER_', $config['parameters']['database_user']);
define('_DB_PASSWD_', $config['parameters']['database_password']);
define('_DB_PREFIX_', $config['parameters']['database_prefix']);
define('_MYSQL_ENGINE_', $config['parameters']['database_engine']);
define('_PS_CACHING_SYSTEM_', $config['parameters']['ps_caching']);
if (array_key_exists('cookie_key', $config['parameters'])) {
define('_COOKIE_KEY_', $config['parameters']['cookie_key']);
}
define('_PS_VERSION_', '1.7.0.0');
} else {
@require_once MPSTORE_BASE_DIR . '/config/settings.inc.php';
}
if (defined('_DB_SERVER_')) {
$this->setHostPort(_DB_SERVER_);
} else {
$this->setHostPort(DB_HOSTNAME);
}
if (defined('_DB_USER_')) {
$this->Username = _DB_USER_;
} else {
$this->Username = DB_USERNAME;
}
$this->Password = _DB_PASSWD_;
if (defined('_DB_NAME_')) {
$this->Dbname = _DB_NAME_;
} else {
$this->Dbname = DB_DATABASE;
}
$this->tablePrefix = _DB_PREFIX_;
$this->imageDir = '/img/';
$this->imageDirCategory = $this->imageDir . 'c/';
$this->imageDirCarrier = $this->imageDir . 's/';
$this->imageDirProduct = $this->imageDir . 'p/';
$this->imageDirManufacturer = $this->imageDir . 'm/';
$this->imageDirSupplier = $this->imageDir . 'su/';
$this->imageDirEmployee = $this->imageDir . 'e/';
$this->version = _PS_VERSION_;
$this->cookie_key = _COOKIE_KEY_;
}
}
class MPServerResponse {
function __construct() {
}
function createResponse($result, $msg, $obj) {
$response = array();
$response['status'] = $result;
$response['message'] = $msg;
$response['content'] = $obj;
echo base64_encode(serialize($response));
return;
}
function error($msg = null, $obj = null) {
$this->createResponse('error', $msg, $obj);
}
function success($msg = null, $obj = null) {
$this->createResponse('success', $msg, $obj);
}
}
$connector = new MPServer();
$connector->run();