Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3454 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Authentication\AuthenticationService;
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Mapper\QueryMapper;
14
use LeadersLinked\Mapper\UserMapper;
15
use LeadersLinked\Model\UserExperience;
16
use LeadersLinked\Mapper\UserExperienceMapper;
17
use Laminas\Db\Sql\Select;
18
use LeadersLinked\Mapper\CompanyMapper;
19
use LeadersLinked\Model\User;
20
use LeadersLinked\Mapper\LocationMapper;
21
use LeadersLinked\Mapper\CompanySizeMapper;
22
use LeadersLinked\Mapper\GroupMapper;
23
use LeadersLinked\Mapper\GroupMemberMapper;
24
use LeadersLinked\Mapper\IndustryMapper;
25
use Laminas\Paginator\Adapter\DbSelect;
26
use Laminas\Paginator\Paginator;
27
use LeadersLinked\Mapper\UserSkillMapper;
28
use LeadersLinked\Mapper\SkillMapper;
29
use LeadersLinked\Model\Job;
30
use LeadersLinked\Mapper\ConnectionMapper;
31
use LeadersLinked\Mapper\UserProfileMapper;
32
use LeadersLinked\Model\UserProfile;
33
use Laminas\Db\Sql\Expression;
34
use LeadersLinked\Mapper\GroupTypeMapper;
35
use LeadersLinked\Mapper\JobMapper;
36
use LeadersLinked\Mapper\ProfileVisitMapper;
37
use LeadersLinked\Mapper\CompanyLocationMapper;
38
use LeadersLinked\Mapper\CompanyFollowerMapper;
39
use LeadersLinked\Mapper\JobApplicationMapper;
40
use LeadersLinked\Model\UserType;
41
use LeadersLinked\Mapper\UserBlockedMapper;
42
use LeadersLinked\Mapper\CompanyUserMapper;
43
use LeadersLinked\Model\CompanyUser;
44
use LeadersLinked\Model\Company;
45
use LeadersLinked\Model\Group;
46
 
