Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1 | Rev 240 | 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
/**
3
 *
4
 * Controlador: Mis Perfiles
5
 *
6
 */
7
declare(strict_types=1);
8
 
9
namespace LeadersLinked\Controller;
10
 
11
use Laminas\Db\Adapter\AdapterInterface;
12
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
13
use Laminas\Mvc\Controller\AbstractActionController;
14
use Laminas\Log\LoggerInterface;
15
use Laminas\View\Model\ViewModel;
16
use Laminas\View\Model\JsonModel;
17
use LeadersLinked\Mapper\CompanyLocationMapper;
18
use LeadersLinked\Mapper\CompanyFollowerMapper;
19
use LeadersLinked\Mapper\CompanyUserMapper;
20
use LeadersLinked\Mapper\CompanyMapper;
21
use LeadersLinked\Mapper\IndustryMapper;
22
use LeadersLinked\Mapper\CompanySizeMapper;
23
use LeadersLinked\Model\CompanyFollower;
24
use LeadersLinked\Mapper\UserBlockedMapper;
25
use LeadersLinked\Mapper\UserMapper;
26
use LeadersLinked\Model\Company;
27
use LeadersLinked\Model\CompanyUser;
28
use LeadersLinked\Mapper\UserNotificationSettingMapper;
29
use LeadersLinked\Mapper\QueryMapper;
30
use phpDocumentor\Reflection\PseudoTypes\True_;
31
use LeadersLinked\Mapper\CompanyUserRoleMapper;
32
use LeadersLinked\Library\Functions;
33
use LeadersLinked\Mapper\NotificationMapper;
34
use LeadersLinked\Model\Notification;
35
 
