Example #1
0
 /**
  * Send message to all pending recipients
  * 
  * @param Mzax_Emarketing_Model_Campaign $campaign
  * @param Varien_Object $options
  * @throws Exception
  * @return number
  */
 public function sendRecipients(Mzax_Emarketing_Model_Campaign $campaign, Varien_Object $options)
 {
     $recipients = $campaign->getPendingRecipients();
     $recipients->setPageSize($options->getMaximum());
     $start = time();
     $prepared = 0;
     $timeout = (int) $options->getTimeout();
     /* @var $recipient Mzax_Emarketing_Model_Recipient */
     foreach ($recipients as $recipient) {
         try {
             $this->sendRecipient($recipient);
             $prepared++;
         } catch (Exception $e) {
             $recipient->logException($e);
             if ($options->getBreakOnError()) {
                 throw $e;
             }
             Mage::logException($e);
         }
         $recipient->isPrepared(true);
         $recipient->save();
         if ($timeout && time() - $start > $timeout) {
             break;
         }
     }
     return $prepared;
 }
Example #2
0
 /**
  * Send recipients
  * 
  * @param array $options
  * @throws Exception
  * @return number
  */
 public function sendRecipients(array $options)
 {
     $lock = Mage::helper('mzax_emarketing')->lock('send_recipients');
     if (!$lock) {
         return false;
     }
     /* @var $campaigns Mzax_Emarketing_Model_Resource_Campaign_Collection */
     $campaigns = Mage::getResourceModel('mzax_emarketing/campaign_collection');
     $campaigns->addRunningFilter();
     //$campaigns->setOrder('last_check', 'DESC');
     $campaigns->setOrder('RAND()', 'ASC');
     $options = new Varien_Object($options);
     $options->getDataSetDefault('timeout', 100);
     $options->getDataSetDefault('maximum', 500);
     $options->getDataSetDefault('break_on_error', Mage::getIsDeveloperMode());
     if ($options->getVerbose()) {
         echo "\n\n{$campaigns->getSelect()}\n\n";
     }
     $start = time();
     $timeout = (int) $options->getTimeout();
     $maximum = (int) $options->getMaximum();
     $count = 0;
     /* @var $campaign Mzax_Emarketing_Model_Campaign */
     foreach ($campaigns as $campaign) {
         try {
             if ($options->getVerbose()) {
                 echo sprintf("Send Recipients for '%s' (#%s)...", $campaign->getName(), $campaign->getId());
             }
             $count += $sent = $campaign->sendRecipients(array('timeout' => $timeout - (time() - $start), 'maximum' => $maximum - $count, 'break_on_error' => $options->getBreakOnError()));
             if ($options->getVerbose()) {
                 echo sprintf(" \tsent %s\n", $sent);
             }
         } catch (Exception $e) {
             if ($options->getBreakOnError()) {
                 $lock->unlock();
                 throw $e;
             }
             Mage::logException($e);
             if ($options->getVerbose()) {
                 echo "\n{$e->getMessage()}\n{$e->getTraceAsString()}\n\n";
             }
         }
         // make sure we don't exceed the timeout
         if ($timeout && time() - $start > $timeout) {
             break;
         }
         // don't send more then max at once
         if ($maximum && $maximum <= $count) {
             break;
         }
         $lock->touch();
     }
     $lock->unlock();
     return $count;
 }