Files
2026-02-08 21:16:11 +01:00

173 lines
4.5 KiB
PHP

<?php
/**
* @package Convert Forms
* @version 3.2.12 Free
*
* @author Tassos Marinos <info@tassos.gr>
* @link http://www.tassos.gr
* @copyright Copyright © 2020 Tassos Marinos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
class ConvertFormsAcyMailingHelper
{
/**
* @deprecated Use subscribe()
*/
public static function subscribe_v6($email, $params, $lists, $doubleOptin = true)
{
self::subscribe($email, $params, $lists, $doubleOptin);
}
/**
* Subscribe method for AcyMailing v6
*
* @param array $lists
*
* @return void
*/
public static function subscribe($email, $params, $lists, $doubleOptin = true)
{
if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_acym/helpers/helper.php'))
{
throw new Exception(JText::sprintf('PLG_CONVERTFORMS_ACYMAILING_HELPER_CLASS_ERROR', 6));
}
// Create user object
$user = new stdClass();
$user->email = $email;
$user->confirmed = $doubleOptin ? 0 : 1;
$user_fields = array_change_key_case($params);
$user->name = isset($user_fields['name']) ? $user_fields['name'] : '';
// Load User Class
$acym = acym_get('class.user');
// Check if exists
$existing_user = $acym->getOneByEmail($email);
if ($existing_user)
{
$user->id = $existing_user->id;
} else
{
// Save user to database only if it's a new user.
if (!$user->id = $acym->save($user))
{
throw new Exception(JText::_('PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER'));
}
}
// Save Custom Fields
$fieldClass = acym_get('class.field');
// getAllfields was removed in 7.7.4 and we must use getAll moving forward.
$acy_fields_method = method_exists($fieldClass, 'getAllfields') ? 'getAllfields' : 'getAll';
$acy_fields = $fieldClass->$acy_fields_method();
unset($user_fields['name']); // Name is already used during user creation.
$fields_to_store = [];
foreach ($user_fields as $paramKey => $paramValue)
{
// Check if paramKey it's a custom field
$field_found = array_filter($acy_fields, function($field) use($paramKey) {
return (strtolower($field->name) == $paramKey || $field->id == $paramKey);
});
if ($field_found)
{
// Get the 1st occurence
$field = array_shift($field_found);
// AcyMailing 6 needs field's ID to recognize a field.
$fields_to_store[$field->id] = $paramValue;
// $paramValue output: array(1) { [0]=> string(2) "gr" }
// AcyMailing will get the key as the value instead of "gr"
// We combine to remove the keys in order to keep the values
if (is_array($paramValue))
{
$fields_to_store[$field->id] = array_combine($fields_to_store[$field->id], $fields_to_store[$field->id]);
}
}
}
if ($fields_to_store)
{
$fieldClass->store($user->id, $fields_to_store);
}
// Subscribe user to AcyMailing lists
return $acym->subscribe($user->id, $lists);
}
/**
* Subscribe method for AcyMailing v5
*
* @param array $lists
*
* @return void
*/
public static function subscribe_v5($email, $params, $lists, $doubleOptin = true)
{
if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_acymailing/helpers/helper.php'))
{
throw new Exception(JText::sprintf('PLG_CONVERTFORMS_ACYMAILING_HELPER_CLASS_ERROR', 5));
}
// Create user object
$user = new stdClass();
$user->email = $email;
$user->confirmed = $doubleOptin ? false : true;
// Get Custrom Fields
$db = JFactory::getDbo();
$customFields = $db->setQuery(
$db->getQuery(true)
->select($db->quoteName('namekey'))
->from($db->quoteName('#__acymailing_fields'))
)->loadColumn();
if (is_array($customFields) && count($customFields))
{
foreach ($params as $key => $param)
{
if (in_array($key, $customFields))
{
$user->$key = $param;
}
}
}
$acymailing = acymailing_get('class.subscriber');
$userid = $acymailing->subid($email);
// AcyMailing sends account confirmation e-mails even if the user exists, so we need
// to run save() method only if the user actually is new.
if (is_null($userid))
{
// Save user to database
if (!$userid = $acymailing->save($user))
{
throw new Exception(JText::_('PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER'));
}
}
// Subscribe user to AcyMailing lists
$lead = [];
foreach($lists as $listId)
{
$lead[$listId] = ['status' => 1];
}
return $acymailing->saveSubscription($userid, $lead);
}
}