Commit 32ed90fdd82ca0b7eedc0192654ef26b46126b16
1 parent
38a6e1dd
test
Showing
14 changed files
with
412 additions
and
77 deletions
Show diff stats
common/models/Project.php
@@ -30,6 +30,7 @@ | @@ -30,6 +30,7 @@ | ||
30 | * @property ProjectPayment[] $projectPayments | 30 | * @property ProjectPayment[] $projectPayments |
31 | * @property ProjectSpecialization[] $projectSpecializations | 31 | * @property ProjectSpecialization[] $projectSpecializations |
32 | * @property Specialization[] $specializations | 32 | * @property Specialization[] $specializations |
33 | + * @property Currency $budgetCurrency | ||
33 | */ | 34 | */ |
34 | class Project extends \yii\db\ActiveRecord | 35 | class Project extends \yii\db\ActiveRecord |
35 | { | 36 | { |
common/models/User.php
@@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
2 | namespace common\models; | 2 | namespace common\models; |
3 | 3 | ||
4 | use common\modules\comment\models\Comment; | 4 | use common\modules\comment\models\Comment; |
5 | + use common\modules\comment\models\CommentProject; | ||
5 | use common\modules\comment\models\Rating; | 6 | use common\modules\comment\models\Rating; |
6 | use Yii; | 7 | use Yii; |
7 | use yii\base\InvalidConfigException; | 8 | use yii\base\InvalidConfigException; |
@@ -521,7 +522,8 @@ | @@ -521,7 +522,8 @@ | ||
521 | */ | 522 | */ |
522 | public function getJobs() | 523 | public function getJobs() |
523 | { | 524 | { |
524 | - return $this->hasMany(Job::className(), [ 'user_id' => 'id' ])->orderBy(['current' => SORT_DESC]); | 525 | + return $this->hasMany(Job::className(), [ 'user_id' => 'id' ]) |
526 | + ->orderBy([ 'current' => SORT_DESC ]); | ||
525 | } | 527 | } |
526 | 528 | ||
527 | /** | 529 | /** |
@@ -805,4 +807,25 @@ | @@ -805,4 +807,25 @@ | ||
805 | ]) | 807 | ]) |
806 | ->scalar(); | 808 | ->scalar(); |
807 | } | 809 | } |
810 | + | ||
811 | + public function getCommentProjects() | ||
812 | + { | ||
813 | + return $this->hasMany(CommentProject::className(), [ 'user_id' => 'id' ]); | ||
814 | + } | ||
815 | + | ||
816 | + public function getChat($user_id) | ||
817 | + { | ||
818 | + return Chat::find() | ||
819 | + ->where([ | ||
820 | + 'or', | ||
821 | + [ 'from_user' => $user_id, ], | ||
822 | + [ 'to_user' => $user_id, ], | ||
823 | + ]) | ||
824 | + ->andWhere([ | ||
825 | + 'or', | ||
826 | + [ 'from_user' => $this->id, ], | ||
827 | + [ 'to_user' => $this->id, ], | ||
828 | + ]) | ||
829 | + ->with('messages.user'); | ||
830 | + } | ||
808 | } | 831 | } |
common/modules/comment/models/CommentProject.php
@@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
3 | 3 | ||
4 | use common\models\Currency; | 4 | use common\models\Currency; |
5 | use common\models\File; | 5 | use common\models\File; |
6 | + use common\models\Project; | ||
6 | use common\models\User; | 7 | use common\models\User; |
7 | use yii\db\ActiveQuery; | 8 | use yii\db\ActiveQuery; |
8 | use yii\db\ActiveRecord; | 9 | use yii\db\ActiveRecord; |
@@ -27,6 +28,7 @@ | @@ -27,6 +28,7 @@ | ||
27 | * @property int $term_to | 28 | * @property int $term_to |
28 | * @property int $state | 29 | * @property int $state |
29 | * @property Currency $currency | 30 | * @property Currency $currency |
31 | + * @property Project $project | ||
30 | * @package common\modules\comment\models | 32 | * @package common\modules\comment\models |
31 | */ | 33 | */ |
32 | class CommentProject extends \yii\db\ActiveRecord | 34 | class CommentProject extends \yii\db\ActiveRecord |
@@ -122,7 +124,7 @@ | @@ -122,7 +124,7 @@ | ||
122 | 'integer', | 124 | 'integer', |
123 | 'max' => 4, | 125 | 'max' => 4, |
124 | 'min' => 1, | 126 | 'min' => 1, |
125 | - 'on' => self::SCENARIO_STATE, | 127 | + 'on' => self::SCENARIO_STATE, |
126 | ], | 128 | ], |
127 | [ | 129 | [ |
128 | [ 'state' ], | 130 | [ 'state' ], |
@@ -137,8 +139,11 @@ | @@ -137,8 +139,11 @@ | ||
137 | [ | 139 | [ |
138 | [ 'state' ], | 140 | [ 'state' ], |
139 | 'in', | 141 | 'in', |
140 | - 'range' => [1, 5], | ||
141 | - 'on' => self::SCENARIO_OWNER, | 142 | + 'range' => [ |
143 | + 1, | ||
144 | + 5, | ||
145 | + ], | ||
146 | + 'on' => self::SCENARIO_OWNER, | ||
142 | ], | 147 | ], |
143 | ]; | 148 | ]; |
144 | } | 149 | } |
@@ -160,6 +165,9 @@ | @@ -160,6 +165,9 @@ | ||
160 | self::SCENARIO_STATE => [ | 165 | self::SCENARIO_STATE => [ |
161 | 'state', | 166 | 'state', |
162 | ], | 167 | ], |
168 | + self::SCENARIO_OWNER => [ | ||
169 | + 'state', | ||
170 | + ], | ||
163 | ]; | 171 | ]; |
164 | } | 172 | } |
165 | 173 | ||
@@ -400,6 +408,11 @@ | @@ -400,6 +408,11 @@ | ||
400 | } | 408 | } |
401 | } | 409 | } |
402 | 410 | ||
411 | + public function getProject() | ||
412 | + { | ||
413 | + return $this->hasOne(Project::className(), [ 'project_id' => 'model_id' ]); | ||
414 | + } | ||
415 | + | ||
403 | /** | 416 | /** |
404 | * @return User | 417 | * @return User |
405 | */ | 418 | */ |
common/modules/comment/models/CommentProjectSearch.php
0 → 100644
1 | +<?php | ||
2 | + namespace common\modules\comment\models; | ||
3 | + | ||
4 | + use common\models\Currency; | ||
5 | + use common\models\File; | ||
6 | + use common\models\User; | ||
7 | + use yii\data\ActiveDataProvider; | ||
8 | + use yii\db\ActiveQuery; | ||
9 | + use yii\db\ActiveRecord; | ||
10 | + use yii\web\UploadedFile; | ||
11 | + | ||
12 | + /** | ||
13 | + * Class Comment | ||
14 | + * @property bool $guestComment | ||
15 | + * @property integer $comment_id | ||
16 | + * @property string $text | ||
17 | + * @property int $user_id | ||
18 | + * @property int $status | ||
19 | + * @property string $date_add | ||
20 | + * @property string $date_update | ||
21 | + * @property string $date_delete | ||
22 | + * @property string $model | ||
23 | + * @property int $model_id | ||
24 | + * @property string $files | ||
25 | + * @property float $budget_from | ||
26 | + * @property float $budget_to | ||
27 | + * @property int $term_from | ||
28 | + * @property int $term_to | ||
29 | + * @property int $state | ||
30 | + * @property Currency $currency | ||
31 | + * @package common\modules\comment\models | ||
32 | + */ | ||
33 | + class CommentProjectSearch extends CommentProject | ||
34 | + { | ||
35 | + | ||
36 | + const SCENARIO_SEARCH = 'search'; | ||
37 | + | ||
38 | + public function rules() | ||
39 | + { | ||
40 | + return [ | ||
41 | + [ | ||
42 | + [ | ||
43 | + 'state', | ||
44 | + ], | ||
45 | + 'integer', | ||
46 | + 'max' => 5, | ||
47 | + 'min' => 1, | ||
48 | + ], | ||
49 | + [ | ||
50 | + [ | ||
51 | + 'state', | ||
52 | + ], | ||
53 | + 'default', | ||
54 | + 'value' => self::STATE_NEW, | ||
55 | + ], | ||
56 | + ]; | ||
57 | + } | ||
58 | + | ||
59 | + public function scenarios() | ||
60 | + { | ||
61 | + return array_merge(parent::scenarios(), [ | ||
62 | + self::SCENARIO_SEARCH => [ | ||
63 | + 'state', | ||
64 | + ], | ||
65 | + ]); | ||
66 | + } | ||
67 | + | ||
68 | + public function search($params) | ||
69 | + { | ||
70 | + $query = CommentProject::find() | ||
71 | + ->with('project') | ||
72 | + ->with('project.budgetCurrency') | ||
73 | + ->with('project.comments') | ||
74 | + ->where([ 'user_id' => \Yii::$app->user->getId() ]); | ||
75 | + | ||
76 | + $dataProvider = new ActiveDataProvider([ | ||
77 | + 'query' => $query, | ||
78 | + ]); | ||
79 | + | ||
80 | + $this->load($params); | ||
81 | + | ||
82 | + if(!$this->validate()) { | ||
83 | + $query->andWhere('0=1'); | ||
84 | + return $dataProvider; | ||
85 | + } | ||
86 | + | ||
87 | + $query->andWhere([ 'state' => $this->state ]); | ||
88 | + | ||
89 | + return $dataProvider; | ||
90 | + } | ||
91 | + | ||
92 | + } |
common/modules/comment/rbac/ArtboxCommentCreateRule.php
@@ -19,6 +19,10 @@ | @@ -19,6 +19,10 @@ | ||
19 | 19 | ||
20 | public function checkProject($user, $item, $params) | 20 | public function checkProject($user, $item, $params) |
21 | { | 21 | { |
22 | + $project = \common\models\Project::findOne($params['model_id']); | ||
23 | + if($project->user_id == $user) { | ||
24 | + return false; | ||
25 | + } | ||
22 | $comment = \common\modules\comment\models\CommentProject::find() | 26 | $comment = \common\modules\comment\models\CommentProject::find() |
23 | ->where([ 'model' => $params[ 'model' ], | 27 | ->where([ 'model' => $params[ 'model' ], |
24 | 'model_id' => $params[ 'model_id' ], | 28 | 'model_id' => $params[ 'model_id' ], |
frontend/controllers/PerformerController.php
@@ -60,6 +60,8 @@ | @@ -60,6 +60,8 @@ | ||
60 | $user = User::find() | 60 | $user = User::find() |
61 | ->where([ 'id' => $performer_id ]) | 61 | ->where([ 'id' => $performer_id ]) |
62 | ->with('jobs') | 62 | ->with('jobs') |
63 | + ->with('comments') | ||
64 | + ->with('comments.rating') | ||
63 | ->one(); | 65 | ->one(); |
64 | 66 | ||
65 | if(!$user instanceof User) { | 67 | if(!$user instanceof User) { |
frontend/controllers/ProjectsController.php
1 | <?php | 1 | <?php |
2 | namespace frontend\controllers; | 2 | namespace frontend\controllers; |
3 | 3 | ||
4 | + use common\models\ProjectSearch; | ||
5 | + use common\models\User; | ||
6 | + use common\modules\comment\models\CommentProject; | ||
7 | + use common\modules\comment\models\CommentProjectSearch; | ||
4 | use yii\filters\AccessControl; | 8 | use yii\filters\AccessControl; |
5 | use yii\web\Controller; | 9 | use yii\web\Controller; |
6 | 10 | ||
7 | class ProjectsController extends Controller | 11 | class ProjectsController extends Controller |
8 | { | 12 | { |
13 | + | ||
9 | public function behaviors() | 14 | public function behaviors() |
10 | { | 15 | { |
11 | return [ | 16 | return [ |
@@ -24,6 +29,21 @@ | @@ -24,6 +29,21 @@ | ||
24 | 29 | ||
25 | public function actionIndex() | 30 | public function actionIndex() |
26 | { | 31 | { |
27 | - return $this->render('projects'); | 32 | + $model = new CommentProjectSearch([ 'scenario' => CommentProjectSearch::SCENARIO_SEARCH ]); |
33 | + $groups = CommentProject::find() | ||
34 | + ->select([ | ||
35 | + 'COUNT(*)', | ||
36 | + 'state', | ||
37 | + ]) | ||
38 | + ->asArray() | ||
39 | + ->indexBy('state') | ||
40 | + ->where([ 'user_id' => \Yii::$app->user->getId() ]) | ||
41 | + ->groupBy([ 'state' ]) | ||
42 | + ->column(); | ||
43 | + $comments = $model->search(\Yii::$app->request->queryParams); | ||
44 | + return $this->render('projects', [ | ||
45 | + 'comments' => $comments, | ||
46 | + 'groups' => $groups, | ||
47 | + ]); | ||
28 | } | 48 | } |
29 | } | 49 | } |
30 | \ No newline at end of file | 50 | \ No newline at end of file |
frontend/controllers/TenderController.php
@@ -51,6 +51,16 @@ class TenderController extends Controller | @@ -51,6 +51,16 @@ class TenderController extends Controller | ||
51 | 'change-state' => ['post'], | 51 | 'change-state' => ['post'], |
52 | ], | 52 | ], |
53 | ], | 53 | ], |
54 | + 'access' => [ | ||
55 | + 'class' => AccessControl::className(), | ||
56 | + 'rules' => [ | ||
57 | + [ | ||
58 | + 'actions' => ['change-state'], | ||
59 | + 'allow' => true, | ||
60 | + 'roles' => [ '@' ], | ||
61 | + ], | ||
62 | + ], | ||
63 | + ], | ||
54 | ]; | 64 | ]; |
55 | } | 65 | } |
56 | /** | 66 | /** |
@@ -102,10 +112,18 @@ class TenderController extends Controller | @@ -102,10 +112,18 @@ class TenderController extends Controller | ||
102 | if(empty($comment)) { | 112 | if(empty($comment)) { |
103 | return ['error' => 'Данного предложения не существует']; | 113 | return ['error' => 'Данного предложения не существует']; |
104 | } | 114 | } |
105 | - if($comment->state == $comment::STATE_TRASH) { | 115 | + if($comment->user_id == \Yii::$app->user->getId()) { |
116 | + $comment->scenario = $comment::SCENARIO_OWNER; | ||
117 | + } else { | ||
118 | + $comment->scenario = $comment::SCENARIO_STATE; | ||
119 | + } | ||
120 | + if($comment->state == $comment::STATE_TRASH && $comment->scenario == $comment::SCENARIO_STATE) { | ||
106 | return ['error' => 'Исполнитель отменил данное предложение']; | 121 | return ['error' => 'Исполнитель отменил данное предложение']; |
107 | } | 122 | } |
108 | - $comment->scenario = $comment::SCENARIO_STATE; | 123 | + if($comment->state == $comment::STATE_DENY && $comment->scenario == $comment::SCENARIO_OWNER) { |
124 | + return ['error' => 'Заказчик отменил Ваше предложение']; | ||
125 | + } | ||
126 | + | ||
109 | $comment->state = $state; | 127 | $comment->state = $state; |
110 | if(!$comment->validate()) { | 128 | if(!$comment->validate()) { |
111 | return ['error' => 'Недопустимое значение state']; | 129 | return ['error' => 'Недопустимое значение state']; |
frontend/views/layouts/main.php
@@ -154,7 +154,7 @@ AppAsset::register($this); | @@ -154,7 +154,7 @@ AppAsset::register($this); | ||
154 | 'items' => [ | 154 | 'items' => [ |
155 | [ | 155 | [ |
156 | 'url' => ['/projects'], | 156 | 'url' => ['/projects'], |
157 | - 'template' => '<a href="{url}" class="main-menu-icons-home"><span>99+</span></a>', | 157 | + 'template' => '<a href="{url}" class="main-menu-icons-home"><span>'.count(\Yii::$app->user->identity->commentProjects).'</span></a>', |
158 | ], | 158 | ], |
159 | [ | 159 | [ |
160 | 'url' => ['chat/list'], | 160 | 'url' => ['chat/list'], |
frontend/views/layouts/performer.php
@@ -25,7 +25,21 @@ | @@ -25,7 +25,21 @@ | ||
25 | 'chat/message', | 25 | 'chat/message', |
26 | 'user_id' => $this->params[ 'user' ]->id, | 26 | 'user_id' => $this->params[ 'user' ]->id, |
27 | ]), [ 'class' => 'blog-buttons-write' ]) ?> | 27 | ]), [ 'class' => 'blog-buttons-write' ]) ?> |
28 | - <a class="blog-buttons-add-favorite" href="#">Добавить<br>в закладки</a> | 28 | + <?php |
29 | + if(!empty( \Yii::$app->user->identity )) { | ||
30 | + if($this->params[ 'user' ]->isBookmarked) { | ||
31 | + echo Html::a('Убрать из закладок', [ '#' ], [ | ||
32 | + 'class' => 'get-list artbox_bookmark_remove_performer', | ||
33 | + 'data-id' => $this->params[ 'user' ]->id, | ||
34 | + ]); | ||
35 | + } else { | ||
36 | + echo Html::a('Добавить в закладки', [ '#' ], [ | ||
37 | + 'class' => 'get-list artbox_bookmark_add_performer', | ||
38 | + 'data-id' => $this->params[ 'user' ]->id, | ||
39 | + ]); | ||
40 | + } | ||
41 | + } | ||
42 | + ?> | ||
29 | </div> | 43 | </div> |
30 | </div> | 44 | </div> |
31 | </div> | 45 | </div> |
@@ -160,7 +174,7 @@ | @@ -160,7 +174,7 @@ | ||
160 | <li><img src="/images/sidebar-ico/ico_money.png" alt=""/> | 174 | <li><img src="/images/sidebar-ico/ico_money.png" alt=""/> |
161 | <div class="sidebarvievstxt"> | 175 | <div class="sidebarvievstxt"> |
162 | <span class="sidebar-views-txt">Стоимость работ:<br/></span> | 176 | <span class="sidebar-views-txt">Стоимость работ:<br/></span> |
163 | - <?= $this->params[ 'user' ]->userInfo->salary. ' ' . $this->params['user']->userInfo->currency->label ?> | 177 | + <?= $this->params[ 'user' ]->userInfo->salary . ' ' . $this->params[ 'user' ]->userInfo->currency->label ?> |
164 | </div> | 178 | </div> |
165 | </li> | 179 | </li> |
166 | <li><img src="/images/sidebar-ico/ico-13.png" alt=""/> | 180 | <li><img src="/images/sidebar-ico/ico-13.png" alt=""/> |
frontend/views/performer/common.php
@@ -97,63 +97,37 @@ | @@ -97,63 +97,37 @@ | ||
97 | </ul> | 97 | </ul> |
98 | </div> | 98 | </div> |
99 | <div class="profile-comments style"> | 99 | <div class="profile-comments style"> |
100 | - <div class="company-performer-comm-title style">Отзывов: 54</div> | 100 | + <div class="company-performer-comm-title style">Отзывов: <?= count($user->comments) ?></div> |
101 | <div class="company-performer-comments-wr style"> | 101 | <div class="company-performer-comments-wr style"> |
102 | - <div class="company-performer-comments-bl"> | ||
103 | - <div class="rating"> | ||
104 | - <!--оценка--> | ||
105 | - <input type="hidden" class="val" value="3"/> | ||
106 | - <!--количество голосов--> | ||
107 | - <input type="hidden" class="votes" value="12"/> | ||
108 | - </div> | ||
109 | - | ||
110 | - <div class="company-performer-comments-autor">Отзыв от: Евгения</div> | ||
111 | - <div class="company-performer-comments-txt">sfds</div> | ||
112 | - <a href="#" class="company-comm-see-all"><span>Развернуть</span></a> | ||
113 | - </div> | ||
114 | - | ||
115 | - <div class="company-performer-comments-bl"> | ||
116 | - <div class="rating"> | ||
117 | - <!--оценка--> | ||
118 | - <input type="hidden" class="val" value="2"/> | ||
119 | - <!--количество голосов--> | ||
120 | - <input type="hidden" class="votes" value="12"/> | ||
121 | - </div> | ||
122 | - | ||
123 | - <div class="company-performer-comments-autor">Отзыв от: Евгения</div> | ||
124 | - <div class="company-performer-comments-txt">2Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения.</div> | ||
125 | - <a href="#" class="company-comm-see-all"><span>Развернуть</span></a> | ||
126 | - </div> | ||
127 | - | ||
128 | - <div class="company-performer-comments-bl"> | ||
129 | - <div class="rating"> | ||
130 | - <!--оценка--> | ||
131 | - <input type="hidden" class="val" value="4"/> | ||
132 | - <!--количество голосов--> | ||
133 | - <input type="hidden" class="votes" value="12"/> | ||
134 | - </div> | ||
135 | - | ||
136 | - <div class="company-performer-comments-autor">Отзыв от: Евгения</div> | ||
137 | - <div class="company-performer-comments-txt">3Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения. Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения. | ||
138 | - </div> | ||
139 | - <a href="#" class="company-comm-see-all"><span>Развернуть</span></a> | ||
140 | - </div> | ||
141 | - | ||
142 | - <div class="company-performer-comments-bl"> | ||
143 | - <div class="rating"> | ||
144 | - <!--оценка--> | ||
145 | - <input type="hidden" class="val" value="5"/> | ||
146 | - <!--количество голосов--> | ||
147 | - <input type="hidden" class="votes" value="12"/> | ||
148 | - </div> | ||
149 | - | ||
150 | - <div class="company-performer-comments-autor">Отзыв от: Евгения</div> | ||
151 | - <div class="company-performer-comments-txt">4Петер, очень понравились Ваши работы. Замечательный вкус!!! Тонкое сочетание стиля, цвета и формы! Очень нравится. Успехов в работе и вдохновения. | ||
152 | - </div> | ||
153 | - <a href="#" class="company-comm-see-all"><span>Развернуть</span></a> | ||
154 | - </div> | 102 | + <?php |
103 | + $count = ( count($user->comments) > 4 ) ? 4 : count($user->comments); | ||
104 | + for($i = 0; $i < $count; $i++) { | ||
105 | + ?> | ||
106 | + <div class="company-performer-comments-bl"> | ||
107 | + <?php | ||
108 | + if(!empty( $user->comments[ $i ]->rating )) { | ||
109 | + ?> | ||
110 | + <div class="rating"> | ||
111 | + <!--оценка--> | ||
112 | + <input type="hidden" class="val" value="<?= $user->comments[ $i ]->rating->value ?>"/> | ||
113 | + <!--количество голосов--> | ||
114 | + <input type="hidden" class="votes" value="1"/> | ||
115 | + </div> | ||
116 | + <?php | ||
117 | + } | ||
118 | + ?> | ||
119 | + <div class="company-performer-comments-autor">Отзыв от: <?= $user->comments[$i]->user->name ?></div> | ||
120 | + <div class="company-performer-comments-txt"><?= $user->comments[$i]->text ?></div> | ||
121 | + <a href="#" class="company-comm-see-all"><span>Развернуть</span></a> | ||
122 | + </div> | ||
123 | + <?php | ||
124 | + } | ||
125 | + ?> | ||
155 | </div> | 126 | </div> |
156 | - <div class="company-performer-comm-see-all-butt style"><a href="#">Читать все отзывы</a> | 127 | + <div class="company-performer-comm-see-all-butt style"> |
128 | + <?php | ||
129 | + echo Html::a('Читать все отзывы', ['performer/review', 'performer_id' => $user->id]); | ||
130 | + ?> | ||
157 | </div> | 131 | </div> |
158 | </div> | 132 | </div> |
159 | </div> | 133 | </div> |
1 | +<?php | ||
2 | + /** | ||
3 | + * @var CommentProject $model | ||
4 | + * @var int $key | ||
5 | + * @var integer $index | ||
6 | + * @var ListView $widget | ||
7 | + */ | ||
8 | + use common\models\Option; | ||
9 | + use common\modules\comment\models\CommentProject; | ||
10 | + use yii\data\ActiveDataProvider; | ||
11 | + use yii\helpers\Html; | ||
12 | + use yii\widgets\ListView; | ||
13 | + | ||
14 | +?> | ||
15 | +<div class="left-left-proektant-cabinet"> | ||
16 | + <?php | ||
17 | + echo Html::a($model->project->name, ['tender/view', 'tender_id' => $model->project->project_id], ['class' => 'srch-prof-title']); | ||
18 | + ?> | ||
19 | + <div class="srch-prof-budget"> | ||
20 | + <span></span> | ||
21 | + Бюджет: | ||
22 | + <?php | ||
23 | + if($model->project->contractual) { | ||
24 | + echo 'Договорной'; | ||
25 | + } else { | ||
26 | + echo $model->project->budget . ' ' . $model->project->budgetCurrency->label; | ||
27 | + } | ||
28 | + ?> | ||
29 | + </div> | ||
30 | + | ||
31 | + <div class="srch-prof-text"> | ||
32 | + <?= $model->project->description ?> | ||
33 | + </div> | ||
34 | + <div class="srch-prof-params-wr"> | ||
35 | + <div class="srch-prof-params srch-prof-params-city"> | ||
36 | + <img src="/images/ico-city.png" alt=""/><span><?= $model->project->city ?></span> | ||
37 | + </div> | ||
38 | + <div class="srch-prof-params srch-prof-params-clock"> | ||
39 | + <img src="/images/ico-clock.png" alt=""/><span><?= \Yii::$app->formatter->asDate(time($model->project->description), 'php:d.m.Y') ?></span> | ||
40 | + </div> | ||
41 | + <div class="srch-prof-params srch-prof-params-comm"> | ||
42 | + <img src="/images/ico-comm.png" alt=""/><span><?= count($model->project->comments) ?> предложения</span> | ||
43 | + </div> | ||
44 | + </div> | ||
45 | +</div> | ||
46 | + | ||
47 | +<div class="right-proektant-cabinet"> | ||
48 | + <div class="right-proektant-cabinet-candidate"> | ||
49 | + <img src="/images/cabinet/ico-<?= $model->state ?>.png" alt=""/> | ||
50 | + <span> | ||
51 | + <?php | ||
52 | + switch($model->state) { | ||
53 | + case 1: | ||
54 | + echo 'Заказчик еще не рассмотрел Ваше предложение'; | ||
55 | + break; | ||
56 | + case 2: | ||
57 | + echo 'Ваша кандидатура на рассмотрении'; | ||
58 | + break; | ||
59 | + case 3: | ||
60 | + echo 'Вы назначены исполнителем'; | ||
61 | + break; | ||
62 | + case 4: | ||
63 | + echo 'Заказчик отказал Вашему предложению'; | ||
64 | + break; | ||
65 | + case 5: | ||
66 | + echo 'Вы отказались от данного предложения'; | ||
67 | + break; | ||
68 | + } | ||
69 | + ?> | ||
70 | + </span> | ||
71 | + </div> | ||
72 | + <div style="clear:both"></div> | ||
73 | + <div class="right-proektant-cabinet-message-new"> | ||
74 | + <img src="/images/cabinet/ico-6.png" alt=""/> | ||
75 | + <?php | ||
76 | + echo Html::a(count(\Yii::$app->user->identity->getChat($model->project->user_id) | ||
77 | + ->one()->messages) . ' сообщения', [ | ||
78 | + 'chat/message', | ||
79 | + 'user_id' => $model->project->user_id, | ||
80 | + ]); | ||
81 | + if($model->state == 5) { | ||
82 | + echo Html::a('Отменить', [ '#' ], [ | ||
83 | + 'data-project-id' => $model->project->project_id, | ||
84 | + 'data-comment-id' => $model->comment_id, | ||
85 | + 'class' => 'artbox_project_make_new', | ||
86 | + ]); | ||
87 | + } else { | ||
88 | + echo Html::a('Отказаться', [ '#' ], [ | ||
89 | + 'data-project-id' => $model->project->project_id, | ||
90 | + 'data-comment-id' => $model->comment_id, | ||
91 | + 'class' => 'artbox_project_make_trash', | ||
92 | + ]); | ||
93 | + } | ||
94 | + ?> | ||
95 | + </div> | ||
96 | +</div> | ||
0 | \ No newline at end of file | 97 | \ No newline at end of file |
frontend/views/projects/projects.php
1 | <?php | 1 | <?php |
2 | + /** | ||
3 | + * @var int[] $groups | ||
4 | + * @var ActiveDataProvider $comments | ||
5 | + */ | ||
2 | use common\models\Option; | 6 | use common\models\Option; |
7 | + use yii\data\ActiveDataProvider; | ||
8 | + use yii\helpers\Html; | ||
9 | + use yii\widgets\ListView; | ||
3 | 10 | ||
4 | $this->title = 'Мой профиль'; | 11 | $this->title = 'Мой профиль'; |
5 | -$this->params['breadcrumbs'][] = $this->title; | 12 | + $this->params[ 'breadcrumbs' ][] = $this->title; |
6 | ?> | 13 | ?> |
7 | <div class="section-box content"> | 14 | <div class="section-box content"> |
8 | <div class="section-box-22"> | 15 | <div class="section-box-22"> |
@@ -14,29 +21,71 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -14,29 +21,71 @@ $this->params['breadcrumbs'][] = $this->title; | ||
14 | <ul class="cabinet-list style"> | 21 | <ul class="cabinet-list style"> |
15 | <li> | 22 | <li> |
16 | <img src="/images/cabinet/ico-1.png" alt=""/> | 23 | <img src="/images/cabinet/ico-1.png" alt=""/> |
17 | - <span>Не определен </span>17 | 24 | + <span> |
25 | + <?= Html::a('Не определен', [ | ||
26 | + 'projects/index', | ||
27 | + 'CommentProjectSearch[state]' => 1, | ||
28 | + ]) ?> | ||
29 | + </span><?= ( !empty( $groups[ 1 ] ) ) ? $groups[ 1 ] : 0 ?> | ||
18 | </li> | 30 | </li> |
19 | <li> | 31 | <li> |
20 | <img src="/images/cabinet/ico-2.png" alt=""/> | 32 | <img src="/images/cabinet/ico-2.png" alt=""/> |
21 | - <span>Кандидат </span>0 | 33 | + <span> |
34 | + <?= Html::a('Кандидат', [ | ||
35 | + 'projects/index', | ||
36 | + 'CommentProjectSearch[state]' => 2, | ||
37 | + ]) ?> | ||
38 | + </span><?= ( !empty( $groups[ 2 ] ) ) ? $groups[ 2 ] : 0 ?> | ||
22 | </li> | 39 | </li> |
23 | <li> | 40 | <li> |
24 | <img src="/images/cabinet/ico-3.png" alt=""/> | 41 | <img src="/images/cabinet/ico-3.png" alt=""/> |
25 | - <span>Исполнитель </span>0 | 42 | + <span> |
43 | + <?= Html::a('Исполнитель', [ | ||
44 | + 'projects/index', | ||
45 | + 'CommentProjectSearch[state]' => 3, | ||
46 | + ]) ?> | ||
47 | + </span><?= ( !empty( $groups[ 3 ] ) ) ? $groups[ 3 ] : 0 ?> | ||
26 | </li> | 48 | </li> |
27 | <li> | 49 | <li> |
28 | <img src="/images/cabinet/ico-4.png" alt=""/> | 50 | <img src="/images/cabinet/ico-4.png" alt=""/> |
29 | - <span>Отказали </span>0 | 51 | + <span> |
52 | + <?= Html::a('Отказали', [ | ||
53 | + 'projects/index', | ||
54 | + 'CommentProjectSearch[state]' => 4, | ||
55 | + ]) ?> | ||
56 | + </span><?= ( !empty( $groups[ 4 ] ) ) ? $groups[ 4 ] : 0 ?> | ||
30 | </li> | 57 | </li> |
31 | <li> | 58 | <li> |
32 | - <span>Корзина </span>7 | 59 | + <span> |
60 | + <?= Html::a('Корзина', [ | ||
61 | + 'projects/index', | ||
62 | + 'CommentProjectSearch[state]' => 5, | ||
63 | + ]) ?> | ||
64 | + </span><?= ( !empty( $groups[ 5 ] ) ) ? $groups[ 5 ] : 0 ?> | ||
33 | </li> | 65 | </li> |
34 | </ul> | 66 | </ul> |
67 | + <?php | ||
68 | + echo ListView::widget([ | ||
69 | + 'dataProvider' => $comments, | ||
70 | + 'options' => [ | ||
71 | + 'class' => 'style', | ||
72 | + ], | ||
73 | + 'itemOptions' => [ | ||
74 | + 'class' => 'search-profile-blocks', | ||
75 | + ], | ||
76 | + 'itemView' => '_projects_list_view', | ||
77 | + ]); | ||
78 | + ?> | ||
79 | + <?php | ||
80 | + /* | ||
81 | + ?> | ||
35 | <div class="style"> | 82 | <div class="style"> |
36 | <div class="search-profile-blocks"> | 83 | <div class="search-profile-blocks"> |
37 | <div class="left-left-proektant-cabinet"> | 84 | <div class="left-left-proektant-cabinet"> |
38 | <a href="" class="srch-prof-title">Создание проекта дома</a> | 85 | <a href="" class="srch-prof-title">Создание проекта дома</a> |
39 | - <div class="srch-prof-budget"><span></span>Бюджет: 20 000 грн (Договорной)</div> | 86 | + <div class="srch-prof-budget"> |
87 | + <span></span>Бюджет: 20 000 грн (Договорной) | ||
88 | + </div> | ||
40 | 89 | ||
41 | <div class="srch-prof-text"> | 90 | <div class="srch-prof-text"> |
42 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> | 91 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> |
@@ -72,7 +121,9 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -72,7 +121,9 @@ $this->params['breadcrumbs'][] = $this->title; | ||
72 | <div class="search-profile-blocks"> | 121 | <div class="search-profile-blocks"> |
73 | <div class="left-left-proektant-cabinet"> | 122 | <div class="left-left-proektant-cabinet"> |
74 | <a href="" class="srch-prof-title">Создание проекта дома</a> | 123 | <a href="" class="srch-prof-title">Создание проекта дома</a> |
75 | - <div class="srch-prof-budget"><span></span>Бюджет: 20 000 грн (Договорной)</div> | 124 | + <div class="srch-prof-budget"> |
125 | + <span></span>Бюджет: 20 000 грн (Договорной) | ||
126 | + </div> | ||
76 | 127 | ||
77 | <div class="srch-prof-text"> | 128 | <div class="srch-prof-text"> |
78 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> | 129 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> |
@@ -108,7 +159,9 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -108,7 +159,9 @@ $this->params['breadcrumbs'][] = $this->title; | ||
108 | <div class="search-profile-blocks"> | 159 | <div class="search-profile-blocks"> |
109 | <div class="left-left-proektant-cabinet"> | 160 | <div class="left-left-proektant-cabinet"> |
110 | <a href="" class="srch-prof-title">Создание проекта дома</a> | 161 | <a href="" class="srch-prof-title">Создание проекта дома</a> |
111 | - <div class="srch-prof-budget"><span></span>Бюджет: 20 000 грн (Договорной)</div> | 162 | + <div class="srch-prof-budget"> |
163 | + <span></span>Бюджет: 20 000 грн (Договорной) | ||
164 | + </div> | ||
112 | 165 | ||
113 | <div class="srch-prof-text"> | 166 | <div class="srch-prof-text"> |
114 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> | 167 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> |
@@ -144,7 +197,9 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -144,7 +197,9 @@ $this->params['breadcrumbs'][] = $this->title; | ||
144 | <div class="search-profile-blocks"> | 197 | <div class="search-profile-blocks"> |
145 | <div class="left-left-proektant-cabinet"> | 198 | <div class="left-left-proektant-cabinet"> |
146 | <a href="" class="srch-prof-title">Создание проекта дома</a> | 199 | <a href="" class="srch-prof-title">Создание проекта дома</a> |
147 | - <div class="srch-prof-budget"><span></span>Бюджет: 20 000 грн (Договорной)</div> | 200 | + <div class="srch-prof-budget"> |
201 | + <span></span>Бюджет: 20 000 грн (Договорной) | ||
202 | + </div> | ||
148 | 203 | ||
149 | <div class="srch-prof-text"> | 204 | <div class="srch-prof-text"> |
150 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> | 205 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> |
@@ -180,7 +235,9 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -180,7 +235,9 @@ $this->params['breadcrumbs'][] = $this->title; | ||
180 | <div class="search-profile-blocks"> | 235 | <div class="search-profile-blocks"> |
181 | <div class="left-left-proektant-cabinet"> | 236 | <div class="left-left-proektant-cabinet"> |
182 | <a href="" class="srch-prof-title">Создание проекта дома</a> | 237 | <a href="" class="srch-prof-title">Создание проекта дома</a> |
183 | - <div class="srch-prof-budget"><span></span>Бюджет: 20 000 грн (Договорной)</div> | 238 | + <div class="srch-prof-budget"> |
239 | + <span></span>Бюджет: 20 000 грн (Договорной) | ||
240 | + </div> | ||
184 | 241 | ||
185 | <div class="srch-prof-text"> | 242 | <div class="srch-prof-text"> |
186 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> | 243 | <p>На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов.</p> |
@@ -226,6 +283,9 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -226,6 +283,9 @@ $this->params['breadcrumbs'][] = $this->title; | ||
226 | <a href="#" class="navi-buttons-yet">Еще 24 проекта</a> | 283 | <a href="#" class="navi-buttons-yet">Еще 24 проекта</a> |
227 | </div> | 284 | </div> |
228 | </div> | 285 | </div> |
286 | + <?php | ||
287 | + */ | ||
288 | + ?> | ||
229 | 289 | ||
230 | 290 | ||
231 | </div> | 291 | </div> |
@@ -236,6 +296,5 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -236,6 +296,5 @@ $this->params['breadcrumbs'][] = $this->title; | ||
236 | <div> | 296 | <div> |
237 | 297 | ||
238 | 298 | ||
239 | - | ||
240 | </div> | 299 | </div> |
241 | </div> | 300 | </div> |
242 | \ No newline at end of file | 301 | \ No newline at end of file |
frontend/web/js/forms.js
@@ -461,6 +461,25 @@ $(document).ready( | @@ -461,6 +461,25 @@ $(document).ready( | ||
461 | } | 461 | } |
462 | ); | 462 | ); |
463 | }); | 463 | }); |
464 | + $(document).on('click', '.artbox_project_make_trash', function(e) { | ||
465 | + e.preventDefault(); | ||
466 | + var project_id = $(this).data('project-id'); | ||
467 | + var comment_id = $(this).data('comment-id'); | ||
468 | + var state = 5; | ||
469 | + var link = $(this); | ||
470 | + $.post('/tender/change-state', {project_id: project_id, comment_id: comment_id, state: state}, function(data) { | ||
471 | + if(data.error) { | ||
472 | + alert(data.error); | ||
473 | + } else { | ||
474 | + alert(data.message); | ||
475 | + } | ||
476 | + }, 'json').fail( | ||
477 | + function() | ||
478 | + { | ||
479 | + alert(txtErrorModal); | ||
480 | + } | ||
481 | + ); | ||
482 | + }); | ||
464 | 483 | ||
465 | 484 | ||
466 | //offer | 485 | //offer |