Blame view

app/Http/Controllers/MainController.php 15.1 KB
02a1ed535   Андрей Ларионов   Первый коммит Rek...
1
2
3
  <?php
  
  namespace App\Http\Controllers;
b6103c749   Андрей Ларионов   Обновление js и c...
4
5
6
  use App\Classes\Tools;
  use App\Mail\MailRegistration;
  use App\Mail\MailRepair;
d152a3a68   Андрей Ларионов   Создание основных...
7
  use App\Models\Ad_employer;
365e6ad01   Андрей Ларионов   Реализация проекта
8
  use App\Models\Ad_jobs;
5b68533bb   Андрей Ларионов   Работа над проект...
9
  use App\Models\Category;
d152a3a68   Андрей Ларионов   Создание основных...
10
  use App\Models\Education;
5b68533bb   Андрей Ларионов   Работа над проект...
11
  use App\Models\Employer;
73c4dadbe   Андрей Ларионов   Обновление
12
  use App\Models\employers_main;
5b68533bb   Андрей Ларионов   Работа над проект...
13
14
15
  use App\Models\Job_title;
  use App\Models\News;
  use App\Models\reclame;
b6103c749   Андрей Ларионов   Обновление js и c...
16
  use App\Models\User;
02a1ed535   Андрей Ларионов   Первый коммит Rek...
17
  use Illuminate\Http\Request;
a13ce8670   Андрей Ларионов   Обновление проект...
18
  use Illuminate\Support\Facades\Auth;
365e6ad01   Андрей Ларионов   Реализация проекта
19
  use Illuminate\Support\Facades\DB;
b6103c749   Андрей Ларионов   Обновление js и c...
20
21
  use Illuminate\Support\Facades\Hash;
  use Illuminate\Support\Facades\Mail;
a13ce8670   Андрей Ларионов   Обновление проект...
22
  use Illuminate\Support\Facades\Validator;
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
23
  use App\Classes\StatusUser;
