Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
11898 nelberth 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
 
18
use LeadersLinked\Mapper\CompanyMapper;
19
use LeadersLinked\Mapper\CompanyUserMapper;
20
use LeadersLinked\Form\CreateFeedForm;
21
use LeadersLinked\Form\CommentForm;
22
use LeadersLinked\Form\CommentAnswerForm;
23
use LeadersLinked\Model\Comment;
24
use LeadersLinked\Mapper\CommentMapper;
25
use LeadersLinked\Mapper\FeedMapper;
26
use LeadersLinked\Mapper\GroupMapper;
27
use LeadersLinked\Model\Feed;
28
use LeadersLinked\Mapper\QueryMapper;
29
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
30
use LeadersLinked\Library\Image;
31
use LeadersLinked\Model\VideoConvert;
32
use LeadersLinked\Mapper\VideoConvertMapper;
33
use LeadersLinked\Mapper\LikeMapper;
34
use Laminas\Paginator\Adapter\DbSelect;
35
use Laminas\Paginator\Paginator;
36
use LeadersLinked\Mapper\UserMapper;
37
use LeadersLinked\Library\Functions;
38
use LeadersLinked\Model\Company;
39
use LeadersLinked\Model\UserType;
40
 
41
use LeadersLinked\Mapper\TopicMapper;
42
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
43
use LeadersLinked\Model\HighPerformanceTeamsGroups;
44
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
45
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
46
 
47
class HighPerformanceTeamsGroupsViewFeedController extends AbstractActionController
48
{
49
    /**
50
     *
51
     * @var AdapterInterface
52
     */
53
    private $adapter;
54
 
55
 
56
    /**
57
     *
58
     * @var AbstractAdapter
59
     */
60
    private $cache;
61
 
62
    /**
63
     *
64
     * @var  LoggerInterface
65
     */
66
    private $logger;
67
 
68
 
69
    /**
70
     *
71
     * @var array
72
     */
73
    private $config;
74
 
75
    /**
76
     *
77
     * @param AdapterInterface $adapter
78
     * @param AbstractAdapter $cache
79
     * @param LoggerInterface $logger
80
     * @param array $config
81
     */
82
    public function __construct($adapter, $cache , $logger,  $config)
83
    {
84
        $this->adapter      = $adapter;
85
        $this->cache        = $cache;
86
        $this->logger       = $logger;
87
        $this->config       = $config;
88
 
89
    }
90
 
91
    /**
92
     *
93
     * Generación del listado de perfiles
94
     * {@inheritDoc}
95
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
96
     */
97
 
98
 
99
 
100
    public function commentAction()
101
    {
102
 
103
 
104
        $currentUserPlugin = $this->plugin('currentUserPlugin');
105
        $currentUser = $currentUserPlugin->getUser();
106
        $currentCompany = $currentUserPlugin->getCompany();
107
 
108
 
109
        $id = $this->params()->fromRoute('id');
11924 nelberth 110
        $group_uuid = $this->params()->fromRoute('group_id');
111
 
112
        if(!$group_uuid) {
113
            $data = [
114
                'success'   => false,
115
                'data'   => 'ERROR_INVALID_PARAMETER'
116
            ];
117
 
118
            return new JsonModel($data);
119
        }
120
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
121
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
122
 
123
        if (!$highPerformanceTeamsGroups) {
124
            $data = [
125
                'success' => false,
126
                'data' => 'ERROR_RECORD_NOT_FOUND'
127
            ];
128
 
129
            return new JsonModel($data);
130
        }
131
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
132
 
133
            return new JsonModel([
134
                'success' => false,
135
                'data' => 'ERROR_UNAUTHORIZED'
136
            ]);
137
 
138
        }
139
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
140
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
141
        if(!$highPerformanceTeamsGroupsMember) {
142
            return new JsonModel([
143
                'success' => false,
11989 nelberth 144
                'data' => 'ERROR_UNAUTHORIZED'
11924 nelberth 145
            ]);
146
        }
147
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
148
            return new JsonModel([
149
                'success' => false,
150
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
151
            ]);
152
        }
153
 
154
 
11898 nelberth 155
        $request = $this->getRequest();
156
        if($request->isPost()) {
157
            $feedMapper = FeedMapper::getInstance($this->adapter);
158
            $feed = $feedMapper->fetchOneByUuid($id);
159
            if(!$feed) {
160
                $response = [
161
                    'success' => false,
162
                    'data' => 'ERROR_POST_NOT_FOUND'
163
                ];
164
                return new JsonModel($response);
165
            }
166
 
11925 nelberth 167
 
11898 nelberth 168
 
169
            $dataPost = $request->getPost()->toArray();
170
            $form = new CommentForm();
171
            $form->setData($dataPost);
172
 
173
            if($form->isValid()) {
174
 
11999 nelberth 175
 
11898 nelberth 176
 
177
                $dataPost = (array) $form->getData();
178
                $comment = new Comment();
179
                $comment->comment = $dataPost['comment'];
180
                $comment->feed_id = $feed->id;
11924 nelberth 181
                $comment->user_id = $currentUser->id;
11898 nelberth 182
 
183
 
184
                $commentMapper = CommentMapper::getInstance($this->adapter);
185
                if($commentMapper->insert($comment)) {
186
 
187
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
188
 
189
                    $feed->total_comments = $total_comments;
190
                    $feedMapper->update($feed);
191
 
192
                    $response = [
193
                        'success'   => true,
11924 nelberth 194
                        'data'   => $this->renderComment($comment->id,$group_uuid),
11898 nelberth 195
                        'total_comments' => $total_comments
196
                    ];
197
 
198
                    return new JsonModel($response);
199
 
200
                } else {
201
 
202
                    $response = [
203
                        'success'   => false,
204
                        'data'   => $commentMapper->getError()
205
                    ];
206
 
207
                    return new JsonModel($response);
208
                }
209
 
210
            } else {
211
                $message = '';;
212
                $form_messages = (array) $form->getMessages();
213
                foreach($form_messages  as $fieldname => $field_messages)
214
                {
215
                    foreach( $field_messages as $key => $value)
216
                    {
217
                        $message = $value;
218
                    }
219
                }
220
 
221
                $response = [
222
                    'success'   => false,
223
                    'data'   => $message
224
                ];
225
 
226
                return new JsonModel($response);
227
            }
228
 
229
 
230
        } else {
231
            $response = [
232
                'success' => false,
233
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
234
            ];
235
 
236
            return new JsonModel($response);
237
        }