47
class SearchController extends AbstractActionController
48
{
49
    /**
50
     *
51
     * @var AdapterInterface
52
     */
53
    private $adapter;
54
 
55
 
56
    /**
57
     *
58
     * @var AbstractAdapter
59
     */
60
    private $cache;
61
 
62
    /**
63
     *
64
     * @var  LoggerInterface
65
     */
66
    private $logger;
67
 
68
    /**
69
     *
70
     * @var array
71
     */
72
    private $config;
73
 
74
 
75
 
76
    /**
77
     *
78
     * @param AdapterInterface $adapter
79
     * @param AbstractAdapter $cache
80
     * @param LoggerInterface $logger
81
     * @param array $config
82
     */
83
    public function __construct($adapter, $cache , $logger, $config)
84
    {
85
        $this->adapter      = $adapter;
86
        $this->cache        = $cache;
87
        $this->logger       = $logger;
88
        $this->config       = $config;
89
    }
90
 
91
    public function indexAction()
92
    {
93
        $page       = (int) filter_var($this->params()->fromQuery('page'), FILTER_SANITIZE_NUMBER_INT);
94
        $keyword    = filter_var($this->params()->fromQuery('keyword'), FILTER_SANITIZE_STRING);
95
        $entity     = $this->params()->fromRoute('entity');
96
        $country    = filter_var($this->params()->fromQuery('country'), FILTER_SANITIZE_STRING);
97
        $state      = filter_var($this->params()->fromQuery('state'), FILTER_SANITIZE_STRING);
98
        $city1      = filter_var($this->params()->fromQuery('city1'), FILTER_SANITIZE_STRING);
99
        $city2      = filter_var($this->params()->fromQuery('city2'), FILTER_SANITIZE_STRING);
100
 
101
 
102
       // echo 'keyword = ' . $keyword .PHP_EOL;
103
        //echo 'entity = ' . $entity . PHP_EOL;
104
 
105
        $request = $this->getRequest();
106
        if($request->isGet()) {
107
 
108
 
109
            $headers  = $request->getHeaders();
110
 
111
            $isJson = false;
112
            if($headers->has('Accept')) {
113
                $accept = $headers->get('Accept');
114
 
115
                $prioritized = $accept->getPrioritized();
116
 
117
                foreach($prioritized as $key => $value) {
118
                    $raw = trim($value->getRaw());
119
 
120
                    if(!$isJson) {
121
                        $isJson = strpos($raw, 'json');
122
                    }
123
 
124
                }
125
            }
126
 
127
 
128
            if($isJson) {
129
                $currentUserPlugin = $this->plugin('currentUserPlugin');
130
                $currentUser = $currentUserPlugin->getUser();
131
 
132
 
133
 
134
 
135
                $userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
136
                $user_blocked_ids = $userBlockedMapper->fetchAllBlockedReturnIds($currentUser->id);
137
 
138
                switch($entity)
139
                {
140
                    case 'user' :
141
                        $grade1     = intval($this->params()->fromQuery('connection_level_1'), 10);
142
                        $grade2     = intval($this->params()->fromQuery('connection_level_2'), 10);
143
 
144
 
145
 
146
                        $queryMapper = QueryMapper::getInstance($this->adapter);
147
 
148
                        $select = $queryMapper->getSql()->select();
149
                        $select->columns(['id', 'user_uuid' => 'uuid', 'first_name','last_name','image']);
150
                        $select->from(['u' => UserMapper::_TABLE]);
151
                        $select->join(['ue' => UserExperienceMapper::_TABLE], 'u.id = ue.user_id',[ 'industry_id'] , Select::JOIN_LEFT);
152
                        $select->join(['up' => UserProfileMapper::_TABLE], "u.id = up.user_id ", ['user_profile_uuid' => 'uuid', 'user_profile_id' => 'id', 'description'] );
153
                        $select->join(['l' => LocationMapper::_TABLE], "u.location_id = l.id" ,['country', 'state', 'city1', 'city2'], Select::JOIN_LEFT);
154
                        $select->where->equalTo('up.public', UserProfile::PUBLIC_YES);
155
 
156
 
157
 
158
 
159
                        if($country) {
160
                            $select->where->equalTo('country', $country);
161
                        }
162
                        if($state) {
163
                            $select->where->equalTo('state', $state);
164
                        }
165
                        if($city1) {
166
                            $select->where->equalTo('city1', $city1);
167
                        }
168
                        if($city2) {
169
                            $select->where->equalTo('city2', $city2);
170
                        }
171
 
172
                        if($grade1 && $grade2) {
173
                            $connectionMapper = ConnectionMapper::getInstance($this->adapter);
174
                            $first_grade    = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
175
                            if(!$first_grade) {
176
                                array_push($first_grade, 0);
177
                            }
178
 
179
                            $second_grade   = $connectionMapper->fetchAllSecondDegreeConnectionsForUserIdReturnIds($currentUser->id);
180
                            if(!$second_grade) {
181
                                array_push($second_grade, 0);
182
                            }
183
 
184
                            $select->where->nest->in('u.id', $first_grade)->or->in('u.id',$second_grade)->unnest();
185
                        } else {
186
                            if($grade1) {
187
                                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
188
                                $first_grade    = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
189
                                if(!$first_grade) {
190
                                    array_push($first_grade, 0);
191
                                }
192
 
193
                                $select->where->in('u.id', $first_grade);
194
 
195
                            } else if($grade2) {
196
                                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
197
                                $second_grade   = $connectionMapper->fetchAllSecondDegreeConnectionsForUserIdReturnIds($currentUser->id);
198
                                if(!$second_grade) {
199
                                    array_push($second_grade, 0);
200
                                }
201
 
202
                                $select->where->in('u.id',$second_grade);
203
 
204
                            }
205
                        }
206
                        if($user_blocked_ids) {
207
                            $select->where->notIn('u.id', $user_blocked_ids);
208
                        }
209
 
210
                        $select->where->notEqualTo('u.id', $currentUser->id);
211
                        /*
212
                        $industry_ids = [];
213
 
214
                        $userExperienceMapper = UserExperienceMapper::getInstance($this->adapter);
215
                        $experiences = $userExperienceMapper->fetchAllByUserId($currentUser->id);
216
                        foreach($experiences as $experience)
217
                        {
218
                            if($experience->is_current == UserExperience::IS_CURRENT_YES) {
219
                                if(!in_array($experience->industry_id, $industry_ids)) {
220
                                    array_push($industry_ids, $experience->industry_id);
221
                                }
222
                            }
223
                        }
224
 
225
                        if($industry_ids) {
226
                            $select->where->in('industry_id', $industry_ids);
227
                        }
228
                        */
229
                        $select->where->in('u.usertype_id', [UserType::USER, UserType::ADMIN]);
230
                        $select->where->equalTo('u.status', User::STATUS_ACTIVE);
231
                        $select->where->equalTo('u.show_in_search', User::SHOW_IN_SEARCH_YES);
232
 
233
                        if($keyword) {
234
                            $select->where->NEST->like('u.first_name', '%' . $keyword . '%')->or->like('u.last_name', '%' . $keyword . '%')->UNNEST;
235
                        }
236
                        $select->group('u.id');
237
 
238
                        $select->order(new Expression('rand()'));
239
 
240
                        //echo $select->getSqlString($this->adapter->platform); exit;
241
                        break;
242
 
243
                    case 'company' :
244
 
245
                        $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
246
                        $companySizes = $companySizeMapper->fetchAll();
247
 
248
                        $company_sizes = [];
249
 
250
                        foreach($companySizes as $companySize)
251
                        {
252
 
253
                            $company_size_id = intval($this->params()->fromQuery('company_size_id'. $companySize->uuid), 10);
254
                            if($company_size_id) {
255
                                array_push($company_sizes, $companySize->id);
256
                            }
257
                        }
258
 
259
                        $industryMapper = IndustryMapper::getInstance($this->adapter);
260
                        $industries = $industryMapper->fetchAllActives();
261
 
262
                        $industry_ids = [];
263
                        foreach($industries as $industry)
264
                        {
265
                            $industry_id = intval($this->params()->fromQuery('industry_id'. $industry->uuid), 10);
266
                            if($industry_id) {
267
                                if(!in_array($industry_id, $industry_ids)) {
268
                                    array_push($industry_ids, $industry->id);
269
                                }
270
                            }
271
                        }
272
 
273
 
274
                        $queryMapper = QueryMapper::getInstance($this->adapter);
275
                        $select = $queryMapper->getSql()->select();
276
                        $select->columns(['id','company_uuid' => 'uuid', 'name','image', 'description', 'industry_id', 'company_size_id']);
277
                        $select->from(['c' => CompanyMapper::_TABLE]);
278
                        $select->join(['cl' => CompanyLocationMapper::_TABLE], 'c.id = cl.company_id', ['location_id', 'is_main'], Select::JOIN_LEFT);
279
                        $select->join(['l' => LocationMapper::_TABLE], 'cl.location_id = l.id' ,['formatted_address', 'country', 'state', 'city1', 'city2'], Select::JOIN_LEFT);
280
                        $select->join(['cu' => CompanyUserMapper::_TABLE], 'c.id = cu.company_id', ['user_id', 'owner']);
281
                        //$select->where->equalTo('cl.is_main', CompanyLocation::IS_MAIN_YES);
282
                        $select->where->equalTo('cu.owner', CompanyUser::OWNER_YES);
283
                        $select->where->equalTo('c.status', Company::STATUS_ACTIVE);
284
 
285
 
286
 
287
                        if($user_blocked_ids) {
288
                            $select->where->notIn('cu.user_id', $user_blocked_ids);
289
                        }
290
 
291
                        if($industry_ids) {
292
                            $select->where->in('c.industry_id', $industry_ids);
293
                        }
294
 
295
 
296
                        if($company_sizes) {
297
                            $select->where->in('c.company_size_id',$company_sizes);
298
                        }
299
 
300
 
301
                        if($country) {
302
                            $select->where->equalTo('l.country', $country);
303
                        }
304
                        if($state) {
305
                            $select->where->equalTo('l.state', $state);
306
                        }
307
                        if($city1) {
308
                            $select->where->equalTo('l.city1', $city1);
309
                        }
310
                        if($city2) {
311
                            $select->where->equalTo('l.city2', $city2);
312
                        }
313
 
314
                        if($keyword) {
315
                            $select->where->like('c.name', '%' . $keyword . '%');
316
                        }
317
 
318
                        $select->group('c.id');
319
 
320
 
321
                        $select->order(new Expression('rand()'));
322
 
323
                        //echo $select->getSqlString($this->adapter->platform); exit;
324
                        break;
325
 
326
                    case 'group' :
327
 
328
                        $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
329
                        $groupTypes = $groupTypeMapper->fetchAllActives();
330
 
331
 
332
                        $group_type_ids = [];
333
                        foreach($groupTypes as $groupType)
334
                        {
335
 
336
                            $group_type_id = intval($this->params()->fromQuery('group_type_id'. $groupType->uuid), 10);
337
                            if($group_type_id) {
338
                                if(!in_array($group_type_id, $group_type_ids)) {
339
                                    array_push($group_type_ids, $groupType->id);
340
                                }
341
                            }
342
                        }
343
 
344
                        $industryMapper = IndustryMapper::getInstance($this->adapter);
345
                        $industries = $industryMapper->fetchAllActives();
346
 
347
                        $industry_ids = [];
348
                        foreach($industries as $industry)
349
                        {
350
                            $industry_id = intval($this->params()->fromQuery('industry_id'. $industry->uuid), 10);
351
                            if($industry_id) {
352
                                if(!in_array($industry_id, $industry_ids)) {
353
                                    array_push($industry_ids, $industry->id);
354
                                }
355
                            }
356
                        }
357
 
358
 
359
 
360
 
361
                        $queryMapper = QueryMapper::getInstance($this->adapter);
362
                        $select = $queryMapper->getSql()->select();
363
                        $select->columns(['id', 'group_uuid' => 'uuid',  'name', 'description','image','type_id', 'industry_id', 'user_id' ]);
364
                        $select->from(['g' => GroupMapper::_TABLE]);
365
 
366
                        if($group_type_ids) {
367
                            $select->where->in('type_id', $group_type_ids);
368
                        }
369
 
370
                        if($industry_ids) {
371
                            $select->where->in('industry_id', $industry_ids);
372
                        }
373
 
374
                        if($keyword) {
375
                            $select->where->like('name', '%' . $keyword . '%');
376
                        }
377
 
378
                        if($user_blocked_ids) {
379
                            $select->where->notIn('user_id', $user_blocked_ids);
380
                        }
381
                        $select->where->equalTo('status', Group::STATUS_ACTIVE);
382
                        $select->where->equalTo('privacy', Group::PRIVACY_IS_PUBLIC);
383
 
384
                        $select->group('g.id');
385
                        $select->order(new Expression('rand()'));
386
 
387
                        //echo $select->getSqlString($this->adapter->platform); exit;
388
 
389
                        break;
390
 
391
                    case 'job' :
392
                        $jobFullTime    = intval($this->params()->fromQuery('employment_type_id' . Job::EMPLOYMENT_TYPE_FULL_TIME), 10);
393
                        $jobPartTime    = intval($this->params()->fromQuery('employment_type_id' . Job::EMPLOYMENT_TYPE_PART_TIME), 10);
394
                        $jobContract    = intval($this->params()->fromQuery('employment_type_id' . Job::EMPLOYMENT_TYPE_CONTRACT), 10);
395
                        $jobTemporary   = intval($this->params()->fromQuery('employment_type_id' . Job::EMPLOYMENT_TYPE_TEMPORARY ), 10);
396
 
397
                        $employment_types = [];
398
                        if($jobFullTime) {
399
                            array_push($employment_types, Job::EMPLOYMENT_TYPE_FULL_TIME);
400
                        }
401
                        if($jobPartTime) {
402
                            array_push($employment_types, Job::EMPLOYMENT_TYPE_PART_TIME);
403
                        }
404
                        if($jobContract) {
405
                            array_push($employment_types, Job::EMPLOYMENT_TYPE_CONTRACT);
406
                        }
407
                        if($jobTemporary) {
408
                            array_push($employment_types, Job::EMPLOYMENT_TYPE_TEMPORARY);
409
                        }
410
 
411
                        $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
412
                        $companySizes = $companySizeMapper->fetchAll();
413
 
414
                        $company_sizes = [];
415
 
416
                        foreach($companySizes as $companySize)
417
                        {
418
 
419
                            $company_size_id = intval($this->params()->fromQuery('company_size_id'. $companySize->uuid), 10);
420
                            if($company_size_id) {
421
                                array_push($company_sizes, $companySize->id);
422
                            }
423
                        }
424
 
425
                        $industryMapper = IndustryMapper::getInstance($this->adapter);
426
                        $industries = $industryMapper->fetchAllActives();
427
 
428
                        $industry_ids = [];
429
                        foreach($industries as $industry)
430
                        {
431
                            $industry_id = intval($this->params()->fromQuery('industry_id'. $industry->uuid), 10);
432
                            if($industry_id) {
433
                                if(!in_array($industry_id, $industry_ids)) {
434
                                    array_push($industry_ids, $industry->id);
435
                                }
436
                            }
437
                        }
438
 
439
                        $queryMapper = QueryMapper::getInstance($this->adapter);
440
                        $select = $queryMapper->getSql()->select();
441
                        $select->columns(['id', 'job_uuid' => 'uuid', 'company_id','title','description','employment_type','location_id','last_date_of_application','experience_visible','experience_min','experience_max']);
442
                        $select->from(['j' => JobMapper::_TABLE]);
443
                        $select->join(['c' => CompanyMapper::_TABLE] , 'c.id = j.company_id', ['company_uuid' => 'uuid', 'company_name' => 'name', 'image', 'industry_id', 'company_size_id']);
444
                        $select->join(['l' => LocationMapper::_TABLE], 'j.location_id = l.id' ,['formatted_address', 'country', 'state', 'city1', 'city2'] );
445
                        $select->join(['cu' => CompanyUserMapper::_TABLE], 'c.id = cu.company_id', ['user_id', 'owner']);
446
                        $select->where->equalTo('cu.owner', CompanyUser::OWNER_YES);
447
                        $select->where->equalTo('c.status', Company::STATUS_ACTIVE);
448
 
449
                        if($user_blocked_ids) {
450
                            $select->where->notIn('cu.user_id', $user_blocked_ids);
451
                        }
452
 
453
                        if($employment_types) {
454
                            $select->where->in('employment_type', $employment_types);
455
                        }
456
 
457
                        if($industry_ids) {
458
                            $select->where->in('industry_id', $industry_ids);
459
                        }
460
 
461
                        if($company_sizes) {
462
                            $select->where->in('c.company_size_id',$company_sizes);
463
                        }
464
 
465
                        if($country) {
466
                            $select->where->equalTo('country', $country);
467
                        }
468
                        if($state) {
469
                            $select->where->equalTo('state', $state);
470
                        }
471
                        if($city1) {
472
                            $select->where->equalTo('city1', $city1);
473
                        }
474
                        if($city2) {
475
                            $select->where->equalTo('city2', $city2);
476
                        }
477
 
478
                        if($keyword) {
479
                            $select->where->like('title', '%' . $keyword . '%');
480
                        }
481
 
482
                        $select->where->equalTo('c.status', Company::STATUS_ACTIVE);
483
                        $select->where->equalTo('j.status', Job::STATUS_ACTIVE);
484
                        $select->where->greaterThanOrEqualTo('last_date_of_application', new Expression('DATE(NOW())'));
485
 
486
                        $select->group('j.id');
487
                        $select->order(new Expression('rand()'));
488
 
489
                        break;
490
                }
491
 
492
                //echo $select->getSqlString($this->adapter->platform); exit;
493
 
494
                $dbSelect = new DbSelect($select, $this->adapter);
495
                $paginator = new Paginator($dbSelect);
496
                $paginator->setCurrentPageNumber($page ? $page : 1);
497
                $paginator->setItemCountPerPage(10);
498
 
499
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
500
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
501
                $industryMapper = IndustryMapper::getInstance($this->adapter);
502
                $jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);
503
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
504
                $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
505
                $profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);
506
                $userSkillMapper = UserSkillMapper::getInstance($this->adapter);
507
 
508
                $months = [
509
                    1 => 'LABEL_MONTH_JANUARY',
510
                    2 => 'LABEL_MONTH_FEBRUARY',
511
                    3 => 'LABEL_MONTH_MARCH',
512
                    4 => 'LABEL_MONTH_APRIL',
513
                    5 => 'LABEL_MONTH_MAY',
514
                    6 => 'LABEL_MONTH_JUNE',
515
                    7 => 'LABEL_MONTH_JULY',
516
                    8 => 'LABEL_MONTH_AUGUST',
517
                    9 => 'LABEL_MONTH_SEPTEMBER',
518
                    10 => 'LABEL_MONTH_OCTOBER',
519
                    11 => 'LABEL_MONTH_NOVEMBER',
520
                    12 => 'LABEL_MONTH_DECEMBER',
521
                ];
522
 
523
                $employmentTypes = [
524
                    Job::EMPLOYMENT_TYPE_FULL_TIME => 'LABEL_EMPLOYMENT_TYPE_FULL_TIME',
525
                    Job::EMPLOYMENT_TYPE_PART_TIME => 'LABEL_EMPLOYMENT_TYPE_PART_TIME',
526
                    Job::EMPLOYMENT_TYPE_CONTRACT => 'LABEL_EMPLOYMENT_TYPE_CONTRACT',
527
                    Job::EMPLOYMENT_TYPE_TEMPORARY => 'LABEL_EMPLOYMENT_TYPE_TEMPORARY'
528
                ];
529
 
530
 
531
 
532
 
533
                $items = [];
534
                $records = $paginator->getCurrentItems();
535
                foreach($records as $record)
536
                {
537
                    switch($entity)
538
                    {
539
                        case 'user' :
540
 
541
                            $skills = [];
542
                            if($record['user_profile_id']) {
543
                                $skillMapper = SkillMapper::getInstance($this->adapter);
544
 
545
                                $userSkillMapper = UserSkillMapper::getInstance($this->adapter);
546
                                $userSkillRecords = $userSkillMapper->fetchAllByUserProfileId($record['user_profile_id']);
547
 
548
 
549
                                foreach($userSkillRecords as $userSkillRecord)
550
                                {
551
                                    $skill = $skillMapper->fetchOne($userSkillRecord->skill_id);
552
                                    $skills[$skill->uuid] = $skill->name;
553
                                }
554
 
555
                            }
556
 
557
                            $industry       = $record['industry_id'] ? $industryMapper->fetchOne($record['industry_id']) : '';
558
                            $views          = $profileVisitMapper->getTotalByVisitedId($record['id']);
559
 
560
                            $common_connection = count($connectionMapper->fetchAllCommonConnectionsUserIdByUser1ReturnIds($currentUser->id, $record['id']));
561
 
562
                            $item = [
563
                                'id' => $record['user_uuid'],
564
                                'id_encripted' => $record['user_uuid'],
565
                                'name' => $record['first_name'] . ' ' . $record['last_name'],
566
                                'description' => $record['description'],
567
                                'image' => $this->url()->fromRoute('storage',['type' => 'user', 'code' =>  $record['user_uuid'], 'filename' => $record['image']]),
568
                                'url' => $this->url()->fromRoute('profile/view',['id' => $record['user_uuid'] ]),
569
                                'industry' => $industry? $industry->name : '',
570
                                'skills' => $skills ? $skills : [],
571
                                'common_connection' => $common_connection,
572
                                'views' => $views
573
                            ];
574
                            array_push($items, $item);
575
 
576
                            break;
577
 
578
                        case 'company' :
579
                            $industry       = $industryMapper->fetchOne($record['industry_id']);
580
                            $companySize    = $companySizeMapper->fetchOne($record['company_size_id']);
581
                            $followers      = $companyFollowerMapper->getCountFollowers($record['id']);
582
 
583
                            $item = [
584
                                'id' => $record['id'],
585
                                'id_encripted' => $record['company_uuid'],
586
                                'name' => $record['name'],
587
                                'description' => $record['description'],
588
                                'image' => $this->url()->fromRoute('storage',['type' => 'company', 'code' => $record['company_uuid'] , 'filename' => $record['image']]),
589
                                'url' => $this->url()->fromRoute('company/view',['id' => $record['company_uuid'] ]),
590
                                'industry' => $industry->name,
591
                                'company_size' => $companySize->name,
592
                                'location' => $record['formatted_address'],
593
                                'followers' => $followers,
594
                            ];
595
                            array_push($items, $item);
596
 
597
                            break;
598
 
599
                        case 'job' :
600
 
601
 
602
                            $employment_type = $employmentTypes[ $record['employment_type'] ];
603
 
604
 
605
                            $industry           = $industryMapper->fetchOne($record['industry_id']);
606
                            $companySize        = $companySizeMapper->fetchOne($record['company_size_id']);
607
                            $total_applications = $jobApplicationMapper->fetchTotalApplicationsByJobId($record['id']);
608
 
609
 
610
 
611
                            $followers      = $companyFollowerMapper->getCountFollowers($record['id']);
612
 
613
                            if($record['experience_visible'] == Job::EXPERIENCE_VISIBLE_YES) {
614
                                $experience = $record['experience_min'].'-'.$record['experience_max'] . ' LABEL_YEARS';
615
                            } else {
616
                                $experience = '';
617
                            }
618
 
619
                            $dt = \DateTime::createFromFormat('Y-m-d', $record['last_date_of_application']);
620
 
621
 
622
                            $dt = \DateTime::createFromFormat('Y-m-d', $record['last_date_of_application']);
623
                            $last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');
624
 
625
                            $item = [
626
                                'id' => $record['id'],
627
                                'id_encripted' => $record['job_uuid'],
628
                                'title' => $record['title'],
629
                                'description' => $record['description'],
630
                                'image' => $this->url()->fromRoute('storage',['type' => 'company', 'code' => $record['company_uuid'], 'filename' => $record['image']]),
631
                                'url' => $this->url()->fromRoute('job/view',['id' => $record['job_uuid']]),
632
                                'company_name' => $record['company_name'],
633
                                'company_url' => $this->url()->fromRoute('company/view',['id' => $record['company_uuid'] ]),
634
                                'industry' => $industry->name,
635
                                'company_size' => $companySize->name,
636
                                'employment_type' => $employment_type,
637
                                'location' => $record['formatted_address'],
638
                                'total_applications' => $total_applications,
639
                                'experience' => $experience,
640
                                'last_date' => $last_date_of_application
641
                            ];
642
                            array_push($items, $item);
643
 
644
                            break;
645
 
646
                        case 'group' :
647
 
648
 
649
                            $groupType      = $groupTypeMapper->fetchOne($record['type_id']);
650
                            $industry       = $industryMapper->fetchOne($record['industry_id']);
651
 
652
                            $total_members  = $groupMemberMapper->fetchTotalAcceptedByGroupId($record['id']);
653
 
654
                            $members      = $groupMemberMapper->fetchAllAcceptedUserIdsByGroupId($record['id']);
655
                            $connections  = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
656
                            $common_connection = count(array_intersect($members, $connections));
657
 
658
                            $item = [
659
                                'id' => $record['id'],
660
                                'id_encripted' => $record['group_uuid'],
661
                                'name' => $record['name'],
662
                                'description' => $record['description'],
663
                                'image' => $this->url()->fromRoute('storage',['type' => 'group', 'code' => $record['group_uuid'], 'filename' => $record['image']]),
664
                                'url' => $this->url()->fromRoute('group/view',['id' => $record['group_uuid']]),
665
                                'industry' => $industry->name,
666
                                'group_type' => $groupType->name,
667
                                'total_members' => $total_members,
668
                                'common_connection' => $common_connection,
669
 
670
                            ];
671
                            array_push($items, $item);
672
 
673
                            break;
674
                    }
675
                }
676
 
677
                $response = [
678
                    'success' => true,
679
 
680
                    'data' => [
681
                        'entity' => $entity,
682
                        'total' => [
683
                            'count' => $paginator->getTotalItemCount(),
684
                            'pages' => $paginator->getPages()->pageCount,
685
                        ],
686
                        'current' => [
687
                            'items'    => $items,
688
                            'page'     => $paginator->getCurrentPageNumber(),
689
                            'count'    => $paginator->getCurrentItemCount(),
690
                        ]
691
                    ]
692
                ];
693
 
694
 
695
 
696
                return new JsonModel($response);
697
            } else {
698
 
699
                $sandbox = $this->config['leaderslinked.runmode.sandbox'];
700
                if($sandbox) {
701
                    $google_map_key  = $this->config['leaderslinked.google_map.sandbox_api_key'];
702
                } else {
703
                    $google_map_key  = $this->config['leaderslinked.google_map.production_api_key'];
704
                }
705
 
706
                $groupTypes = [];
707
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
708
                $records = $groupTypeMapper->fetchAllActives();
709
                foreach($records as $record)
710
                {
711
                    $groupTypes[$record->uuid] = $record->name;
712
                }
713
 
714
 
715
                $industries = [];
716
                $industryMapper = IndustryMapper::getInstance($this->adapter);
717
                $records = $industryMapper->fetchAllActives();
718
                foreach($records as $record)
719
                {
720
                    $industries[$record->uuid] = $record->name;
721
                }
722
 
723
                $companySizes = [];
724
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
725
                $records = $companySizeMapper->fetchAllActives();
726
                foreach($records as $record)
727
                {
728
                    $companySizes[$record->uuid] = $record->name . ' ('.$record->minimum_no_of_employee . '-' . $record->maximum_no_of_employee .')';
729
                }
730
 
731
 
732
                $employmentTypes = [
733
                    Job::EMPLOYMENT_TYPE_FULL_TIME => 'LABEL_EMPLOYMENT_TYPE_FULL_TIME',
734
                    Job::EMPLOYMENT_TYPE_PART_TIME => 'LABEL_EMPLOYMENT_TYPE_PART_TIME',
735
                    Job::EMPLOYMENT_TYPE_CONTRACT => 'LABEL_EMPLOYMENT_TYPE_CONTRACT',
736
                    Job::EMPLOYMENT_TYPE_TEMPORARY => 'LABEL_EMPLOYMENT_TYPE_TEMPORARY'
737
                ];
738
 
739
                $connectionLeves = [
740
                    1 => 'LABEL_FIRST_GRADE',
741
                    2 => 'LABEL_SECOND_GRADE'
742
                ];
743
 
744
                $viewModel = new ViewModel();
745
                $this->layout()->setTemplate('layout/layout.phtml');
746
                $viewModel->setTemplate('leaders-linked/search/index.phtml');
747
                $viewModel->setVariables([
748
                    'groupTypes' => $groupTypes,
749
                    'industries' => $industries,
750
                    'companySizes' => $companySizes,
751
                    'employeeTypes' => $employmentTypes,
752
                    'connectionLeves' =>  $connectionLeves,
753
                    'keyword' => $keyword,
754
                    'google_map_key' => $google_map_key,
755
 
756
                ]);
757
 
758
                return $viewModel;
759
            }
760
        }
761
 
762
        return new JsonModel([
763
            'success' => false,
764
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
765
        ]);
766
 
767
 
768
 
769
 
770
    }
771
 
772
 
773
}