File: /home/confeduphaar/backip-old-files/administrator/components/com_acym/classes/override.php
<?php
namespace AcyMailing\Classes;
use AcyMailing\Helpers\PaginationHelper;
use AcyMailing\Libraries\acymClass;
use AcyMailing\Classes\MailClass;
use Joomla\CMS\Mail\Mail;
class OverrideClass extends acymClass
{
var $table = 'mail_override';
var $pkey = 'id';
public function getMatchingElements($settings = [])
{
$query = 'SELECT override.*, mail.name, mail.subject FROM #__acym_mail_override AS override JOIN #__acym_mail AS mail ON override.mail_id = mail.id';
$queryCount = 'SELECT COUNT(override.mail_id) as total, SUM(override.active) as totalActive FROM #__acym_mail_override AS override INNER JOIN #__acym_mail AS mail ON override.mail_id = mail.id';
$filters = [];
if (!empty($settings['search'])) {
$filters[] = 'mail.name LIKE '.acym_escapeDB('%'.$settings['search'].'%');
}
if (!empty($settings['source'])) {
$filters[] = 'override.source LIKE '.acym_escapeDB('%'.$settings['source'].'%');
}
$filters[] = 'mail.parent_id IS NULL';
if (!empty($filters)) {
$query .= ' WHERE ('.implode(') AND (', $filters).')';
$queryCount .= ' WHERE ('.implode(') AND (', $filters).')';
}
if (!empty($settings['status'])) {
$query .= empty($filters) ? ' WHERE ' : ' AND ';
$query .= 'active = '.($settings['status'] == 'active' ? '1' : '0');
}
if (!empty($settings['ordering']) && !empty($settings['ordering_sort_order'])) {
$query .= ' ORDER BY override.'.acym_secureDBColumn($settings['ordering']).' '.acym_secureDBColumn(strtoupper($settings['ordering_sort_order']));
$query .= ', override.mail_id ASC';
}
if (empty($settings['offset']) || $settings['offset'] < 0) {
$settings['offset'] = 0;
}
if (empty($settings['elementsPerPage']) || $settings['elementsPerPage'] < 1) {
$pagination = new PaginationHelper();
$settings['elementsPerPage'] = $pagination->getListLimit();
}
$mailClass = new MailClass();
$results['elements'] = $mailClass->decode(acym_loadObjectList($query, '', $settings['offset'], $settings['elementsPerPage']));
$results['total'] = acym_loadObject($queryCount);
$results['status'] = [];
return $results;
}
public function cleanEmailsOverride()
{
$overrideId = acym_loadResultArray('SELECT id FROM #__acym_mail_override');
$this->delete($overrideId);
}
public function areOverrideMailsInstalled()
{
return (bool)acym_loadResult('SELECT COUNT(id) FROM #__acym_mail_override');
}
public function getAllSources()
{
return acym_loadResultArray('SELECT DISTINCT `source` FROM #__acym_mail_override');
}
public function getActiveOverrides($key = '')
{
$query = 'SELECT override.*, mail.name FROM #__acym_mail_override AS override JOIN #__acym_mail AS mail ON mail.id = override.mail_id WHERE `active` = 1';
return acym_loadObjectList($query, $key);
}
public function getMailByBaseContent($subject, $body)
{
$activeOverrides = $this->getActiveOverrides('name');
foreach ($activeOverrides as $oneOverride) {
$parameters = [];
$matches = true;
foreach (['subject', 'body'] as $part) {
$identifier = 'base_'.$part;
if (empty($oneOverride->$identifier)) continue;
$decodedValue = json_decode($oneOverride->$identifier, true);
$oneOverride->$identifier = '';
foreach ($decodedValue as $partialTrad) {
$oneOverride->$identifier .= acym_translation($partialTrad, false, true, '');
}
$oneOverride->$identifier = preg_replace(
[
'/%([0-9].?\$)?s/',
'/\\\{[A-Z_]+\\\}/i',
'/###[A-Z_-]+###/i',
],
'(.*)',
preg_quote($oneOverride->$identifier, '/')
);
$oneOverride->$identifier = str_replace('&', '&', $oneOverride->$identifier);
$matches = preg_match('/'.trim($oneOverride->$identifier).'/', $$part, $params) === 1 && $matches;
if (empty($parameters)) {
$parameters = $params;
} else {
for ($i = 1 ; $i < count($params) ; $i++) {
$parameters[] = trim($params[$i]);
}
}
}
if (!$matches) continue;
$mailClass = new MailClass();
$mail = $mailClass->getOneById($oneOverride->mail_id);
$mail->parameters = $parameters;
if (empty($oneOverride->base_body)) $mail->body = $body;
return $mail;
}
return false;
}
public function delete($elements)
{
if (empty($elements)) return 0;
if (!is_array($elements)) $elements = [$elements];
acym_arrayToInteger($elements);
$mailIds = acym_loadResultArray('SELECT `mail_id` FROM #__acym_mail_override WHERE `id` IN ('.implode(',', $elements).')');
$result = parent::delete($elements);
$mailClass = new MailClass();
$mailClass->delete($mailIds);
return $result;
}
public function getParamsByMailId($mailId)
{
$mailClass = new MailClass();
$mail = $mailClass->getOneById($mailId);
if (empty($mail)) return [];
return acym_getOverrideParamsByName($mail->name);
}
}