207 lines
6.5 KiB
PHP
207 lines
6.5 KiB
PHP
<?php
|
|
/**
|
|
* Since 2013 Ovidiu Cimpean.
|
|
*
|
|
* Ovidiu Cimpean - Newsletter Pro © All rights reserved.
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* Do not edit, modify or copy this file.
|
|
* If you wish to customize it, contact us at addons4prestashop@gmail.com.
|
|
*
|
|
* @author Ovidiu Cimpean <addons4prestashop@gmail.com>
|
|
* @copyright Since 2013 Ovidiu Cimpean
|
|
* @license Do not edit, modify or copy this file
|
|
*
|
|
* @version Release: 4
|
|
*/
|
|
|
|
class NewsletterProMailChimpUserImport
|
|
{
|
|
public $email;
|
|
|
|
public $firstname;
|
|
|
|
public $lastname;
|
|
|
|
public $subscribed;
|
|
|
|
public $id_lang;
|
|
|
|
public $id_shop;
|
|
|
|
public $date_add;
|
|
|
|
public $ip;
|
|
|
|
public $birthday;
|
|
|
|
public $user_type;
|
|
|
|
public $user_object;
|
|
|
|
private $languages_iso = [];
|
|
|
|
private $shops_name = [];
|
|
|
|
public function __construct($email)
|
|
{
|
|
$this->email = $email;
|
|
$this->user_object = $this->getUserObject();
|
|
|
|
$languages = Language::getLanguages(false);
|
|
|
|
foreach ($languages as $lang) {
|
|
$this->languages_iso[$lang['iso_code']] = (int) $lang['id_lang'];
|
|
}
|
|
|
|
$shops = Shop::getShops(false);
|
|
|
|
foreach ($shops as $shop) {
|
|
$this->shops_name[Tools::strtolower($shop['name'])] = (int) $shop['id_shop'];
|
|
}
|
|
}
|
|
|
|
public static function newInstance($email)
|
|
{
|
|
return new self($email);
|
|
}
|
|
|
|
public function userExists()
|
|
{
|
|
return Validate::isLoadedObject($this->user_object);
|
|
}
|
|
|
|
public function set($chimp_data)
|
|
{
|
|
$this->email = $chimp_data['email'];
|
|
$this->firstname = $chimp_data['merges']['FNAME'];
|
|
$this->lastname = $chimp_data['merges']['LNAME'];
|
|
$this->subscribed = 'yes' == $chimp_data['merges']['SUBSCRIBED'] ? true : false;
|
|
|
|
$iso_code = Tools::strtolower($chimp_data['language']);
|
|
|
|
if (array_key_exists($iso_code, $this->languages_iso)) {
|
|
$this->id_lang = $this->languages_iso[$iso_code];
|
|
} else {
|
|
$this->id_lang = (int) pqnp_config('PS_LANG_DEFAULT');
|
|
}
|
|
|
|
$shop_name = Tools::strtolower($chimp_data['merges']['SHOP']);
|
|
|
|
if (array_key_exists($shop_name, $this->shops_name)) {
|
|
$this->id_shop = $this->shops_name[$shop_name];
|
|
} else {
|
|
$this->id_shop = (int) pqnp_config('PS_SHOP_DEFAULT');
|
|
}
|
|
|
|
$this->date_add = date('Y-m-d', strtotime($chimp_data['merges']['DATE_ADD']));
|
|
|
|
$this->ip = $chimp_data['ip_opt'];
|
|
|
|
$this->birthday = $chimp_data['merges']['birthday'];
|
|
$this->user_type = $chimp_data['merges']['USER_TYPE'];
|
|
|
|
// setup the user object
|
|
$this->user_object->email = $this->email;
|
|
|
|
if ($this->user_object instanceof Customer) {
|
|
$this->user_object->firstname = $this->firstname;
|
|
$this->user_object->lastname = $this->lastname;
|
|
$this->user_object->newsletter = $this->subscribed;
|
|
$this->user_object->id_lang = $this->id_lang;
|
|
$this->user_object->id_shop = $this->id_shop;
|
|
|
|
if (!Validate::isLoadedObject($this->user_object)) {
|
|
$this->user_object->date_add = $this->date_add;
|
|
}
|
|
|
|
$this->user_object->ip_registration_newsletter = $this->ip;
|
|
} elseif ($this->user_object instanceof NewsletterProSubscribers || $this->user_object instanceof NewsletterProEmail) {
|
|
$this->user_object->firstname = $this->firstname;
|
|
$this->user_object->lastname = $this->lastname;
|
|
$this->user_object->active = $this->subscribed;
|
|
$this->user_object->id_lang = $this->id_lang;
|
|
$this->user_object->id_shop = $this->id_shop;
|
|
|
|
if (!Validate::isLoadedObject($this->user_object)) {
|
|
$this->user_object->date_add = $this->date_add;
|
|
}
|
|
|
|
$this->user_object->ip_registration_newsletter = $this->ip;
|
|
} elseif ($this->user_object instanceof NewsletterProBlockNewsletter) {
|
|
$this->user_object->active = $this->subscribed;
|
|
$this->user_object->id_shop = $this->id_shop;
|
|
|
|
if (!Validate::isLoadedObject($this->user_object)) {
|
|
$this->user_object->newsletter_date_add = $this->date_add;
|
|
}
|
|
$this->user_object->ip_registration_newsletter = $this->ip;
|
|
} else {
|
|
throw new Exception(NewsletterPro::getInstance()->l('Invalid user_object type.'));
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function save()
|
|
{
|
|
if (!isset($this->user_object)) {
|
|
throw new Exception(NewsletterPro::getInstance()->l('The user_object is not set.'));
|
|
}
|
|
|
|
return $this->user_object->save();
|
|
}
|
|
|
|
private function getUserObject()
|
|
{
|
|
$tables = [];
|
|
$tables_id = [];
|
|
|
|
$tables['customer'] = 'id_customer';
|
|
|
|
if (NewsletterProTools::blockNewsletterExists()) {
|
|
$tables['newsletter'] = 'id';
|
|
}
|
|
|
|
$tables['newsletter_pro_email'] = 'id_newsletter_pro_email';
|
|
$tables['newsletter_pro_subscribers'] = 'id_newsletter_pro_subscribers';
|
|
|
|
foreach ($tables as $table_name => $table_id) {
|
|
$id = (int) Db::getInstance()->getValue('
|
|
SELECT `'.pSQL($table_id).'`
|
|
FROM `'._DB_PREFIX_.pSQL($table_name).'`
|
|
WHERE `email` = "'.pSQL($this->email).'"
|
|
');
|
|
|
|
if ($id) {
|
|
$tables_id[$table_name] = $id;
|
|
}
|
|
}
|
|
|
|
$user_object = null;
|
|
|
|
if (isset($tables_id['customer'])) {
|
|
$user_object = new Customer((int) $tables_id['customer']);
|
|
} elseif (isset($tables_id['newsletter_pro_subscribers']) && pqnp_config('SUBSCRIPTION_ACTIVE')) {
|
|
$user_object = NewsletterProSubscribers::newInstance((int) $tables_id['newsletter_pro_subscribers']);
|
|
} elseif (isset($tables_id['newsletter']) && NewsletterProTools::blockNewsletterExists() && !pqnp_config('SUBSCRIPTION_ACTIVE')) {
|
|
$user_object = NewsletterProBlockNewsletter::newInstance((int) $tables_id['newsletter']);
|
|
} elseif (isset($tables_id['newsletter_pro_email'])) {
|
|
$user_object = NewsletterProEmail::newInstance((int) $tables_id['newsletter_pro_email']);
|
|
} else {
|
|
// if the email does not exists in database
|
|
|
|
if (pqnp_config('SUBSCRIPTION_ACTIVE')) {
|
|
$user_object = NewsletterProSubscribers::newInstance();
|
|
} elseif (NewsletterProTools::blockNewsletterExists()) {
|
|
$user_object = NewsletterProBlockNewsletter::newInstance();
|
|
} else {
|
|
$user_object = NewsletterProEmail::newInstance();
|
|
}
|
|
}
|
|
|
|
return $user_object;
|
|
}
|
|
}
|