238
 
239
 
240
    }
241
 
242
    public function answerAction()
243
    {
244
 
245
 
246
        $currentUserPlugin = $this->plugin('currentUserPlugin');
247
        $currentUser = $currentUserPlugin->getUser();
248
        $currentCompany = $currentUserPlugin->getCompany();
249
 
250
 
251
        $id = $this->params()->fromRoute('id');
252
        $comment_uuid = $this->params()->fromRoute('comment');
11989 nelberth 253
        $group_uuid = $this->params()->fromRoute('group_id');
254
 
255
        if(!$group_uuid) {
256
            $data = [
257
                'success'   => false,
258
                'data'   => 'ERROR_INVALID_PARAMETER'
259
            ];
260
 
261
            return new JsonModel($data);
262
        }
263
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
264
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
265
 
266
        if (!$highPerformanceTeamsGroups) {
267
            $data = [
268
                'success' => false,
269
                'data' => 'ERROR_RECORD_NOT_FOUND'
270
            ];
271
 
272
            return new JsonModel($data);
273
        }
274
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
275
 
276
            return new JsonModel([
277
                'success' => false,
278
                'data' => 'ERROR_UNAUTHORIZED'
279
            ]);
280
 
281
        }
282
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
283
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
284
        if(!$highPerformanceTeamsGroupsMember) {
285
            return new JsonModel([
286
                'success' => false,
287
                'data' => 'ERROR_UNAUTHORIZED'
288
            ]);
289
        }
290
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
291
            return new JsonModel([
292
                'success' => false,
293
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
294
            ]);
295
        }
296
 
297
 
11898 nelberth 298
        $request = $this->getRequest();
299
        if($request->isPost()) {
300
            $feedMapper = FeedMapper::getInstance($this->adapter);
301
            $feed = $feedMapper->fetchOneByUuid($id);
302
            if(!$feed) {
303
                $response = [
304
                    'success' => false,
305
                    'data' => 'ERROR_POST_NOT_FOUND'
306
                ];
307
                return new JsonModel($response);
308
            }
309
 
310
            if($feed->company_id != $currentCompany->id) {
311
                $response = [
312
                    'success' => false,
313
                    'data' => 'ERROR_UNAUTHORIZED'
314
                ];
315
                return new JsonModel($response);
316
            }
317
 
318
            $dataPost = $request->getPost()->toArray();
319
            $form = new CommentAnswerForm();
320
            $form->setData($dataPost);
321
 
322
            if($form->isValid()) {
323
 
324
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
325
                $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
326
 
327
                $dataPost = (array) $form->getData();
328
                $answer = new Comment();
329
                $answer->comment = $dataPost['answer'];
330
                $answer->feed_id = $feed->id;
331
 
332
                if($feed->type=='hptg'){
333
                    $answer->user_id = $currentUser->id;
334
 
335
                }else{
336
                    $answer->user_id = $owner->user_id;
337
 
338
                }
339
 
340
                $commentMapper = CommentMapper::getInstance($this->adapter);
341
                $comment=$commentMapper->fetchOneByUuid($comment_uuid);
342
                $answer->parent_id = $comment->id;
343
 
344
                if($commentMapper->insert($answer)) {
345
 
346
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
347
 
348
                    $feed->total_comments = $total_comments;
349
                    $feedMapper->update($feed);
350
 
351
                    $response = [
352
                        'success'   => true,
11989 nelberth 353
                        'data'   => $this->renderComment($answer->id,$group_uuid),
11898 nelberth 354
                        'total_comments' => $total_comments
355
                    ];
356
 
357
                    return new JsonModel($response);
358
 
359
                } else {
360
 
361
                    $response = [
362
                        'success'   => false,
363
                        'data'   => $commentMapper->getError()
364
                    ];
365
 
366
                    return new JsonModel($response);
367
                }
368
 
369
            } else {
370
                $message = '';;
371
                $form_messages = (array) $form->getMessages();
372
                foreach($form_messages  as $fieldname => $field_messages)
373
                {
374
                    foreach( $field_messages as $key => $value)
375
                    {
376
                        $message = $value;
377
                    }
378
                }
379
 
380
                $response = [
381
                    'success'   => false,
382
                    'data'   => $message
383
                ];
384
 
385
                return new JsonModel($response);
386
            }
387
 
388
 
389
        } else {
390
            $response = [
391
                'success' => false,
392
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
393
            ];
394
 
395
            return new JsonModel($response);
396
        }
397
 
398
 
399
    }
400
 
401
 
402
 
403
    public function commentDeleteAction()
404
    {
405
        $currentUserPlugin = $this->plugin('currentUserPlugin');
406
        $currentUser = $currentUserPlugin->getUser();
407
        $currentCompany = $currentUserPlugin->getCompany();
11946 nelberth 408
 
409
        $group_uuid = $this->params()->fromRoute('group_id');
410
 
411
        if(!$group_uuid) {
412
            $data = [
413
                'success'   => false,
414
                'data'   => 'ERROR_INVALID_PARAMETER'
415
            ];
416
 
417
            return new JsonModel($data);
418
        }
419
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
420
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
12002 nelberth 421
 
11946 nelberth 422
        if (!$highPerformanceTeamsGroups) {
423
            $data = [
424
                'success' => false,
425
                'data' => 'ERROR_RECORD_NOT_FOUND'
426
            ];
427
 
428
            return new JsonModel($data);
429
        }
430
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
431
 
432
            return new JsonModel([
433
                'success' => false,
434
                'data' => 'ERROR_UNAUTHORIZED'
435
            ]);
436
 
437
        }
