Commit f94a00a6ea16e1d16a587bd1cbe624ca019b1d27

Authored by Yarik
1 parent 01cd3c0f

test

common/models/CustomerSearch.php
... ... @@ -50,6 +50,20 @@
50 50 /**
51 51 * @inheritdoc
52 52 */
  53 + public function attributeLabels()
  54 + {
  55 + return [
  56 + 'type' => Yii::t('app', 'Тип заказчика'),
  57 + 'rating' => Yii::t('app', 'Рейтинг'),
  58 + 'online' => Yii::t('app', 'Статус'),
  59 + 'city' => Yii::t('app', 'Город'),
  60 + 'info' => Yii::t('app', 'Любая информация о заказчике'),
  61 + ];
  62 + }
  63 +
  64 + /**
  65 + * @inheritdoc
  66 + */
53 67 public function scenarios()
54 68 {
55 69 // bypass scenarios() implementation in the parent class
... ... @@ -94,7 +108,7 @@
94 108 $query->andWhere([
95 109 'type' => 2,
96 110 ]);
97   - } else {
  111 + } elseif($this->type == 1) {
98 112 $query->andWhere([
99 113 'type' => 1,
100 114 ]);
... ... @@ -112,6 +126,53 @@
112 126 'like',
113 127 'user_info.city',
114 128 $this->city,
  129 + ])->andFilterWhere([
  130 + 'or',
  131 + [
  132 + 'like',
  133 + 'LOWER(username)',
  134 + mb_strtolower($this->info),
  135 + ],
  136 + [
  137 + 'like',
  138 + 'LOWER(lastname)',
  139 + mb_strtolower($this->info),
  140 + ],
  141 + [
  142 + 'like',
  143 + 'LOWER(firstname)',
  144 + mb_strtolower($this->info),
  145 + ],
  146 + [
  147 + 'like',
  148 + 'LOWER(middlename)',
  149 + mb_strtolower($this->info),
  150 + ],
  151 + [
  152 + 'like',
  153 + 'LOWER(company_info.name)',
  154 + mb_strtolower($this->info),
  155 + ],
  156 + [
  157 + 'like',
  158 + 'LOWER(company_info.street)',
  159 + mb_strtolower($this->info),
  160 + ],
  161 + [
  162 + 'like',
  163 + 'LOWER(user_info.country)',
  164 + mb_strtolower($this->info),
  165 + ],
  166 + [
  167 + 'like',
  168 + 'LOWER(user_info.city)',
  169 + mb_strtolower($this->info),
  170 + ],
  171 + [
  172 + 'like',
  173 + 'LOWER(user_info.about)',
  174 + mb_strtolower($this->info),
  175 + ],
115 176 ]);
116 177  
117 178 return $dataProvider;
... ...
frontend/controllers/SearchController.php
1 1 <?php
2 2 namespace frontend\controllers;
3 3  
  4 +use common\models\CustomerSearch;
