Your IP : 216.73.217.80


Current Path : /home/jlgagfroyt/www/administrator/components/com_acymailing/helpers/
Upload File :
Current File : /home/jlgagfroyt/www/administrator/components/com_acymailing/helpers/autonews.php

<?php
/**
 * @package	AcyMailing for Joomla!
 * @version	5.11.3
 * @author	acyba.com
 * @copyright	(C) 2009-2022 ACYBA S.A.R.L. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */

defined('_JEXEC') or die('Restricted access');
?><?php

class acyautonewsHelper
{

    var $messages = [];
    var $mailClass = null;
    var $dispatcher = null;
    var $time;

    function generate($toGenerate = [])
    {
        $this->time = time();
        $query = 'SELECT `mailid` FROM '.acymailing_table('mail').' WHERE `type` = \'autonews\' AND `published`= 1 AND `senddate` < '.$this->time;

        if (!empty($toGenerate)) {
            acymailing_arrayToInteger($toGenerate);
            $query .= ' AND mailid IN ('.implode(',', $toGenerate).')';
        }

        $autonews = acymailing_loadResultArray($query);

        if (empty($autonews)) return false;

        $this->mailClass = acymailing_get('class.mail');

        acymailing_importPlugin('acymailing');

        foreach ($autonews as $mailid) {
            $oneAutonews = $this->mailClass->get($mailid);

            if (empty($oneAutonews->params['lastgenerateddate'])) {
                if (is_numeric($oneAutonews->frequency)) {
                    $oneAutonews->params['lastgenerateddate'] = $this->time - $oneAutonews->frequency;
                } else {
                    $hourMin = empty($oneAutonews->senddate) ? '' : date(' H:i', $oneAutonews->senddate);

                    if (strpos($oneAutonews->frequency, 'on_') !== false) {
                        $values = explode('_', ltrim($oneAutonews->frequency, 'on_'));
                        $currentDayKey = array_search(date('l'), $values);
                        if ($currentDayKey === false) $currentDayKey = 0;

                        if (isset($values[$currentDayKey - 1])) {
                            $oneAutonews->params['lastgenerateddate'] = strtotime('previous '.$values[$currentDayKey - 1].$hourMin);
                        } else {
                            $oneAutonews->params['lastgenerateddate'] = strtotime('previous '.end($values).$hourMin);
                        }
                    } else {
                        $detailDay = explode('_', $oneAutonews->frequency);
                        $dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.date('F Y').$hourMin);
                        if (time() < $dateTmp) {
                            $newMonthYear = date('F Y', mktime(date("H", $dateTmp), date("i", $dateTmp), date("s", $dateTmp), date("n", $dateTmp) - 1, date("j", $dateTmp), date("Y", $dateTmp)));
                            $dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.$newMonthYear.$hourMin);
                        }
                        $oneAutonews->params['lastgenerateddate'] = $dateTmp;
                    }
                }
            }