438
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
439
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
440
        if(!$highPerformanceTeamsGroupsMember) {
441
            return new JsonModel([
442
                'success' => false,
443
                'data' => 'ERROR_RECORD_NOT_FOUND'
444
            ]);
445
        }
446
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
447
            return new JsonModel([
448
                'success' => false,
449
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
450
            ]);
451
        }
12003 nelberth 452
        if($highPerformanceTeamsGroupsMember->user_id != $currentUser->id&&$highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
11949 nelberth 453
 
454
            return new JsonModel([
455
                'success' => false,
456
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
457
            ]);
458
 
11946 nelberth 459
        }
12003 nelberth 460
 
11898 nelberth 461
        $request = $this->getRequest();
462
        if($request->isPost()) {
11946 nelberth 463
 
11898 nelberth 464
 
465
            $id = $this->params()->fromRoute('id');
466
            $comment = $this->params()->fromRoute('comment');
467
 
468
            $feedMapper = FeedMapper::getInstance($this->adapter);
469
            $feed = $feedMapper->fetchOneByUuid($id);
470
            if(!$feed) {
471
                $response = [
472
                    'success' => false,
473
                    'data' => 'ERROR_POST_NOT_FOUND'
474
                ];
475
                return new JsonModel($response);
476
            }
477
 
478
            if($feed->company_id != $currentCompany->id) {
479
                $response = [
480
                    'success' => false,
481
                    'data' => 'ERROR_UNAUTHORIZED'
482
                ];
483
                return new JsonModel($response);
484
            }
485
 
486
            $commentMapper = CommentMapper::getInstance($this->adapter);
487
            $comment = $commentMapper->fetchOneByUuid($comment);
488
 
489
            if($comment && $comment->feed_id == $feed->id) {
490
                $comment->status = Comment::STATUS_DELETED;
491
                if($commentMapper->update($comment)) {
492
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
493
 
494
                    $feed = $feedMapper->fetchOne($comment->feed_id);
495
                    $feed->total_comments = $total_comments;
496
                    $feedMapper->update($feed);
497
 
498
 
499
 
500
 
501
 
502
                    $response = [
503
                        'success' => true,
504
                        'data' => [
505
                            'message' => 'LABEL_COMMENT_WAS_DELETED',
506
                            'total_comments' => $total_comments
507
                        ]
508
                   ];
509
                } else {
510
                    $response = [
511
                        'success' => false,
512
                        'data' => $commentMapper->getError()
513
                    ];
514
                }
515
 
516
            } else {
517
                $response = [
518
                    'success' => false,
519
                    'data' => 'ERROR_COMMENT_NOT_FOUND'
520
                ];
521
            }
522
 
523
        } else {
524
            $response = [
525
                'success' => false,
526
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
527
            ];
528
        }
529
 
530
        return new JsonModel($response);
531
    }
532
 
533
    public function deleteAction()
534
    {
535
        $currentUserPlugin = $this->plugin('currentUserPlugin');
536
        $currentUser = $currentUserPlugin->getUser();
537
        $currentCompany = $currentUserPlugin->getCompany();
11949 nelberth 538
        $group_uuid = $this->params()->fromRoute('group_id');
539
 
540
        if(!$group_uuid) {
541
            $data = [
542
                'success'   => false,
543
                'data'   => 'ERROR_INVALID_PARAMETER'
544
            ];
545
 
546
            return new JsonModel($data);
547
        }
548
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
549
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
550
 
551
        if (!$highPerformanceTeamsGroups) {
552
            $data = [
553
                'success' => false,
554
                'data' => 'ERROR_RECORD_NOT_FOUND'
555
            ];
556
 
557
            return new JsonModel($data);
558
        }
559
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
560
 
561
            return new JsonModel([
562
                'success' => false,
563
                'data' => 'ERROR_UNAUTHORIZED'
564
            ]);
565
 
566
        }
567
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
568
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
569
        if(!$highPerformanceTeamsGroupsMember) {
570
            return new JsonModel([
571
                'success' => false,
572
                'data' => 'ERROR_RECORD_NOT_FOUND'
573
            ]);
574
        }
575
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
576
            return new JsonModel([
577
                'success' => false,
578
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
579
            ]);
580
        }
11951 nelberth 581
 
582
        if($highPerformanceTeamsGroupsMember->user_id != $currentUser->id&&$highPerformanceTeamsGroupsMember->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
11949 nelberth 583
 
584
            return new JsonModel([
585
                'success' => false,
586
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
587
            ]);
588
 
589
        }
11951 nelberth 590
 
11898 nelberth 591
        $request = $this->getRequest();
592
        if($request->isPost()) {
593
 
594
 
595
            $id =  $this->params()->fromRoute('id');
596
 
597
            $feedMapper = FeedMapper::getInstance($this->adapter);
598
            $feed = $feedMapper->fetchOneByUuid($id);
599
            if(!$feed) {
600
                $response = [
601
                    'success' => false,
602
                    'data' => 'ERROR_POST_NOT_FOUND'
603
                ];
604
                return new JsonModel($response);
605
            }
606
 
607
            if($feed->company_id != $currentCompany->id) {
608
                $response = [
609
                    'success' => false,
610
                    'data' => 'ERROR_UNAUTHORIZED'
611
                ];
612
                return new JsonModel($response);
613
            }
614
 
615
            $feedMapper = FeedMapper::getInstance($this->adapter);
616
            $feed->status = Feed::STATUS_DELETED;
617
            if($feedMapper->update($feed)) {
618
                $response = [
619
                    'success' => true,
620
                    'data' => 'LABEL_FEED_WAS_DELETED'
621
                ];
622
 
623
            } else {
624
                $response = [
625
                    'success' => false,
626
                    'data' => $feedMapper->getError()
627
                ];
628
            }
629
 
630
 
631
            return new JsonModel($response);
632
 
633
        } else {
634
            $response = [
635
                'success' => false,
636
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
637
            ];
638
        }
