예제 #1
0
 /**
  * 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);
 }
예제 #2
0
 /**
  * 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);
 }
예제 #3
0
 /**
  * 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]);
 }