public function __construct($aRequestPath)
 {
     parent::__construct($aRequestPath);
     $sBase = Manager::usePath();
     $iId = Manager::usePath();
     // Base path "newsletter" > display newsletter
     if ($sBase === 'newsletter') {
         $iId = is_numeric($sBase) ? $sBase : $iId;
         $this->oNewsletter = NewsletterQuery::create()->findPk($iId);
         if ($this->oNewsletter === null) {
             throw new Exception('No such newsletter exists');
         }
     } else {
         if ($sBase === 'mailing') {
             $this->oMailing = NewsletterMailingQuery::create()->findPk($iId);
             if ($this->oMailing === null) {
                 throw new Exception('No such mailing exists');
             }
             $this->oNewsletter = $this->oMailing->getNewsletter();
         } elseif (is_numeric($sBase)) {
             $this->oNewsletter = NewsletterQuery::create()->findPk($sBase);
         }
     }
     // Throw exception if no newsletter is found
     if ($this->oNewsletter === null) {
         throw new Exception('Error in DisplayNewsletterFileModule::__construct(): No such newsletter exists');
     }
     // Optional handling of authentication
     FilterModule::getFilters()->handleNewsletterDisplayRequested($this->oNewsletter);
 }
Пример #2
0
 /**
  * Removes this object from datastore and sets delete attribute.
  *
  * @param PropelPDO $con
  * @return void
  * @throws PropelException
  * @throws Exception
  * @see        BaseObject::setDeleted()
  * @see        BaseObject::isDeleted()
  */
 public function delete(PropelPDO $con = null)
 {
     if ($this->isDeleted()) {
         throw new PropelException("This object has already been deleted.");
     }
     if ($con === null) {
         $con = Propel::getConnection(NewsletterPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
     }
     $con->beginTransaction();
     try {
         $deleteQuery = NewsletterQuery::create()->filterByPrimaryKey($this->getPrimaryKey());
         $ret = $this->preDelete($con);
         // denyable behavior
         if (!(NewsletterPeer::isIgnoringRights() || $this->mayOperate("delete"))) {
             throw new PropelException(new NotPermittedException("delete.by_role", array("role_key" => "newsletters")));
         }
         if ($ret) {
             $deleteQuery->delete($con);
             $this->postDelete($con);
             $con->commit();
             $this->setDeleted(true);
         } else {
             $con->commit();
         }
     } catch (Exception $e) {
         $con->rollBack();
         throw $e;
     }
 }
 /**
  * Get the associated Newsletter object
  *
  * @param PropelPDO $con Optional Connection object.
  * @param $doQuery Executes a query to get the object if required
  * @return Newsletter The associated Newsletter object.
  * @throws PropelException
  */
 public function getNewsletter(PropelPDO $con = null, $doQuery = true)
 {
     if ($this->aNewsletter === null && $this->newsletter_id !== null && $doQuery) {
         $this->aNewsletter = NewsletterQuery::create()->findPk($this->newsletter_id, $con);
         /* The following can be used additionally to
               guarantee the related object contains a reference
               to this object.  This level of coupling may, however, be
               undesirable since it could result in an only partially populated collection
               in the referenced object.
               $this->aNewsletter->addNewsletterMailings($this);
            */
     }
     return $this->aNewsletter;
 }
 /**
  * Returns a new NewsletterQuery object.
  *
  * @param     string $modelAlias The alias of a model in the query
  * @param   NewsletterQuery|Criteria $criteria Optional Criteria to build the query from
  *
  * @return NewsletterQuery
  */
 public static function create($modelAlias = null, $criteria = null)
 {
     if ($criteria instanceof NewsletterQuery) {
         return $criteria;
     }
     $query = new NewsletterQuery(null, null, $modelAlias);
     if ($criteria instanceof Criteria) {
         $query->mergeWith($criteria);
     }
     return $query;
 }
 public function saveData($aNewsletterData)
 {
     $oNewsletter = NewsletterQuery::create()->findPk($this->iNewsletterId);
     if ($oNewsletter === null) {
         $oNewsletter = new Newsletter();
         $oNewsletter->setCreatedBy(Session::getSession()->getUserId());
         $oNewsletter->setCreatedAt(date('c'));
     }
     // If language is not set (not multilingual), write session language, since it is default language
     $sLanguageId = isset($aNewsletterData['language_id']) ? $aNewsletterData['language_id'] : Session::language();
     $oNewsletter->setLanguageId($sLanguageId);
     $oNewsletter->setTemplateName($aNewsletterData['template_name']);
     $oNewsletter->setSubject($aNewsletterData['subject']);
     $oRichtextUtil = new RichtextUtil();
     $oRichtextUtil->setTrackReferences($oNewsletter);
     $oNewsletter->setNewsletterBody($oRichtextUtil->parseInputFromEditor($aNewsletterData['newsletter_body']));
     $this->validate($aNewsletterData, $oNewsletter);
     if (!Flash::noErrors()) {
         throw new ValidationException();
     }
     if (isset($aNewsletterData['is_approved'])) {
         $oNewsletter->setIsApproved($aNewsletterData['is_approved']);
     }
     if (isset($aNewsletterData['template_name'])) {
         $oNewsletter->setTemplateName($aNewsletterData['template_name']);
     }
     return $oNewsletter->save();
 }
 private function setNewsletter($aSubscriberGroupId)
 {
     if (self::$NEWSLETTER !== null) {
         return;
     }
     if (isset($_REQUEST[self::IDENTIFIER_DETAIL])) {
         self::$NEWSLETTER = NewsletterQuery::create()->findPk($_REQUEST[self::IDENTIFIER_DETAIL]);
     } else {
         self::$NEWSLETTER = NewsletterQuery::create()->joinNewsletterMailing()->useQuery('NewsletterMailing')->orderByDateSent(Criteria::DESC)->filterBySubscriberGroupId($aSubscriberGroupId)->endUse()->findOne();
     }
 }
 public function getCriteria()
 {
     return NewsletterQuery::create()->distinct()->joinNewsletterMailing(null, Criteria::LEFT_JOIN);
 }
 /** sendNewsletter()
  *
  * @param int BatchNumber
  *
  * @return boolean full or partial success
  */
 public function sendNewsletter($iBatchNumber = 0)
 {
     if ($this->aRecipients === null || $this->sSenderEmail === null || $this->aMailGroups === null) {
         throw new Exception("Error in sendNewsletter: prepare not called");
     }
     // Send newsletter if newsletter is chosen and there are recipients
     $oNewsletter = NewsletterQuery::create()->findPk($this->iNewsletterId);
     if ($oNewsletter === null) {
         throw new LocalizedException("newsletter.mailing.newsletter_missing");
     }
     if ($iBatchNumber === 0) {
         $this->aUnsuccessfulAttempts = array();
     }
     if ($this->aRecipients instanceof PropelObjectCollection) {
         $this->aRecipients = $this->aRecipients->getData();
     }
     $aRecipients = array_slice($this->aRecipients, $iBatchNumber * $this->iBatchSize, $this->iBatchSize);
     $bRequiresUnsubsribeLink = true;
     $oNewsletterMailer = new NewsletterMailer($oNewsletter, $aRecipients, $bRequiresUnsubsribeLink, $this->sSenderEmail, $this->sSenderName);
     if (!$oNewsletterMailer->send()) {
         $this->aUnsuccessfulAttempts = array_merge($this->aUnsuccessfulAttempts, $oNewsletterMailer->getInvalidEmails());
     }
     if (count($aRecipients) === $this->iBatchSize) {
         return $iBatchNumber + 1;
     } else {
         // Return batch count/boolean and register Mailings per group
         $bOneGroupOnly = count($this->aMailGroups) === 1;
         foreach ($this->aMailGroups as $mMailGroupId) {
             $oNewsletterMailing = new NewsletterMailing();
             $oNewsletterMailing->setDateSent(date('c'));
             if (is_numeric($mMailGroupId)) {
                 $oNewsletterMailing->setSubscriberGroupId($mMailGroupId);
             } else {
                 $oNewsletterMailing->setExternalMailGroupId($mMailGroupId);
             }
             // @todo check change jm > write recipient count if newsletter is sent to singe group only
             if ($bOneGroupOnly) {
                 $oNewsletterMailing->setRecipientCount(count($this->aRecipients));
             }
             $oNewsletterMailing->setNewsletterId($oNewsletter->getId());
             $oNewsletterMailing->save();
         }
         $this->aRecipients = null;
         $this->sSenderEmail = null;
         $this->aMailGroups = null;
         return count($this->aUnsuccessfulAttempts) === 0;
     }
 }