639
 
640
        return new JsonModel($response);
641
    }
642
 
643
    public function addAction()
644
    {
645
        $currentUserPlugin = $this->plugin('currentUserPlugin');
646
        $currentUser = $currentUserPlugin->getUser();
647
        $currentCompany = $currentUserPlugin->getCompany();
11914 nelberth 648
        $group_uuid =  $this->params()->fromRoute('group_id');
11898 nelberth 649
 
650
        $request = $this->getRequest();
651
        if($request->isPost()) {
652
 
653
 
654
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
655
 
656
            $form = new CreateFeedForm($this->adapter);
657
 
658
            $form->setData($dataPost);
659
 
660
            if($form->isValid()) {
661
 
662
                $dataPost['priority'] =  isset($dataPost['priority']) ? Feed::PRIORITY_URGENT  : '';
663
 
664
 
665
                $hydrator = new ObjectPropertyHydrator();
666
                $feed = new Feed();
667
                $hydrator->hydrate($dataPost, $feed);
11987 nelberth 668
                if(!$group_uuid) {
669
                    $data = [
670
                        'success'   => false,
671
                        'data'   => 'ERROR_INVALID_PARAMETER'
672
                    ];
673
 
674
                    return new JsonModel($data);
675
                }
11898 nelberth 676
 
677
 
678
 
11987 nelberth 679
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
680
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
681
 
682
                if (!$highPerformanceTeamsGroups) {
683
                    $data = [
684
                        'success' => false,
685
                        'data' => 'ERROR_RECORD_NOT_FOUND'
686
                    ];
11898 nelberth 687
 
11987 nelberth 688
                    return new JsonModel($data);
689
                }
11898 nelberth 690
 
11987 nelberth 691
                if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
11898 nelberth 692
 
11987 nelberth 693
                    return new JsonModel([
694
                        'success' => false,
695
                        'data' => 'ERROR_UNAUTHORIZED'
696
                    ]);
697
 
698
                }
699
 
700
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
701
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
702
                if($highPerformanceTeamsGroupsMember) {
703
                    if($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN ){
704
                        $id =  $highPerformanceTeamsGroups->id;
705
                    }else{
706
 
11898 nelberth 707
                        return new JsonModel([
708
                            'success' => false,
709
                            'data' => 'ERROR_UNAUTHORIZED'
710
                        ]);
11987 nelberth 711
                    }
712
 
713
                } else {
11898 nelberth 714
 
11987 nelberth 715
                    return new JsonModel([
716
                        'success' => false,
11988 nelberth 717
                        'data' => 'ERROR_UNAUTHORIZED'
11987 nelberth 718
                    ]);
719
                }
720
                $topic_uuid =  $this->params()->fromRoute('topic_id');
721
                if($topic_uuid){
722
                    $topicMapper = TopicMapper::getInstance($this->adapter);
723
                    $topic = $topicMapper->fetchOneByUuid($topic_uuid);
724
                    if($topic){
725
                        $feed->topic_id = $topic->id;
726
                    }else{
11898 nelberth 727
                        return new JsonModel([
728
                            'success' => false,
729
                            'data' => 'ERROR_RECORD_NOT_FOUND'
730
                        ]);
731
                    }
11987 nelberth 732
 
11898 nelberth 733
                }
734
 
735
 
11987 nelberth 736
                $feed->company_id       = $currentCompany->id;
737
                $feed->group_id         = null;
738
                $feed->high_performance_group_id = $id;
739
                $feed->user_id          = $currentUser->id;
740
                $feed->type             = Feed::TYPE_HPTG;
741
                $feed->posted_or_shared = Feed::POSTED;
742
                $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
11898 nelberth 743
                $feed->total_comments   = 0;
744
                $feed->total_shared     = 0;
745
 
746
 
747
                $files = $this->getRequest()->getFiles()->toArray();
748
                $file_type = '';
749
                if(isset($files['file']) && empty($files['file']['error'])) {
750
                    $feed_tmp_filename  = $files['file']['tmp_name'];
751
                    $feed_filename      = $this->normalizeString($files['file']['name']);
752
 
753
                    $mime_type = mime_content_type($feed_tmp_filename);
754
                    if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
755
                        $file_type = Feed::FILE_TYPE_IMAGE;
756
                    } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
757
                        $file_type = Feed::FILE_TYPE_VIDEO;
758
                    } else if($mime_type == 'application/pdf') {
759
                        $file_type = Feed::FILE_TYPE_DOCUMENT;
760
                    }
761
                }
762
 
763
 
764
                $feedMapper = FeedMapper::getInstance($this->adapter);
765
                $result = $feedMapper->insert($feed);
766
 
767
 
768
                if($result) {
769
 
770
                    $feed = $feedMapper->fetchOne($feed->id);
771
 
772
                    if( $file_type == Feed::FILE_TYPE_DOCUMENT) {
773
                        try {
774
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
775
                            if(!file_exists($target_path)) {
776
                                mkdir($target_path, 0755);
777
                            }
778
 
779
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR .$feed_filename;
780
                            $result = move_uploaded_file($feed_tmp_filename , $full_filename);
781
                            if($result) {
782
 
783
                                $feed->file_type = $file_type;
784
                                $feed->file_name = basename($feed_filename);
785
                                $feedMapper->update($feed);
786
                            } else {
787
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
788
                            }
789
                        } catch(\Throwable $e) {
790
                            error_log($e->getTraceAsString());
791
                        }
792
                    }
793
                    if( $file_type == Feed::FILE_TYPE_IMAGE) {
794
                        try {
795
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
796
                            if(!file_exists($target_path)) {
797
                                mkdir($target_path, 0755);
798
                            }
799
 
800
                            list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
801
 
802
                            $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
803
                            $crop_to_dimensions = false;
804
                            if(Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions )) {
805
                                $feed->file_type = $file_type;
806
                                $feed->file_name = basename($feed_filename);
807
                                $feedMapper->update($feed);
808
                            }
809
                        } catch(\Throwable $e) {
810
                            error_log($e->getTraceAsString());
811
                        }
812
                    }
