Proyectos de Subversion LeadersLinked - Backend

Rev

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