4 5 use common\models\Project;
5 6 use common\models\UserInfo;
6 7 use common\models\Vacancy;
... ... @@ -68,8 +69,62 @@ class SearchController extends Controller
68 69  
69 70  
70 71 public function actionCustomer(){
71   -
  72 + $model = new CustomerSearch();
  73 + $dataProvider = $model->search(Yii::$app->request->queryParams);
  74 + $dataProvider->setSort([
  75 + 'attributes' => [
  76 + 'name' => [
  77 + 'asc' => [
  78 + 'company_info.name' => SORT_ASC,
  79 + 'firstname' => SORT_ASC,
  80 + 'lastname' => SORT_ASC,
  81 + ],
  82 + 'desc' => [
  83 + 'company_info.name' => SORT_DESC,
  84 + 'firstname' => SORT_DESC,
  85 + 'lastname' => SORT_DESC,
  86 + ],
  87 + 'default' => SORT_ASC,
  88 + 'label' => 'Название',
  89 + ],
  90 + 'staff' => [
  91 + 'asc' => [
  92 + 'company_info.staff' => SORT_ASC,
  93 + ],
  94 + 'desc' => [
  95 + 'company_info.staff' => SORT_DESC,
  96 + ],
  97 + 'default' => SORT_DESC,
  98 + 'label' => 'Количество сотрудников',
  99 + ],
  100 + 'visit' => [
  101 + 'asc' => [
  102 + 'user_info.date_visit' => SORT_ASC,
  103 + ],
  104 + 'desc' => [
  105 + 'user_info.date_visit' => SORT_DESC,
  106 + ],
  107 + 'default' => SORT_DESC,
  108 + 'label' => 'Последний визит',
  109 + ],
  110 + 'city' => [
  111 + 'asc' => [
  112 + 'user_info.city' => SORT_ASC,
  113 + ],
  114 + 'desc' => [
  115 + 'user_info.city' => SORT_DESC,
  116 + ],
  117 + 'default' => SORT_ASC,
  118 + 'label' => 'Город',
  119 + ],
  120 + ],
  121 + ]);
  122 + $model->load(Yii::$app->request->queryParams);
  123 + $cities = UserInfo::find()->select('city')->distinct()->asArray()->indexBy('city')->column();
72 124 return $this->render('customer',[
  125 + 'model' => $model,
  126 + 'dataProvider' => $dataProvider,
  127 + 'cities' => $cities,
73 128 ]);
74 129 }
75 130  
... ...
frontend/views/search/_customer_list_view.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var User $model
  4 + * @var mixed $key
  5 + * @var integer $index
  6 + * @var ListView $widget
  7 + */
  8 + use common\models\User;
  9 + use frontend\helpers\TextHelper;
  10 + use yii\bootstrap\Html;
  11 + use yii\helpers\Url;
  12 + use yii\widgets\ListView;
  13 +
  14 +?>
  15 +<div class="search_perform_txt-wr">
  16 + <div class="search_perform_title">
  17 + <?php
  18 + if($model->type == 2) {
  19 + echo $model->companyInfo->name;
  20 + } else {
  21 + echo $model->firstname . $model->lastname;
  22 + }
  23 + ?>
  24 + </div>
  25 + <div class="search_perform-stars-wr">
  26 + <div class="rating_search_performer">
  27 + <!--оценка-->
  28 + <input type="hidden" class="val" value="4"/>
  29 + </div>
  30 + <div class="search_perform-stars-txt">
  31 + 30 отзывов
  32 + <?php
  33 + if(!empty( $model->userInfo->city )) {
  34 + echo ", {$model->userInfo->city}";
  35 + }
  36 + ?>
  37 + </div>
  38 + </div>
  39 + <?php
  40 + if($model->type == 2 && !empty( $model->companyInfo->staff )) {
  41 + ?>
  42 + <div class="search_perform_leng">
  43 + <div>Сотрудники: <?= $model->companyInfo->staff ?></div>
  44 + </div>
  45 + <?php
  46 + }
  47 + ?>
  48 + <div class="search_perform_visit">
  49 + <span>Послелний визит:</span> <?= \Yii::$app->formatter->asRelativeTime($model->userInfo->date_visit) ?>
  50 + </div>
  51 + <div class="search_perform_projets_nam">
  52 + <a href="#">Заказано проектов: 21</a></div>
  53 +</div>
  54 +
  55 +<div class="right_search_perform_block-wr">
  56 + <div class="right_search_perform_foto-wr">
  57 + <div><img src="/images/search_performer_img-1.jpg" alt=""/></div>
  58 + </div>
  59 + <a class="get-list" href="#">Добавить в закладки</a>
  60 +</div>
0 61 \ No newline at end of file
... ...
frontend/views/search/customer.php
1 1 <?php
  2 + /**
  3 + * @var CustomerSearch $model
  4 + * @var ActiveDataProvider $dataProvider
  5 + * @var string[] $cities
  6 + */
2 7 use common\models\CustomerSearch;
3   -
4   - $model = (new CustomerSearch())->search(\Yii::$app->request->queryParams);
5   - var_dump($model->totalCount);
  8 + use yii\data\ActiveDataProvider;
  9 + use yii\helpers\Html;
  10 + use yii\widgets\ActiveForm;
  11 + use yii\widgets\LinkSorter;
  12 + use yii\widgets\ListView;
6 13  
7 14 ?>
8 15 <div class="section-box-22 section-box-customer">
9 16 <div class="box-wr">
10 17 <div class="box-all">
  18 + <?php
  19 + // == Left filter ==
  20 + ?>
11 21 <div class="left-search-work">
12   - <form action="" class="search-work-form">
13   - <div class="blocks-check-list-wrapp">
14   - <div class="blocks-check-title"><label for="theme-1">Город</label></div>
15   - <select id="theme-1">
16   - <option selected="" value="">Любой</option>
17   - <option value="">Киев</option>
18   - <option value="">Житомир</option>
19   - <option value="">Львов</option>
20   - <option value="">Киев</option>
21   - <option value="">Житомир</option>
22   - <option value="">Львов</option>
  22 + <?php
  23 + $form = ActiveForm::begin(['method' => 'get', 'options' => [ 'class' => 'search-work-form' ], 'action' => [''] ]);