            if (!$this->_generatingStatus($oneAutonews)) continue;
            $this->_generateAutoNews($oneAutonews);
        }

        return true;
    }


    private function _generateAutoNews($newNewsletter)
    {

        $newNewsletter->senddate = $this->time;
        $newNewsletter->type = 'news';
        if (!empty($newNewsletter->params['generate'])) {
            $newNewsletter->published = 2;
        } else $newNewsletter->published = 0;

        $notifyUsers = $newNewsletter->params['generateto'];

        $mailidModel = $newNewsletter->mailid;
        unset($newNewsletter->mailid);
        unset($newNewsletter->username);
        unset($newNewsletter->name);
        unset($newNewsletter->email);
        $newNewsletter->created = time();

        $newNewsletter->key = acymailing_generateKey(8);

        $issueNb = $newNewsletter->params['issuenb'];
        $newNewsletter->body = str_replace('{issuenb}', $issueNb, $newNewsletter->body);
        $newNewsletter->altbody = str_replace('{issuenb}', $issueNb, $newNewsletter->altbody);
        $newNewsletter->subject = str_replace('{issuenb}', $issueNb, $newNewsletter->subject);

        unset($newNewsletter->template);
        $newNewsletter->mailid = $this->mailClass->save($newNewsletter);

        if (!empty($newNewsletter->tempid)) {
            if (!isset($this->templateClass)) $this->templateClass = acymailing_get('class.template');
            $newNewsletter->template = $this->templateClass->get($newNewsletter->tempid);
        }

        $mailer = acymailing_get('helper.mailer');
        $mailer->triggerTagsWithRightLanguage($newNewsletter, false);

        unset($newNewsletter->template);
        unset($newNewsletter->attach);
        $this->mailClass->save($newNewsletter);

        $query = 'INSERT IGNORE INTO '.acymailing_table('listmail').' (mailid,listid) SELECT '.$newNewsletter->mailid.', b.`listid` FROM '.acymailing_table('listmail').' as b';
        $query .= ' WHERE b.mailid = '.$mailidModel;

        $res = acymailing_query($query);
        if ($res === false) {
            $this->messages[] = 'Could not assign the Newsletter to your lists : '.acymailing_getDBError();
        }

        acymailing_query('INSERT IGNORE INTO '.acymailing_table('tagmail').' (`tagid`,`mailid`) SELECT `tagid`,'.$newNewsletter->mailid.' FROM '.acymailing_table('tagmail').' WHERE `mailid` = '.intval($mailidModel));

        $this->messages[] = acymailing_translation_sprintf('NEWSLETTER_GENERATED', $newNewsletter->mailid, '<b><i>'.$newNewsletter->subject.'</i></b>');

        if (!empty($notifyUsers)) {
            $mailer->report = acymailing_isAdmin();
            $mailer->autoAddUser = true;
            $mailer->checkConfirmField = false;
            $mailer->checkEnabled = false;
            $mailer->checkPublished = false;
            $mailer->checkAccept = false;
            $mailer->loadedToSend = true;
            $mailer->addParam('issuenb', $issueNb);
            $intro = acymailing_translation('AUTONEWS_GENERATE_INTRO').'<br /><br />';
            if (!empty($newNewsletter->params['generate'])) {
                $intro .= acymailing_translation('AUTONEWS_GENERATE_INTRO_SENT');
            } else {
                $config = acymailing_config();
                $itemId = $config->get('itemid', 0);
                $item = empty($itemId) ? '' : '&Itemid='.$itemId;

                $intro .= '<a href="'.acymailing_frontendLink('archive&task=sendautonews&mailid='.$newNewsletter->mailid.'&key='.$newNewsletter->key.'-'.$newNewsletter->senddate, false, false, true).$item.'" >'.acymailing_translation('AUTONEWS_GENERATE_INTRO_REVIEW').'</a>';
            }

            $mailer->introtext = '<div align="center" style="max-width:600px;margin:auto;margin-top:10px;margin-bottom:10px;padding:10px;border:1px solid #cccccc;background-color:#f6f6f6;color:#333333;">'.$intro.'</div>';

            $allUsers = explode(' ', trim(str_replace([';', ','], ' ', $notifyUsers)));
            foreach ($allUsers as $oneUser) {
                if (empty($oneUser)) continue;
                $mailer->sendOne($newNewsletter->mailid, $oneUser);
            }
        }
    }


    private function _generatingStatus(&$oneAutonews)
    {
        $results = acymailing_trigger('acymailing_generateautonews', [&$oneAutonews]);
        $return = true;
        foreach ($results as $oneResult) {
            if (isset($oneResult->status) && !$oneResult->status) {
                $return = false;
                $this->messages[] = acymailing_translation_sprintf('NEWSLETTER_NOT_GENERATED', $oneAutonews->mailid, $oneResult->message);
                break;
            }
        }

        $newMail = new stdClass();
        $newMail->mailid = $oneAutonews->mailid;

        if (is_numeric($oneAutonews->frequency)) {
            if ($oneAutonews->frequency >= 2592000 AND $oneAutonews->frequency % 2592000 == 0) {
                $newMail->senddate = mktime(date("H", $oneAutonews->senddate), date("i", $oneAutonews->senddate), date("s", $oneAutonews->senddate), date("n", $oneAutonews->senddate) + ($oneAutonews->frequency / 2592000), date("j", $oneAutonews->senddate), date("Y", $oneAutonews->senddate));
            } else {
                $newMail->senddate = $oneAutonews->senddate + $oneAutonews->frequency;
            }
        } else {
            $hourMin = !empty($oneAutonews->senddate) ? date(' H:i', $oneAutonews->senddate) : '';

            if (strpos($oneAutonews->frequency, 'on_') !== false) {
                $values = explode('_', ltrim($oneAutonews->frequency, 'on_'));
                $currentDayKey = array_search(date('l'), $values);
                if ($currentDayKey === false) {
                    $return = false;
                    $this->messages[] = acymailing_translation_sprintf('NEWSLETTER_NOT_GENERATED', $oneAutonews->mailid, 'Only sending on '.implode(', ', $values));
                    $newMail->senddate = empty($oneAutonews->senddate) ? time() + 86400 : $oneAutonews->senddate + 86400;
                } else {
                    if (isset($values[$currentDayKey + 1])) {
                        $newMail->senddate = strtotime('next '.$values[$currentDayKey + 1].$hourMin);
                    } else {
                        $newMail->senddate = strtotime('next '.$values[0].$hourMin);
                    }
                }
            } else {
                $detailDay = explode('_', $oneAutonews->frequency);
                $dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.date('F Y').$hourMin);
                if (time() > $dateTmp) {
                    $newMonthYear = date('F Y', mktime(date("H", $dateTmp), date("i", $dateTmp), date("s", $dateTmp), date("n", $dateTmp) + 1, date("j", $dateTmp), date("Y", $dateTmp)));
                    $dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.$newMonthYear.$hourMin);
                }
                $newMail->senddate = $dateTmp;
            }
        }

        $newMail->params = $oneAutonews->params;
        if (is_numeric($oneAutonews->frequency) && ($newMail->senddate < $this->time || $newMail->senddate > $this->time + 2 * $oneAutonews->frequency)) $newMail->senddate = $this->time + $oneAutonews->frequency;

        if ($return) {
            $newMail->params['lastgenerateddate'] = $this->time;
            $newMail->params['issuenb'] = empty($newMail->params['issuenb']) ? 1 : $newMail->params['issuenb'] + 1;
        }

        $this->mailClass->save($newMail);

        return $return;
    }
}