/** * Add subscribers to queue * * @param Mage_Newsletter_Model_Queue $queue * @param array $subscriberIds */ public function addSubscribersToQueue(Mage_Newsletter_Model_Queue $queue, array $subscriberIds) { if (count($subscriberIds) == 0) { Mage::throwException(Mage::helper('newsletter')->__('No subscribers selected.')); } if (!$queue->getId() && $queue->getQueueStatus() != Mage_Newsletter_Model_Queue::STATUS_NEVER) { Mage::throwException(Mage::helper('newsletter')->__('Invalid queue selected.')); } $adapter = $this->_getWriteAdapter(); $select = $adapter->select(); $select->from($this->getTable('newsletter/queue_link'), 'subscriber_id')->where('queue_id = ?', $queue->getId())->where('subscriber_id in (?)', $subscriberIds); $usedIds = $adapter->fetchCol($select); $adapter->beginTransaction(); try { foreach ($subscriberIds as $subscriberId) { if (in_array($subscriberId, $usedIds)) { continue; } $data = array(); $data['queue_id'] = $queue->getId(); $data['subscriber_id'] = $subscriberId; $adapter->insert($this->getTable('newsletter/queue_link'), $data); } $adapter->commit(); } catch (Exception $e) { $adapter->rollBack(); } }
public function addSubscribersToQueue(Mage_Newsletter_Model_Queue $queue, array $subscriberIds) { $queueData = $queue->getTemplate()->getData(); if ($queue->getUserGroup()) { $subscriberIds = array(); $groupSubscribers = Mage::getModel("ngroups/ngroups")->getGroupSubscribers($queue->getUserGroup()); $subscriberIds = Mage::helper("ngroups")->getSubscribersAsArray($groupSubscribers); $newsletterGroup = Mage::getModel("ngroups/ngroups")->load($queue->getUserGroup()); if ($customerGroups = $newsletterGroup->getCustomerGroups()) { $customerGroups = explode(",", $customerGroups); foreach ($customerGroups as $customerGroup) { $customersCollection = Mage::getResourceModel('newsletter/subscriber_collection'); $customersCollection->showCustomerInfo(true)->addSubscriberTypeField()->showStoreInfo(); $customersCollection->getSelect()->joinLeft(array('c' => Mage::getConfig()->getTablePrefix() . 'customer_entity'), 'c.entity_id = main_table.customer_id', array("gid" => "group_id")); if ($customerGroup > 0) { $customersCollection->addFieldToFilter("c.group_id", $customerGroup); } else { $customersCollection->addFieldToFilter("main_table.group_id", 0); } foreach ($customersCollection as $subscribers) { if (!in_array($subscribers->getSubscriberId(), $subscriberIds)) { $subscriberIds[] = $subscribers->getSubscriberId(); } } } } } if (!$queue->getId() && $queue->getQueueStatus() != Mage_Newsletter_Model_Queue::STATUS_NEVER) { Mage::throwException(Mage::helper('newsletter')->__('Invalid queue selected')); } $select = $this->_getWriteAdapter()->select(); $select->from($this->getTable('queue_link'), 'subscriber_id')->where('queue_id = ?', $queue->getId())->where('subscriber_id in (?)', $subscriberIds); $usedIds = $this->_getWriteAdapter()->fetchCol($select); $this->_getWriteAdapter()->beginTransaction(); foreach ($subscriberIds as $subscriberId) { if (trim($subscriberId) == '0' || trim($subscriberId) == '') { continue; } if (in_array($subscriberId, $usedIds)) { continue; } $data = array(); $data['queue_id'] = $queue->getId(); $data['subscriber_id'] = $subscriberId; $data['group_id'] = $queue->getUserGroup(); try { $this->_getWriteAdapter()->insert($this->getTable('queue_link'), $data); } catch (Exception $e) { } } $this->_getWriteAdapter()->commit(); }