36
class CompanyController extends AbstractActionController
37
{
38
    /**
39
     *
40
     * @var AdapterInterface
41
     */
42
    private $adapter;
43
 
44
 
45
    /**
46
     *
47
     * @var AbstractAdapter
48
     */
49
    private $cache;
50
 
51
    /**
52
     *
53
     * @var  LoggerInterface
54
     */
55
    private $logger;
56
 
57
 
58
    /**
59
     *
60
     * @var array
61
     */
62
    private $config;
63
 
64
    /**
65
     *
66
     * @param AdapterInterface $adapter
67
     * @param AbstractAdapter $cache
68
     * @param LoggerInterface $logger
69
     * @param array $config
70
     */
71
    public function __construct($adapter, $cache , $logger,  $config)
72
    {
73
        $this->adapter      = $adapter;
74
        $this->cache        = $cache;
75
        $this->logger       = $logger;
76
        $this->config       = $config;
77
 
78
    }
79
 
80
    /**
81
     *
82
     * Generación del listado de perfiles
83
     * {@inheritDoc}
84
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
85
     */
86
    public function indexAction()
87
    {
88
        //$currentUserPlugin = $this->plugin('currentUserPlugin');
89
        //$currentUser = $currentUserPlugin->getUser();
90
 
91
        $request = $this->getRequest();
92
        if($request->isGet()) {
93
 
94
 
95
 
96
            $this->layout()->setTemplate('layout/layout-my-company.phtml');
97
            $viewModel = new ViewModel();
98
            $viewModel->setTemplate('leaders-linked/my-company/index.phtml');
99
            return $viewModel ;
100
 
101
 
102
        } else {
103
            return new JsonModel([
104
                'success' => false,
105
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
106
            ]);
107
        }
108
    }
109
 
110
 
111
 
112
    /**
113
     * Presenta el perfil con las opciónes de edición de cada sección
114
     * @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
115
     */
116
    public function viewAction()
117
    {
118
 
119
        $request = $this->getRequest();
120
        if($request->isGet()) {
121
            $currentUserPlugin = $this->plugin('currentUserPlugin');
122
            $currentUser = $currentUserPlugin->getUser();
123
 
124
            $request = $this->getRequest();
125
            $id = $this->params()->fromRoute('id');
126
 
127
 
128
            $headers  = $request->getHeaders();
129
 
130
            $isJson = false;
131
            if($headers->has('Accept')) {
132
                $accept = $headers->get('Accept');
133
 
134
                $prioritized = $accept->getPrioritized();
135
 
136
                foreach($prioritized as $key => $value) {
137
                    $raw = trim($value->getRaw());
138
 
139
                    if(!$isJson) {
140
                        $isJson = strpos($raw, 'json');
141
                    }
142
 
143
                }
144
            }
145
 
146
            if($isJson) {
147
 
148
                $flashMessenger = $this->plugin('FlashMessenger');
149
 
150
                if(!$id) {
151
                    return new JsonModel([
152
                        'success' => false,
153
                        'data' => 'ERROR_INVALID_PARAMETER'
154
                    ]);
155
 
156
                }
157
 
158
                $companyMapper = CompanyMapper::getInstance($this->adapter);
159
                $company = $companyMapper->fetchOneByUuid($id);
160
                if(!$company) {
161
 
162
                    return new JsonModel([
163
                        'success' => false,
164
                        'data' => 'ERROR_COMPANY_NOT_FOUND'
165
                    ]);
166
 
167
                }
168
 
169
                if($company->status != Company::STATUS_ACTIVE) {
170
                    return new JsonModel([
171
                        'success' => false,
172
                        'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
173
                    ]);
174
                }
175
 
239 efrain 176
 
177
                $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
178
                $records = $companyLocationMapper->fetchAllLocationByCompanyId($company->id);
179
 
180
                $locations = [];
181
                foreach($records as $record)
182
                {
183
                    $location =  [
184
                        'formatted_address'  => $record['formatted_address'],
185
                        'country' => $record['country'],
186
                        'is_main' => $record['is_main'],
187
                    ];
188
 
189
                    array_push($locations, $location);
190
                }
191
 
192
                $industryMapper = IndustryMapper::getInstance($this->adapter);
193
                $industry = $industryMapper->fetchOne($company->industry_id);
194
 
195
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
196
                $companySize = $companySizeMapper->fetchOne($company->company_size_id);
197
 
198
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
199
                $total_followers = $companyFollowerMapper->getCountFollowers($company->id);
200
                $follower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
201
 
1 www 202
                $data = [
203
                    'link_follow' => '',
204
                    'link_unfollow' => '',
205
                    'link_request' => '',
206
                    'link_accept' => '',
207
                    'link_cancel' => '',
208
                    'link_reject' =>'',
209
                    'link_leave' => '',
239 efrain 210
                    'total_followers'       => $total_followers,
211
                    'company_name'          => $company->name,
212
                    'company_uuid'          => $company->uuid,
213
                    'name'                  => trim($company->name),
214
                    'image'                 => $company->image,
215
                    'cover'                 => $company->cover,
216
                    'overview'              => $company->description,
217
                    'website'               => $company->website,
218
                    'foundation_year'       => $company->foundation_year,
219
                    'facebook'              => $company->facebook,
220
                    'instagram'             => $company->instagram,
221
                    'twitter'               => $company->twitter,
222
                    'locations'             => $locations,
223
                    'industry'              => $industry->name,
224
                    'company_size'          => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-'  . $companySize->maximum_no_of_employee . ')',
225
                    'is_follower'           => $follower ? 1 : 0,
1 www 226
                ];
227
 
228
 
229
 
230
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
231
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
232
                if($companyUser) {
233
                    if($companyUser->status == CompanyUser::STATUS_ADMIN_WILL_ADD) {
234
                        $data['link_accept'] = $this->url()->fromRoute('company/accept', ['id' => $company->uuid]);
235
                        $data['link_reject'] = $this->url()->fromRoute('company/reject', ['id' => $company->uuid]);
236
                    }
237
                    if($companyUser->status == CompanyUser::STATUS_SENT) {
238
                        $data['link_cancel'] = $this->url()->fromRoute('company/cancel', ['id' => $company->uuid]);
239
                    }
240
                    if($companyUser->owner == CompanyUser::OWNER_NO && $companyUser->creator == CompanyUser::CREATOR_NO && $companyUser->status == CompanyUser::STATUS_ACCEPTED) {
241
                        $data['link_leave'] = $this->url()->fromRoute('company/leave', ['id' => $company->uuid]);;
242
                    }
243
                    if($companyUser->status == CompanyUser::STATUS_CANCELLED) {
244
                        $data['link_request'] = $this->url()->fromRoute('company/request', ['id' => $company->uuid]);;
245
                    }
246
 
247
 
248
                } else {
249
                    $data['link_request'] = $this->url()->fromRoute('company/request', ['id' => $company->uuid]);;
250
                }
251
 
252
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
253
                $data['total_followers'] = $companyFollowerMapper->getCountFollowers($company->id);
254
 
255
                $follower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
256
                if($follower) {
257
                    $data['link_unfollow'] = $this->url()->fromRoute('company/unfollow', ['id' => $company->uuid]);;
258
                } else {
259
                    $data['link_follow'] = $this->url()->fromRoute('company/follow', ['id' => $company->uuid]);
260
 
261
                }
262
 
263
                $companyUserOwner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
264
                if($companyUserOwner) {
265
                    $userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
266
                    $userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($currentUser->id, $companyUserOwner->user_id);
267
                    if(!$userBlocked) {
268
                        $data['link_contact'] = $this->url()->fromRoute('inmail', ['id' => $company->uuid]);;
269
                    }
270
                }
271
 
272
                return new JsonModel([
273
                    'success'   => true,
274
                    'data'      => $data
275
                ]);
276
 
277
 
278
 
279
            } else {
280
 
281
 
282
                $flashMessenger = $this->plugin('FlashMessenger');
283
 
284
                if(!$id) {
285
                    $flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
286
                    return $this->redirect()->toRoute('dashboard');
287
                }
288
 
289
                $companyMapper = CompanyMapper::getInstance($this->adapter);
290
                $company = $companyMapper->fetchOneByUuid($id);
291
                if(!$company || $company->status != Company::STATUS_ACTIVE) {
292
                    $flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
293
                    return $this->redirect()->toRoute('dashboard');
294
                }
295
 
296
 
239 efrain 297
               // $show_feeds = false;
1 www 298
 
299
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
300
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
301
 
239 efrain 302
                /*
1 www 303
 
304
                if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED) {
305
                    $show_feeds = true;
306
                }
239 efrain 307
                */
1 www 308
 
309
 
310
 
311
 
312
                $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
313
                $records = $companyLocationMapper->fetchAllLocationByCompanyId($company->id);
314
 
315
                $locations = [];
316
                foreach($records as $record)
317
                {
318
                    $location =  [
319
                        'formatted_address'  => $record['formatted_address'],
320
                        'country' => $record['country'],
321
                        'is_main' => $record['is_main'],
322
                    ];
323
 
324
                    array_push($locations, $location);
325
                }
326
 
327
                $industryMapper = IndustryMapper::getInstance($this->adapter);
328
                $industry = $industryMapper->fetchOne($company->industry_id);
329
 
330
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
331
                $companySize = $companySizeMapper->fetchOne($company->company_size_id);
332
 
333
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
334
                $total_followers = $companyFollowerMapper->getCountFollowers($company->id);
335
                $follower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
239 efrain 336
               /*
1 www 337
                if($follower) {
338
                    $show_feeds = true;
339
                }
239 efrain 340
                */
1 www 341
 
342
                $link_inmail = '';
343
                $companyUserOwner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
344
                if($companyUserOwner) {
345
                    $userBlockedMapper = UserBlockedMapper::getInstance($this->adapter);
346
                    $userBlocked = $userBlockedMapper->fetchOneByUserIdAndBlockedId($currentUser->id, $companyUserOwner->user_id);
347
                    if(!$userBlocked) {
348
                        $userMapper = UserMapper::getInstance($this->adapter);
349
                        $userOwner = $userMapper->fetchOne($companyUserOwner->user_id);
350
 
351
                        $link_inmail = $this->url()->fromRoute('inmail',['id' => $userOwner->uuid]);
352
                    }
353
                } else {
354
                    $userBlocked = false;
355
                }
356
 
357
                $this->layout()->setTemplate('layout/layout.phtml');
358
                $viewModel = new ViewModel();
359
 
360
                /*
361
                if($show_feeds) {
362
                    $viewModel->setTemplate('leaders-linked/company/view-with-feeds.phtml');
363
                } else {
364
                    $viewModel->setTemplate('leaders-linked/company/view-without-feeds.phtml');
365
                }
366
                */
367
 
368
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
369
                $notificationMapper->markAllNotificationsAsReadByUserIdAndCompanyId($currentUser->id, $company->id);
370
 
371
                $viewModel->setTemplate('leaders-linked/company/view-without-feeds.phtml');
372
                $viewModel->setVariables([
373
                    'total_followers'       => $total_followers,
374
                    'company_id'            => $company->id,
375
                    'company_name'          => $company->name,
376
                    'company_uuid'          => $company->uuid,
377
                    'name'                  => trim($company->name),
378
                    'image'                 => $company->image,
379
                    'cover'                 => $company->cover,
380
                    'overview'              => $company->description,
381
                    'website'               => $company->website,
382
                    'foundation_year'       => $company->foundation_year,
383
                    'facebook'              => $company->facebook,
384
                    'instagram'             => $company->instagram,
385
                    'twitter'               => $company->twitter,
386
                    'locations'             => $locations,
387
                    'industry'              => $industry->name,
388
                    'company_size'          => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-'  . $companySize->maximum_no_of_employee . ')',
389
                    'show_contact'          => $userBlocked ? 0 : 1,
390
                    'is_follower'           => $follower ? 1 : 0,
391
                    'link_inmail'           => $link_inmail,
392
                ]);
393
 
394
                return $viewModel ;
395
 
396
            }
397
 
398
 
399
 
400
        } else {
401
            return new JsonModel([
402
                'success' => false,
403
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
404
            ]);
405
        }
