Files
b2b.redline.com.pl/modules/newsletterpro/classes/NewsletterProMailChimpFields.php
2025-06-24 14:14:35 +02:00

300 lines
7.8 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 NewsletterProMailChimpFields
{
public $errors = [];
public $data = [];
public $context;
public $list_vars;
public static $fields = [];
public function __construct($list_vars)
{
$this->context = Context::getContext();
$this->list_vars = $list_vars;
$this->defineData();
$this->defineFields();
}
public function defineFields()
{
$this->addField('FNAME', [
'name' => 'First Name',
'options' => [
'field_type' => 'text',
'req' => false,
],
]);
$this->addField('LNAME', [
'name' => 'Last Name',
'options' => [
'field_type' => 'text',
'req' => false,
],
]);
$this->addField('SHOP', [
'name' => 'Shop',
'options' => [
'field_type' => 'dropdown',
'default_value' => $this->getData('default_shop_name'),
'choices' => ($this->getData('shops') ? $this->getData('shops_name') : $this->getData('default_shop_name')),
'req' => false,
],
]);
$this->addField('SUBSCRIBED', [
'name' => 'Subscribed',
'options' => [
'field_type' => 'dropdown',
'default_value' => 'yes',
'choices' => ['yes', 'no'],
'req' => false,
],
]);
$this->addField('USER_TYPE', [
'name' => 'User Type',
'options' => [
'field_type' => 'dropdown',
'default_value' => 'Added',
'choices' => ['Customer', 'Visitor', 'Added'],
'req' => false,
],
]);
$this->addField('LANGUAGE', [
'name' => 'Language',
'options' => [
'field_type' => 'text',
'default_value' => $this->getData('default_language_name'),
'req' => false,
],
]);
$this->addField('LAST_ORDER', [
'name' => 'Last Order',
'options' => [
'field_type' => 'date',
'dateformat' => 'MM/DD/YYYY',
'req' => false,
],
]);
$this->addField('OPTIN_IP', [
'name' => 'Ip',
'options' => [
'field_type' => 'text',
'req' => false,
],
]);
$this->addField('BIRTHDAY', [
'name' => 'Birthday',
'options' => [
'field_type' => 'birthday',
'dateformat' => 'MM/DD',
'req' => false,
],
]);
$this->addField('ADDRESS', [
'name' => 'Address',
'options' => [
'field_type' => 'address',
'req' => false,
],
]);
$this->addField('COMPANY', [
'name' => 'Company',
'options' => [
'field_type' => 'text',
'req' => false,
],
]);
$this->addField('DATE_ADD', [
'name' => 'Registration Date',
'options' => [
'field_type' => 'date',
'dateformat' => 'MM/DD/YYYY',
'req' => false,
],
]);
$this->addField('PHONE', [
'name' => 'Phone',
'options' => [
'field_type' => 'phone',
'req' => false,
],
]);
$this->addField('PHONE_MOB', [
'name' => 'Phone Mobile',
'options' => [
'field_type' => 'phone',
'req' => false,
],
]);
}
public function addField($name, $field)
{
self::$fields[$name] = $field;
}
public function defineData()
{
$id_lang_default = (int) Configuration::get('PS_LANG_DEFAULT');
$this->addData('id_lang_default', $id_lang_default);
$this->addData('locale_country', Tools::strtoupper(Configuration::get('PS_LOCALE_COUNTRY')));
$this->addData('id_shop_default', (int) Configuration::get('PS_SHOP_DEFAULT'));
$groups = Group::getGroups($id_lang_default);
$this->addData('groups', $groups);
$this->addData('groups_name', self::grep($groups, 'name'));
$shops = Shop::getShops(false);
$this->addData('shops', $shops);
$this->addData('shops_name', self::grep($shops, 'name'));
$this->addData('default_shop_name', Configuration::get('PS_SHOP_NAME'));
$default_language = Language::getLanguage($id_lang_default);
$this->addData('default_language', $default_language);
$this->addData('default_language_name', $default_language['name']);
$languages = Language::getLanguages(false);
$this->addData('languages', $languages);
$this->addData('languages_name', self::grep($languages, 'name'));
}
public function getData($name)
{
if (isset($this->data[$name])) {
return $this->data[$name];
}
return false;
}
public function addData($name, $data)
{
$this->data[$name] = $data;
}
public function getSyncVars()
{
$save_tags = [];
$fields = $this->getFields();
$vars_tags = self::grep($this->list_vars, 'tag');
foreach ($fields as $tag => $value) {
if (in_array($tag, $vars_tags)) {
$save_tags['update'][$tag] = $value;
} else {
$save_tags['add'][$tag] = $value;
}
}
return $save_tags;
}
public function getRestVars()
{
$fields = $this->getFields();
$vars_tags = self::grep($this->list_vars, 'tag');
$vars_tags_rest = array_diff($vars_tags, array_keys($fields));
$searched_key = array_search('EMAIL', $vars_tags_rest);
if (false !== $searched_key) {
unset($vars_tags_rest[$searched_key]);
}
return $vars_tags_rest;
}
public static function grep($array, $name)
{
$return_array = [];
foreach ($array as $value) {
if (isset($value[$name])) {
$return_array[] = $value[$name];
}
}
return $return_array;
}
public function getFields()
{
return self::$fields;
}
public function addError($error, $code = null)
{
$add_error = [
'code' => $code,
'error' => Tools::displayError($error),
];
$this->errors[] = $add_error;
}
public function hasErrors()
{
return !empty($this->errors);
}
public function getErrors($only_errors = false, $collapse_same_code = false)
{
$errors = $this->errors;
if ($collapse_same_code) {
$errors_collapse = [];
$errors_coldes = [];
foreach ($errors as $error) {
if (!in_array($error['code'], $errors_coldes)) {
$errors_collapse[] = $error;
$errors_coldes[] = $error['code'];
}
}
$errors = $errors_collapse;
}
$return_errors = [];
if ($only_errors) {
foreach ($errors as $error) {
$return_errors[] = $error['error'];
}
} else {
$return_errors = $this->errors;
}
return $return_errors;
}
}