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 @@
  • Стоимость работ:
    - params[ 'user' ]->userInfo->salary. ' ' . $this->params['user']->userInfo->currency->label ?> + params[ 'user' ]->userInfo->salary . ' ' . $this->params[ 'user' ]->userInfo->currency->label ?>
  • diff --git a/frontend/views/performer/common.php b/frontend/views/performer/common.php index 32ed6b2..45a9583 100755 --- a/frontend/views/performer/common.php +++ b/frontend/views/performer/common.php @@ -97,63 +97,37 @@
    -
    Отзывов: 54
    +
    Отзывов: comments) ?>
    -
    -
    - - - - -
    - -
    Отзыв от: Евгения
    -
    sfds
    - Развернуть -
    - -
    -
    - - - - -
    - -
    Отзыв от: Евгения
    -
    2Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения.
    - Развернуть -
    - -
    -
    - - - - -
    - -
    Отзыв от: Евгения
    -
    3Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения. Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения. -
    - Развернуть -
    - -
    -
    - - - - -
    - -
    Отзыв от: Евгения
    -
    4Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения. -
    - Развернуть -
    + comments) > 4 ) ? 4 : count($user->comments); + for($i = 0; $i < $count; $i++) { + ?> +
    + comments[ $i ]->rating )) { + ?> +
    + + + + +
    + +
    Отзыв от: comments[$i]->user->name ?>
    +
    comments[$i]->text ?>
    + Развернуть +
    +
    -
    Читать все отзывы +
    + $user->id]); + ?>
    diff --git a/frontend/views/projects/_projects_list_view.php b/frontend/views/projects/_projects_list_view.php new file mode 100644 index 0000000..9cd9e28 --- /dev/null +++ b/frontend/views/projects/_projects_list_view.php @@ -0,0 +1,96 @@ + +
    + project->name, ['tender/view', 'tender_id' => $model->project->project_id], ['class' => 'srch-prof-title']); + ?> +
    + + Бюджет: + project->contractual) { + echo 'Договорной'; + } else { + echo $model->project->budget . ' ' . $model->project->budgetCurrency->label; + } + ?> +
    + +
    + project->description ?> +
    +
    +
    + project->city ?> +
    +
    + formatter->asDate(time($model->project->description), 'php:d.m.Y') ?> +
    +
    + project->comments) ?> предложения +
    +
    +
    + +
    +
    + + + state) { + case 1: + echo 'Заказчик еще не рассмотрел Ваше предложение'; + break; + case 2: + echo 'Ваша кандидатура на рассмотрении'; + break; + case 3: + echo 'Вы назначены исполнителем'; + break; + case 4: + echo 'Заказчик отказал Вашему предложению'; + break; + case 5: + echo 'Вы отказались от данного предложения'; + break; + } + ?> + +
    +
    +
    + + user->identity->getChat($model->project->user_id) + ->one()->messages) . ' сообщения', [ + 'chat/message', + 'user_id' => $model->project->user_id, + ]); + if($model->state == 5) { + echo Html::a('Отменить', [ '#' ], [ + 'data-project-id' => $model->project->project_id, + 'data-comment-id' => $model->comment_id, + 'class' => 'artbox_project_make_new', + ]); + } else { + echo Html::a('Отказаться', [ '#' ], [ + 'data-project-id' => $model->project->project_id, + 'data-comment-id' => $model->comment_id, + 'class' => 'artbox_project_make_trash', + ]); + } + ?> +
    +
    \ No newline at end of file diff --git a/frontend/views/projects/projects.php b/frontend/views/projects/projects.php index 66293a5..82f53c9 100644 --- a/frontend/views/projects/projects.php +++ b/frontend/views/projects/projects.php @@ -1,8 +1,15 @@ title = 'Мой профиль'; -$this->params['breadcrumbs'][] = $this->title; + $this->params[ 'breadcrumbs' ][] = $this->title; ?>
    @@ -14,29 +21,71 @@ $this->params['breadcrumbs'][] = $this->title;
    • - Не определен 17 + + 1, + ]) ?> +
    • - Кандидат 0 + + 2, + ]) ?> +
    • - Исполнитель 0 + + 3, + ]) ?> +
    • - Отказали 0 + + 4, + ]) ?> +
    • - Корзина 7 + + 5, + ]) ?> +
    + $comments, + 'options' => [ + 'class' => 'style', + ], + 'itemOptions' => [ + 'class' => 'search-profile-blocks', + ], + 'itemView' => '_projects_list_view', + ]); + ?> +
    Создание проекта дома -
    Бюджет: 20 000 грн (Договорной)
    +
    + Бюджет: 20 000 грн (Договорной) +

    На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.

    @@ -72,7 +121,9 @@ $this->params['breadcrumbs'][] = $this->title;
    Создание проекта дома -
    Бюджет: 20 000 грн (Договорной)
    +
    + Бюджет: 20 000 грн (Договорной) +

    На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.

    @@ -108,7 +159,9 @@ $this->params['breadcrumbs'][] = $this->title;
    Создание проекта дома -
    Бюджет: 20 000 грн (Договорной)
    +
    + Бюджет: 20 000 грн (Договорной) +

    На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.

    @@ -144,7 +197,9 @@ $this->params['breadcrumbs'][] = $this->title;
    Создание проекта дома -
    Бюджет: 20 000 грн (Договорной)
    +
    + Бюджет: 20 000 грн (Договорной) +

    На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.

    @@ -180,7 +235,9 @@ $this->params['breadcrumbs'][] = $this->title;
    Создание проекта дома -
    Бюджет: 20 000 грн (Договорной)
    +
    + Бюджет: 20 000 грн (Договорной) +

    На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.

    @@ -226,6 +283,9 @@ $this->params['breadcrumbs'][] = $this->title; Еще 24 проекта
    +
    @@ -236,6 +296,5 @@ $this->params['breadcrumbs'][] = $this->title;
    -
    \ No newline at end of file diff --git a/frontend/web/js/forms.js b/frontend/web/js/forms.js index b6c5967..c3a81a1 100755 --- a/frontend/web/js/forms.js +++ b/frontend/web/js/forms.js @@ -461,6 +461,25 @@ $(document).ready( } ); }); + $(document).on('click', '.artbox_project_make_trash', function(e) { + e.preventDefault(); + var project_id = $(this).data('project-id'); + var comment_id = $(this).data('comment-id'); + var state = 5; + var link = $(this); + $.post('/tender/change-state', {project_id: project_id, comment_id: comment_id, state: state}, function(data) { + if(data.error) { + alert(data.error); + } else { + alert(data.message); + } + }, 'json').fail( + function() + { + alert(txtErrorModal); + } + ); + }); //offer -- libgit2 0.21.4