406
    }
407
 
408
    public function followAction()
409
    {
410
        $flashMessenger = $this->plugin('FlashMessenger');
411
        $request = $this->getRequest();
412
        $id = $this->params()->fromRoute('id');
413
 
414
        if(!$id) {
415
            $data = [
416
                'success'   => false,
417
                'data'   => 'ERROR_INVALID_PARAMETER'
418
            ];
419
 
420
            return new JsonModel($data);
421
        }
422
 
423
 
424
 
425
        $companyMapper = CompanyMapper::getInstance($this->adapter);
426
        $company = $companyMapper->fetchOneByUuid($id);
427
        if(!$company) {
428
            $data = [
429
                'success'   => false,
430
                'data'   => 'ERROR_RECORD_NOT_FOUND'
431
            ];
432
 
433
            return new JsonModel($data);
434
        }
435
 
436
        if($company->status != Company::STATUS_ACTIVE) {
437
            $data = [
438
                'success'   => false,
439
                'data'   => 'ERROR_COMPANY_IS_NOT_ACTIVE'
440
            ];
441
 
442
            return new JsonModel($data);
443
        }
444
 
445
        $request = $this->getRequest();
446
 
447
        $currentUserPlugin = $this->plugin('currentUserPlugin');
448
        $currentUser = $currentUserPlugin->getUser();
449
 
450
 
451
        if($request->isPost()) {
452
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
453
            $flash = $flash === 'true'? true: false;
454
 
455
            $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
456
            $companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
457
            if($companyFollower) {
458
                $data = [
459
                    'success' => false,
460
                    'data' => 'ERROR_YOU_ALREADY_FOLLOW_THIS_COMPANY'
461
                ];
462
 
463
            } else {
464
                $companyFollower = new CompanyFollower();
465
                $companyFollower->company_id = $company->id;
466
                $companyFollower->follower_id = $currentUser->id;
467
 
468
                $result = $companyFollowerMapper->insert($companyFollower);
469
                if($result) {
470
                    if($flash) {
471
                        $flashMessenger->addSuccessMessage('LABEL_STARTED_FOLLOWING_THIS_COMPANY');
472
 
473
                        $data = [
474
                            'success' => true,
475
                            'data' => [
476
                                'message' =>'LABEL_STARTED_FOLLOWING_THIS_COMPANY',
477
                                'reload' => true
478
                             ]
479
                        ];
480
                    } else {
481
                        $data = [
482
                            'success' => true,
483
                            'data' => 'LABEL_STARTED_FOLLOWING_THIS_COMPANY'
484
                        ];
485
                    }
486
                } else {
487
                    $data = [
488
                        'success' => false,
489
                        'data' => $companyFollowerMapper->getError()
490
                    ];
491
                }
492
            }
493
        } else {
494
            $data = [
495
                'success' => false,
496
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
497
            ];
498
        }
499
 
500
        return new JsonModel($data);
501
    }
502
 
503
    public function unfollowAction()
