Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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