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