diff --git a/common/models/Project.php b/common/models/Project.php
index de6a879..672a1d0 100644
--- a/common/models/Project.php
+++ b/common/models/Project.php
@@ -30,6 +30,7 @@
* @property ProjectPayment[] $projectPayments
* @property ProjectSpecialization[] $projectSpecializations
* @property Specialization[] $specializations
+ * @property Currency $budgetCurrency
*/
class Project extends \yii\db\ActiveRecord
{
diff --git a/common/models/User.php b/common/models/User.php
index 78120e2..7649808 100755
--- a/common/models/User.php
+++ b/common/models/User.php
@@ -2,6 +2,7 @@
namespace common\models;
use common\modules\comment\models\Comment;
+ use common\modules\comment\models\CommentProject;
use common\modules\comment\models\Rating;
use Yii;
use yii\base\InvalidConfigException;
@@ -521,7 +522,8 @@
*/
public function getJobs()
{
- return $this->hasMany(Job::className(), [ 'user_id' => 'id' ])->orderBy(['current' => SORT_DESC]);
+ return $this->hasMany(Job::className(), [ 'user_id' => 'id' ])
+ ->orderBy([ 'current' => SORT_DESC ]);
}
/**
@@ -805,4 +807,25 @@
])
->scalar();
}
+
+ public function getCommentProjects()
+ {
+ return $this->hasMany(CommentProject::className(), [ 'user_id' => 'id' ]);
+ }
+
+ public function getChat($user_id)
+ {
+ return Chat::find()
+ ->where([
+ 'or',
+ [ 'from_user' => $user_id, ],
+ [ 'to_user' => $user_id, ],
+ ])
+ ->andWhere([
+ 'or',
+ [ 'from_user' => $this->id, ],
+ [ 'to_user' => $this->id, ],
+ ])
+ ->with('messages.user');
+ }
}
diff --git a/common/modules/comment/models/CommentProject.php b/common/modules/comment/models/CommentProject.php
index eb57c36..173e2d8 100644
--- a/common/modules/comment/models/CommentProject.php
+++ b/common/modules/comment/models/CommentProject.php
@@ -3,6 +3,7 @@
use common\models\Currency;
use common\models\File;
+ use common\models\Project;
use common\models\User;
use yii\db\ActiveQuery;
use yii\db\ActiveRecord;
@@ -27,6 +28,7 @@
* @property int $term_to
* @property int $state
* @property Currency $currency
+ * @property Project $project
* @package common\modules\comment\models
*/
class CommentProject extends \yii\db\ActiveRecord
@@ -122,7 +124,7 @@
'integer',
'max' => 4,
'min' => 1,
- 'on' => self::SCENARIO_STATE,
+ 'on' => self::SCENARIO_STATE,
],
[
[ 'state' ],
@@ -137,8 +139,11 @@
[
[ 'state' ],
'in',
- 'range' => [1, 5],
- 'on' => self::SCENARIO_OWNER,
+ 'range' => [
+ 1,
+ 5,
+ ],
+ 'on' => self::SCENARIO_OWNER,
],
];
}
@@ -160,6 +165,9 @@
self::SCENARIO_STATE => [
'state',
],
+ self::SCENARIO_OWNER => [
+ 'state',
+ ],
];
}
@@ -400,6 +408,11 @@
}
}
+ public function getProject()
+ {
+ return $this->hasOne(Project::className(), [ 'project_id' => 'model_id' ]);
+ }
+
/**
* @return User
*/
diff --git a/common/modules/comment/models/CommentProjectSearch.php b/common/modules/comment/models/CommentProjectSearch.php
new file mode 100644
index 0000000..aae75ab
--- /dev/null
+++ b/common/modules/comment/models/CommentProjectSearch.php
@@ -0,0 +1,92 @@
+ 5,
+ 'min' => 1,
+ ],
+ [
+ [
+ 'state',
+ ],
+ 'default',
+ 'value' => self::STATE_NEW,
+ ],
+ ];
+ }
+
+ public function scenarios()
+ {
+ return array_merge(parent::scenarios(), [
+ self::SCENARIO_SEARCH => [
+ 'state',
+ ],
+ ]);
+ }
+
+ public function search($params)
+ {
+ $query = CommentProject::find()
+ ->with('project')
+ ->with('project.budgetCurrency')
+ ->with('project.comments')
+ ->where([ 'user_id' => \Yii::$app->user->getId() ]);
+
+ $dataProvider = new ActiveDataProvider([
+ 'query' => $query,
+ ]);
+
+ $this->load($params);
+
+ if(!$this->validate()) {
+ $query->andWhere('0=1');
+ return $dataProvider;
+ }
+
+ $query->andWhere([ 'state' => $this->state ]);
+
+ return $dataProvider;
+ }
+
+ }
diff --git a/common/modules/comment/rbac/ArtboxCommentCreateRule.php b/common/modules/comment/rbac/ArtboxCommentCreateRule.php
index 1f7ee06..9dbf0a3 100644
--- a/common/modules/comment/rbac/ArtboxCommentCreateRule.php
+++ b/common/modules/comment/rbac/ArtboxCommentCreateRule.php
@@ -19,6 +19,10 @@
public function checkProject($user, $item, $params)
{
+ $project = \common\models\Project::findOne($params['model_id']);
+ if($project->user_id == $user) {
+ return false;
+ }
$comment = \common\modules\comment\models\CommentProject::find()
->where([ 'model' => $params[ 'model' ],
'model_id' => $params[ 'model_id' ],
diff --git a/frontend/controllers/PerformerController.php b/frontend/controllers/PerformerController.php
index 4f88317..40dcb90 100755
--- a/frontend/controllers/PerformerController.php
+++ b/frontend/controllers/PerformerController.php
@@ -60,6 +60,8 @@
$user = User::find()
->where([ 'id' => $performer_id ])
->with('jobs')
+ ->with('comments')
+ ->with('comments.rating')
->one();
if(!$user instanceof User) {
diff --git a/frontend/controllers/ProjectsController.php b/frontend/controllers/ProjectsController.php
index c2b02b0..3964ff5 100644
--- a/frontend/controllers/ProjectsController.php
+++ b/frontend/controllers/ProjectsController.php
@@ -1,11 +1,16 @@
render('projects');
+ $model = new CommentProjectSearch([ 'scenario' => CommentProjectSearch::SCENARIO_SEARCH ]);
+ $groups = CommentProject::find()
+ ->select([
+ 'COUNT(*)',
+ 'state',
+ ])
+ ->asArray()
+ ->indexBy('state')
+ ->where([ 'user_id' => \Yii::$app->user->getId() ])
+ ->groupBy([ 'state' ])
+ ->column();
+ $comments = $model->search(\Yii::$app->request->queryParams);
+ return $this->render('projects', [
+ 'comments' => $comments,
+ 'groups' => $groups,
+ ]);
}
}
\ No newline at end of file
diff --git a/frontend/controllers/TenderController.php b/frontend/controllers/TenderController.php
index b3f28c0..e99d785 100755
--- a/frontend/controllers/TenderController.php
+++ b/frontend/controllers/TenderController.php
@@ -51,6 +51,16 @@ class TenderController extends Controller
'change-state' => ['post'],
],
],
+ 'access' => [
+ 'class' => AccessControl::className(),
+ 'rules' => [
+ [
+ 'actions' => ['change-state'],
+ 'allow' => true,
+ 'roles' => [ '@' ],
+ ],
+ ],
+ ],
];
}
/**
@@ -102,10 +112,18 @@ class TenderController extends Controller
if(empty($comment)) {
return ['error' => 'Данного предложения не существует'];
}
- if($comment->state == $comment::STATE_TRASH) {
+ if($comment->user_id == \Yii::$app->user->getId()) {
+ $comment->scenario = $comment::SCENARIO_OWNER;
+ } else {
+ $comment->scenario = $comment::SCENARIO_STATE;
+ }
+ if($comment->state == $comment::STATE_TRASH && $comment->scenario == $comment::SCENARIO_STATE) {
return ['error' => 'Исполнитель отменил данное предложение'];
}
- $comment->scenario = $comment::SCENARIO_STATE;
+ if($comment->state == $comment::STATE_DENY && $comment->scenario == $comment::SCENARIO_OWNER) {
+ return ['error' => 'Заказчик отменил Ваше предложение'];
+ }
+
$comment->state = $state;
if(!$comment->validate()) {
return ['error' => 'Недопустимое значение state'];
diff --git a/frontend/views/layouts/main.php b/frontend/views/layouts/main.php
index f9b5b3c..fcaa970 100755
--- a/frontend/views/layouts/main.php
+++ b/frontend/views/layouts/main.php
@@ -154,7 +154,7 @@ AppAsset::register($this);
'items' => [
[
'url' => ['/projects'],
- 'template' => '99+',
+ 'template' => ''.count(\Yii::$app->user->identity->commentProjects).'',
],
[
'url' => ['chat/list'],
diff --git a/frontend/views/layouts/performer.php b/frontend/views/layouts/performer.php
index dbdc327..f76c332 100755
--- a/frontend/views/layouts/performer.php
+++ b/frontend/views/layouts/performer.php
@@ -25,7 +25,21 @@
'chat/message',
'user_id' => $this->params[ 'user' ]->id,
]), [ 'class' => 'blog-buttons-write' ]) ?>
- Добавить
в закладки
+ user->identity )) {
+ if($this->params[ 'user' ]->isBookmarked) {
+ echo Html::a('Убрать из закладок', [ '#' ], [
+ 'class' => 'get-list artbox_bookmark_remove_performer',
+ 'data-id' => $this->params[ 'user' ]->id,
+ ]);
+ } else {
+ echo Html::a('Добавить в закладки', [ '#' ], [
+ 'class' => 'get-list artbox_bookmark_add_performer',
+ 'data-id' => $this->params[ 'user' ]->id,
+ ]);
+ }
+ }
+ ?>
@@ -160,7 +174,7 @@
На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.
@@ -72,7 +121,9 @@ $this->params['breadcrumbs'][] = $this->title;На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.
@@ -108,7 +159,9 @@ $this->params['breadcrumbs'][] = $this->title;На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.
@@ -144,7 +197,9 @@ $this->params['breadcrumbs'][] = $this->title;На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.
@@ -180,7 +235,9 @@ $this->params['breadcrumbs'][] = $this->title;На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.
@@ -226,6 +283,9 @@ $this->params['breadcrumbs'][] = $this->title; Еще 24 проекта