public function setStores(Mage_Newsletter_Model_Queue $queue) { $this->_getWriteAdapter()->delete($this->getTable('queue_store_link'), $this->_getWriteAdapter()->quoteInto('queue_id = ?', $queue->getId())); if (!is_array($queue->getStores())) { $stores = array(); } else { $stores = $queue->getStores(); } foreach ($stores as $storeId) { $data = array(); $data['store_id'] = $storeId; $data['queue_id'] = $queue->getId(); $this->_getWriteAdapter()->insert($this->getTable('queue_store_link'), $data); } $this->removeSubscribersFromQueue($queue); if (count($stores) == 0) { return $this; } $subscribers = Mage::getResourceSingleton('advancednewsletter/subscriber_collection')->addFieldToFilter('store_id', array('in' => $stores))->addFilterSubscribed()->addFilterSegments($queue->getTemplate()->getSegmentsCodes())->load(); $subscriberIds = array(); foreach ($subscribers as $subscriber) { $subscriberIds[] = $subscriber->getId(); } if (count($subscriberIds) > 0) { $this->addSubscribersToQueue($queue, $subscriberIds); } return $this; }
/** * @magentoDataFixture Mage/Newsletter/_files/queue.php * @magentoAppIsolation enabled */ public function testSendPerSubscriberProblem() { $mail = $this->getMock('Zend_Mail', array('send'), array('utf-8')); $brokenMail = $this->getMock('Zend_Mail', array('send'), array('utf-8')); $errorMsg = md5(microtime()); $brokenMail->expects($this->any())->method('send')->will($this->throwException(new Exception($errorMsg, 99))); $template = $this->getMock('Mage_Core_Model_Email_Template', array('_getMail')); $template->expects($this->any())->method('_getMail')->will($this->onConsecutiveCalls($mail, $brokenMail)); $queue = new Mage_Newsletter_Model_Queue(array('email_template' => $template)); $queue->load('Subject', 'newsletter_subject'); // fixture $problem = new Mage_Newsletter_Model_Problem(); $problem->load($queue->getId(), 'queue_id'); $this->assertEmpty($problem->getId()); $queue->sendPerSubscriber(); $problem->load($queue->getId(), 'queue_id'); $this->assertNotEmpty($problem->getId()); $this->assertEquals(99, $problem->getProblemErrorCode()); $this->assertEquals($errorMsg, $problem->getProblemErrorText()); }
/** * Add Queue Data * * @param Mage_Newsletter_Model_Queue $queue * @return Mage_Newsletter_Model_Problem */ public function addQueueData(Mage_Newsletter_Model_Queue $queue) { $this->setQueueId($queue->getId()); return $this; }
/** * Set loading mode subscribers by queue * * @param Mage_Newsletter_Model_Queue $queue * @return Mage_Newsletter_Model_Resource_Subscriber_Collection */ public function useQueue(Mage_Newsletter_Model_Queue $queue) { $this->getSelect()->join(array('link' => $this->_queueLinkTable), "link.subscriber_id = main_table.subscriber_id", array())->where("link.queue_id = ? ", $queue->getId()); $this->_queueJoinedFlag = true; return $this; }
/** * Returns queue linked stores * * @param Mage_Newsletter_Model_Queue $queue * @return array */ public function getStores(Mage_Newsletter_Model_Queue $queue) { $adapter = $this->_getReadAdapter(); $select = $adapter->select()->from($this->getTable('newsletter/queue_store_link'), 'store_id')->where('queue_id = :queue_id'); if (!($result = $adapter->fetchCol($select, array('queue_id' => $queue->getId())))) { $result = array(); } return $result; }
public function received(Mage_Newsletter_Model_Subscriber $subscriber, Mage_Newsletter_Model_Queue $queue) { $this->_write->beginTransaction(); try { $data['letter_sent_at'] = now(); $this->_write->update($this->_subscriberLinkTable, $data, array($this->_write->quoteInto('subscriber_id=?', $subscriber->getId()), $this->_write->quoteInto('queue_id=?', $queue->getId()))); $this->_write->commit(); } catch (Exception $e) { $this->_write->rollBack(); Mage::throwException(Mage::helper('newsletter')->__('Cannot mark as received subscriber')); } return $this; }
/** * Set loading mode subscribers by queue * * @param Mage_Newsletter_Model_Queue $queue */ public function useQueue(Mage_Newsletter_Model_Queue $queue) { $queueLinkTable = Mage::getSingleton('core/resource')->getTableName('advancednewsletter/queue_link'); $this->getSelect()->join(array('link' => $queueLinkTable), "link.subscriber_id = main_table.id", array())->where("link.queue_id = ? ", $queue->getId()); $this->_queueJoinedFlag = true; return $this; }
/** * Updates data when subscriber received * * @param Mage_Newsletter_Model_Subscriber $subscriber * @param Mage_Newsletter_Model_Queue $queue * @return Mage_Newsletter_Model_Resource_Subscriber */ public function received(Mage_Newsletter_Model_Subscriber $subscriber, Mage_Newsletter_Model_Queue $queue) { $this->_write->beginTransaction(); try { $data['letter_sent_at'] = Mage::getSingleton('Mage_Core_Model_Date')->gmtDate(); $this->_write->update($this->_subscriberLinkTable, $data, array('subscriber_id = ?' => $subscriber->getId(), 'queue_id = ?' => $queue->getId())); $this->_write->commit(); } catch (Exception $e) { $this->_write->rollBack(); Mage::throwException(Mage::helper('Mage_Newsletter_Helper_Data')->__('Cannot mark as received subscriber.')); } return $this; }