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;
 }