/** * Fetches details of a single message, allows to release or delete it or sends a new message. * @param string $id queue name * @param string $subscriber_id * @param string $message_id */ public function actionMessage($queue_name, $subscriber_id = null, $message_id = null) { if (($subscriber_id = trim($subscriber_id)) === '') { $subscriber_id = null; } list($queue, $authItems) = $this->loadQueue($queue_name, array('nfy.message.read', 'nfy.message.create')); $this->verifySubscriber($queue, $subscriber_id); if ($queue instanceof NfyDbQueue) { NfyDbMessage::model()->withQueue($queue->id); if ($subscriber_id !== null) { NfyDbMessage::model()->withSubscriber($subscriber_id); } $dbMessage = NfyDbMessage::model()->findByPk($message_id); if ($dbMessage === null) { throw new CHttpException(404, Yii::t("NfyModule.app", 'Message with given ID was not found.')); } $messages = NfyDbMessage::createMessages($dbMessage); $message = reset($messages); } else { //! @todo should we even bother to locate a single message by id? $message = new NfyMessage(); $message->setAttributes(array('id' => $message_id, 'subscriber_id' => $subscriber_id, 'status' => NfyMessage::AVAILABLE)); } if (isset($_POST['delete'])) { $queue->delete($message->id, $message->subscriber_id); $this->redirect(array('messages', 'queue_name' => $queue_name, 'subscriber_id' => $message->subscriber_id)); } $this->render('message', array('queue' => $queue, 'queue_name' => $queue_name, 'dbMessage' => $dbMessage, 'message' => $message, 'authItems' => $authItems)); }
/** * Perform message extraction. */ protected function receiveInternal($subscriber_id = null, $limit = -1, $mode = self::GET_RESERVE) { $pk = NfyDbMessage::model()->tableSchema->primaryKey; $trx = NfyDbMessage::model()->getDbConnection()->getCurrentTransaction() !== null ? null : NfyDbMessage::model()->getDbConnection()->beginTransaction(); $messages = NfyDbMessage::model()->withQueue($this->id)->withSubscriber($subscriber_id)->available($this->timeout)->findAll(array('index' => $pk, 'limit' => $limit)); if (!empty($messages)) { // $now = new DateTime('now', new DateTimezone('UTC')); $now = new DateTime('now'); if ($mode === self::GET_DELETE) { $attributes = array('status' => NfyMessage::DELETED, 'deleted_on' => $now->format('Y-m-d H:i:s')); } elseif ($mode === self::GET_RESERVE) { $attributes = array('status' => NfyMessage::RESERVED, 'reserved_on' => $now->format('Y-m-d H:i:s')); } NfyDbMessage::model()->updateByPk(array_keys($messages), $attributes); } if ($trx !== null) { $trx->commit(); } return NfyDbMessage::createMessages($messages); }
/** * Perform message extraction. */ protected function receiveInternal($subscriber_id = null, $limit = -1, $mode = self::GET_RESERVE) { $pk = NfyDbMessage::model()->tableSchema->primaryKey; $trx = NfyDbMessage::model()->getDbConnection()->getCurrentTransaction() !== null ? null : NfyDbMessage::model()->getDbConnection()->beginTransaction(); $message = NfyDbMessage::model()->withQueue($this->id)->withSubscriber($subscriber_id); switch ($mode) { case self::GET_SENT: $message->available($this->timeout); break; case self::GET_READ: $message->sent($this->timeout); break; case self::GET_RESERVE: $message->available($this->timeout); break; case self::GET_DELETE: $message->available($this->timeout); break; } $messages = $message->findAll(array('index' => $pk, 'limit' => $limit, 'order' => 't.id desc')); if (!empty($messages)) { $now = new DateTime('now'); switch ($mode) { case self::GET_SENT: $attributes = array('status' => NfyMessage::SENT, 'sent_on' => $now->format('Y-m-d H:i:s')); break; case self::GET_READ: $attributes = array('status' => NfyMessage::READ, 'read_on' => $now->format('Y-m-d H:i:s')); break; case self::GET_RESERVE: $attributes = array('status' => NfyMessage::RESERVED, 'reserved_on' => $now->format('Y-m-d H:i:s')); break; case self::GET_DELETE: $attributes = array('status' => NfyMessage::DELETED, 'deleted_on' => $now->format('Y-m-d H:i:s')); break; } NfyDbMessage::model()->updateByPk(array_keys($messages), $attributes); } if ($trx !== null) { $trx->commit(); } return NfyDbMessage::createMessages($messages); }