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

140 lines
3.9 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 NewsletterProMailChimpWebhooks
{
private $module;
public function __construct()
{
$this->module = NewsletterPro::getInstance();
}
public static function newInstance()
{
return new self();
}
public function process()
{
$type = Tools::getValue('type');
$data = Tools::getValue('data');
switch ($type) {
case 'subscribe':
return $this->subscribe($data);
case 'unsubscribe':
return $this->unsubscribe($data);
case 'cleaned':
return $this->cleaned($data);
case 'upemail':
return $this->upemail();
case 'profile':
return $this->profile();
default:
throw new Exception(sprintf($this->module->l('Invalid MailChimp webhook request type.'), $type));
}
return false;
}
private function subscribe($data)
{
$email = $data['email'];
$errors = $this->module->subscribe($email, Configuration::get('PS_LANG_DEFAULT'), Configuration::get('PS_SHOP_DEFAULT'));
if (!empty($errors)) {
$errors_msg = implode("\n", $errors);
NewsletterProLog::writeStrip($errors_msg, NewsletterProLog::ERROR_FILE);
return $errors_msg;
} else {
return sprintf($this->module->l('The email address "%s" has been subscribed at the newsletter.'), $email);
}
}
private function unsubscribe($data)
{
$email = $data['email'];
$action = $data['action'];
switch ($action) {
case 'delete':
if ($this->module->ini_config['mailchimp_allow_unsubscribe_delete']) {
return $this->deleteEmail($email);
} else {
return $this->unsubscribeEmail($email);
}
// no break
case 'unsub':
default:
return $this->unsubscribeEmail($email);
}
return false;
}
private function cleaned($data)
{
$email = $data['email'];
if ($this->module->ini_config['mailchimp_allow_cleaned_emails']) {
return $this->deleteEmail($email);
}
return $this->module->l('The mailchimp webhook "cleaned emails" feature is not activated.');
}
private function upemail()
{
return $this->featureUnavailableMessage();
}
private function profile()
{
return $this->featureUnavailableMessage();
}
private function deleteEmail($email)
{
if (NewsletterProBounce::execute($email, [], -1)) {
return sprintf($this->module->l('The email address "%s" has been removed from the newsletter.'), $email);
} else {
return sprintf($this->module->l('The email address "%s" has not been removed from the newsletter. Maybe the email does not exists into database.'), $email);
}
}
private function unsubscribeEmail($email)
{
if (NewsletterProBounce::execute($email, [], 0)) {
return sprintf($this->module->l('The email address "%s" has been unsubscribed from the newsletter.'), $email);
} else {
return sprintf($this->module->l('The email address "%s" has not been unsubscribed from the newsletter. Maybe the email does not exists into database.'), $email);
}
}
private function featureUnavailableMessage()
{
return $this->module->l('This webhook feature is unavailable.');
}
}