Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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