813
                    if( $file_type == Feed::FILE_TYPE_VIDEO) {
814
                        try {
815
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
816
                            if(!file_exists($target_path)) {
817
                                mkdir($target_path, 0755);
818
                            }
819
 
820
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
821
 
822
                            $result = move_uploaded_file($feed_tmp_filename , $full_filename);
823
                            if($result) {
824
 
825
                                $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
826
                                $getFromSecound = 2;
827
 
828
                                //extracción del cover
829
                                $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
830
                                $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
831
                                $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
832
                                exec($cmd);
833
 
834
 
835
                                $feed->file_type = $file_type;
836
                                $feed->file_name = basename($feed_filename);
837
                                $feed->file_image_preview = basename($generateFile);
838
                                $feedMapper->update($feed);
839
 
840
                                $videoConvert = new VideoConvert();
841
                                $videoConvert->filename = $full_filename;
842
                                $videoConvert->type = VideoConvert::TYPE_FEED;
843
 
844
                                $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
845
                                $videoConvertMapper->insert($videoConvert);
846
                            } else {
847
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
848
                            }
849
                        } catch(\Throwable $e) {
850
                            error_log($e->getTraceAsString());
851
                        }
852
                    }
853
 
854
 
855
                    $response = [
856
                        'success'   => true,
11987 nelberth 857
                        'data'   => $this->renderFeed($feed->id,$group_uuid)
11898 nelberth 858
                    ];
859
 
860
                } else {
861
                    $response = [
862
                        'success'   => false,
863
                        'data'   => $feedMapper->getError()
864
                    ];
865
                }
866
            } else {
867
                $messages = [];
868
                $form_messages = (array) $form->getMessages();
869
                foreach($form_messages  as $fieldname => $field_messages)
870
                {
871
                    $messages[$fieldname] = array_values($field_messages);
872
                }
873
 
874
                $response = [
875
                    'success'   => false,
876
                    'data'   => $messages
877
                ];
878
            }
879
 
880
        } else {
881
            $response = [
882
                'success' => false,
883
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
884
            ];
885
        }
886
 
887
        return new JsonModel($response);
888
    }
889
 
890
 
891
    public function timelineAction() {
892
 
893
        $currentUserPlugin = $this->plugin('currentUserPlugin');
894
        $currentUser = $currentUserPlugin->getUser();
895
        $currentCompany = $currentUserPlugin->getCompany();
896
 
897
 
898
 
899
 
900
 
901
        $request = $this->getRequest();
902
        if($request->isGet()) {
903
 
904
            $page = (int) $this->params()->fromQuery('page');
905
            $topic_uuid   = $this->params()->fromRoute('topic_id');
906
            $urgent   = $this->params()->fromRoute('urgent');
11914 nelberth 907
            $group_uuid =  $this->params()->fromRoute('group_id');
11898 nelberth 908
 
11914 nelberth 909
            if(!$group_uuid){
11910 nelberth 910
                return new JsonModel([
911
                    'success' => false,
912
                    'data' => 'ERROR_RECORD_NOT_FOUND'
913
                ]);
914
            }
915
 
11898 nelberth 916
 
11910 nelberth 917
 
918
            $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
11914 nelberth 919
            $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
11910 nelberth 920
 
921
            if (!$highPerformanceTeamsGroups) {
922
                $data = [
923
                    'success' => false,
924
                    'data' => 'ERROR_RECORD_NOT_FOUND'
925
                ];
926
                return new JsonModel($data);
927
            }
11898 nelberth 928
 
11910 nelberth 929
            if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
930
                return new JsonModel([
931
                    'success' => false,
932
                    'data' => 'ERROR_UNAUTHORIZED'
933
                ]);
11898 nelberth 934
 
11910 nelberth 935
            }
11898 nelberth 936
 
11910 nelberth 937
            $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
938
            $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
939
            if($highPerformanceTeamsGroupsMember) {
940
                if($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN ){
941
                    $queryMapper = QueryMapper::getInstance($this->adapter);
942
                    $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
943
                    $select->columns(['id']);
944
                    $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
945
                    $select->where->equalTo('company_id',$currentCompany->id);
946
                    $select->where->equalTo('high_performance_group_id',$highPerformanceTeamsGroups->id);
947
 
948
 
949
                    if(isset($topic_uuid)){
950
                        $topicMapper = TopicMapper::getInstance($this->adapter);
951
                        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
952
                        if($topic){
953
                            if($topic->status!='a'){
11898 nelberth 954
                                return new JsonModel([
955
                                    'success' => false,
11910 nelberth 956
                                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
11898 nelberth 957
                                ]);
958
                            }
11910 nelberth 959
                            $select->where->equalTo('topic_id',$topic->id);
960
 
11898 nelberth 961
                        }else{
11910 nelberth 962
                            return new JsonModel([
963
                                'success' => false,
964
                                'data' => 'ERROR_RECORD_NOT_FOUND'
965
                            ]);
11898 nelberth 966
                        }
11910 nelberth 967
                    }else{
968
                        if(isset($urgent)){
969
                            $select->where->equalTo('priority', Feed::PRIORITY_URGENT);
970
                        }else{
971
                            $select->where->IsNull('topic_id');
972
                        }
11898 nelberth 973
 
974
                    }
11910 nelberth 975
 
976
 
977
                    $select->where->and->equalTo('type', Feed::TYPE_HPTG);
978
                    $select->order('added_on desc');
11898 nelberth 979
 
11910 nelberth 980
                }else{
11898 nelberth 981
                    return new JsonModel([
982
                        'success' => false,
11910 nelberth 983
                        'data' => 'ERROR_UNAUTHORIZED'
11898 nelberth 984
                    ]);
985
                }
11910 nelberth 986
 
987
            } else {
11898 nelberth 988
 
11910 nelberth 989
                return new JsonModel([
990
                    'success' => false,
991
                    'data' => 'ERROR_RECORD_NOT_FOUND'
992
                ]);
11898 nelberth 993
            }
994
 
995
 
996
            $dbSelect = new DbSelect($select, $this->adapter);
997
            $paginator = new Paginator($dbSelect);
998
            $paginator->setCurrentPageNumber($page ? $page : 1);
999
            $paginator->setItemCountPerPage(10);
1000
 
1001
            $items = [];
1002
            $feeds = $paginator->getCurrentItems();
11926 nelberth 1003
 
1004
            foreach($feeds as $feed)
1005
            {
1006
                $items[] = $this->renderFeed($feed->id,$group_uuid);
1007
            }
11928 nelberth 1008
 
11898 nelberth 1009
            $response = [
1010
                'success' => true,
1011
                'data' => [
1012
                    'total' => [
1013
                        'count' => $paginator->getTotalItemCount(),
1014
                        'pages' => $paginator->getPages()->pageCount,
1015
                    ],
1016
                    'current' => [
1017
                        'items'    => $items,
1018
                        'page'     => $paginator->getCurrentPageNumber(),
1019
                        'count'    => $paginator->getCurrentItemCount(),
1020
                    ]
1021
                ]
1022
            ];
1023
 
1024
            return new JsonModel($response);
1025
        }
