Proyectos de Subversion LeadersLinked - Services

Rev

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