Commit c0bffebb2bbb4b1a674f7d27cdd686684e0e389e
1 parent
616c8534
test
Showing
5 changed files
with
92 additions
and
80 deletions
Show diff stats
common/config/main.php
| @@ -96,6 +96,7 @@ | @@ -96,6 +96,7 @@ | ||
| 96 | ], | 96 | ], |
| 97 | 'formatter' => [ | 97 | 'formatter' => [ |
| 98 | 'booleanFormat' => ['Нет', 'Да'], | 98 | 'booleanFormat' => ['Нет', 'Да'], |
| 99 | + 'defaultTimeZone' => 'Europe/Kiev', | ||
| 99 | ], | 100 | ], |
| 100 | 'urlManager' => [ | 101 | 'urlManager' => [ |
| 101 | 'enablePrettyUrl' => true, | 102 | 'enablePrettyUrl' => true, |
common/models/CustomerSearch.php
| @@ -37,13 +37,13 @@ | @@ -37,13 +37,13 @@ | ||
| 37 | 'integer', | 37 | 'integer', |
| 38 | ], | 38 | ], |
| 39 | [ | 39 | [ |
| 40 | - ['rating'], | 40 | + [ 'rating' ], |
| 41 | 'number', | 41 | 'number', |
| 42 | 'min' => 0, | 42 | 'min' => 0, |
| 43 | 'max' => 5, | 43 | 'max' => 5, |
| 44 | ], | 44 | ], |
| 45 | [ | 45 | [ |
| 46 | - ['rating'], | 46 | + [ 'rating' ], |
| 47 | 'default', | 47 | 'default', |
| 48 | 'value' => 0, | 48 | 'value' => 0, |
| 49 | ], | 49 | ], |
| @@ -63,11 +63,11 @@ | @@ -63,11 +63,11 @@ | ||
| 63 | public function attributeLabels() | 63 | public function attributeLabels() |
| 64 | { | 64 | { |
| 65 | return [ | 65 | return [ |
| 66 | - 'type' => Yii::t('app', 'Тип заказчика'), | ||
| 67 | - 'rating' => Yii::t('app', 'Рейтинг'), | ||
| 68 | - 'online' => Yii::t('app', 'Статус'), | ||
| 69 | - 'city' => Yii::t('app', 'Город'), | ||
| 70 | - 'info' => Yii::t('app', 'Любая информация о заказчике'), | 66 | + 'type' => Yii::t('app', 'Тип заказчика'), |
| 67 | + 'rating' => Yii::t('app', 'Рейтинг'), | ||
| 68 | + 'online' => Yii::t('app', 'Статус'), | ||
| 69 | + 'city' => Yii::t('app', 'Город'), | ||
| 70 | + 'info' => Yii::t('app', 'Любая информация о заказчике'), | ||
| 71 | ]; | 71 | ]; |
| 72 | } | 72 | } |
| 73 | 73 | ||
| @@ -133,61 +133,62 @@ | @@ -133,61 +133,62 @@ | ||
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | $query->andFilterWhere([ | 135 | $query->andFilterWhere([ |
| 136 | - '>=', 'user_info.rating', $this->rating, | 136 | + '>=', |
| 137 | + 'user_info.rating', | ||
| 138 | + $this->rating, | ||
| 137 | ]); | 139 | ]); |
| 138 | 140 | ||
| 139 | $query->andFilterWhere([ | 141 | $query->andFilterWhere([ |
| 140 | - 'like', | ||
| 141 | - 'user_info.city', | ||
| 142 | - $this->city, | ||
| 143 | - ])->andFilterWhere([ | ||
| 144 | - 'or', | ||
| 145 | - [ | ||
| 146 | - 'like', | ||
| 147 | - 'LOWER(username)', | ||
| 148 | - mb_strtolower($this->info), | ||
| 149 | - ], | ||
| 150 | - [ | ||
| 151 | - 'like', | ||
| 152 | - 'LOWER(lastname)', | ||
| 153 | - mb_strtolower($this->info), | ||
| 154 | - ], | ||
| 155 | - [ | ||
| 156 | - 'like', | ||
| 157 | - 'LOWER(firstname)', | ||
| 158 | - mb_strtolower($this->info), | ||
| 159 | - ], | ||
| 160 | - [ | ||
| 161 | - 'like', | ||
| 162 | - 'LOWER(middlename)', | ||
| 163 | - mb_strtolower($this->info), | ||
| 164 | - ], | ||
| 165 | - [ | ||
| 166 | - 'like', | ||
| 167 | - 'LOWER(company_info.name)', | ||
| 168 | - mb_strtolower($this->info), | ||
| 169 | - ], | ||
| 170 | - [ | ||
| 171 | - 'like', | ||
| 172 | - 'LOWER(company_info.street)', | ||
| 173 | - mb_strtolower($this->info), | ||
| 174 | - ], | ||
| 175 | - [ | ||
| 176 | - 'like', | ||
| 177 | - 'LOWER(user_info.country)', | ||
| 178 | - mb_strtolower($this->info), | ||
| 179 | - ], | ||
| 180 | - [ | ||
| 181 | - 'like', | ||
| 182 | - 'LOWER(user_info.city)', | ||
| 183 | - mb_strtolower($this->info), | ||
| 184 | - ], | ||
| 185 | - [ | ||
| 186 | - 'like', | ||
| 187 | - 'LOWER(user_info.about)', | ||
| 188 | - mb_strtolower($this->info), | ||
| 189 | - ], | ||
| 190 | - ]); | 142 | + 'user_info.city' => $this->city, |
| 143 | + ]) | ||
| 144 | + ->andFilterWhere([ | ||
| 145 | + 'or', | ||
| 146 | + [ | ||
| 147 | + 'like', | ||
| 148 | + 'LOWER(username)', | ||
| 149 | + mb_strtolower($this->info), | ||
| 150 | + ], | ||
| 151 | + [ | ||
| 152 | + 'like', | ||
| 153 | + 'LOWER(lastname)', | ||
| 154 | + mb_strtolower($this->info), | ||
| 155 | + ], | ||
| 156 | + [ | ||
| 157 | + 'like', | ||
| 158 | + 'LOWER(firstname)', | ||
| 159 | + mb_strtolower($this->info), | ||
| 160 | + ], | ||
| 161 | + [ | ||
| 162 | + 'like', | ||
| 163 | + 'LOWER(middlename)', | ||
| 164 | + mb_strtolower($this->info), | ||
| 165 | + ], | ||
| 166 | + [ | ||
| 167 | + 'like', | ||
| 168 | + 'LOWER(company_info.name)', | ||
| 169 | + mb_strtolower($this->info), | ||
| 170 | + ], | ||
| 171 | + [ | ||
| 172 | + 'like', | ||
| 173 | + 'LOWER(company_info.street)', | ||
| 174 | + mb_strtolower($this->info), | ||
| 175 | + ], | ||
| 176 | + [ | ||
| 177 | + 'like', | ||
| 178 | + 'LOWER(user_info.country)', | ||
| 179 | + mb_strtolower($this->info), | ||
| 180 | + ], | ||
| 181 | + [ | ||
| 182 | + 'like', | ||
| 183 | + 'LOWER(user_info.city)', | ||
| 184 | + mb_strtolower($this->info), | ||
| 185 | + ], | ||
| 186 | + [ | ||
| 187 | + 'like', | ||
| 188 | + 'LOWER(user_info.about)', | ||
| 189 | + mb_strtolower($this->info), | ||
| 190 | + ], | ||
| 191 | + ]); | ||
| 191 | 192 | ||
| 192 | return $dataProvider; | 193 | return $dataProvider; |
| 193 | } | 194 | } |
frontend/controllers/SearchController.php
| @@ -124,16 +124,9 @@ | @@ -124,16 +124,9 @@ | ||
| 124 | ], | 124 | ], |
| 125 | ]); | 125 | ]); |
| 126 | $model->load(Yii::$app->request->queryParams); | 126 | $model->load(Yii::$app->request->queryParams); |
| 127 | - $cities = UserInfo::find() | ||
| 128 | - ->select('city') | ||
| 129 | - ->distinct() | ||
| 130 | - ->asArray() | ||
| 131 | - ->indexBy('city') | ||
| 132 | - ->column(); | ||
| 133 | return $this->render('customer', [ | 127 | return $this->render('customer', [ |
| 134 | 'model' => $model, | 128 | 'model' => $model, |
| 135 | 'dataProvider' => $dataProvider, | 129 | 'dataProvider' => $dataProvider, |
| 136 | - 'cities' => $cities, | ||
| 137 | ]); | 130 | ]); |
| 138 | } | 131 | } |
| 139 | 132 |
frontend/views/search/_customer_list_view.php
| @@ -52,7 +52,14 @@ | @@ -52,7 +52,14 @@ | ||
| 52 | } | 52 | } |
| 53 | ?> | 53 | ?> |
| 54 | <div class="search_perform_visit"> | 54 | <div class="search_perform_visit"> |
| 55 | - <span>Последний визит:</span> <?= \Yii::$app->formatter->asRelativeTime($model->userInfo->date_visit) ?> | 55 | + <span>Последний визит:</span> |
| 56 | + <?php | ||
| 57 | + if((time() - \Yii::$app->formatter->asTimestamp($model->userInfo->date_visit)) < 1800) { | ||
| 58 | + echo 'Онлайн'; | ||
| 59 | + } else { | ||
| 60 | + echo \Yii::$app->formatter->asRelativeTime($model->userInfo->date_visit); | ||
| 61 | + } | ||
| 62 | + ?> | ||
| 56 | </div> | 63 | </div> |
| 57 | <div class="search_perform_projets_nam"> | 64 | <div class="search_perform_projets_nam"> |
| 58 | <?= Html::a("Заказано проектов {$model->getProjects()->count()}", ['search/project', (new Project())->formName().'[user_id]' => $model->id]) ?> | 65 | <?= Html::a("Заказано проектов {$model->getProjects()->count()}", ['search/project', (new Project())->formName().'[user_id]' => $model->id]) ?> |
frontend/views/search/customer.php
| @@ -2,12 +2,13 @@ | @@ -2,12 +2,13 @@ | ||
| 2 | /** | 2 | /** |
| 3 | * @var CustomerSearch $model | 3 | * @var CustomerSearch $model |
| 4 | * @var ActiveDataProvider $dataProvider | 4 | * @var ActiveDataProvider $dataProvider |
| 5 | - * @var string[] $cities | ||
| 6 | */ | 5 | */ |
| 7 | use common\models\CustomerSearch; | 6 | use common\models\CustomerSearch; |
| 7 | + use kartik\select2\Select2; | ||
| 8 | use yii\data\ActiveDataProvider; | 8 | use yii\data\ActiveDataProvider; |
| 9 | use yii\helpers\Html; | 9 | use yii\helpers\Html; |
| 10 | use yii\jui\SliderInput; | 10 | use yii\jui\SliderInput; |
| 11 | + use yii\web\JsExpression; | ||
| 11 | use yii\widgets\ActiveForm; | 12 | use yii\widgets\ActiveForm; |
| 12 | use yii\widgets\LinkSorter; | 13 | use yii\widgets\LinkSorter; |
| 13 | use yii\widgets\ListView; | 14 | use yii\widgets\ListView; |
| @@ -31,13 +32,22 @@ | @@ -31,13 +32,22 @@ | ||
| 31 | 'action' => [ '' ], | 32 | 'action' => [ '' ], |
| 32 | ]); | 33 | ]); |
| 33 | 34 | ||
| 34 | - echo $form->field($model, 'city', [ | ||
| 35 | - 'options' => [ | ||
| 36 | - 'class' => 'blocks-check-list-wrapp', | ||
| 37 | - ], | ||
| 38 | - 'template' => "<div class='blocks-check-title'>{label}</div>\n{input}<div class='select-after'></div>\n{hint}\n{error}", | ||
| 39 | - ]) | ||
| 40 | - ->dropDownList($cities, [ 'prompt' => 'Любой' ]); | 35 | + echo $form->field($model, 'city') |
| 36 | + ->widget(Select2::classname(), [ | ||
| 37 | + 'options' => [ 'placeholder' => 'Выбор города ...' ], | ||
| 38 | + 'pluginOptions' => [ | ||
| 39 | + 'allowClear' => true, | ||
| 40 | + 'minimumInputLength' => 3, | ||
| 41 | + 'ajax' => [ | ||
| 42 | + 'url' => \yii\helpers\Url::to([ 'site/city' ]), | ||
| 43 | + 'dataType' => 'json', | ||
| 44 | + 'data' => new JsExpression('function(params) { return {q:params.term}; }'), | ||
| 45 | + ], | ||
| 46 | + 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), | ||
| 47 | + 'templateResult' => new JsExpression('function(city) { return city.text; }'), | ||
| 48 | + 'templateSelection' => new JsExpression('function (city) { return city.text; }'), | ||
| 49 | + ], | ||
| 50 | + ]); | ||
| 41 | 51 | ||
| 42 | echo $form->field($model, 'type', [ | 52 | echo $form->field($model, 'type', [ |
| 43 | 'options' => [ | 53 | 'options' => [ |
| @@ -54,10 +64,10 @@ | @@ -54,10 +64,10 @@ | ||
| 54 | <div id="slider-value"></div> | 64 | <div id="slider-value"></div> |
| 55 | <?php | 65 | <?php |
| 56 | echo $form->field($model, 'rating', [ | 66 | echo $form->field($model, 'rating', [ |
| 57 | - 'template' => "{label}<br><div id='{$form->id}-rating'>{$model->rating}</div><br>{input}\n{hint}\n{error}", | ||
| 58 | - 'labelOptions' => [ | ||
| 59 | - 'class' => 'blocks-check-title', | ||
| 60 | - ], | 67 | + 'template' => "{label}<br><div id='{$form->id}-rating'>{$model->rating}</div><br>{input}\n{hint}\n{error}", |
| 68 | + 'labelOptions' => [ | ||
| 69 | + 'class' => 'blocks-check-title', | ||
| 70 | + ], | ||
| 61 | ]) | 71 | ]) |
| 62 | ->widget(SliderInput::className(), [ | 72 | ->widget(SliderInput::className(), [ |
| 63 | 'clientOptions' => [ | 73 | 'clientOptions' => [ |
| @@ -66,7 +76,7 @@ | @@ -66,7 +76,7 @@ | ||
| 66 | 'step' => 0.5, | 76 | 'step' => 0.5, |
| 67 | ], | 77 | ], |
| 68 | 'clientEvents' => [ | 78 | 'clientEvents' => [ |
| 69 | - 'slide' => "function( event, ui ) { | 79 | + 'slide' => "function( event, ui ) { |
| 70 | $( '#{$form->id}-rating' ).text(ui.value); | 80 | $( '#{$form->id}-rating' ).text(ui.value); |
| 71 | $('input[name=\"{$model->formName()}[rating]\"]').val(ui.value); | 81 | $('input[name=\"{$model->formName()}[rating]\"]').val(ui.value); |
| 72 | 82 |