504
    {
505
        $flashMessenger = $this->plugin('FlashMessenger');
506
        $request = $this->getRequest();
507
        $id = $this->params()->fromRoute('id');
508
 
509
        if(!$id) {
510
            $data = [
511
                'success'   => false,
512
                'data'   => 'ERROR_INVALID_PARAMETER'
513
            ];
514
 
515
            return new JsonModel($data);
516
        }
517
 
518
 
519
 
520
        $companyMapper = CompanyMapper::getInstance($this->adapter);
521
        $company = $companyMapper->fetchOneByUuid($id);
522
        if(!$company) {
523
            $data = [
524
                'success'   => false,
525
                'data'   => 'ERROR_RECORD_NOT_FOUND'
526
            ];
527
 
528
            return new JsonModel($data);
529
        }
530
 
531
        if($company->status != Company::STATUS_ACTIVE) {
532
            $data = [
533
                'success'   => false,
534
                'data'   => 'ERROR_COMPANY_IS_NOT_ACTIVE'
535
            ];
536
 
537
            return new JsonModel($data);
538
        }
539
 
540
        $request = $this->getRequest();
541
 
542
        $currentUserPlugin = $this->plugin('currentUserPlugin');
543
        $currentUser = $currentUserPlugin->getUser();
544
 
545
 
546
        if($request->isPost()) {
547
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
548
            $flash = $flash === 'true'? true: false;
549
 
550
 
551
            $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
552
            $companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
553
            if($companyFollower) {
554
                $result = $companyFollowerMapper->deleteByCompanyIdAndUserId($company->id, $currentUser->id);
555
                if($result) {
556
                    if($flash) {
557
                        $flashMessenger->addSuccessMessage('LABEL_YOU_STOPPED_FOLLOWING_THIS_COMPANY_SUCCESS');
558
 
559
                        $data = [
560
                            'success' => true,
561
                            'data' => [
562
                                'message' => 'LABEL_YOU_STOPPED_FOLLOWING_THIS_COMPANY_SUCCESS',
563
                                'reload' => true
564
                             ],
565
                        ];
566
                    } else {
567
                        $data = [
568
                            'success' => true,
569
                            'data' => 'LABEL_YOU_STOPPED_FOLLOWING_THIS_COMPANY_SUCCESS',
570
                        ];
571
                    }
572
                } else {
573
                    $data = [
574
                        'success' => false,
575
                        'data' => $companyFollowerMapper->getError()
576
                    ];
577
                }
578
            } else {
579
                $data = [
580
                    'success' => false,
581
                    'data' => 'ERROR_YOU DONT_FOLLOW_THIS_COMPANY'
582
                ];
583
            }
584
        } else {
585
            $data = [
586
                'success' => false,
587
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
588
            ];
589
        }
590
 
591
        return new JsonModel($data);
592
    }
593
 
594
    public function leaveAction()
595
    {
596
        $flashMessenger = $this->plugin('FlashMessenger');
597
        $currentUserPlugin = $this->plugin('currentUserPlugin');
598
        $currentUser = $currentUserPlugin->getUser();
599
 
600
        $request = $this->getRequest();
601
        if($request->isPost()) {
602
            $id = $this->params()->fromRoute('id');
603
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
604
            $flash = $flash === 'true'? true: false;
605
 
606
 
607
            if(!$id) {
608
                return new JsonModel([
609
                    'success' => false,
610
                    'data' => 'ERROR_INVALID_PARAMETER'
611
                ]);
612
 
613
            }
614
 
615
            $companyMapper = CompanyMapper::getInstance($this->adapter);
616
            $company = $companyMapper->fetchOneByUuid($id);
617
 
618
            if(!$company) {
619
                return new JsonModel([
620
                    'success' => false,
621
                    'data' => 'ERROR_COMPANY_NOT_FOUND'
622
                ]);
623
            }
624
 
625
            if($company->status != Company::STATUS_ACTIVE) {
626
                return new JsonModel([
627
                    'success' => false,
628
                    'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
629
                ]);
630
            }
631
 
632
 
633
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
634
            $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
635
            if($companyUser) {
636
 
637
                if($companyUser->status == CompanyUser::STATUS_ACCEPTED ) {
638
 
639
                    $companyUser->status = CompanyUser::STATUS_CANCELLED;
640
                    if($companyUserMapper->update($companyUser)) {
641
                        if($flash) {
642
                            $flashMessenger->addSuccessMessage('LABEL_YOU_STOP_WORKING_WITH_THIS_COMPANY');
643
                            return new JsonModel([
644
                                'success' => true,
645
                                'data' =>  [
646
                                    'message' => 'LABEL_YOU_STOP_WORKING_WITH_THIS_COMPANY',
647
                                    'reload' => true
648
                                ]
649
                            ]);
650
                        } else {
651
                            return new JsonModel([
652
                                'success' => true,
653
                                'data' =>  'LABEL_YOU_STOP_WORKING_WITH_THIS_COMPANY',
654
                            ]);
655
                        }
656
 
657
 
658
                    } else {
659
                        return new JsonModel([
660
                            'success' => false,
661
                            'data' => $companyUserMapper->getError()
662
                        ]);
663
                    }
664
 
665
 
666
                } else {
667
                    return new JsonModel([
668
                        'success' => false,
669
                        'data' => 'ERROR_COMPANY_YOU_ARE_NOT_AN_ACTIVE_USER_OF_THIS_COMPANY'
670
                    ]);
671
                }
672
 
673
            } else {
674
                return new JsonModel([
675
                    'success' => false,
676
                    'data' => 'ERROR_GROUP_YOU_NOT_MEMBER'
677
                ]);
678
            }
679
 
680
 
681
 
682
 
683
        } else {
684
 
685
            return new JsonModel([
686
                'success' => false,
687
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
688
            ]);
689
        }
690
    }
691
 
692
    public function cancelAction()