23 24  
24   - <option value="">Киев</option>
25   - <option value="">Житомир</option>
26   - <option value="">Львов</option>
27   - <option value="">Киев</option>
28   - <option value="">Житомир</option>
29   - <option value="">Львов</option>
30   - <option value="">Киев</option>
31   - <option value="">Житомир</option>
32   - <option value="">Львов</option>
33   - <option value="">Киев</option>
34   - <option value="">Житомир</option>
35   - <option value="">Львов</option>
36   - <option value="">Киев</option>
37   - <option value="">Житомир</option>
38   - <option value="">Львов</option>
39   - <option value="">Киев</option>
40   - <option value="">Житомир</option>
41   - <option value="">Львов</option>
42   - <option value="">Киев</option>
43   - <option value="">Житомир</option>
44   - <option value="">Львов</option>
45   - <option value="">Киев</option>
46   - <option value="">Житомир</option>
47   - <option value="">Львов</option>
48   - <option value="">Киев</option>
49   - <option value="">Житомир</option>
50   - <option value="">Львов</option>
51   - <option value="">Киев</option>
52   - <option value="">Житомир</option>
53   - <option value="">Львов</option>
54   - <option value="">Киев</option>
55   - <option value="">Житомир</option>
56   - <option value="">Львов</option>
57   - <option value="">Киев</option>
58   - <option value="">Житомир</option>
59   - <option value="">Львов</option>
60   - <option value="">Киев</option>
61   - <option value="">Житомир</option>
62   - <option value="">Львов</option>
63   - <option value="">Киев</option>
64   - <option value="">Житомир</option>
65   - <option value="">Львов</option>
66   - <option value="">Киев</option>
67   - <option value="">Житомир</option>
68   - <option value="">Львов</option>
69   - <option value="">Киев</option>
70   - <option value="">Житомир</option>
71   - <option value="">Львов</option>
72   - <option value="">Киев</option>
73   - <option value="">Житомир</option>
74   - <option value="">Львов</option>
75   - <option value="">Киев</option>
76   - <option value="">Житомир</option>
77   - <option value="">Львов</option>
78   - <option value="">Киев</option>
  25 + echo $form->field($model, 'city', [
  26 + 'options' => [
  27 + 'class' => 'blocks-check-list-wrapp',
  28 + ],
  29 + 'template' => "<div class='blocks-check-title'>{label}</div>\n{input}<div class='select-after'></div>\n{hint}\n{error}",
  30 + ])
  31 + ->dropDownList($cities, [ 'prompt' => 'Любой' ]);
79 32  
80   - </select><div class="select-after"></div>
81   - </div>
82   -
83   - <div class="blocks-check-list-wrapp">
84   - <div class="blocks-check-title"><label for="theme-3">Тип заказчика</label></div>
85   - <select id="theme-3">
86   - <option selected="" value="">Любая</option>
87   - <option value="">Киев</option>
88   - <option value="">Житомир</option>
89   - <option value="">Львов</option>
90   - <option value="">Киев</option>
91   - <option value="">Житомир</option>
92   - <option value="">Львов</option>
93   - </select><div class="select-after"></div>
94   - </div>
  33 + echo $form->field($model, 'type', [
  34 + 'options' => [
  35 + 'class' => 'blocks-check-list-wrapp',
  36 + ],
  37 + 'template' => "<div class='blocks-check-title'>{label}</div>\n{input}<div class='select-after'></div>\n{hint}\n{error}",
  38 + ])
  39 + ->dropDownList([
  40 + 1 => 'Физическое лицо',
  41 + 2 => 'Компания',
  42 + ], [ 'prompt' => 'Любой' ]);
  43 + ?>
95 44  
  45 + <?php
  46 + /* Рейтинг
  47 + ?>
96 48 <div class="blocks-check-list-wrapp">
97 49 <div class="blocks-check-title">Рейтинг</div>
98 50 <div class="rating">
... ... @@ -100,56 +52,89 @@
100 52 <input type="hidden" class="val" value="0">
101 53 </div>
102 54 </div>
  55 + <?php
  56 + */
  57 + ?>
