1, ], [ [ 'comment_pid' ], 'exist', 'targetAttribute' => 'comment_id', 'filter' => [ 'model' => $this->model, 'model_id' => $this->model_id, ], ], ]; } /** * @param string $model * @param integer $model_id * * @return ActiveQuery */ public static function getComments($model, $model_id) { $query = self::find() ->where([ 'comment.model' => $model, 'comment.model_id' => $model_id, 'comment.status' => 1, 'comment.comment_pid' => NULL, ]) ->with('parent'); $project = Project::findOne($model_id); $user = \Yii::$app->user; if(empty( $user ) || $project->user_id != $user->id) { $query->innerJoin([ 'child' => 'comment' ], 'comment.comment_id = child.comment_pid') ->andWhere([ 'not', [ 'child.comment_id' => NULL ], ]); } return $query; } public function beforeDelete() { if(!empty($this->child)) { $this->child->delete(); } return parent::beforeDelete(); // TODO: Change the autogenerated stub } public function checkCreate() { if($this->getGuestComment()) { return true; } else { return \Yii::$app->user->can(\common\modules\comment\Permissions::CREATE, [ 'model' => $this->model, 'model_id' => $this->model_id, 'comment_model' => $this, ]); } } public function checkUpdate() { if($this->scenario == self::SCENARIO_GUEST) { return false; } else { if(!empty($this->comment_pid) && $this->user_id == \Yii::$app->user->id) { return true; } } return false; } public function checkDelete() { if($this->scenario == self::SCENARIO_GUEST) { return false; } else { return ( \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE, [ 'model' => $this->model, 'model_id' => $this->model_id, 'comment' => $this, ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE_OWN, [ 'model' => $this->model, 'model_id' => $this->model_id, 'comment' => $this, ]) ); } } public function checkReply() { if($this->scenario != self::SCENARIO_GUEST) { if(!$this->isNewRecord && empty( $this->comment_pid )) { $project = Project::findOne($this->model_id); if($project->user_id == \Yii::$app->user->id && empty($this->child)) { return true; } } elseif($this->isNewRecord && !empty($this->comment_pid)) { $parent = self::findOne($this->comment_pid); if(!empty($parent) && $parent->checkReply()) { return true; } } } return false; } public function getChild() { return $this->hasOne($this->className(), [ 'comment_pid' => 'comment_id' ]); } }