sent_at) { return sprintf('%s envoyé le : %s', $this->name, $this->getSentAt('d/m/Y H:i:s')); } return sprintf('%s modifier le : %s', $this->name, $this->getUpdatedAt('d/m/Y H:i:s')); } //************** Système d'envoi ************************** public function getRecipients() { $email_list = $this->splitEmailList($this->getEmailListing()); $users_mail = $this->getUserByGroups(); $recipients_array = array_unique(array_merge($email_list, $users_mail)); $this->setRecipientsNumber(count($recipients_array)); $emails = array_diff($recipients_array, $this->getUnsubscribed()); $this->setBlacklistNumber($this->getRecipientsNumber() - count($emails)); $recipients = filter_var_array($emails, FILTER_VALIDATE_EMAIL); foreach ($recipients as $key => $value) { if (empty($value) || $value == false) { unset($recipients[$key]); } } return $recipients; } public function getUnsubscribed() { $blck_group = GroupQuery::create()->filterByCode('BLACKLIST')->findOne(); if (!$blck_group) { throw new \Exception('You must define a group with "BLACKLIST" code in order to allow user\'s unsubscribe'); } return UserQuery::create()->select(UserPeer::EMAIL)->filterByGroup($blck_group)->find()->toArray(); } private function getUserByGroups() { if (!$this->getGroups() || $this->countGroups() == 0) { return array(); } $user_query = UserQuery::create()->select(UserPeer::EMAIL); $group_iterator = new \ArrayIterator($this->getGroups()); while ($group = $group_iterator->current()) { $user_query->filterByGroup($group); $group_iterator->next(); if ($group_iterator->current()) { $user_query->_or(); } } return $user_query->find()->toArray(); } private function splitEmailList($listing) { preg_match_all('`([\w.-]+@[\w.-]+\.[a-z]{2,6})`i', $listing, $matchesarray, PREG_SET_ORDER); $lists = array(); if (!empty($matchesarray)) { foreach ($matchesarray as $matches) { $lists[] = $matches[1]; } } return $lists; } // *********** Variable dynamique dans CSV ************* public function uploadEmailFileVar() { if (null === $this->email_file_var && !$this->delete_email_file_var && null !== $this->rollback_email_file_var) { $this->email_file_var = $this->rollback_email_file_var; // keep the file return true; } if (null === $this->email_file_var || !is_object($this->email_file_var)) { return true; // no file to upload } //Delete old file on overload $this->removeEmailFileVar(); $filename = $this->getNewFilename($this->email_file_var->guessExtension()); $this->email_file_var_file = $this->email_file_var; $this->has_uploaded_email_file_var = true; $this->email_file_var = $filename; if ($this->has_uploaded_email_file_var) { $filename = $this->email_file_var_file->getRealPath(); $parser = new CsvParser($filename, ';', '"', '\\', true); $parser->parse(); $legend = $parser->getLegend(); $text = "Vous avez chargez un fichier CSV avec des variables. Ces variables sont accessibles dans les blocks de contenus.
Voici la liste exhaustive des variables disponibles : "; $unsubscribed = $this->getUnsubscribed(); foreach ($parser->getDatas() as $k => $line) { $email = trim($line[0]); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $no_complient[$k] = $email; } if (in_array($email, $unsubscribed)) { $blacklisted[$k] = $email; } } if (isset($no_complient)) { $text .= "
Votre fichier contient des adresses emails invalide, voici la liste: "; } if (isset($blacklisted)) { $text .= "
Votre fichier contient des adresses emails présent dans les désinscrit, voici la liste: "; } $this->setEmailVarDesc($text); } } public function tokenize($term) { setlocale(LC_CTYPE, 'fr_FR.utf8'); $var = $term; if (function_exists('iconv')) { $var = iconv('utf-8', 'us-ascii//TRANSLIT', $var); } // lowercase if (function_exists('mb_strtolower')) { $var = mb_strtolower($var); } else { $var = strtolower($var); } // remove accents resulting from OSX's iconv $var = str_replace(array('\'', '`', '^'), '', $var); // replace non letter or digits with separator $var = preg_replace('/\W+/', '_', $var); // trim $var = trim($var, '_'); return '%%' . $var . '%%'; } //************ Templating et modèle ******************** protected $blocks = array(); protected $configuration = null; protected $templating = null; protected $object; public function __construct($template = null) { if ($template) { $this->setTemplate($template); } parent::__construct(); $this->configuration = new ModelConfiguration(); } public function getConfiguration() { return $this->configuration; } protected function hasBlock($d) { return isset($this->blocks[is_object($d) ? $d->getName() : $d]); } public function setBlock(Block $block) { $block->setNewsletterId($this->getId()); $this->blocks[$block->getName()] = $block; return $this; } public function getTemplating() { return $this->templating; } public function setTemplating($templating) { $this->templating = $templating; return $this; } public function save(\PropelPDO $con = null) { parent::save($con); if (!empty($this->blocks)) { foreach ($this->blocks as $block) { $block->save($con); } } else { foreach ($this->getConfiguration()->getBlocks() as $block_configuration) { $this->getBlock($block_configuration->getName())->save($con); } } return $this; } public function getBlock($name) { if (!$this->getId()) { return $this->getNewBlock($name); } $qBlock = BlockQuery::create()->filterByName($name)->filterByNewsletterId($this->getId())->findOne(); $block = $qBlock ? $qBlock : $this->getNewBlock($name, $this->getId()); if (!$this->hasBlock($block->getName())) { $this->setBlock($block); } return $block; } public function getBlockTitle() { return $this->getBlock('title'); } public function getBlockSubtitle() { return $this->getBlock('subtitle'); } public function getBlockContent() { return $this->getBlock('content'); } public function getBlockSubject() { return $this->getBlock('subject'); } public function setBlockTitle(Block $block) { return $this->setBlock($block); } public function setBlockSubtitle(Block $block) { return $this->setBlock($block); } public function setBlockContent(Block $block) { return $this->setBlock($block); } public function setBlockSubject(Block $block) { return $this->setBlock($block); } protected function getNewBlock($name, $newsletterId = null) { $type = $this->getConfiguration()->getBlock($name)->getType(); $form = new $type(); $form_model = $form->getOption('data_class') ? $form->getOption('data_class') : 'Block'; $block = new $form_model(); $block->setname($name); if (null !== $newsletterId) { $block->setNewsletterId($newsletterId); } return $block; } //********** Affichage BO *********** public function getRecipientsGroups() { return $this->getGroups(); } public function getStats() { return $this; } public function getSubject() { $subject = $this->getBlock('subject'); return ($subject) ? $subject : $this->getName(); } }