Passed
Push — task/question-descriptions-opt... ( ce2668 )
by Grant
17:51 queued 08:44
created

JobController::create()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use Illuminate\Support\Facades\Lang;
6
use Illuminate\Support\Facades\Auth;
7
use Illuminate\Support\Facades\Log;
8
use Illuminate\Support\Facades\Mail;
9
use Illuminate\Http\RedirectResponse;
10
use Illuminate\Http\Request;
11
use Illuminate\Http\Response;
12
use Illuminate\View\View;
13
use App\Http\Controllers\Controller;
14
15
use Carbon\Carbon;
16
17
use App\Mail\JobPosterReviewRequested;
18
19
use App\Models\Criteria;
20
use App\Models\JobPoster;
21
use App\Models\JobPosterKeyTask;
22
use App\Models\JobPosterQuestion;
23
use App\Models\Lookup\JobTerm;
24
use App\Models\Lookup\Province;
25
use App\Models\Lookup\SecurityClearance;
26
use App\Models\Lookup\LanguageRequirement;
27
use App\Models\Lookup\Department;
28
use App\Models\Lookup\SkillLevel;
29
use App\Models\Lookup\CriteriaType;
30
use App\Models\Skill;
31
use App\Models\Manager;
32
33
use App\Services\Validation\JobPosterValidator;
34
use Jenssegers\Date\Date;
35
36
class JobController extends Controller
37
{
38
    /**
39
     * Display a listing of JobPosters.
40
     *
41
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
42
     */
43
    public function index()
44
    {
45
        $now = Carbon::now();
46
47
        // Find published jobs that are currently open for applications.
48
        // Eager load required relationships: Department, Province, JobTerm.
49
        // Eager load the count of submitted applications, to prevent the relationship
50
        // from being actually loaded and firing off events.
51
        $jobs = JobPoster::where('open_date_time', '<=', $now)
52
            ->where('close_date_time', '>=', $now)
53
            ->where('published', true)
54
            ->with([
55
                'department',
56
                'province',
57
                'job_term',
58
            ])
59
            ->withCount([
60
                'submitted_applications',
61
            ])
62
            ->get();
63
        return view('applicant/job_index', [
64
            'job_index' => Lang::get('applicant/job_index'),
65
            'jobs' => $jobs
66
        ]);
67
    }
68
69
    /**
70
     * Display a listing of a manager's JobPosters.
71
     *
72
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
73
     */
74 1
    public function managerIndex()
75
    {
76 1
        $manager = Auth::user()->manager;
0 ignored issues
show
Bug introduced by
Accessing manager on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
77 1
        $jobs = JobPoster::where('manager_id', $manager->id)
78 1
            ->withCount('submitted_applications')
79 1
            ->get();
80
81 1
        return view('manager/job_index', [
82
            /*Localization Strings*/
83 1
            'jobs_l10n' => Lang::get('manager/job_index'),
84
85
            /* Data */
86 1
            'jobs' => $jobs,
87
        ]);
88
    }
89
90
    /**
91
     * Submit the Job Poster for review.
92
     *
93
     * @param \Illuminate\Http\Request $request   Incoming request object.
94
     * @param \App\Models\JobPoster    $jobPoster Job Poster object.
95
     *
96
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
97
     */
98 1
    public function submitForReview(Request $request, JobPoster $jobPoster)
99
    {
100
        // Update review request timestamp
101 1
        $jobPoster->review_requested_at = new Date();
102 1
        $jobPoster->save();
103
104
        // Refresh model instance with updated DB values.
105 1
        $jobPoster = JobPoster::withCount('submitted_applications')->where('id', $jobPoster->id)->first();
106
107
        // Send email
108 1
        $reviewer_email = config('mail.reviewer_email');
109 1
        if (isset($reviewer_email)) {
110 1
            Mail::to($reviewer_email)->send(new JobPosterReviewRequested($jobPoster, Auth::user()));
0 ignored issues
show
Bug introduced by
It seems like Illuminate\Support\Facades\Auth::user() can also be of type null; however, parameter $manager of App\Mail\JobPosterReviewRequested::__construct() does only seem to accept App\Models\User, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

110
            Mail::to($reviewer_email)->send(new JobPosterReviewRequested($jobPoster, /** @scrutinizer ignore-type */ Auth::user()));
Loading history...
111
        } else {
112
            Log::error('The reviewer email environment variable is not set.');
113
        }
114
115 1
        return view('manager/job_index/job', [
116
            /*Localization Strings*/
117 1
            'jobs_l10n' => Lang::get('manager/job_index'),
118 1
            'job' => $jobPoster
119
        ]);
120
    }
121
122
    /**
123
     * Delete a draft Job Poster.
124
     *
125
     * @param \Illuminate\Http\Request $request   Incoming request object.
126
     * @param \App\Models\JobPoster    $jobPoster Job Poster object.
127
     *
128
     * @return void
129
     */
130
    public function destroy(Request $request, JobPoster $jobPoster) : void
131
    {
132
        $jobPoster->delete();
133
    }
134
135
    /**
136
     * Display the specified job poster.
137
     *
138
     * @param \Illuminate\Http\Request $request   Incoming request object.
139
     * @param \App\Models\JobPoster    $jobPoster Job Poster object.
140
     *
141
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
142
     */
143 4
    public function show(Request $request, JobPoster $jobPoster)
144
    {
145 4
        $jobPoster->load([
146 4
            'department',
147
            'criteria.skill.skill_type',
148
            'manager.team_culture',
149
            'manager.work_environment'
150
        ]);
151
152 4
        $user = Auth::user();
0 ignored issues
show
Unused Code introduced by
The assignment to $user is dead and can be removed.
Loading history...
153
154
        //TODO: Improve workplace photos, and reference them in template direction from WorkEnvironment model
155 4
        $workplacePhotos = [];
156 4
        foreach ($jobPoster->manager->work_environment->workplace_photo_captions as $photoCaption) {
157
            $workplacePhotos[] = [
158
                'description' => $photoCaption->description,
159
                'url' => '/images/user.png'
160
            ];
161
        }
162
163
        //TODO: replace route('manager.show',manager.id) in templates with link using slug
164
165
        $criteria = [
166 4
            'essential' => $jobPoster->criteria->filter(
167
                function ($value, $key) {
168 2
                    return $value->criteria_type->name == 'essential';
169 4
                }
170
            ),
171 4
            'asset' => $jobPoster->criteria->filter(
172
                function ($value, $key) {
173 2
                    return $value->criteria_type->name == 'asset';
174 4
                }
175
            ),
176
        ];
177
178 4
        $jobLang = Lang::get('applicant/job_post');
179
180 4
        $applyButton = [];
181 4
        if (!$jobPoster->published && $this->authorize('update', $jobPoster)) {
182
            $applyButton = [
183 2
                'href' => route('manager.jobs.edit', $jobPoster->id),
184 2
                'title' => $jobLang['apply']['edit_link_title'],
185 2
                'text' => $jobLang['apply']['edit_link_label'],
186
            ];
187 2
        } elseif (Auth::check() && $jobPoster->isOpen()) {
188
            $applyButton = [
189 1
                'href' => route('job.application.edit.1', $jobPoster->id),
190 1
                'title' => $jobLang['apply']['apply_link_title'],
191 1
                'text' => $jobLang['apply']['apply_link_label'],
192
            ];
193 1
        } elseif (Auth::guest() && $jobPoster->isOpen()) {
194
            $applyButton = [
195 1
                'href' => route('job.application.edit.1', $jobPoster->id),
196 1
                'title' => $jobLang['apply']['login_link_title'],
197 1
                'text' => $jobLang['apply']['login_link_label'],
198
            ];
199
        } else {
200
            $applyButton = [
201
                'href' => null,
202
                'title' => null,
203
                'text' => $jobLang['apply']['job_closed_label'],
204
            ];
205
        }
206
207 4
        return view(
208 4
            'applicant/job_post',
209
            [
210 4
                'job_post' => $jobLang,
211 4
                'manager' => $jobPoster->manager,
212 4
                'manager_profile_photo_url' => '/images/user.png', //TODO get real photo
213 4
                'team_culture' => $jobPoster->manager->team_culture,
214 4
                'work_environment' => $jobPoster->manager->work_environment,
215 4
                'workplace_photos' => $workplacePhotos,
216 4
                'job' => $jobPoster,
217 4
                'criteria' => $criteria,
218 4
                'apply_button' => $applyButton,
219 4
                'skill_template' => Lang::get('common/skills'),
220
            ]
221
        );
222
    }
223
224
    /**
225
     * Create a blank job poster for the specified manager
226
     *
227
     * @param Manager $manager
1 ignored issue
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
228
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory Job Create view
229
     */
230 2
    public function createAsManager(Manager $manager)
231
    {
232 2
        $jobPoster = new JobPoster();
233 2
        $jobPoster->manager_id = $manager->id;
234 2
        $managerEn = $manager->translate('en');
235 2
        $managerFr = $manager->translate('fr');
236
237 2
        $jobPoster->fill([
238 2
            'department_id' => $manager->department_id,
239
            'en' => [
240 2
                'branch' => $managerEn->branch,
241 2
                'division' => $managerEn->division,
242
            ],
243
            'fr' => [
244 2
                'branch' => $managerFr->branch,
245 2
                'division' => $managerFr->division,
246
            ]
247
        ]);
248 2
        $jobPoster->save();
249
250 2
        $defaultQuestions = $this->populateDefaultQuestions();
251 2
        if (!empty($defaultQuestions)) {
252 2
            $jobPoster->job_poster_questions()->saveMany($defaultQuestions);
253
        }
254
255 2
        return redirect()->route('manager.jobs.edit', $jobPoster->id);
1 ignored issue
show
Bug Best Practice introduced by
The expression return redirect()->route....edit', $jobPoster->id) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Contracts\Vie...ry|Illuminate\View\View.
Loading history...
256
    }
257
258
    /**
259
     * Display the form for creating a new Job Poster
260
     *
261
     * @param \Illuminate\Http\Request $request Incoming request object.
262
     *
263
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory Job Create view
264
     */
265
    public function create(Request $request)
266
    {
267
        return $this->populateCreateView($request);
268
    }
269
270
    /**
271
     * Display the form for editing an existing Job Poster
272
     *
273
     * @param \Illuminate\Http\Request $request   Incoming request object.
274
     * @param \App\Models\JobPoster    $jobPoster Job Poster object.
275
     *
276
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory Job Create view
277
     */
278 1
    public function edit(Request $request, JobPoster $jobPoster)
279
    {
280 1
        return $this->populateCreateView($request, $jobPoster);
281
    }
282
283
    /**
284
     * Get the manager from the request object and check if creating or editing
285
     *
286
     * @param \Illuminate\Http\Request $request   Incoming request object.
287
     * @param \App\Models\JobPoster    $jobPoster Optional Job Poster object.
288
     *
289
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory Job Create view
290
     */
291 1
    public function populateCreateView(Request $request, JobPoster $jobPoster = null)
292
    {
293 1
        if ($jobPoster == null || $jobPoster->manager == null) {
294
            $manager = $request->user() ? $request->user()->manager : null;
295
        } else {
296 1
            $manager = $jobPoster->manager;
297
        }
298
299 1
        if (isset($jobPoster)) {
300 1
            $job = $jobPoster;
301 1
            $route = ['manager.jobs.update', $jobPoster];
302 1
            $jobHeading = 'manager/job_edit';
303
        } else {
304
            $job = [];
305
            $defaultQuestions = $this->populateDefaultQuestions();
306
            if (!empty($defaultQuestions)) {
307
                $job['job_poster_questions'] = $defaultQuestions;
308
            }
309
            $route = ['manager.jobs.store'];
310
            $jobHeading = 'manager/job_create';
311
        }
312
313 1
        $skillLangs = Lang::get('common/skills');
314
315 1
        $softSkills = Skill::whereHas(
316 1
            'skill_type',
317
            function ($query) : void {
318 1
                $query->where('name', '=', 'soft');
319 1
            }
320 1
        )->get()
321 1
            ->mapWithKeys(
322
                function ($skill) {
323
                    return [
324 1
                        $skill->id => $skill->name
325
                    ];
326 1
                }
327
            )
328 1
            ->all();
329
330 1
        $hardSkills = Skill::whereHas(
331 1
            'skill_type',
332
            function ($query) : void {
333 1
                $query->where('name', '=', 'hard');
334 1
            }
335 1
        )->get()
336 1
            ->mapWithKeys(
337
                function ($skill) {
338
                    return [
339 1
                        $skill->id => $skill->name
340
                    ];
341 1
                }
342
            )
343 1
            ->all();
344
345 1
        asort($softSkills, SORT_LOCALE_STRING);
346 1
        asort($hardSkills, SORT_LOCALE_STRING);
347
348
        $skills = [
349
            'essential' => [
350 1
                'hard' => $hardSkills,
351 1
                'soft' => $softSkills
352
            ],
353
            'asset' => [
354 1
                'hard' => $hardSkills,
355 1
                'soft' => $softSkills
356
            ]
357
        ];
358
359 1
        $skillLevelCollection = SkillLevel::all();
360
361 1
        $skillLevels = array();
362
363 1
        $skillLevels['hard'] = $skillLevelCollection->mapWithKeys(
364
            function ($skillLevel) use ($skillLangs) {
365 1
                return [$skillLevel->id => $skillLangs['skill_levels']['hard'][$skillLevel->name]];
366 1
            }
367 1
        )->all();
368
369 1
        $skillLevels['soft'] = $skillLevelCollection->mapWithKeys(
370
            function ($skillLevel) use ($skillLangs) {
371 1
                return [$skillLevel->id => $skillLangs['skill_levels']['soft'][$skillLevel->name]];
372 1
            }
373 1
        )->all();
374
375 1
        return view(
376 1
            'manager/job_create',
377
            [
378
                /*Localization Strings*/
379 1
                'job_l10n' => Lang::get('manager/job_create'),
380
381
                /* Data */
382 1
                'job' => Lang::get($jobHeading),
383 1
                'manager' => $manager,
384 1
                'provinces' => Province::all(),
385 1
                'departments' => Department::all(),
386 1
                'language_requirments' => LanguageRequirement::all(),
387 1
                'security_clearances' => SecurityClearance::all(),
388 1
                'job' => $job,
389 1
                'form_action_url' => route(/** @scrutinizer ignore-type */ ...$route), // phpcs:ignore
0 ignored issues
show
Bug introduced by
$route is expanded, but the parameter $name of route() does not expect variable arguments. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

389
                'form_action_url' => route(/** @scrutinizer ignore-type */ /** @scrutinizer ignore-type */ ...$route), // phpcs:ignore
Loading history...
390 1
                'skills' => $skills,
391 1
                'skill_levels' => $skillLevels,
392 1
                'skill_template' => $skillLangs,
393
            ]
394
        );
395
    }
396
397
    /**
398
     * Create a new resource in storage
399
     *
400
     * @param \Illuminate\Http\Request $request   Incoming request object.
401
     * @param \App\Models\JobPoster    $jobPoster Optional Job Poster object.
402
     *
403
     * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse A redirect to the Job Index
404
     */
405 3
    public function store(Request $request, JobPoster $jobPoster = null)
406
    {
407
        // Don't allow edits for published Job Posters
408
        // Also check auth while we're at it
409 3
        if (isset($jobPoster)) {
410 3
            $this->authorize('update', $jobPoster);
411 3
            JobPosterValidator::validateUnpublished($jobPoster);
412
        } else {
413
            $this->authorize('create', JobPoster::class);
414
        }
415
416 3
        $input = $request->input();
417
418 3
        $job = (isset($jobPoster) ? $jobPoster : new JobPoster());
419
420 3
        if ($job->manager_id == null) {
421
            $job->manager_id = $request->user()->manager->id;
422
            $job->save();
423
        }
424
425 3
        $this->fillAndSaveJobPoster($input, $job);
426
427 3
        $this->fillAndSaveJobPosterTasks($input, $job, isset($jobPoster));
428
429 3
        $this->fillAndSaveJobPosterQuestions($input, $job, isset($jobPoster));
430
431 3
        $this->fillAndSaveJobPosterCriteria($input, $job, isset($jobPoster));
432
433 3
        return redirect(route('manager.jobs.show', $job->id));
434
    }
435
436
    /**
437
     * Fill Job Poster model's properties and save
438
     *
439
     * @param mixed[]               $input     Field values.
440
     * @param \App\Models\JobPoster $jobPoster Job Poster object.
441
     *
442
     * @return void
443
     */
444 3
    protected function fillAndSaveJobPoster(array $input, JobPoster $jobPoster) : void
445
    {
446 3
        $closeDate = new Date($input['close_date']);
447 3
        $openDate = new Date($input['open_date']);
448 3
        $startDate = new Date($input['start_date']);
449
450 3
        $jobPoster->fill(
451
            [
452 3
                'job_term_id' => JobTerm::where('name', 'month')->firstOrFail()->id,
453 3
                'term_qty' => $input['term_qty'],
454 3
                'open_date_time' => pstDayStartToUtcTime($openDate->year, $openDate->month, $openDate->day),
455 3
                'close_date_time' => pstDayEndToUtcTime($closeDate->year, $closeDate->month, $closeDate->day),
456 3
                'start_date_time' => pstDayStartToUtcTime($startDate->year, $startDate->month, $startDate->day),
457 3
                'department_id' => $input['department'],
458 3
                'province_id' => $input['province'],
459 3
                'salary_min' => $input['salary_min'],
460 3
                'salary_max' => $input['salary_max'],
461 3
                'noc' => $input['noc'],
462 3
                'classification' => $input['classification'],
463 3
                'security_clearance_id' => $input['security_clearance'],
464 3
                'language_requirement_id' => $input['language_requirement'],
465 3
                'remote_work_allowed' => (isset($input['remote_work_allowed']) ? $input['remote_work_allowed'] : false),
466
                'en' => [
467 3
                    'city' => $input['city'],
468 3
                    'title' => $input['title']['en'],
469 3
                    'impact' => $input['impact']['en'],
470 3
                    'branch' => $input['branch']['en'],
471 3
                    'division' => $input['division']['en'],
472 3
                    'education' => $input['education']['en'],
473
                ],
474
                'fr' => [
475 3
                    'city' => $input['city'],
476 3
                    'title' => $input['title']['fr'],
477 3
                    'impact' => $input['impact']['fr'],
478 3
                    'branch' => $input['branch']['fr'],
479 3
                    'division' => $input['division']['fr'],
480 3
                    'education' => $input['education']['fr'],
481
                ],
482
            ]
483
        );
484 3
        $jobPoster->save();
485 3
    }
486
487
    /**
488
     * Fill Job Poster's tasks and save
489
     *
490
     * @param mixed[]               $input     Field values.
491
     * @param \App\Models\JobPoster $jobPoster Job Poster object.
492
     * @param boolean               $replace   Remove existing relationships.
493
     *
494
     * @return void
495
     */
496 3
    protected function fillAndSaveJobPosterTasks(array $input, JobPoster $jobPoster, bool $replace) : void
497
    {
498 3
        if ($replace) {
499 3
            $jobPoster->job_poster_key_tasks()->delete();
500
        }
501
502 3
        if (!array_key_exists('task', $input) || !is_array($input['task'])) {
503 3
            return;
504
        }
505
506
        foreach ($input['task'] as $task) {
507
            $jobPosterTask = new JobPosterKeyTask();
508
            $jobPosterTask->job_poster_id = $jobPoster->id;
509
            $jobPosterTask->fill(
510
                [
511
                    'en' => [
512
                        'description' => $task['en']
513
                    ],
514
                    'fr' => [
515
                        'description' => $task['fr']
516
                    ]
517
                ]
518
            );
519
            $jobPosterTask->save();
520
        }
521
    }
522
523
    /**
524
     * Fill Job Poster's questions and save
525
     *
526
     * @param mixed[]               $input     Field values.
527
     * @param \App\Models\JobPoster $jobPoster Job Poster object.
528
     * @param boolean               $replace   Remove existing relationships.
529
     *
530
     * @return void
531
     */
532 3
    protected function fillAndSaveJobPosterQuestions(array $input, JobPoster $jobPoster, bool $replace) : void
533
    {
534 3
        if ($replace) {
535 3
            $jobPoster->job_poster_questions()->delete();
536
        }
537
538 3
        if (!array_key_exists('question', $input) || !is_array($input['question'])) {
539 3
            return;
540
        }
541
542
        foreach ($input['question'] as $question) {
543
            $jobQuestion = new JobPosterQuestion();
544
            $jobQuestion->job_poster_id = $jobPoster->id;
545
            $jobQuestion->fill(
546
                [
547
                    'en' => [
548
                        'question' => $question['question']['en'],
549
                        'description' => $question['description']['en']
550
                    ],
551
                    'fr' => [
552
                        'question' => $question['question']['fr'],
553
                        'description' => $question['description']['fr']
554
                    ]
555
                ]
556
            );
557
            $jobQuestion->save();
558
        }
559
    }
560
561
    /**
562
     * Fill Job Poster's criteria and save
563
     *
564
     * @param mixed[]               $input     Field values.
565
     * @param \App\Models\JobPoster $jobPoster Job Poster object.
566
     * @param boolean               $replace   Remove existing relationships.
567
     *
568
     * @return void
569
     */
570 3
    protected function fillAndSaveJobPosterCriteria(array $input, JobPoster $jobPoster, bool $replace) : void
571
    {
572 3
        if ($replace) {
573 3
            $jobPoster->criteria()->delete();
574
        }
575
576 3
        if (!array_key_exists('criteria', $input) || !is_array($input['criteria'])) {
577 3
            return;
578
        }
579
580
        $criteria = $input['criteria'];
581
582
        $combinedCriteria = [];
583
        if (isset($criteria['old'])) {
584
            $combinedCriteria = array_replace_recursive($combinedCriteria, $criteria['old']);
585
        }
586
        if (isset($criteria['new'])) {
587
            $combinedCriteria = array_replace_recursive($combinedCriteria, $criteria['new']);
588
        }
589
590
        if (! empty($combinedCriteria)) {
591
            foreach ($combinedCriteria as $criteriaType => $criteriaTypeInput) {
592
                foreach ($criteriaTypeInput as $skillType => $skillTypeInput) {
593
                    foreach ($skillTypeInput as $criteriaInput) {
594
                        $criteria = new Criteria();
595
                        $criteria->job_poster_id = $jobPoster->id;
596
                        $criteria->fill(
597
                            [
598
                                'criteria_type_id' => CriteriaType::where('name', $criteriaType)->firstOrFail()->id,
599
                                'skill_id' => $criteriaInput['skill_id'],
600
                                'skill_level_id' => $criteriaInput['skill_level_id'],
601
                                'en' => [
602
                                    'description' => $criteriaInput['description']['en'],
603
                                ],
604
                                'fr' => [
605
                                    'description' => $criteriaInput['description']['fr'],
606
                                ],
607
                            ]
608
                        );
609
                        $criteria->save();
610
                    }
611
                }
612
            }
613
        }
614
    }
615
616
    /**
617
     * Get the localized default questions and add them to an array.
618
     *
619
     * @return mixed[]|void
620
     */
621 2
    protected function populateDefaultQuestions()
622
    {
623
        $defaultQuestions = [
624 2
            'en' => array_values(Lang::get('manager/job_create', [], 'en')['questions']),
625 2
            'fr' => array_values(Lang::get('manager/job_create', [], 'fr')['questions']),
626
        ];
627
628 2
        if (count($defaultQuestions['en']) !== count($defaultQuestions['fr'])) {
629
            Log::warning('There must be the same number of French and English default questions for a Job Poster.');
630
            return;
631
        }
632
633 2
        $jobQuestions = [];
634
635 2
        for ($i = 0; $i < count($defaultQuestions['en']); $i++) {
0 ignored issues
show
Performance Best Practice introduced by
It seems like you are calling the size function count() as part of the test condition. You might want to compute the size beforehand, and not on each iteration.

If the size of the collection does not change during the iteration, it is generally a good practice to compute it beforehand, and not on each iteration:

for ($i=0; $i<count($array); $i++) { // calls count() on each iteration
}

// Better
for ($i=0, $c=count($array); $i<$c; $i++) { // calls count() just once
}
Loading history...
636 2
            $jobQuestion = new JobPosterQuestion();
637 2
            $jobQuestion->fill(
638
                [
639
                    'en' => [
640 2
                        'question' => $defaultQuestions['en'][$i],
641
                    ],
642
                    'fr' => [
643 2
                        'question' => $defaultQuestions['fr'][$i],
644
                    ]
645
                ]
646
            );
647 2
            $jobQuestions[] = $jobQuestion;
648
        }
649
650 2
        return $jobQuestions;
651
    }
652
}
653