Proyectos de Subversion LeadersLinked - Backend

Rev

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