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