diff --git a/components/MyMessages.php b/components/MyMessages.php index b4661c8..d7b7c26 100644 --- a/components/MyMessages.php +++ b/components/MyMessages.php @@ -33,6 +33,9 @@ class MyMessages extends Component { /** @var boolean */ public $enableEmail = false; + /** @var boolean */ + public $isSystem = false; + /** @var function */ public $getEmail = null; @@ -56,6 +59,10 @@ class MyMessages extends Component { public function sendMessage($whom_id, $message, $sendEmail = false) { $result = null; + if(!is_numeric($whom_id) && is_string($whom_id)){ + $ids = $this->getUsersByRoles($whom_id); + return $this->sendMessage($ids, $message, $send_email); + } if(is_array($whom_id)) { $result = $this->_sendMessages($whom_id, $message, $sendEmail); } else { @@ -64,6 +71,13 @@ class MyMessages extends Component { return $result; } + + public function systemSend ($whom_id, $message, $sendEmail = false) { + $this->isSystem = true; + $this->sendMessage($whom_id, $message, $sendEmail); + $this->isSystem = false; + } + /** * Method to getMyMessages. * @@ -71,7 +85,8 @@ class MyMessages extends Component { * @return array */ public function getMyMessages() { - return $this->getMessages(\Yii::$app->user->id); + $id = $this->getIdCurrentUser(); + return $this->getMessages($id); } @@ -108,12 +123,8 @@ class MyMessages extends Component { * @return array */ protected function _sendMessage($whom_id, $message, $send_email = false) { - if(!is_int($whom_id) && is_string($whom_id)){ - $ids = $this->getUsersByRoles($whom_id); - return $this->sendMessage($ids, $message, $send_email); - } $model = new Messages(); - $model->from_id = \Yii::$app->user->id; + $model->from_id = $this->getIdCurrentUser(); $model->whom_id = $whom_id; $model->message = $message; if($this->enableEmail && $send_email) { @@ -204,7 +215,7 @@ class MyMessages extends Component { protected function changeStatusMessage($id, $status, $is_delete = false) { $model = Messages::findOne($id); $status_name = 'status'; - $current_user_id = \Yii::$app->user->identity->id; + $current_user_id = $this->getIdCurrentUser(); if(!$model) { throw new EceptionMessages('Message not found.'); } @@ -268,7 +279,7 @@ class MyMessages extends Component { $connection = \Yii::$app->db; $model = $connection->createCommand($sql); - $model->bindValue(':user_id', \Yii::$app->user->identity->id); + $model->bindValue(':user_id', $this->getIdCurrentUser()); $users = $model->queryAll(); @@ -287,7 +298,7 @@ class MyMessages extends Component { */ protected function saveData($model, $name_event = null) { if(!$model->save()) { - $mess = $model->hasErrors() ? implode(', ', $model->getErrors()) : 'Not saved. ' . $name_event; + $mess = $model->hasErrors() ? implode(', ', $model->getFirstErrors()) : 'Not saved. ' . $name_event; throw new EceptionMessages($mess); } else { if($name_event) { @@ -312,7 +323,7 @@ class MyMessages extends Component { */ protected function getMessages($whom_id, $from_id = null, $type = null, $last_id = null) { $table_name = Messages::tableName(); - $my_id = \Yii::$app->user->getId(); + $my_id = $this->getIdCurrentUser(); $query = new \yii\db\Query(); $query @@ -358,22 +369,26 @@ class MyMessages extends Component { Messages::updateAll(['status' => Messages::STATUS_READ], ['in', 'id', $ids]); } - $user_id = \Yii::$app->user->getId(); + $user_id = $this->getIdCurrentUser(); return array_map(function ($r) use ($user_id) { $r['i_am_sender'] = $r['from_id'] == $user_id; return $r;}, $return); } protected function getUsersByRoles($role) { $users = new \yii\db\Query(); - $users + $result = $users ->select([ 'usr.id' ]) ->from("$this->userTableName as usr") ->leftJoin('auth_assignment as ath', 'usr.id = ath.user_id') ->where(['ath.item_name' => $role]) - ->asArray() ->all(); - return $users; + + return array_map(function($r) {return $r['id'];}, $result); + } + + protected function getIdCurrentUser() { + return \Yii::$app->user->isGuest || $this->isSystem ? null : \Yii::$app->user->id; } diff --git a/migrations/m150521_131654_add_table_messages.php b/migrations/m150521_131654_add_table_messages.php index 555779f..5efb5e1 100644 --- a/migrations/m150521_131654_add_table_messages.php +++ b/migrations/m150521_131654_add_table_messages.php @@ -14,7 +14,7 @@ class m150521_131654_add_table_messages extends Migration $this->createTable('{{%messages}}', [ 'id' => Schema::TYPE_PK . ' NOT NULL', - 'from_id' => Schema::TYPE_INTEGER . ' NOT NULL', + 'from_id' => Schema::TYPE_INTEGER . ' NULL', 'whom_id' => Schema::TYPE_INTEGER . ' NOT NULL', 'message' => Schema::TYPE_STRING . '(750) NOT NULL', 'status' => Schema::TYPE_INTEGER . ' DEFAULT 0', diff --git a/models/Messages.php b/models/Messages.php index 4003b7b..57ed178 100644 --- a/models/Messages.php +++ b/models/Messages.php @@ -49,7 +49,7 @@ class Messages extends \yii\db\ActiveRecord public function rules() { return [ - [['from_id', 'whom_id', 'message'], 'required'], + [['whom_id', 'message'], 'required'], [['from_id', 'whom_id', 'status', 'created_at', 'updated_at'], 'integer'], [['message'], 'string', 'max' => 750], [['status'], 'default', 'value' => self::STATUS_NEW],