693
    {
694
        $flashMessenger = $this->plugin('FlashMessenger');
695
        $currentUserPlugin = $this->plugin('currentUserPlugin');
696
        $currentUser = $currentUserPlugin->getUser();
697
 
698
        $request = $this->getRequest();
699
        if($request->isPost()) {
700
            $id = $this->params()->fromRoute('id');
701
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
702
            $flash = $flash === 'true'? true: false;
703
 
704
            if(!$id) {
705
                return new JsonModel([
706
                    'success' => false,
707
                    'data' => 'ERROR_INVALID_PARAMETER'
708
                ]);
709
 
710
            }
711
 
712
            $companyMapper = CompanyMapper::getInstance($this->adapter);
713
            $company = $companyMapper->fetchOneByUuid($id);
714
 
715
            if(!$company) {
716
                return new JsonModel([
717
                    'success' => false,
718
                    'data' => 'ERROR_COMPANY_NOT_FOUND'
719
                ]);
720
            }
721
 
722
            if($company->status != Company::STATUS_ACTIVE) {
723
                return new JsonModel([
724
                    'success' => false,
725
                    'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
726
                ]);
727
            }
728
 
729
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
730
            $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
731
            if($companyUser) {
732
 
733
                if( $companyUser->status == CompanyUser::STATUS_SENT) {
734
                    $companyUser->status = CompanyUser::STATUS_CANCELLED;
735
                    if($companyUserMapper->update($companyUser)) {
736
                        if($flash) {
737
                            $flashMessenger->addSuccessMessage('LABEL_COMPANY_REQUEST_CANCELLED');
738
                            return new JsonModel([
739
                                'success' => true,
740
                                'data' =>  [
741
                                    'message' => 'LABEL_COMPANY_REQUEST_CANCELLED',
742
                                    'reload' => true,
743
                                 ]
744
                            ]);
745
                        } else {
746
 
747
                            return new JsonModel([
748
                                'success' => true,
749
                                'data' =>  'LABEL_COMPANY_REQUEST_CANCELLED'
750
                           ]);
751
                        }
752
                    } else {
753
                        return new JsonModel([
754
                            'success' => false,
755
                            'data' => $companyUserMapper->getError()
756
                        ]);
757
                    }
758
 
759
 
760
                } else {
761
                    return new JsonModel([
762
                        'success' => false,
763
                        'data' => 'ERROR_COMPANY_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
764
                    ]);
765
                }
766
 
767
            } else {
768
                return new JsonModel([
769
                    'success' => false,
770
                    'data' =>'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
771
                ]);
772
            }
773
 
774
 
775
 
776
 
777
        } else {
778
 
779
            return new JsonModel([
780
                'success' => false,
781
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
782
            ]);
783
        }
784
    }
785
 
786
    public function rejectAction()
787
    {
788
        $flashMessenger = $this->plugin('FlashMessenger');
789
        $currentUserPlugin = $this->plugin('currentUserPlugin');
790
        $currentUser = $currentUserPlugin->getUser();
791
 
792
        $request = $this->getRequest();
793
        if($request->isPost()) {
794
            $id = $this->params()->fromRoute('id');
795
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
796
            $flash = $flash === 'true'? true: false;
797
 
798
            if(!$id) {
799
                return new JsonModel([
800
                    'success' => false,
801
                    'data' => 'ERROR_INVALID_PARAMETER'
802
                ]);
803
 
804
            }
805
 
806
            $companyMapper = CompanyMapper::getInstance($this->adapter);
807
            $company = $companyMapper->fetchOneByUuid($id);
808
 
809
            if(!$company) {
810
                return new JsonModel([
811
                    'success' => false,
812
                    'data' => 'ERROR_COMPANY_NOT_FOUND'
813
                ]);
814
            }
815
 
816
            if($company->status != Company::STATUS_ACTIVE) {
817
                return new JsonModel([
818
                    'success' => false,
819
                    'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
820
                ]);
821
            }
822
 
823
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
824
            $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
825
            if($companyUser) {
826
 
827
                if($companyUser->status == CompanyUser::STATUS_ADMIN_WILL_ADD ) {
828
 
829
                    $companyUser->status = CompanyUser::STATUS_CANCELLED;
830
                    if($companyUserMapper->update($companyUser)) {
831
 
832
                        if($flash) {
833
                            $flashMessenger->addSuccessMessage('LABEL_YOU_REJECTED_WORKING_WITH_THIS_COMPANY');
834
                            return new JsonModel([
835
                                'success' => true,
836
                                'data' =>  [
837
                                    'message' => 'LABEL_YOU_REJECTED_WORKING_WITH_THIS_COMPANY',
838
                                    'reload' => true
839
                                 ]
840
                            ]);
841
 
842
                        } else {
843
                            return new JsonModel([
844
                                'success' => true,
845
                                'data' =>  'LABEL_YOU_REJECTED_WORKING_WITH_THIS_COMPANY'
846
                            ]);
847
                        }
848
 
849
 
850
                    } else {
851
                        return new JsonModel([
852
                            'success' => false,
853
                            'data' => $companyUserMapper->getError()
854
                        ]);
855
                    }
856
 
857
                } else {
858
                    return new JsonModel([
859
                        'success' => false,
860
                        'data' => 'ERROR_COMPANY_THERE_IS_NO_PENDING_REQUEST_TO_CANCEL'
861
                    ]);
862
                }
863
 
864
            } else {
865
                return new JsonModel([
866
                    'success' => false,
867
                    'data' =>'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
868
                ]);
869
            }
870
 
871
 
872
 
873
 
874
        } else {
875
 
876
            return new JsonModel([
877
                'success' => false,
878
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
879
            ]);
880
        }
881
    }
882
 
883
    public function acceptAction()
