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 |