/** * Creates an instance of Message model. The passed message body may be modified, @see formatMessage(). * This method may be overriden in extending classes. * @param string $body message body * @return Message */ protected function createMessage($body) { $now = new \DateTime('now', new \DateTimezone('UTC')); $message = new Message(); $message->setAttributes(['created_on' => $now->format('Y-m-d H:i:s'), 'sender_id' => Yii::$app->has('user') ? Yii::$app->user->getId() : null, 'body' => $body]); return $this->formatMessage($message); }
/** * Creates an instance of Message model. The passed message body may be modified, @see formatMessage(). * This method may be overriden in extending classes. * @param string $body message body * @return Message */ protected function createMessage($body) { $now = new \DateTime('now', new \DateTimezone('UTC')); $message = new Message(); $message->setAttributes(['id' => $this->redis->incr($this->id . self::MESSAGE_ID), 'status' => Message::AVAILABLE, 'created_on' => $now->format('Y-m-d H:i:s'), 'sender_id' => Yii::$app->has('user') ? Yii::$app->user->getId() : null, 'body' => $body]); return $this->formatMessage($message); }
/** * Creates an array of Message objects from DbMessage objects. * @param DbMessage|array $dbMessages one or more DbMessage objects * @return array of Message objects */ public static function createMessages($dbMessages) { if (!is_array($dbMessages)) { $dbMessages = [$dbMessages]; } $result = []; foreach ($dbMessages as $dbMessage) { $attributes = $dbMessage->getAttributes(); $attributes['subscriber_id'] = $dbMessage->subscription_id === null ? null : $dbMessage->subscription->subscriber_id; unset($attributes['queue_id']); unset($attributes['subscription_id']); unset($attributes['mimetype']); $message = new components\Message(); $message->setAttributes($attributes); $result[] = $message; } return $result; }
/** * 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]); }