884
    {
885
        $flashMessenger = $this->plugin('FlashMessenger');
886
        $currentUserPlugin = $this->plugin('currentUserPlugin');
887
        $currentUser = $currentUserPlugin->getUser();
888
 
889
        $request = $this->getRequest();
890
        if($request->isPost()) {
891
            $id = $this->params()->fromRoute('id');
892
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
893
            $flash = $flash === 'true'? true: false;
894
 
895
            if(!$id) {
896
                return new JsonModel([
897
                    'success' => false,
898
                    'data' => 'ERROR_INVALID_PARAMETER'
899
                ]);
900
 
901
            }
902
 
903
            $companyMapper = CompanyMapper::getInstance($this->adapter);
904
            $company = $companyMapper->fetchOneByUuid($id);
905
 
906
            if(!$company) {
907
                return new JsonModel([
908
                    'success' => false,
909
                    'data' => 'ERROR_COMPANY_NOT_FOUND'
910
                ]);
911
            }
912
 
913
            if($company->status != Company::STATUS_ACTIVE) {
914
                return new JsonModel([
915
                    'success' => false,
916
                    'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
917
                ]);
918
            }
919
 
920
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
921
            $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
922
            if($companyUser) {
923
 
924
                if($companyUser->status == CompanyUser::STATUS_ADMIN_WILL_ADD) {
925
 
926
                    $companyUser->status = CompanyUser::STATUS_ACCEPTED;
927
                    if($companyUserMapper->update($companyUser)) {
928
                        if($flash) {
929
                            $flashMessenger->addSuccessMessage('LABEL_YOU_STARTED_WORKING_WITH_THIS_COMPANY' );
930
 
931
                            return new JsonModel([
932
                                'success' => true,
933
                                'data' => [
934
                                    'message' => 'LABEL_YOU_STARTED_WORKING_WITH_THIS_COMPANY',
935
                                    'reload' => true
936
                                ]
937
                            ]);
938
                        } else {
939
                            return new JsonModel([
940
                                'success' => true,
941
                                'data' => 'LABEL_YOU_STARTED_WORKING_WITH_THIS_COMPANY',
942
                            ]);
943
                        }
944
 
945
                    } else {
946
                        return new JsonModel([
947
                            'success' => false,
948
                            'data' => $companyUserMapper->getError()
949
                        ]);
950
                    }
951
                } else {
952
                    return new JsonModel([
953
                        'success' => false,
954
                        'data' => 'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
955
                    ]);
956
                }
957
 
958
            } else {
959
                return new JsonModel([
960
                    'success' => false,
961
                    'data' => 'ERROR_COMPANY_YOU_HAVE_NOT_INVITED_THIS_COMPANY'
962
                ]);
963
            }
964
        } else {
965
 
966
            return new JsonModel([
967
                'success' => false,
968
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
969
            ]);
970
        }
971
    }
972
 
973
    public function requestAction()
974
    {
975
        $flashMessenger = $this->plugin('FlashMessenger');
976
        $currentUserPlugin = $this->plugin('currentUserPlugin');
977
        $currentUser = $currentUserPlugin->getUser();
978
 
979
        $request = $this->getRequest();
980
        if($request->isPost()) {
981
            $id = $this->params()->fromRoute('id');
982
            $flash =  filter_var($this->params()->fromPost('flash', 'false'), FILTER_SANITIZE_STRING);
983
            $flash = $flash === 'true'? true: false;
984
 
985
            if(!$id) {
986
                return new JsonModel([
987
                    'success' => false,
988
                    'data' => 'ERROR_INVALID_PARAMETER'
989
                ]);
990
 
991
            }
992
 
993
            $companyMapper = CompanyMapper::getInstance($this->adapter);
994
            $company = $companyMapper->fetchOneByUuid($id);
995
 
996
            if(!$company) {
997
                return new JsonModel([
998
                    'success' => false,
999
                    'data' => 'ERROR_COMPANY_NOT_FOUND'
1000
                ]);
1001
            }
1002
 
1003
            if($company->status != Company::STATUS_ACTIVE) {
1004
                return new JsonModel([
1005
                    'success' => false,
1006
                    'data' => 'ERROR_COMPANY_IS_NOT_ACTIVE'
1007
                ]);
1008
            }
1009
 
1010
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1011
            $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
1012
            if($companyUser) {
1013
                if($companyUser->status == CompanyUser::STATUS_ACCEPTED) {
1014
                    return new JsonModel([
1015
                        'success' => false,
1016
                        'data' => 'ERROR_COMPANY_YOU_ARE_USER'
1017
                    ]);
1018
                }
1019
                if($companyUser->status == CompanyUser::STATUS_REJECTED) {
1020
                    return new JsonModel([
1021
                        'success' => false,
1022
                        'data' => 'ERROR_COMPANY_YOUR REQUEST WAS PREVIOUSLY REJECTED'
1023
                    ]);
1024
                }
1025
 
1026
            }
1027
 
1028
            if($companyUser) {
1029
                $companyUser->status    = CompanyUser::STATUS_SENT;
1030
                $result = $companyUserMapper->update($companyUser);
1031
 
1032
 
1033
            } else {
1034
                $companyUser = new CompanyUser();
1035
                $companyUser->company_id    = $company->id;
1036
                $companyUser->user_id       = $currentUser->id;
1037
                $companyUser->status        = CompanyUser::STATUS_SENT;
1038
 
1039
                $result = $companyUserMapper->insert($companyUser);
1040
            }
1041
 
1042
            if($result) {
1043
                if($flash) {
1044
                    $flashMessenger->addSuccessMessage('LABEL_COMPANY_REQUEST_SENT' );
1045
 
1046
                    return new JsonModel([
1047
                        'success' => true,
1048
                        'data' => [
1049
                            'message' => 'LABEL_COMPANY_REQUEST_SENT',
1050
                            'reload' => true
1051
                         ]
1052
                    ]);
1053
                } else {
1054
                    return new JsonModel([
1055
                        'success' => true,
1056
                        'data' => 'LABEL_COMPANY_REQUEST_SENT'
1057
                    ]);
1058
                }
1059
                return new JsonModel([
1060
                    'success' => true,
1061
                    'data' => 'LABEL_COMPANY_REQUEST_SENT'
1062
                ]);
1063
 
1064
            } else {
1065
                return new JsonModel([
1066
                    'success' => false,
1067
                    'data' => $companyUserMapper->getError()
1068
                ]);
1069
            }
1070
 
1071
 
1072
        } else {
1073
 
1074
            return new JsonModel([
1075
                'success' => false,
1076
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1077
            ]);
1078
        }
1079
 
1080
    }
1081
 
1082
    public function invitationsReceivedAction()