1026
 
1027
        $response = [
1028
            'success' => false,
1029
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1030
        ];
1031
 
1032
 
1033
        return new JsonModel($response);
1034
    }
1035
 
1036
    public function oneFeedAction(){
1037
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1038
        $currentUser = $currentUserPlugin->getUser();
1039
        $currentCompany = $currentUserPlugin->getCompany();
1040
 
1041
        $request = $this->getRequest();
1042
        if($request->isGet()) {
1043
 
1044
            $feed_uuid =  $this->params()->fromRoute('feed_id');
1045
            $myt_id =  $this->params()->fromRoute('myt_id');
1046
 
1047
            if(!isset($feed_uuid)){
1048
                    $data = [
1049
                        'success'   => false,
1050
                        'data'   => 'ERROR_INVALID_PARAMETER'
1051
                    ];
1052
 
1053
                    return new JsonModel($data);
1054
            }
1055
 
1056
            $items = [];
1057
            $feedMapper = FeedMapper::getInstance($this->adapter);
1058
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
1059
 
1060
            if (!$feed) {
1061
                $data = [
1062
                    'success' => false,
1063
                    'data' => 'ERROR_RECORD_NOT_FOUND'
1064
                ];
1065
 
1066
                return new JsonModel($data);
1067
            }
1068
 
11996 nelberth 1069
           if($feed->type=='hptg'){
11898 nelberth 1070
 
1071
                $group_uuid =  $this->params()->fromRoute('group_id');
1072
                $topic_uuid   = $this->params()->fromRoute('topic_id');
1073
 
1074
                if(!isset($topic_uuid)){
1075
 
1076
                    $data = [
1077
                        'success'   => false,
1078
                        'data'   => 'ERROR_INVALID_PARAMETER'
1079
                    ];
1080
 
1081
                    return new JsonModel($data);
1082
                }
1083
                if(!isset($group_uuid)){
1084
 
1085
                    $data = [
1086
                        'success'   => false,
1087
                        'data'   => 'ERROR_INVALID_PARAMETER'
1088
                    ];
1089
 
1090
                    return new JsonModel($data);
1091
                }
1092
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
1093
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
1094
 
1095
                if (!$highPerformanceTeamsGroups) {
1096
                    $data = [
1097
                        'success' => false,
1098
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1099
                    ];
1100
 
1101
                    return new JsonModel($data);
1102
                }
1103
 
1104
 
1105
                if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
1106
 
1107
                    return new JsonModel([
1108
                        'success' => false,
1109
                        'data' => 'ERROR_UNAUTHORIZED'
1110
                    ]);
1111
 
1112
                }
1113
 
1114
                if($feed->high_performance_group_id!=$highPerformanceTeamsGroups->id){
1115
                    return new JsonModel([
1116
                        'success' => false,
1117
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1118
                    ]);
1119
                }
1120
 
1121
                $topicMapper = TopicMapper::getInstance($this->adapter);
1122
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
1123
 
1124
                if (!$topic) {
1125
                    $data = [
1126
                        'success' => false,
1127
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1128
                    ];
1129
 
1130
                    return new JsonModel($data);
1131
                }
1132
 
1133
                if($feed->topic_id!=$topic->id){
1134
                    return new JsonModel([
1135
                        'success' => false,
1136
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1137
                    ]);
1138
                }
1139
 
1140
                $items = $this->renderFeed($feed->id,$group_uuid);
1141
 
1142
                $response = [
1143
                    'success' => true,
1144
                    'data' => [
1145
                        'item' =>$items,
1146
                        'topic_title'=>$topic->title,
1147
                        'feed_title'=>$feed->title
1148
                    ]
1149
                ];
1150
            }
1151
 
1152
            return new JsonModel($response);
1153
        }
1154
    }
1155
    /**
1156
     *
1157
     * @param string $str
1158
     * @return string
1159
     */
