Esempio n. 1
0
 /**
  * Removes deleted messages from the storage.
  * @return array of removed message ids
  */
 public function removeDeleted()
 {
     $trx = models\DbMessage::getDb()->transaction !== null ? null : models\DbMessage::getDb()->beginTransaction();
     $primaryKey = models\DbMessage::primaryKey();
     $message_ids = models\DbMessage::find()->withQueue($this->id)->deleted()->select($primaryKey)->asArray()->all();
     models\DbMessage::deleteAll(['in', $primaryKey, $message_ids]);
     if ($trx !== null) {
         $trx->commit();
     }
     return $message_ids;
 }
 /**
  * Fetches details of a single message, allows to release or delete it or sends a new message.
  * @param string $queue_name
  * @param string $subscriber_id
  * @param string $message_id
  * @return string|\yii\web\Response
  * @throws ForbiddenHttpException
  * @throws NotFoundHttpException
  */
 public function actionMessage($queue_name, $subscriber_id = null, $message_id = null)
 {
     if (($subscriber_id = trim($subscriber_id)) === '') {
         $subscriber_id = null;
     }
     /** @var QueueInterface $queue */
     list($queue, $authItems) = $this->loadQueue($queue_name, ['nfy.message.read', 'nfy.message.create']);
     $this->verifySubscriber($queue, $subscriber_id);
     if ($queue instanceof components\DbQueue) {
         $query = models\DbMessage::find()->withQueue($queue->id);
         if ($subscriber_id !== null) {
             $query->withSubscriber($subscriber_id);
         }
         $dbMessage = $query->andWhere(['in', models\DbMessage::tableName() . '.' . models\DbMessage::primaryKey()[0], $message_id])->one();
         if ($dbMessage === null) {
             throw new NotFoundHttpException(Yii::t("app", 'Message with given ID was not found.'));
         }
         $messages = models\DbMessage::createMessages($dbMessage);
         $message = reset($messages);
     } else {
         $dbMessage = null;
         //! @todo should we even bother to locate a single message by id?
         $message = new components\Message();
         $message->setAttributes(['id' => $message_id, 'subscriber_id' => $subscriber_id, 'status' => components\Message::AVAILABLE]);
     }
     if (isset($_POST['delete'])) {
         $queue->delete($message->id, $message->subscriber_id);
         return $this->redirect(['messages', 'queue_name' => $queue_name, 'subscriber_id' => $message->subscriber_id]);
     }
     return $this->render('message', ['queue' => $queue, 'queue_name' => $queue_name, 'dbMessage' => $dbMessage, 'message' => $message, 'authItems' => $authItems]);
 }
 public function getSubscriptionMessages()
 {
     return $this->hasMany(DbMessage::className(), [self::tableName() . '.message_id' => 'id']);
 }
 public function getMessages()
 {
     return $this->hasMany(DbMessage::className(), ['subscription_id' => 'id']);
 }