103 58  
104   - <div class="blocks-check-list-wrapp">
105   - <div class="blocks-check-title">Статус</div>
106   - <div class="blocks-check-list">
107   - <input type="radio" name="group3" class="check-search" id="theme-8"><label for="theme-8"><span></span>Онлайн</label>
108   - </div>
109   - <div class="blocks-check-list">
110   - <input type="radio" name="group3" class="check-search" id="theme-9" checked=""><label for="theme-9"><span></span>Все</label>
111   - </div>
112   - </div>
  59 + <?php
  60 + echo $form->field($model, 'online', [
  61 + 'options' => [
  62 + 'class' => 'blocks-check-list-wrapp',
  63 + ],
  64 + 'template' => "<div class='blocks-check-title'>{label}</div>\n{input}\n{hint}\n{error}",
  65 + ])
  66 + ->radioList([
  67 + '' => 'Все',
  68 + 1 => 'Онлайн',
  69 + ], [
  70 + 'item' => function($index, $label, $name, $checked, $value) use ($model) {
  71 + $checked = ($model->online == $value);
  72 + return "<div class='blocks-check-list'><input type='radio' id='{$model->formName()}-{$index}' name='{$name}' class='check-search' value='{$value}' " . ($checked?'checked':'') . "><label for='{$model->formName()}-{$index}'><span></span>{$label}</label></div>";
  73 + },
  74 + 'unselect' => NULL,
  75 + ]);
113 76  
114   - <div class="blocks-check-list-submit">
115   - <input type="submit" value="Найти">
116   - </div>
117   - </form>
  77 + echo '<div class="blocks-check-list-submit">'.Html::submitInput('Найти').'</div>';
  78 +
  79 + $form->end();
  80 + ?>
118 81 <script>
119   - $('div.rating').rating({
120   - fx: 'full',
121   - url: 'rating.php'
122   - });
  82 + $('div.rating').rating(
  83 + {
  84 + fx : 'full', url : 'rating.php'
  85 + }
  86 + );
123 87 </script>
124 88 </div>
125 89  
  90 + <?php
  91 + // == End of left filter ==
  92 + ?>
  93 +
  94 + <?php
  95 + // == Page content ==
  96 + ?>
126 97 <div class="right-search-work">
127 98 <div class="search-worker-title style">Найти заказчика</div>
128   - <div class="search-worker-title-two style">Заказчики готовые приступить к работе <span>145</span></div>
  99 + <div class="search-worker-title-two style">Заказчики готовые приступить к работе
  100 + <span><?= $dataProvider->totalCount ?></span></div>
129 101 <div class="search-worker-search-wr style">
130   - <form action="" class="search-worker-form">
131   - <input id="srch-wrk-text" type="text" placeholder="Любая информация о заказчике" required="">
132   - <input id="srch-wrk-sub" type="submit" value="Найти">
133   - </form>
  102 + <?php
  103 + $form2 = ActiveForm::begin(['method' => 'get', 'action' => [''], 'options' => ['class' => 'search-worker-form']]);
  104 + echo $form2->field($model, 'info', ['options' => ['tag' => false]])->label(false)->textInput(['placeholder' => $model->getAttributeLabel('info')]);
  105 + echo Html::submitInput('Найти');
  106 + $form2->end();
  107 + ?>
134 108 <a href="#" class="add-to-catalog-search-worker">Добавить себя в каталог</a>
135 109 <div class="search-worker-sort-wr style">
136 110 <div class="search-worker-sort">Сортировать:&nbsp;</div>
137 111 <ul>
138 112 <li class="activejob">
139   - <a href="#">рейтинг</a>
  113 + <a href="#"></a>
140 114 <div class="sidebar-droped-wr style">
141   - <ul>
142   - <li><a href="#">рейтинг</a></li>
143   - <li><a href="#">1заказчик</a></li>
144   - <li><a href="#">2заказчик</a></li>
145   - <li><a href="#">3заказчик</a></li>
146   - <li><a href="#">4заказчик</a></li>
147   - </ul>
  115 + <?php
  116 + echo LinkSorter::widget([
  117 + 'sort' => $dataProvider->sort,
  118 + ]);
  119 + ?>
148 120 </div>
149 121 </li>
150 122 </ul>
151 123 </div>
152 124 </div>
  125 + <?php
  126 + echo ListView::widget([
  127 + 'dataProvider' => $dataProvider,
  128 + 'layout' => "{items}\n{pager}",
  129 + 'options' => [
  130 + 'class' => 'search-worker-blocks-wr style',
  131 + ],
  132 + 'itemOptions' => [
  133 + 'class' => 'search-worker-blocks',
  134 + ],
  135 + 'itemView' => '_customer_list_view',
  136 + ]);
  137 + ?>