1083
    {
1084
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1085
        $currentUser = $currentUserPlugin->getUser();
1086
 
1087
        $request = $this->getRequest();
1088
        if($request->isGet()) {
1089
 
1090
 
1091
            $headers  = $request->getHeaders();
1092
 
1093
            $isJson = false;
1094
            if($headers->has('Accept')) {
1095
                $accept = $headers->get('Accept');
1096
 
1097
                $prioritized = $accept->getPrioritized();
1098
 
1099
                foreach($prioritized as $key => $value) {
1100
                    $raw = trim($value->getRaw());
1101
 
1102
                    if(!$isJson) {
1103
                        $isJson = strpos($raw, 'json');
1104
                    }
1105
 
1106
                }
1107
            }
1108
 
1109
            if($isJson) {
1110
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1111
 
1112
 
1113
 
1114
                $queryMapper = QueryMapper::getInstance($this->adapter);
1115
 
1116
 
1117
 
1118
 
1119
                $select = $queryMapper->getSql()->select();
1120
                $select->columns([ 'uuid', 'name', 'image']);
1121
                $select->from(['c' => CompanyMapper::_TABLE]);
1122
                $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id  = c.id', []);
1123
                $select->where->equalTo('cu.user_id', $currentUser->id);
1124
                $select->where->equalTo('cu.status', CompanyUser::STATUS_ADMIN_WILL_ADD);
1125
                $select->where->equalTo('c.status', Company::STATUS_ACTIVE);
1126
 
1127
                if($search) {
1128
                    $select->where->like('c.name', '%' . $search . '%');
1129
                }
1130
                $select->order('name ASC');
1131
 
1132
               // echo $select->getSqlString($this->adapter->platform); exit;
1133
 
1134
                $records = $queryMapper->fetchAll($select);
1135
 
1136
                $items = [];
1137
                foreach($records as $record)
1138
                {
1139
                    $item = [
1140
                        'name' => $record['name'],
1141
                        'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
1142
                        'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),
1143
                        'link_accept' => $this->url()->fromRoute('company/accept', ['id' => $record['uuid'] ]),
1144
                        'link_reject' => $this->url()->fromRoute('company/reject', ['id' => $record['uuid'] ]),
1145
                    ];
1146
 
1147
 
1148
                    array_push($items, $item);
1149
                }
1150
 
1151
                $response = [
1152
                    'success' => true,
1153
                    'data' => $items
1154
                ];
1155
 
1156
                return new JsonModel($response);
1157
 
1158
 
1159
            } else {
1160
                $this->layout()->setTemplate('layout/layout.phtml');
1161
                $viewModel = new ViewModel();
1162
                $viewModel->setTemplate('leaders-linked/company/invitations-received.phtml');
1163
                return $viewModel ;
1164
            }
1165
 
1166
        } else {
1167
            return new JsonModel([
1168
                'success' => false,
1169
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1170
            ]);
1171
        }
1172
    }
1173
 
1174
    public function requestsSentAction()
1175
    {
1176
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1177
        $currentUser = $currentUserPlugin->getUser();
1178
 
1179
        $request = $this->getRequest();
1180
        if($request->isGet()) {
1181
 
1182
 
1183
            $headers  = $request->getHeaders();
1184
            $isJson = false;
1185
            if($headers->has('Accept')) {
1186
                $accept = $headers->get('Accept');
1187
 
1188
                $prioritized = $accept->getPrioritized();
1189
 
1190
                foreach($prioritized as $key => $value) {
1191
                    $raw = trim($value->getRaw());
1192
 
1193
                    if(!$isJson) {
1194
                        $isJson = strpos($raw, 'json');
1195
                    }
1196
 
1197
                }
1198
            }
1199
 
1200
            if($isJson) {
1201
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1202
 
1203
 
1204
 
1205
                $queryMapper = QueryMapper::getInstance($this->adapter);
1206
 
1207
                $select = $queryMapper->getSql()->select();
1208
                $select->columns([ 'uuid', 'name', 'image']);
1209
                $select->from(['c' => CompanyMapper::_TABLE]);
1210
                $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id  = c.id', ['status']);
1211
                $select->where->equalTo('cu.user_id', $currentUser->id);
1212
                $select->where->equalTo('cu.status', CompanyUser::STATUS_SENT);
1213
                $select->where->equalTo('c.status', Company::STATUS_ACTIVE);
1214
 
1215
 
1216
                if($search) {
1217
                    $select->where->like('c.name', '%' . $search . '%');
1218
                }
1219
                $select->order('name ASC');
1220
 
1221
                //echo $select2->getSqlString($this->adapter->platform); exit;
1222
 
1223
                $records = $queryMapper->fetchAll($select);
1224
 
1225
                $items = [];
1226
                foreach($records as $record)
1227
                {
1228
                    $item = [
1229
                        'name' => $record['name'],
1230
                        'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
1231
                        'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),
1232
                        'link_cancel' => $this->url()->fromRoute('company/cancel', ['id' => $record['uuid'] ]),
1233
                    ];
1234
 
1235
 
1236
                    array_push($items, $item);
1237
                }
1238
 
1239
                $response = [
1240
                    'success' => true,
1241
                    'data' => $items
1242
                ];
1243
 
1244
                return new JsonModel($response);
1245
 
1246
 
1247
            } else {
1248
                $this->layout()->setTemplate('layout/layout.phtml');
1249
                $viewModel = new ViewModel();
1250
                $viewModel->setTemplate('leaders-linked/company/requests-sent.phtml');
1251
                return $viewModel ;
1252
            }
1253
 
1254
        } else {
1255
            return new JsonModel([
1256
                'success' => false,
1257
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1258
            ]);
1259
        }
1260
    }
1261
 
1262
 
1263
    public function iWorkWithAction()