02a1ed535   Андрей Ларионов   Первый коммит Rek...
24
25
26
  
  class MainController extends Controller
  {
1d1c16604   Андрей Ларионов   Фрондэнд - главна...
27
      // Главная страница публичной части
02a1ed535   Андрей Ларионов   Первый коммит Rek...
28
      public function index() {
5b68533bb   Андрей Ларионов   Работа над проект...
29
30
31
32
33
34
35
          $news = News::query()->orderBy('id')->limit(6)->get();
  
          $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*')
              ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id')
              ->OrderByDesc('created_at')
              ->GroupBy('categories.id')
              ->get();
73c4dadbe   Андрей Ларионов   Обновление
36
          $employers = employers_main::query()->with('employer')->orderBy('id')->limit(8)->get();
365e6ad01   Андрей Ларионов   Реализация проекта
37
38
          $vacancy = Ad_jobs::query()->with('job_title')->orderBy('position_ship')->get();
          return view('index', compact('news', 'categories', 'employers', 'vacancy'));
5b68533bb   Андрей Ларионов   Работа над проект...
39
      }
a13ce8670   Андрей Ларионов   Обновление проект...
40
41
42
43
44
45
46
47
48
      public function search_vacancies(Request $request) {
          if ($request->has('search')) {
              $search = $request->get('search');
              $job_titles = Job_title::query()->where('name', 'LIKE', "%$search%")->first();
              if (isset($job_titles->id))
                  if ($job_titles->id > 0)
                      return redirect()->route('vacancies', ['job' => $job_titles->id]);
          }
      }
5b68533bb   Андрей Ларионов   Работа над проект...
49
50
51
52
53
54
55
56
57
58
      public function vacancies(Request $request) {
          //должности
          $Job_title = Job_title::query()->orderBy('name')->get();
  
          $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*')
                      ->selectRaw('min(ad_employers.salary) as min_salary, max(ad_employers.salary) as max_salary')
                      ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id')
                      ->join('ad_jobs', 'ad_jobs.ad_employer_id', '=', 'ad_employers.id');
  
          //категории и вакансии
a13ce8670   Андрей Ларионов   Обновление проект...
59
          if (($request->has('job')) && ($request->get('job') > 0)) {
6b9776dfb   Андрей Ларионов   Вторник работа на...
60
                $categories = $categories->Where('job_title_id', '=', $request->get('job'));
5b68533bb   Андрей Ларионов   Работа над проект...
61
          }
6b9776dfb   Андрей Ларионов   Вторник работа на...
62
          $categories = $categories->OrderByDesc('created_at')->GroupBy('categories.id')->get();
365e6ad01   Андрей Ларионов   Реализация проекта
63

98484071e   Андрей Ларионов   Обновленная стран...
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
          $flot_paluba = DB::table('ad_jobs')->selectRaw('DISTINCT(job_titles.name), job_titles.id as id_title, count(`ad_jobs`.`id`) as cnt')->
                                          join('job_titles', 'job_titles.id', '=', 'ad_jobs.job_title_id')->
                                          where('position_ship', 'Палуба');
          if (!empty($request->get('job'))) {
              $flot_paluba = $flot_paluba->where('job_title_id', '=', $request->get('job'));
          }
          $flot_paluba = $flot_paluba->groupby('job_title_id')->get();
  
          $flot_MO =  DB::table('ad_jobs')->selectRaw('DISTINCT(job_titles.name), job_titles.id as id_title, count(`ad_jobs`.`id`) as cnt')->
                                          join('job_titles', 'job_titles.id', '=', 'ad_jobs.job_title_id')->
                                          where('position_ship', '=', 'МО');
          if (!empty($request->get('job'))) {
              $flot_MO = $flot_MO->where('job_title_id', '=', $request->get('job'));
          }
          $flot_MO = $flot_MO->groupby('ad_jobs.id')->get();
  
          $flot_radovie =  DB::table('ad_jobs')->selectRaw('DISTINCT(job_titles.name), job_titles.id as id_title, count(`ad_jobs`.`id`) as cnt')->
                                              join('job_titles', 'job_titles.id', '=', 'ad_jobs.job_title_id')->
                                              where('position_ship', '=', 'Рядовые');
          if (!empty($request->get('job'))) {
              $flot_radovie = $flot_radovie->where('job_title_id', '=', $request->get('job'));
          }
          $flot_radovie = $flot_radovie->groupby('ad_jobs.id')->get();
  
          $flot_prochee =  DB::table('ad_jobs')->selectRaw('DISTINCT(job_titles.name), job_titles.id as id_title, count(`ad_jobs`.`id`) as cnt')->
                                              join('job_titles', 'job_titles.id', '=', 'ad_jobs.job_title_id')->
                                              where('position_ship', '=', 'Прочее');
          if (!empty($request->get('job'))) {
              $flot_prochee = $flot_prochee->where('job_title_id', '=', $request->get('job'));
          }
          $flot_prochee = $flot_prochee->groupby('ad_jobs.id')->get();
365e6ad01   Андрей Ларионов   Реализация проекта
95

5b68533bb   Андрей Ларионов   Работа над проект...
96
          if ($request->ajax()) {
98484071e   Андрей Ларионов   Обновленная стран...
97
              return view('ajax.new_sky', compact('categories', 'flot_paluba', 'flot_MO', 'flot_radovie', 'flot_prochee'));
5b68533bb   Андрей Ларионов   Работа над проект...
98
          } else {
98484071e   Андрей Ларионов   Обновленная стран...
99
100
              return view('new_sky', compact('Job_title', 'categories',
                                                      'flot_paluba', 'flot_MO', 'flot_radovie', 'flot_prochee'));
5b68533bb   Андрей Ларионов   Работа над проект...
101
102
103
104
          }
      }
  
      //Вакансии категория детальная
d152a3a68   Андрей Ларионов   Создание основных...
105
      public function list_vacancies(Category $categories, Request $request) {
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
106
107
108
109
         if (isset(Auth()->user()->id))
             $uid = Auth()->user()->id;
         else
             $uid = 0;
d152a3a68   Андрей Ларионов   Создание основных...
110
111
112
113
114
  
         $Query = Ad_employer::with('jobs')->
                               with('cat')->
                               with('employer')->
                               whereHas('jobs_code', function ($query) use ($request) {
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
115
                                     if (null !== ($request->get('job')) && ($request->get('job') !== 0)) {
d152a3a68   Андрей Ларионов   Создание основных...
116
117
                                         $query->where('job_title_id', $request->get('job'));
                                     }
d152a3a68   Андрей Ларионов   Создание основных...
118
119
                              })
                              ->select('ad_employers.*');
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
120

ac606bc38   Андрей Ларионов   Работа на сервере.
121
         if (isset($categories->id) && ($categories->id > 0)) {
d152a3a68   Андрей Ларионов   Создание основных...
122
123
             $Query = $Query->where('category_id', '=', $categories->id);
             $Name_categori = Category::query()->where('id', '=', $categories->id)->get();
ac606bc38   Андрей Ларионов   Работа на сервере.
124
125
         } else {
             $Name_categori = '';
5b68533bb   Андрей Ларионов   Работа над проект...
126
         }
ac606bc38   Андрей Ларионов   Работа на сервере.
127

a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
128
129
          if ($request->get('sort')) {
              $sort = $request->get('sort');
ac606bc38   Андрей Ларионов   Работа на сервере.
130

a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
131
132
133
134
135
136
137
138
139
              switch ($sort) {
                  case 'name_up': $Query = $Query->orderBy('name')->orderBy('id'); break;
                  case 'name_down': $Query = $Query->orderByDesc('name')->orderby('id'); break;
                  case 'created_at_up': $Query = $Query->OrderBy('created_at')->orderBy('id'); break;
                  case 'created_at_down': $Query = $Query->orderByDesc('created_at')->orderBy('id'); break;
                  case 'default': $Query = $Query->orderBy('id')->orderby('updated_at'); break;
                  default: $Query = $Query->orderBy('id')->orderby('updated_at'); break;
              }
          }
d152a3a68   Андрей Ларионов   Создание основных...
140
         $Job_title = Job_title::query()->OrderBy('name')->get();
5b68533bb   Андрей Ларионов   Работа над проект...
141

d152a3a68   Андрей Ларионов   Создание основных...
142
         $Query_count = $Query->count();
5b68533bb   Андрей Ларионов   Работа над проект...
143

d152a3a68   Андрей Ларионов   Создание основных...
144
         $Query = $Query->OrderBy('updated_at')->paginate(3);
7571b20fd   Андрей Ларионов   Коммит 13 марта 2024
145
         $Reclama = reclame::query()->get();
5b68533bb   Андрей Ларионов   Работа над проект...
146

d152a3a68   Андрей Ларионов   Создание основных...
147
148
149
  
  
         if ($request->ajax()) {
7571b20fd   Андрей Ларионов   Коммит 13 марта 2024
150
151
152
153
154
155
156
157
158
159
160
161
162
             if ($request->has('title')) {
                 return view('ajax.list_category', compact(
                     'Name_categori'
                 ));
             } else {
                 return view('ajax.list_vacancies', compact('Query',
                     'Query_count',
                     'Name_categori',
                     'Reclama',
                     'categories',
                     'Job_title',
                     'uid'));
             }
d152a3a68   Андрей Ларионов   Создание основных...
163
164
165
166
167
168
169
         } else {
             //Вернуть все
             return view('list_vacancies', compact('Query',
                                                      'Query_count',
                                                                'Reclama',
                                                                'Name_categori',
                                                                'categories',
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
170
171
                                                                'Job_title',
                                                                'uid'));
5b68533bb   Андрей Ларионов   Работа над проект...
172
         }
d152a3a68   Андрей Ларионов   Создание основных...
173
      }
5b68533bb   Андрей Ларионов   Работа над проект...
174

d152a3a68   Андрей Ларионов   Создание основных...
175
176
177
      // Образование
      public function education(Request $request) {
          $educations = Education::query();
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
178
179
          if (($request->has('search')) && (!empty($request->get('search')))) {
              $search = trim($request->get('search'));
d152a3a68   Андрей Ларионов   Создание основных...
180
181
              $educations = $educations->where('name', 'LIKE', "%$search%");
          }
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
182
183
184
185
186
187
188
189
190
191
192
193
  
          if ($request->get('sort')) {
              $sort = $request->get('sort');
              switch ($sort) {
                  case 'name_up': $educations = $educations->orderBy('name')->orderBy('id'); break;
                  case 'name_down': $educations = $educations->orderByDesc('name')->orderby('id'); break;
                  case 'created_at_up': $educations = $educations->OrderBy('created_at')->orderBy('id'); break;
                  case 'created_at_down': $educations = $educations->orderByDesc('created_at')->orderBy('id'); break;
                  case 'default': $educations = $educations->orderBy('id')->orderby('updated_at'); break;
                  default: $educations = $educations->orderBy('id')->orderby('updated_at'); break;
              }
          }
d152a3a68   Андрей Ларионов   Создание основных...
194
195
          $count_edu = $educations->count();
          $educations = $educations->paginate(6);
a9dfa8c95   Андрей Ларионов   Обновление на 7 м...
196
197
198
199
200
          if ($request->ajax()) {
              return view('ajax.education', compact('educations'));
          } else {
              return view('education', compact('educations', 'count_edu'));
          }
d152a3a68   Андрей Ларионов   Создание основных...
201
      }
5b68533bb   Андрей Ларионов   Работа над проект...
202

d152a3a68   Андрей Ларионов   Создание основных...
203
204
205
      // Контакты
      public function contacts() {
          return view('contacts');
02a1ed535   Андрей Ларионов   Первый коммит Rek...
206
      }
a13ce8670   Андрей Ларионов   Обновление проект...
207
208
209
210
  
      // Вход в личный кабинет
      public function input_login(Request $request)
      {
ad20c698a   Андрей Ларионов   Результаты на вос...
211
          $params = $request->all();
a13ce8670   Андрей Ларионов   Обновление проект...
212
213
          $rules = [
              'email' => 'required|string|email',
7571b20fd   Андрей Ларионов   Коммит 13 марта 2024
214
              'password' => 'required|string|min:3|max:25',
a13ce8670   Андрей Ларионов   Обновление проект...
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
          ];
  
          $messages = [
              'required' => 'Укажите обязательное поле «:attribute»',
              'email' => 'Введите корректный email',
              'min' => [
                  'string' => 'Поле «:attribute» должно быть не меньше :min символов',
                  'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт'
              ],
              'max' => [
                  'string' => 'Поле «:attribute» должно быть не больше :max символов',
                  'file' => 'Файл «:attribute» должен быть не больше :max Кбайт'
              ],
          ];
  
          $validator = Validator::make($request->all(), $rules, $messages);
ad20c698a   Андрей Ларионов   Результаты на вос...
231

a13ce8670   Андрей Ларионов   Обновление проект...
232
          if ($validator->fails()) {
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
233
              return redirect()->route('index')->with('Error', "Email или пароль невалидный");
a13ce8670   Андрей Ларионов   Обновление проект...
234
235
236
237
238
239
240
          } else {
              $credentials = $request->only('email', 'password');
  
              if (Auth::attempt($credentials, $request->has('remember'))) {
  
                  if (is_null(Auth::user()->email_verified_at)) {
                      Auth::logout();
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
241
                      return json_encode(Array("ERROR" => "Адрес почты не подтвержден"));
a13ce8670   Андрей Ларионов   Обновление проект...
242
243
244
                  }
  
                  if (Auth::user()->is_worker) {
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
245
                      return json_encode(Array("REDIRECT" => redirect()->route('worker.cabinet')->getTargetUrl()));
a13ce8670   Андрей Ларионов   Обновление проект...
246
                  } else {
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
247
                      return json_encode(Array("REDIRECT" => redirect()->route('employer.cabinet')->getTargetUrl()));
a13ce8670   Андрей Ларионов   Обновление проект...
248
                  }
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
249
                  return json_encode(Array("SUCCESS" => "Вы успешно вошли в личный кабинет"));
a13ce8670   Андрей Ларионов   Обновление проект...
250
251
252
                      //->route('index')
                      //->with('success', 'Вы вошли в личный кабинет.');
              } else {
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
253
                  return json_encode(Array("ERROR" => "Неверный логин или пароль!"));
a13ce8670   Андрей Ларионов   Обновление проект...
254
255
256
              }
          }
      }
b6103c749   Андрей Ларионов   Обновление js и c...
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
  
      // Восстановление пароля
      public function repair_password(Request $request) {
          $rules = [
              'email' => 'required|string|email',
          ];
  
          $messages = [
              'required' => 'Укажите обязательное поле «:attribute»',
              'email' => 'Введите корректный email',
              'min' => [
                  'string' => 'Поле «:attribute» должно быть не меньше :min символов',
                  'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт'
              ],
              'max' => [
                  'string' => 'Поле «:attribute» должно быть не больше :max символов',
                  'file' => 'Файл «:attribute» должен быть не больше :max Кбайт'
              ],
          ];
  
          $validator = Validator::make($request->all(), $rules, $messages);
  
          if ($validator->fails()) {
              return redirect()->back()->with('Error', "Email невалидный");
          } else {
              $new_password = Tools::generator_id(10);
              $hash_password = Hash::make($new_password);
              $user = User::query()->where('email', $request->get('email'))->first();
              $EditRec = User::find($user->id);
              $EditRec->password = $hash_password;
              $EditRec->save();
  
              foreach ([$request->get('email')] as $recipient) {
                  Mail::to($recipient)->send(new MailRepair($new_password));
              }
ad20c698a   Андрей Ларионов   Результаты на вос...
292
              return redirect()->route('index');
b6103c749   Андрей Ларионов   Обновление js и c...
293
294
295
          }
  
      }
99702d426   Андрей Ларионов   Коммит вечер воск...
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
  
      // Вывод новостей
      public function news(Request $request) {
          $Query = News::query();
          if ($request->has('search')) {
              $search = $request->get('search');
              $Query = $Query->where('title', 'LIKE', "%$search%")->
                               orWhere('text', 'LIKE', "%$search%");
          }
  
          if ($request->ajax()) {
              if ($request->get('sort')) {
                  $sort = $request->get('sort');
                  switch ($sort) {
                      case 'name_up': $Query = $Query->orderBy('title')->orderBy('id'); break;
                      case 'name_down': $Query = $Query->orderByDesc('title')->orderby('id'); break;
                      case 'created_at_up': $Query = $Query->OrderBy('created_at')->orderBy('id'); break;
                      case 'created_at_down': $Query = $Query->orderByDesc('created_at')->orderBy('id'); break;
                      case 'default': $Query = $Query->orderBy('id')->orderby('updated_at'); break;
                      default: $Query = $Query->orderBy('id')->orderby('updated_at'); break;
                  }
              }
          }
          $Query_count = $Query->count();
          $Query = $Query->paginate(6);
  
          if ($request->ajax()) {
              return view('ajax.news-list', compact('Query', 'Query_count'));
          } else {
              return view('news-list', compact('Query', 'Query_count'));
          }
      }
  
      //Детальная новость
      public function detail_new(News $new) {
          // Выборка
          $Query = News::query()->where('id', $new->id)->get();
          $title = $Query[0]->title;
          $All_Query = News::query()->paginate(8);
          return view('detail_new', compact('Query', 'All_Query', 'title'));
      }
02a1ed535   Андрей Ларионов   Первый коммит Rek...
337
  }