Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Queue.php
Go to the documentation of this file.
1 <?php
7 
10 
20 {
27 
35  public function __construct(
36  \Magento\Framework\Model\ResourceModel\Db\Context $context,
37  \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection,
38  $connectionName = null
39  ) {
40  parent::__construct($context, $connectionName);
41  $this->_subscriberCollection = $subscriberCollection;
42  }
43 
49  protected function _construct()
50  {
51  $this->_init('newsletter_queue', 'queue_id');
52  }
53 
62  public function addSubscribersToQueue(ModelQueue $queue, array $subscriberIds)
63  {
64  if (count($subscriberIds) == 0) {
65  throw new \Magento\Framework\Exception\LocalizedException(__('There are no subscribers selected.'));
66  }
67 
68  if (!$queue->getId() && $queue->getQueueStatus() != \Magento\Newsletter\Model\Queue::STATUS_NEVER) {
69  throw new \Magento\Framework\Exception\LocalizedException(__('You selected an invalid queue.'));
70  }
71 
72  $connection = $this->getConnection();
73 
74  $select = $connection->select();
75  $select->from(
76  $this->getTable('newsletter_queue_link'),
77  'subscriber_id'
78  )->where(
79  'queue_id = ?',
80  $queue->getId()
81  )->where(
82  'subscriber_id in (?)',
83  $subscriberIds
84  );
85 
86  $usedIds = array_flip($connection->fetchCol($select));
87  $subscriberIds = array_flip($subscriberIds);
88  $newIds = array_diff_key($subscriberIds, $usedIds);
89 
90  $connection->beginTransaction();
91  try {
92  foreach (array_keys($newIds) as $subscriberId) {
93  $data = [];
94  $data['queue_id'] = $queue->getId();
95  $data['subscriber_id'] = $subscriberId;
96  $connection->insert($this->getTable('newsletter_queue_link'), $data);
97  }
98  $connection->commit();
99  } catch (\Exception $e) {
100  $connection->rollBack();
101  }
102  }
103 
112  {
113  $connection = $this->getConnection();
114  try {
115  $connection->beginTransaction();
116  $connection->delete(
117  $this->getTable('newsletter_queue_link'),
118  ['queue_id = ?' => $queue->getId(), 'letter_sent_at IS NULL']
119  );
120 
121  $connection->commit();
122  } catch (\Exception $e) {
123  $connection->rollBack();
124  throw $e;
125  }
126  }
127 
134  public function setStores(ModelQueue $queue)
135  {
136  $connection = $this->getConnection();
137  $connection->delete($this->getTable('newsletter_queue_store_link'), ['queue_id = ?' => $queue->getId()]);
138 
139  $stores = $queue->getStores();
140  if (!is_array($stores)) {
141  $stores = [];
142  }
143 
144  foreach ($stores as $storeId) {
145  $data = [];
146  $data['store_id'] = $storeId;
147  $data['queue_id'] = $queue->getId();
148  $connection->insert($this->getTable('newsletter_queue_store_link'), $data);
149  }
150  $this->removeSubscribersFromQueue($queue);
151 
152  if (count($stores) == 0) {
153  return $this;
154  }
155 
156  $subscribers = $this->_subscriberCollection->addFieldToFilter(
157  'store_id',
158  ['in' => $stores]
159  )->useOnlySubscribed()->load();
160 
161  $subscriberIds = [];
162 
163  foreach ($subscribers as $subscriber) {
164  $subscriberIds[] = $subscriber->getId();
165  }
166 
167  if (count($subscriberIds) > 0) {
168  $this->addSubscribersToQueue($queue, $subscriberIds);
169  }
170 
171  return $this;
172  }
173 
180  public function getStores(ModelQueue $queue)
181  {
182  $connection = $this->getConnection();
183  $select = $connection->select()->from(
184  $this->getTable('newsletter_queue_store_link'),
185  'store_id'
186  )->where(
187  'queue_id = :queue_id'
188  );
189 
190  if (!($result = $connection->fetchCol($select, ['queue_id' => $queue->getId()]))) {
191  $result = [];
192  }
193 
194  return $result;
195  }
196 
203  protected function _afterSave(AbstractModel $queue)
204  {
205  if ($queue->getSaveStoresFlag()) {
206  $this->setStores($queue);
207  }
208  return $this;
209  }
210 }
$queue
Definition: queue.php:21
__construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection, $connectionName=null)
Definition: Queue.php:35
addSubscribersToQueue(ModelQueue $queue, array $subscriberIds)
Definition: Queue.php:62
__()
Definition: __.php:13
removeSubscribersFromQueue(ModelQueue $queue)
Definition: Queue.php:111
$subscriber
Definition: subscribers.php:20
$subscriberCollection
$connection
Definition: bulk.php:13