0, ], [ [ 'budget_currency', ], 'default', 'value' => 3, ], [ [ 'budget_currency' ], 'exist', 'targetClass' => Currency::className(), 'targetAttribute' => 'currency_id', ], [ [ 'files', ], 'string', ], [ [ 'file', ], 'safe', ], [ [ 'status' ], 'default', 'value' => 1, ], ]; } public function scenarios() { return [ self::SCENARIO_USER => [ 'text', 'budget_from', 'budget_to', 'term_from', 'term_to', 'file', ], self::SCENARIO_GUEST => [ ], ]; } /** * @inheritdoc */ public function behaviors() { return [ [ 'class' => \yii\behaviors\TimestampBehavior::className(), 'createdAtAttribute' => 'date_add', 'updatedAtAttribute' => 'date_update', 'value' => new \yii\db\Expression('NOW()'), ], ]; } public static function tableName() { return '{{%comment_project}}'; } /** * @inheritdoc */ public function attributeLabels() { return [ 'text' => \Yii::t('app', 'Текст ответа'), 'budget_from' => \Yii::t('app', 'от'), 'budget_to' => \Yii::t('app', 'до'), 'term_from' => \Yii::t('app', 'от'), 'term_to' => \Yii::t('app', 'до'), ]; } public function getGuestComment() { return $this->guestComment; } // public function setGuestComment($value) // { // $this->guestComment = $value; // } /** * @param string $model * @param integer $model_id * * @return ActiveQuery */ public function getComments($model, $model_id) { return $this->find() ->where([ 'comment_project.model' => $model, 'comment_project.model_id' => $model_id, 'comment_project.status' => 1, ]); } public function postComment() { if($this->checkCreate()) { if(!empty(\Yii::$app->request->post($this->formName())['anonymous'])) { $this->status = self::STATUS_ANONYMOUS; } $this->file = UploadedFile::getInstances($this, 'file'); if(!empty($this->file)) { $file_id = []; if(is_array($this->file)){ foreach($this->file as $file){ if($file instanceof UploadedFile){ $file_model = new File(); $file_id[] = $file_model->saveFile($file); } } } else { if($this->file instanceof UploadedFile){ $file_model = new File(); $file_id[] = $file_model->saveFile($this->file); } } $this->files = json_encode($file_id); } if($this->insert()) { $this->clearSafe(); return true; } else { return false; } } else { $this->addError('comment_id', 'You can`t post comment here'); return false; } } public function updateComment() { if($this->checkUpdate()) { if(empty( $this->comment_id )) { $this->addError('comment_id', 'Comment ID not found'); return false; } else { if($this->update()) { $this->clearSafe(); return true; } else { return false; } } } else { $this->addError('comment_id', 'You can`t update this post'); return false; } } public function deleteComment() { if($this->checkDelete()) { if(empty( $this->comment_id )) { $this->addError('comment_id', 'Comment ID not found'); return false; } else { if($this->status == self::STATUS_DELETED) { return false; } $this->status = self::STATUS_DELETED; if($this->update()) { $this->clearSafe(); return true; } else { return false; } } } else { $this->addError('comment_id', 'You can`t delete this post'); return false; } } 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, ]); } } public function checkUpdate() { if($this->scenario == self::SCENARIO_GUEST) { return false; } else { return \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE, [ 'model' => $this->model, 'model_id' => $this->model_id, ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::UPDATE_OWN, [ 'model' => $this->model, 'model_id' => $this->model_id, ]); } } 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, ]) || \Yii::$app->user->can(\common\modules\comment\Permissions::DELETE_OWN, [ 'model' => $this->model, 'model_id' => $this->model_id, ]); } } protected function clearSafe($setNew = true) { $safe = $this->safeAttributes(); $count = count($safe); $values = array_fill(0, $count, NULL); $result = array_combine($safe, $values); $this->setAttributes($result); $this->setIsNewRecord($setNew); } public function getAuthor() { // if($this->user_id != NULL) { return $this->hasOne(\common\models\User::className(), [ 'id' => 'user_id' ]); // } else { // return ['firstname' => $this->user_name, 'email' => $this->user_email]; // } } }