public function beforeDelete(){ if(parent::beforeDelete()){ $check = NfyDbMessage::model()->countByAttributes(array('message_body_id'=>$this->message_body_id), 'id != :id', array(':id'=>(int)$this->id)); if(empty($check)){ NfyMessageBody::model()->deleteByPk($this->message_body_id); } return true; } return false; }
/** * Removes deleted messages from the storage. * @return array of removed message ids */ public function removeDeleted() { $trx = NfyDbMessage::model()->getDbConnection()->getCurrentTransaction() !== null ? null : NfyDbMessage::model()->getDbConnection()->beginTransaction(); // $pk = NfyDbMessage::model()->tableSchema->primaryKey; // $messages = NfyDbMessage::model()->withQueue($this->id)->deleted()->findAllByPk($message_id, array('select' => $pk, 'index' => $pk)); $messages = NfyDbMessage::model()->withQueue($this->id)->deleted()->findAllByPk($message_id); $message_ids = array(); if(!empty($messages)){ foreach($messages as $message){ $message_ids[] = $message->id; $message->delete(); } } // $message_ids = array_keys($messages); // NfyDbMessage::model()->deleteByPk($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 $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)); }