1160
    private function normalizeString ($str = ''){
1161
        $basename  = substr($str, 0, strrpos($str, '.'));
1162
        $basename  = str_replace('.', '-', $basename);
1163
 
1164
        $extension  = substr($str, strrpos($str, '.'));
1165
 
1166
        $str = $basename . $extension;
1167
 
1168
        $str = strip_tags($str);
1169
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
1170
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
1171
        $str = strtolower($str);
1172
        $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
1173
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
1174
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
1175
        $str = str_replace(' ', '-', $str);
1176
        $str = rawurlencode($str);
1177
        $str = str_replace('%', '-', $str);
1178
        return trim(strtolower($str));
1179
    }
1180
 
1181
 
1182
 
1183
    /**
1184
     *
1185
     * @param int $feed_id
1186
     * @param Company $company
1187
     * @return array
1188
     */
11989 nelberth 1189
    private function renderFeed($feed_id,$group_uuid)
11898 nelberth 1190
    {
1191
 
1192
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
1193
        if($sandbox) {
1194
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
1195
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
1196
 
1197
        } else {
1198
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
1199
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
1200
        }
1201
 
1202
 
1203
 
1204
 
1205
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1206
        $currentUser = $currentUserPlugin->getUser();
1207
        $currentCompany = $currentUserPlugin->getCompany();
1208
 
1209
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1210
        $company = $companyMapper->fetchOne($currentCompany->id);
1211
 
1212
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1213
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1214
 
1215
 
1216
 
1217
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
1218
 
1219
        $feedMapper = FeedMapper::getInstance($this->adapter);
1220
        $feed = $feedMapper->fetchOne($feed_id);
1221
 
1222
 
1223
        $item = [
1224
            'feed_unique' => uniqid(),
1225
            'feed_uuid' => $feed->uuid,
1226
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
1227
            'feed_priority'=> $feed->priority,
1228
        ];
1229
 
11914 nelberth 1230
 
11912 nelberth 1231
        $userMapper = UserMapper::getInstance($this->adapter);
1232
        $user = $userMapper->fetchOne($feed->user_id);
1233
        $item['owner_url'] =  str_replace('[uuid]', $user->uuid, $user_profile_url);
1234
        $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
1235
        $item['owner_name'] = $user->first_name . ' ' . $user->last_name;
1236
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
11915 nelberth 1237
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
11912 nelberth 1238
 
1239
        if (!$highPerformanceTeamsGroups) {
1240
            $data = [
1241
                'success' => false,
1242
                'data' => 'ERROR_RECORD_NOT_FOUND'
1243
            ];
11898 nelberth 1244
 
11912 nelberth 1245
            return new JsonModel($data);
1246
        }
1247
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
11898 nelberth 1248
 
11912 nelberth 1249
            return new JsonModel([
1250
                'success' => false,
1251
                'data' => 'ERROR_UNAUTHORIZED'
1252
            ]);
1253
 
1254
        }
1255
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
1256
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
1257
        if(!$highPerformanceTeamsGroupsMember) {
1258
            return new JsonModel([
1259
                'success' => false,
1260
                'data' => 'ERROR_RECORD_NOT_FOUND'
1261
            ]);
1262
        }
1263
        if($feed->user_id == $currentUser->id||$highPerformanceTeamsGroupsMember->type!=HighPerformanceTeamsGroupsMembers::TYPE_USER) {
11916 nelberth 1264
            $item['feed_delete_url'] = $this->url()->fromRoute('high-performance-teams/groups/view/feeds/delete',['group_id'=>$group_uuid,'id'=>$feed->uuid]);
11912 nelberth 1265
        }else{
1266
            $item['feed_delete_url'] = '';
11898 nelberth 1267
        }
11912 nelberth 1268
 
11898 nelberth 1269
 
11912 nelberth 1270
 
11898 nelberth 1271
        $userMapper = UserMapper::getInstance($this->adapter);
1272
        $user = $userMapper->fetchOne($feed->user_id);
1273
 
1274
 
1275
        $item['owner_description'] = strip_tags($feed->description, 'p');
1276
        $item['owner_shared'] = $feed->total_shared;
1277
        $item['owner_comments'] = $feed->total_comments;
1278
 
1279
 
