Proyectos de Subversion LeadersLinked - Services

Rev

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

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