1264
    {
1265
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1266
        $currentUser = $currentUserPlugin->getUser();
1267
 
1268
        $request = $this->getRequest();
1269
        if($request->isGet()) {
1270
 
1271
 
1272
            $headers  = $request->getHeaders();
1273
            $isJson = false;
1274
            if($headers->has('Accept')) {
1275
                $accept = $headers->get('Accept');
1276
 
1277
                $prioritized = $accept->getPrioritized();
1278
 
1279
                foreach($prioritized as $key => $value) {
1280
                    $raw = trim($value->getRaw());
1281
 
1282
                    if(!$isJson) {
1283
                        $isJson = strpos($raw, 'json');
1284
                    }
1285
 
1286
                }
1287
            }
1288
 
1289
            if($isJson) {
1290
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1291
 
1292
 
1293
 
1294
                $queryMapper = QueryMapper::getInstance($this->adapter);
1295
 
1296
                $select = $queryMapper->getSql()->select();
1297
                $select->columns([ 'id', 'uuid', 'name', 'image']);
1298
                $select->from(['c' => CompanyMapper::_TABLE]);
1299
                $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id  = c.id', []);
1300
                $select->where->equalTo('cu.user_id', $currentUser->id);
1301
                $select->where->equalTo('cu.status', CompanyUser::STATUS_ACCEPTED);
1302
                $select->where->equalTo('c.status', Company::STATUS_ACTIVE);
1303
                $select->where->equalTo('cu.owner', CompanyUser::OWNER_NO);
1304
                $select->where->equalTo('cu.creator', CompanyUser::CREATOR_NO);
1305
 
1306
                if($search) {
1307
                    $select->where->like('c.name', '%' . $search . '%');
1308
                }
1309
                $select->order('name ASC');
1310
 
1311
                /*
1312
                 * select uuid, name, image from tbl_companies  as c
1313
                 inner join tbl_company_users as cu on c.id = cu.company_id
1314
                 and cu.user_id  = 2 and c.status  = 'a' and cu.status = 'aa'
1315
                 */
1316
 
1317
                //echo $select->getSqlString($this->adapter->platform); exit;
1318
 
1319
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1320
 
1321
 
1322
                $records = $queryMapper->fetchAll($select);
1323
 
1324
                $items = [];
1325
                foreach($records as $record)
1326
                {
1327
 
1328
                    $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($record['id'], $currentUser->id);
1329
                    if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED && $companyUser->backend == CompanyUser::BACKEND_YES ) {
1330
                        $link_my_company = $this->url()->fromRoute('backend/signin-company', ['id' => $record['uuid'] ]);
1331
                    } else {
1332
                        $link_my_company = '';
1333
                    }
1334
 
1335
                    $item = [
1336
                        'name' => $record['name'],
1337
                        'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
1338
                        'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]),
1339
                        'link_leave' => $this->url()->fromRoute('company/leave', ['id' => $record['uuid'] ]),
1340
                        'link_my_company' => $link_my_company
1341
                    ];
1342
 
1343
                    array_push($items, $item);
1344
                }
1345
 
1346
 
1347
 
1348
                $response = [
1349
                    'success' => true,
1350
                    'data' => $items
1351
                ];
1352
 
1353
                return new JsonModel($response);
1354
 
1355
 
1356
            } else {
1357
                $this->layout()->setTemplate('layout/layout.phtml');
1358
                $viewModel = new ViewModel();
1359
                $viewModel->setTemplate('leaders-linked/company/i-work-with.phtml');
1360
                return $viewModel ;
1361
            }
1362
 
1363
        } else {
1364
            return new JsonModel([
1365
                'success' => false,
1366
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1367
            ]);
1368
        }
1369
    }
1370
 
1371
 
1372
    /**
1373
     *
1374
     * Generación del listado de perfiles
1375
     * {@inheritDoc}
1376
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
1377
     */
1378
    public function followingCompaniesAction()
1379
    {
1380
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1381
        $currentUser = $currentUserPlugin->getUser();
1382
 
1383
        $request = $this->getRequest();
1384
        if($request->isGet()) {
1385
 
1386
 
1387
            $headers  = $request->getHeaders();
1388
            $isJson = false;
1389
            if($headers->has('Accept')) {
1390
                $accept = $headers->get('Accept');
1391
 
1392
                $prioritized = $accept->getPrioritized();
1393
 
1394
                foreach($prioritized as $key => $value) {
1395
                    $raw = trim($value->getRaw());
1396
 
1397
                    if(!$isJson) {
1398
                        $isJson = strpos($raw, 'json');
1399
                    }
1400
 
1401
                }
1402
            }
1403
 
1404
            if($isJson) {
1405
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
1406
                $queryMapper = QueryMapper::getInstance($this->adapter);
1407
 
1408
                $select = $queryMapper->getSql()->select();
1409
                $select->columns(['id', 'uuid', 'name', 'status',  'image']);
1410
                $select->from(['c' => CompanyMapper::_TABLE]);
1411
                $select->join(['cf' => CompanyFollowerMapper::_TABLE],'cf.company_id = c.id' ,['follower_id']);
1412
                $select->where->equalTo('follower_id', $currentUser->id);
1413
                $select->where->equalTo('c.status', Company::STATUS_ACTIVE);
1414
 
1415
                if($search) {
1416
                    $select->where->like('c.name', '%' . $search . '%');
1417
                }
1418
                $select->order('name ASC');
1419
 
1420
                $records = $queryMapper->fetchAll($select);
1421
 
1422
                $items = [];
1423
                foreach($records as $record)
1424
                {
1425
                    $item = [
1426
                        'name' => $record['name'],
1427
                        'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
1428
                        'link_view' => $this->url()->fromRoute('company/view', ['id' => $record['uuid']]),
1429
                        'link_unfollow' => $this->url()->fromRoute('company/unfollow', ['id' => $record['uuid']]),
1430
                    ];
1431
 
1432
                    array_push($items, $item);
1433
                }
1434
 
1435
                $response = [
1436
                    'success' => true,
1437
                    'data' => $items,
1438
                    'sql' =>  $select->getSqlString($this->adapter->platform)
1439
 
1440
                ];
1441
 
1442
                return new JsonModel($response);
1443
 
1444
 
1445
            } else {
1446
                $this->layout()->setTemplate('layout/layout.phtml');
1447
                $viewModel = new ViewModel();
1448
                $viewModel->setTemplate('leaders-linked/company/following-companies.phtml');
1449
                return $viewModel ;
1450
            }
1451
 
1452
        } else {
1453
            return new JsonModel([
1454
                'success' => false,
1455
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1456
            ]);
1457
        }
1458
 
1459
    }
1460
 
1461
}