1280
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $feed->added_on);
1281
        $item['owner_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
1282
 
1283
        if($feed->file_type == Feed::FILE_TYPE_IMAGE) {
1284
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1285
 
1286
        }
1287
        if($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1288
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1289
        }
1290
        if($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1291
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
1292
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1293
        }
1294
        if($feed->file_type == Feed::FILE_TYPE_MEETING) {
1295
            $dt = \DateTime::createFromFormat('Y-m-d', $feed->date);
1296
            $dt2 = \DateTime::createFromFormat('H:i:s', $feed->time);
1297
            $item['owner_meeting'] =  true;
1298
            $item['owner_meeting_date'] =  $dt->format('d/m/Y');
1299
            $item['owner_meeting_time'] =  $dt2->format('h:i a');
1300
            $item['owner_meeting_link_type'] =  $feed->link_type;
1301
            $item['owner_meeting_link_name'] =  $feed->link_name;
1302
 
1303
        }
1304
 
1305
 
1306
 
1307
 
1308
        $commentMapper = CommentMapper::getInstance($this->adapter);
1309
        $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
1310
 
1311
 
1312
        $comments = [];
1313
        $comment_count=0;
1314
        foreach($records as $record)
1315
        {
1316
            $user = $userMapper->fetchOne($record->user_id);
1317
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1318
 
1319
            $comment = [];
1320
            $comment['unique'] = uniqid();
1321
            $comment_count++;
1322
            $comment['comment_index']=$comment_count;
1323
            $user = $userMapper->fetchOne($record->user_id);
1324
            if($user->id == $owner->user_id) {
1325
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
1326
                $comment['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1327
                $comment['user_name'] = $company->name;
1328
            } else {
1329
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1330
                $comment['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
1331
                $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
1332
            }
11912 nelberth 1333
 
1334
            if($record->user_id == $currentUser->id||$highPerformanceTeamsGroupsMember->type!=HighPerformanceTeamsGroupsMembers::TYPE_USER) {
11916 nelberth 1335
                $comment['link_delete'] = $this->url()->fromRoute('high-performance-teams/groups/view/feeds/comments/delete',['group_id'=>$group_uuid,'id' => $feed->uuid, 'comment' => $record->uuid ]);
11898 nelberth 1336
            }else{
11912 nelberth 1337
                $comment['link_delete'] = '';
11898 nelberth 1338
            }
1339
 
11916 nelberth 1340
            $comment['link_answer_add'] = $this->url()->fromRoute('high-performance-teams/groups/view/feeds/comments/answer',['group_id'=>$group_uuid,'id' => $feed->uuid, 'comment' => $record->uuid ]);
11898 nelberth 1341
            $comment['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1342
            $comment['comment'] = $record->comment;
1343
 
1344
            $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1345
            $answers = [];
1346
            $contador=0;
1347
            foreach($records2 as $record2)
1348
            {
1349
                $user = $userMapper->fetchOne($record2->user_id);
1350
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record2->added_on);
1351
 
1352
                $answer = [];
1353
                $answer['unique'] = uniqid();
1354
 
1355
 
1356
                $user = $userMapper->fetchOne($record2->user_id);
1357
                if($user->id == $owner->user_id) {
1358
                    $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
1359
                    $answer['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1360
                    $answer['user_name'] = $company->name;
1361
                } else {
1362
                    $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1363
                    $answer['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
1364
                    $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
1365
                }
11912 nelberth 1366
 
1367
                if($record2->user_id == $currentUser->id||$highPerformanceTeamsGroupsMember->type!=HighPerformanceTeamsGroupsMembers::TYPE_USER) {
11916 nelberth 1368
                    $answer['link_delete'] = $this->url()->fromRoute('high-performance-teams/groups/view/feeds/comments/delete',['group_id'=>$group_uuid,'id' => $feed->uuid, 'comment' => $record2->uuid ]);
11898 nelberth 1369
                }else{
11912 nelberth 1370
                    $answer['link_delete'] ='';
11898 nelberth 1371
                }
1372
 
11912 nelberth 1373
 
11898 nelberth 1374
                $answer['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1375
                $answer['comment'] = $record2->comment;
1376
 
1377
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1378
 
1379
                $contador++;
1380
                array_push($answers, $answer);
1381
            }
1382
            $comment['number_answers']=$contador;
1383
            $comment['answers'] = $answers;
1384
            array_push($comments, $comment);
1385
        }
11916 nelberth 1386
        $item['comment_add_url'] = $this->url()->fromRoute('high-performance-teams/groups/view/feeds/comments', ['group_id'=>$group_uuid,'id' => $feed->uuid]);
11898 nelberth 1387
            $item['comments'] = $comments;
1388
 
1389
 
1390
 
1391
        return $item;
1392
    }
1393
 
1394
    /**
1395
     *
1396
     * @param int $comment_id
1397
     * @return array
1398
     */
11935 nelberth 1399
    private function renderComment($comment_id,$group_uuid)
11898 nelberth 1400
    {
1401
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1402
        $currentUser = $currentUserPlugin->getUser();
1403
        $currentCompany = $currentUserPlugin->getCompany();
1404
 
1405
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1406
        $company = $companyMapper->fetchOne($currentCompany->id);
1407
 
1408
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1409
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1410
 
1411
 
1412
 
1413
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
1414
        if($sandbox) {
1415
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
1416
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
1417
        } else {
1418
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
1419
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
1420
        }
1421
 
1422
 
1423
        $item = [];
1424
 
1425
        $commentMapper = CommentMapper::getInstance($this->adapter);
1426
        $record = $commentMapper->fetchOne($comment_id);
1427
 
1428
        $feedMapper = FeedMapper::getInstance($this->adapter);
1429
        $feed = $feedMapper->fetchOne($record->feed_id);
1430
 
1431
        if($record) {
1432
            $userMapper = UserMapper::getInstance($this->adapter);
1433
 
1434
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1435
 
1436
 
1437
            $item = [];
1438
            $item['unique'] = uniqid();
1439
 
1440
 
1441
            $user = $userMapper->fetchOne($record->user_id);
1442
            if($user->id == $owner->user_id) {
1443
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
1444
                $item['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1445
                $item['user_name'] = $company->name;
1446
            } else {
1447
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1448
                $item['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
1449
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1450
            }
1451
 
1452
 
1453
 
11935 nelberth 1454
            $item['link_answer_add'] = $this->url()->fromRoute('high-performance-teams/groups/view/feeds/comments/answer',['group_id'=>$group_uuid,'id' => $feed->uuid, 'comment' => $record->uuid ]);
1455
            $item['link_delete'] = $this->url()->fromRoute('high-performance-teams/groups/view/feeds/comments/delete',['group_id'=>$group_uuid,'id' => $feed->uuid, 'comment' => $record->uuid ]);
11898 nelberth 1456
            $item['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1457
            $item['comment'] = $record->comment;
1458
 
1459
        }
1460
        return $item;
1461
    }
1462
 
1463
    /**
1464
     *
1465
     * @param string $path
1466
     * @return boolean
1467
     */
1468
    private function deletePath($path)
1469
    {
1470
        try {
1471
            if (is_dir($path)){
1472
                if ($dh = opendir($path)) {
1473
                    while (($file = readdir($dh)) !== false)
1474
                    {
1475
                        if($file == '.' || $file == '..') {
1476
                            continue;
1477
                        }
1478
                        unlink($path . DIRECTORY_SEPARATOR . $file);
1479
                    }
1480
                    closedir($dh);
1481
                }
1482
 
1483
                rmdir($path);
1484
            }
1485
            return true;
1486
        }
1487
        catch (\Throwable $e)
1488
        {
1489
            error_log($e->getTraceAsString());
1490
            return false;
1491
        }
1492
    }
1493
 
1494
}