153 138 <div class="search-worker-blocks-wr style">
154 139  
155 140 <div class="search-worker-blocks">
... ... @@ -160,13 +145,16 @@
160 145 <!--оценка-->
161 146 <input type="hidden" class="val" value="4"/>
162 147 </div>
163   - <div class="search_perform-stars-txt">30 отзывов, Киев </div>
  148 + <div class="search_perform-stars-txt">30 отзывов, Киев</div>
164 149 </div>
165 150 <div class="search_perform_leng">
166 151 <div>Сотрудники: более 40</div>
167 152 </div>
168   - <div class="search_perform_visit"><span>Послелний визит:</span> 2 дня назад</div>
169   - <div class="search_perform_projets_nam"><a href="#">Заказано проектов: 21</a></div>
  153 + <div class="search_perform_visit">
  154 + <span>Послелний визит:</span> 2 дня назад
  155 + </div>
  156 + <div class="search_perform_projets_nam">
  157 + <a href="#">Заказано проектов: 21</a></div>
170 158 </div>
171 159  
172 160 <div class="right_search_perform_block-wr">
... ... @@ -185,13 +173,16 @@
185 173 <!--оценка-->
186 174 <input type="hidden" class="val" value="2"/>
187 175 </div>
188   - <div class="search_perform-stars-txt">30 отзывов, Киев </div>
  176 + <div class="search_perform-stars-txt">30 отзывов, Киев</div>
189 177 </div>
190 178 <div class="search_perform_leng">
191 179 <!--<div>Сотрудники: более 40</div>-->
192 180 </div>
193   - <div class="search_perform_visit"><span>Послелний визит:</span> 2 дня назад</div>
194   - <div class="search_perform_projets_nam"><a href="#">Заказано проектов: 21</a></div>
  181 + <div class="search_perform_visit">
  182 + <span>Послелний визит:</span> 2 дня назад
  183 + </div>
  184 + <div class="search_perform_projets_nam">
  185 + <a href="#">Заказано проектов: 21</a></div>
195 186 </div>
196 187  
197 188 <div class="right_search_perform_block-wr">
... ... @@ -210,13 +201,16 @@
210 201 <!--оценка-->
211 202 <input type="hidden" class="val" value="1"/>
212 203 </div>
213   - <div class="search_perform-stars-txt">30 отзывов, Киев </div>
  204 + <div class="search_perform-stars-txt">30 отзывов, Киев</div>
214 205 </div>
215 206 <div class="search_perform_leng">
216 207 <div>Сотрудники: более 40</div>
217 208 </div>
218   - <div class="search_perform_visit"><span>Послелний визит:</span> 2 дня назад</div>
219   - <div class="search_perform_projets_nam"><a href="#">Заказано проектов: 21</a></div>
  209 + <div class="search_perform_visit">
  210 + <span>Послелний визит:</span> 2 дня назад
  211 + </div>
  212 + <div class="search_perform_projets_nam">
  213 + <a href="#">Заказано проектов: 21</a></div>
220 214 </div>
221 215  
222 216 <div class="right_search_perform_block-wr">
... ... @@ -235,13 +229,16 @@
235 229 <!--оценка-->
236 230 <input type="hidden" class="val" value="5"/>
237 231 </div>
238   - <div class="search_perform-stars-txt">30 отзывов, Киев </div>
  232 + <div class="search_perform-stars-txt">30 отзывов, Киев</div>
239 233 </div>
240 234 <div class="search_perform_leng">
241 235 <!--<div>Сотрудники: более 40</div>-->
242 236 </div>
243   - <div class="search_perform_visit"><span>Послелний визит:</span> 2 дня назад</div>
244   - <div class="search_perform_projets_nam"><a href="#">Заказано проектов: 21</a></div>
  237 + <div class="search_perform_visit">
  238 + <span>Послелний визит:</span> 2 дня назад
  239 + </div>
  240 + <div class="search_perform_projets_nam">
  241 + <a href="#">Заказано проектов: 21</a></div>
245 242 </div>
246 243  
247 244 <div class="right_search_perform_block-wr">
... ... @@ -263,13 +260,16 @@
263 260 </div>
264 261  
265 262 <script>
266   - $('div.rating_search_performer').rating({
267   - fx: 'full',
268   - readOnly: 'true',
269   - url: 'rating.php'
270   - });
  263 + $('div.rating_search_performer').rating(
  264 + {
  265 + fx : 'full', readOnly : 'true', url : 'rating.php'
  266 + }
  267 + );
271 268 </script>
272 269 </div>
  270 + <?php
  271 + // == End of page content ==
  272 + ?>
273 273 </div>
274 274 </div>
275 275 </div>
276 276 \ No newline at end of file
... ...