function __construct() { App::import('Lib', 'Newsletter.NewsletterConfig'); NewsletterConfig::load(); App::import('Vendor', 'Newsletter.newsletter_view'); parent::__construct(); App::import('Lib', 'Newsletter.ClassCollection'); }
private function save() { $newsletter_config = NewsletterConfig::load(); $newsletter_config->set_mail_sender($this->form->get_value('mail_sender')); $newsletter_config->set_newsletter_name($this->form->get_value('newsletter_name')); $newsletter_config->set_authorizations($this->form->get_value('authorizations')->build_auth_array()); NewsletterConfig::save(); }
function getTemplates() { $configs = $this->getTemplatesConfig(); $templates = array(); $ignores = NewsletterConfig::load('hiddenTemplates'); foreach ($configs as $name => $config) { if (empty($ignores) || !in_array($name, $ignores)) { $templates[$name] = $config->getLabel(); } } return $templates; }
public static function add_newsletter(array $streams, $subject, $contents, $language_type) { Environment::try_to_increase_max_execution_time(); $newsletter_streams = NewsletterStreamsCache::load()->get_streams(); foreach ($newsletter_streams as $id => $stream) { if (in_array($id, $streams)) { //Send mail NewsletterMailFactory::send_mail(self::list_subscribers_by_stream($id), $language_type, NewsletterConfig::load()->get_mail_sender(), $subject, $contents); //Add archive NewsletterDAO::add_archive($id, $subject, $contents, $language_type); } } }
private function build_form() { $form = new HTMLForm(__CLASS__); $fieldset = new FormFieldsetHTML('choices-fieldset'); $form->add_fieldset($fieldset); if (NewsletterConfig::load()->get_mail_sender()) { $fieldset->add_field(new FormFieldHTML('choices_table', $this->build_choices_table()->render())); $this->submit_button = new FormButtonDefaultSubmit($this->lang['newsletter.types.next']); $form->add_button($this->submit_button); } else { $fieldset->add_field(new FormFieldHTML('mail_sender_not_configured_msg', MessageHelper::display($this->lang['error.sender-mail-not-configured' . (AppContext::get_current_user()->is_admin() ? '-for-admin' : '')], MessageHelper::WARNING)->render())); $this->submit_button = new FormButtonDefaultSubmit(); } $this->form = $form; }
function updateBounces() { App::import('Lib', 'Newsletter.NewsletterConfig'); $bounceLimit = NewsletterConfig::load('bounceLimit'); $NewsletterEvent = ClassRegistry::init('Newsletter.NewsletterEvent'); $findOpt = array('fields' => array('count(NewsletterSended.id) as count', 'count(NewsletterSended.id)>=' . $bounceLimit . ' as to_drop', 'NewsletterEvent.*', 'NewsletterSended.email_id', 'NewsletterSended.tabledlist_id', 'NewsletterSended.email'), 'conditions' => array('NewsletterEvent.action' => 'bounce', 'NewsletterEvent.processed' => 0, 'or' => array('NewsletterSended.tabledlist_id IS NOT NULL', 'NewsletterEmail.active' => 1)), 'joins' => array(array('alias' => $NewsletterEvent->NewsletterSended->alias, 'table' => $NewsletterEvent->NewsletterSended->useTable, 'type' => 'LEFT', 'conditions' => array('NewsletterSended.id = NewsletterEvent.sended_id')), array('alias' => 'OtherEvent', 'table' => $NewsletterEvent->useTable, 'type' => 'LEFT', 'conditions' => array('OtherEvent.sended_id = NewsletterSended.id')), array('alias' => $NewsletterEvent->NewsletterSended->NewsletterEmail->alias, 'table' => $NewsletterEvent->NewsletterSended->NewsletterEmail->useTable, 'type' => 'LEFT', 'conditions' => array('NewsletterEmail.id = NewsletterSended.email_id', 'NewsletterSended.tabledlist_id IS NULL'))), 'group' => 'NewsletterSended.id', 'order' => array('count(NewsletterSended.id) DESC', 'NewsletterEvent.date DESC'), 'recursive' => -1, 'limit' => 100); $data = $NewsletterEvent->find('all', $findOpt); //debug($data[0]); $proccessed = array(); $drops = array(); foreach ($data as $r) { $proccessed[] = $r['NewsletterEvent']['id']; if ($r[0]['to_drop']) { $drops[$r['NewsletterSended']['tabledlist_id'] ? $r['NewsletterSended']['tabledlist_id'] : 0][$r['NewsletterSended']['email_id']] = true; } } //debug($drops); foreach ($drops as $list => $ids) { $Model = $activeField = $idField = null; if ($list) { App::import('Lib', 'Newsletter.Sendlist'); $list = Sendlist::getSendlist($list); $fields = $list->emailFields(); //debug($fields); if (!empty($fields['active'])) { $Model = $NewsletterEvent->NewsletterSended->NewsletterEmail; $activeField = $fields['active']; $idField = $fields['id']; } } else { $Model = $NewsletterEvent->NewsletterSended->NewsletterEmail; $activeField = 'NewsletterEmail.active'; $idField = 'NewsletterEmail.id'; } if (!empty($Model)) { $Model->updateAll(array($activeField => 0), array($idField => array_keys($ids))); } } $NewsletterEvent->updateAll(array('processed' => 1), array('NewsletterEvent.id' => $proccessed)); }
function json_dec($value) { App::import('Lib', 'Newsletter.NewsletterConfig'); if (NewsletterConfig::load('oldSerializeUTF8')) { return $this->recur_utf8_decode(json_decode($value, true)); } else { return json_decode($value, true); } }
private function retrieve_authorizations() { if (is_array($this->stream_authorizations) && !empty($this->id_stream)) { return $this->stream_authorizations; } else { return NewsletterConfig::load()->get_authorizations(); } }
private function send_test($type) { $newsletter_config = NewsletterConfig::load(); $subscribers[] = array('user_id' => AppContext::get_current_user()->get_id()); NewsletterMailFactory::send_mail($subscribers, $type, $newsletter_config->get_mail_sender(), $this->form->get_value('title'), $this->form->get_value('contents')); }
function _sendEmail($email, $sending, $newsletter = null) { //// init sender class //// App::import('Lib', 'Newsletter.ClassCollection'); $senderOpt = NewsletterConfig::load('sender'); if (!is_array($senderOpt)) { $senderOpt = array('name' => $senderOpt); } $sender = ClassCollection::getObject('NewsletterSender', $senderOpt['name']); $sender->init($this, $senderOpt); //// parse global option //// $opt = $this->_parseGlobalOpt($sending, $newsletter); if (method_exists($sender, 'editGlobalOpt')) { $opt = $sender->editGlobalOpt($opt); } $sender = ClassCollection::getObject('NewsletterSender', $senderOpt['name']); $sender->init($this, $senderOpt); $mailOpt = $this->_parseRecipientOpt($email, $opt); $mailsOptions = array(&$mailOpt); if ($opt['sending']['Newsletter']['TemplateConfig']) { $opt['sending']['Newsletter']['TemplateConfig']->beforeSend($sender, $opt, $mailsOptions); } $res = $this->_sendSingle($sender, $opt, $mailOpt); if ($opt['sending']['Newsletter']['TemplateConfig']) { $opt['sending']['Newsletter']['TemplateConfig']->afterSend($sender, $opt, $mailsOptions); } return $res; }
function url($url) { $base_url = ''; $contentUrl = NewsletterConfig::load('contentUrl'); if (empty($url)) { return '#'; } elseif (is_array($url)) { $url['base'] = false; $url['admin'] = false; if (isset($url['useContentUrl']) && !$url['useContentUrl']) { $contentUrl = null; } unset($url['useContentUrl']); $base_url = $this->html->url($url); } elseif ($url[0] == '#') { return $url; } else { $base_url = str_replace($this->html->url('/', true), '/', $url); } if ($contentUrl && $base_url[0] == '/') { $base_url = $contentUrl . substr($base_url, 1); } $final_url = $this->html->url(array('plugin' => 'newsletter', 'controller' => 'newsletter', 'action' => 'redir', 'admin' => false), true); //$encoded_link = urlencode(str_replace(array('/',':','?'),array('>',';','!'),$base_url)); //$encoded_link = urlencode(urlencode(urlencode(urlencode($base_url)))); $encoded_link = str_replace('/', '-', base64_encode($base_url)); $final_url .= '/' . $encoded_link; if (!$this->inEditMode()) { $final_url .= '/%sended_id%'; } return $final_url; }
function admin_edit($id = null) { //Configure::write('debug', 1); if (!$id && empty($this->data)) { $this->Session->setFlash(__d('newsletter', 'Invalid Newsletter', true)); $this->redirect(array('action' => 'index')); } $newsletter = $this->Newsletter->read(null, $id); //debug($newsletter); if (!empty($this->data)) { if (!empty($this->data['NewsletterBox'])) { foreach ($this->data['NewsletterBox'] as $newsletter_box) { $this->NewsletterBox->save($newsletter_box); } } if (empty($this->data['Newsletter']['associated'])) { $this->data['Newsletter']['associated'] = array(); } $this->Newsletter->set($this->data); if ($this->Newsletter->validates()) { $this->data['Newsletter']['html'] = $this->NewsletterFunct->renderNewsletter($this->Newsletter->data); //$this->requestAction('admin/newsletter/newsletter/make/'.$id); $this->Newsletter->NewsletterVariant->updateAll(array('NewsletterVariant.html' => null), array('NewsletterVariant.newsletter_id' => $id)); $this->data['Newsletter']['tested'] = 0; if ($this->Newsletter->save($this->data)) { $this->Session->setFlash(__d('newsletter', 'The Newsletter has been saved', true)); $this->Session->delete('EditedNewsletter'); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__d('newsletter', 'The Newsletter could not be saved. Please, try again.', true)); } } else { $this->Session->setFlash(__d('newsletter', 'The Newsletter could not be saved. Please, try again.', true)); } } if (empty($this->data)) { $this->data = $newsletter; } $this->NewsletterBox->recursive = -1; $boxes_by_zone = $this->NewsletterFunct->getBoxByZone($id); $langs = NewsletterConfig::load('langs'); if (!empty($langs)) { $newsletterByLang = $this->Newsletter->find('list', array('fields' => array('id', 'title', 'lang'), 'conditions' => array('id NOT' => $id, 'Newsletter.lang IS NOT NULL'), 'recursive' => -1)); $this->set('newsletterByLang', $newsletterByLang); } $config = $this->Newsletter->getConfig($this->data); if (!empty($config)) { $config->beforeRenderEdit($this->data, $this); } $template_error = false; $config = $this->Newsletter->getConfig($this->data); if (!empty($config)) { if (!$config->check()) { $template_error = 'outdated'; } $config->beforeRender($this->data, $this); } else { $template_error = 'missing'; } $this->set('template_error', $template_error); $this->set('template_config', $config); $this->set('langs', $langs); $this->set('newsletter', $this->data); $this->set('boxes_by_zone', $boxes_by_zone); $this->set('templates', $this->NewsletterFunct->getTemplates()); $this->set('box_elements', $this->NewsletterFunct->getBoxElements($this->data['Newsletter']['template'])); }
function admin_graphs($id = null) { App::import('Vendor', 'Newsletter.php-ofc-library', array('file' => 'php-ofc-library/open-flash-chart.php')); //Configure::write('debug', 0); //$this->layout = null; // generate some random data srand((double) microtime() * 1000000); $title = new title(__d("newsletter", "Views per time", true)); $chart = new open_flash_chart(); $chart->set_title($title); $newsletter = $this->Newsletter->read(null, $id); // Views $dates = array(); $values = array(); //// init sender class //// App::import('Lib', 'Newsletter.ClassCollection'); $senderOpt = NewsletterConfig::load('sender'); if (!is_array($senderOpt)) { $senderOpt = array('name' => $senderOpt); } $sender = ClassCollection::getObject('NewsletterSender', $senderOpt['name']); //// query //// $opt = array('type' => 'graph', 'query' => array('fields' => array('count(*) as nb', 'DATE(NewsletterEvent.date) as date'), 'conditions' => array('NewsletterSended.newsletter_id' => $id, 'or' => array('NewsletterEvent.action' => 'view', array('NewsletterEvent.action IS NULL', 'NewsletterEvent.url' => null))), 'group' => 'DATE(NewsletterEvent.date)', 'order' => 'DATE(NewsletterEvent.date)', 'model' => 'NewsletterEvent')); $data = $this->_get_stats(array('viewByDays' => $opt), $newsletter, $sender); //debug($data); $dates = $data['viewByDays']; $min_value = 99999999; $max_value = 0; foreach ($dates as $d => $val) { if ($val < $min_value) { $min_value = $val; } if ($val > $max_value) { $max_value = $val; } } if ($max_value == $min_value) { $max_value++; $min_value--; } $min_value = 0; //debug($dates); $min_date = key($dates); end($dates); $max_date = key($dates); for ($cur_date = $min_date; $cur_date <= $max_date; $cur_date = $cur_date + 86400) { $x = strtotime('00:00:00', $cur_date); if (isset($dates[$cur_date])) { $values[] = new scatter_value($x, $dates[$cur_date]); } else { $values[] = new scatter_value($x, 0); } } if ($max_date == $min_date) { $max_date += 86400; } //debug($values); //pr($views); $line_dot = new line(); $line_dot->set_values($values); $line_dot->set_text("Views"); $chart->add_element($line_dot); $y = new y_axis(); $y->set_range($min_value, $max_value, ($max_value - $min_value) / 10); $x = new x_axis(); // grid line and tick every 10 $x->set_range(mktime(0, 0, 0, date("m", $min_date), date("d", $min_date), date("Y", $min_date)), mktime(0, 0, 0, date("m", $max_date), date("d", $max_date), date("Y", $max_date))); // show ticks and grid lines for every day: $x->set_steps(86400); $labels = new x_axis_labels(); // tell the labels to render the number as a date: $labels->text('#date:d-m-Y#'); // generate labels for every day $labels->set_steps(86400); // only display every other label (every other day) $labels->visible_steps(ceil(($max_date - $min_date) / 86400 / 20)); $labels->rotate(90); $x->set_labels($labels); $chart->set_x_axis($x); $chart->set_y_axis($y); $chart->set_bg_colour("#FFFFFF"); //print_r($views); //$this->set("allviews",$views[0][0]['count(*)']); $line_dot = new line(); $line_dot->set_values(array(2, 1)); $line_dot->set_text("Unique views"); $line_dot->colour("#0000000"); //$chart->add_element($line_dot); // echo $chart->toPrettyString(); exit; //$this->render(false); }
public function get_root_category() { $root = new RichRootCategory(); $root->set_authorizations(NewsletterConfig::load()->get_authorizations()); return $root; }