Files
grzanieplus.pl/plugins/stNewsletterPlugin/lib/stNewsletterProgressBar.class.php
2025-03-12 17:06:23 +01:00

156 lines
4.7 KiB
PHP

<?php
class stNewsletterProgressBar
{
public function init()
{
}
public function close()
{
$i18n = sfContext::getInstance()->getI18N();
$id = self::getParam('id');
sfLoader::loadHelpers(array('Helper', 'stPartial'));
$newsletter = NewsletterMessagePeer::retrieveByPK($id);
$newsletter->setSentAt(time());
$newsletter->save();
$message = st_get_partial('stNewsletterBackend/progress_success', array('steps' => self::getAttribute('steps'), 'id' => $id));
$this->setMessage($message);
sfContext::getInstance()->getUser()->getAttributeHolder()->removeNamespace('soteshop/stNewsletterProgressBar');
}
public function getTitle(){
$i18n = sfContext::getInstance() -> getI18N();
$title = $i18n -> __('Wysyłanie wiadomości', null, 'stNewsletterBackend');
return $title;
}
public function send($offset) {
$config = stConfig::getInstance(sfContext::getInstance(), 'stNewsletterBackend');
$newsletter = NewsletterMessagePeer::retrieveByPK(self::getParam('id'));
$i18n = sfContext::getInstance() -> getI18N();
$c = new Criteria();
$c->add(MailAccountPeer::IS_NEWSLETTER, 1);
$newsletterMailAccount = MailAccountPeer::doSelectOne($c);
$c = new Criteria();
$c -> setOffset($offset);
$c -> setLimit(100);
$newsletterUsers = $newsletter -> getUsers($c);
$usersArray = array();
$usersCultureArray = array();
foreach ($newsletterUsers as $key => $user) {
$userCulture = $user -> getLanguage();
if (!$user -> getLanguage()) {
$userCulture = $config->get('newsletter_default_culture', null, false);
}
$usersArray[$userCulture][] = $user;
}
ksort($usersArray);
foreach ($usersArray as $key => $users) {
$mailer = stMailer::getInstance();
$mailer->initialize();
$newsletter -> setCulture($key);
$config->setCulture($key);
$html = stNewsletter::getTemplatesMessage($newsletter, false);
/*$plain = stMailTemplate::render('stNewsletterBackend/messagePlain', array('newsletter' => $newsletter));*/
$plain = "plain";
if($newsletterMailAccount){
$mailer->setSubject($newsletter->getSubject())->setAccount($newsletterMailAccount->getEmail())->setHtmlMessage($html)->setPlainMessage($plain);
}else{
$mailer->setSubject($newsletter->getSubject())->setHtmlMessage($html)->setPlainMessage($plain);
}
$counter = 0;
foreach ($users as $user) {
$counter++;
try {
$mailer -> addBcc($user -> getEmail());
} catch(Swift_RfcComplianceException $e) {
}
if ($counter == 20) {
$mailer -> send();
$mailer -> setBcc(array());
$mailer->setSubject($newsletter->getSubject())->setHtmlMessage($html)->setPlainMessage($plain);
$counter = 0;
usleep(200000);
}
}
if ($counter > 0) {
$mailer -> send();
}
}
self::setMessage($i18n -> __('Wysyłanie wiadomości w toku %current%/%from%', array('%current%' => $offset, '%from%' => self::getAttribute('steps')), 'stNewsletterBackend'));
sleep(1);
$send = $offset + count($newsletterUsers);
$newsletter->setNumberSent($send);
$newsletter->save();
return $offset + count($newsletterUsers);
}
public static function setParam($name, $value)
{
sfContext::getInstance()->getUser()->setAttribute($name, $value, 'soteshop/stNewsletterProgressBar');
}
public static function getParam($name, $default = null)
{
return sfContext::getInstance()->getUser()->getAttribute($name, $default, 'soteshop/stNewsletterProgressBar');
}
public static function getAttribute($name)
{
$attributes = sfContext::getInstance()->getUser()->getAttribute('stNewsletter', array(), 'soteshop/stProgressBarPlugin');
return isset($attributes[$name]) ? $attributes[$name] : null;
}
public static function setMessage($message)
{
sfContext::getInstance()->getUser()->setAttribute('stProgressBar-stNewsletter', $message, 'symfony/flash');
}
}