Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 11568 | Rev 11600 | 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
 
11568 eleazar 614
                }
615
 
616
                if($myt_id){
10985 eleazar 617
                    $feedMapper = FeedMapper::getInstance($this->adapter);
618
                    $myt  = $feedMapper->fetchOneByUuid($myt_id);
10601 eleazar 619
                    $feed->company_id       = $currentCompany->id;
10981 eleazar 620
                    $feed->group_id         = null;
10601 eleazar 621
                    $feed->user_id          = $owner->user_id;
10985 eleazar 622
                    $feed->myt_id           = $myt->id;
10988 eleazar 623
                    $feed->related_feed     = $myt->id;
11491 eleazar 624
                    $feed->type             = Feed::TYPE_MYT_ANSWER;
10601 eleazar 625
                    $feed->posted_or_shared = Feed::POSTED;
10680 eleazar 626
                    $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
7407 nelberth 627
                }else{
628
                    $feed->company_id       = $currentCompany->id;
629
                    $feed->group_id         = null;
630
                    $feed->user_id          = $owner->user_id;
631
                    $feed->type             = Feed::TYPE_COMPANY;
632
                    $feed->posted_or_shared = Feed::POSTED;
633
                    $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
634
                }
1 www 635
 
636
 
637
 
9545 nelberth 638
 
1 www 639
                $feed->total_comments   = 0;
640
                $feed->total_shared     = 0;
641
 
642
 
643
                $files = $this->getRequest()->getFiles()->toArray();
644
                $file_type = '';
645
                if(isset($files['file']) && empty($files['file']['error'])) {
646
                    $feed_tmp_filename  = $files['file']['tmp_name'];
647
                    $feed_filename      = $this->normalizeString($files['file']['name']);
648
 
649
                    $mime_type = mime_content_type($feed_tmp_filename);
650
                    if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
651
                        $file_type = Feed::FILE_TYPE_IMAGE;
652
                    } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
653
                        $file_type = Feed::FILE_TYPE_VIDEO;
654
                    } else if($mime_type == 'application/pdf') {
655
                        $file_type = Feed::FILE_TYPE_DOCUMENT;
656
                    }
657
                }
9549 nelberth 658
 
1 www 659
 
660
                $feedMapper = FeedMapper::getInstance($this->adapter);
661
                $result = $feedMapper->insert($feed);
9565 nelberth 662
 
9551 nelberth 663
 
1 www 664
                if($result) {
9552 nelberth 665
 
666
                    $feed = $feedMapper->fetchOne($feed->id);
9553 nelberth 667
 
1 www 668
                    if( $file_type == Feed::FILE_TYPE_DOCUMENT) {
669
                        try {
670
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
671
                            if(!file_exists($target_path)) {
672
                                mkdir($target_path, 0755);
673
                            }
674
 
675
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR .$feed_filename;
676
                            $result = move_uploaded_file($feed_tmp_filename , $full_filename);
677
                            if($result) {
678
 
679
                                $feed->file_type = $file_type;
680
                                $feed->file_name = basename($feed_filename);
681
                                $feedMapper->update($feed);
682
                            } else {
683
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
684
                            }
685
                        } catch(\Throwable $e) {
686
                            error_log($e->getTraceAsString());
687
                        }
688
                    }
689
                    if( $file_type == Feed::FILE_TYPE_IMAGE) {
690
                        try {
691
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
692
                            if(!file_exists($target_path)) {
693
                                mkdir($target_path, 0755);
694
                            }
695
 
696
                            list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
697
 
698
                            $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
699
                            $crop_to_dimensions = false;
700
                            if(Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions )) {
701
                                $feed->file_type = $file_type;
702
                                $feed->file_name = basename($feed_filename);
703
                                $feedMapper->update($feed);
704
                            }
705
                        } catch(\Throwable $e) {
706
                            error_log($e->getTraceAsString());
707
                        }
708
                    }
709
                    if( $file_type == Feed::FILE_TYPE_VIDEO) {
710
                        try {
711
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
712
                            if(!file_exists($target_path)) {
713
                                mkdir($target_path, 0755);
714
                            }
715
 
716
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
717
 
718
                            $result = move_uploaded_file($feed_tmp_filename , $full_filename);
719
                            if($result) {
720
 
721
                                $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
722
                                $getFromSecound = 2;
723
 
724
                                //extracción del cover
725
                                $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
726
                                $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
727
                                $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
728
                                exec($cmd);
729
 
730
 
731
                                $feed->file_type = $file_type;
732
                                $feed->file_name = basename($feed_filename);
733
                                $feed->file_image_preview = basename($generateFile);
734
                                $feedMapper->update($feed);
735
 
736
                                $videoConvert = new VideoConvert();
737
                                $videoConvert->filename = $full_filename;
738
                                $videoConvert->type = VideoConvert::TYPE_FEED;
739
 
740
                                $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
741
                                $videoConvertMapper->insert($videoConvert);
742
                            } else {
743
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
744
                            }
745
                        } catch(\Throwable $e) {
746
                            error_log($e->getTraceAsString());
747
                        }
748
                    }
749
 
9564 nelberth 750
 
9557 nelberth 751
                    $response = [
752
                        'success'   => true,
10668 eleazar 753
                        'data'   => $this->renderFeed($feed->id)
9557 nelberth 754
                    ];
9558 nelberth 755
 
1 www 756
                } else {
757
                    $response = [
758
                        'success'   => false,
759
                        'data'   => $feedMapper->getError()
760
                    ];
761
                }
762
            } else {
763
                $messages = [];
764
                $form_messages = (array) $form->getMessages();
765
                foreach($form_messages  as $fieldname => $field_messages)
766
                {
767
                    $messages[$fieldname] = array_values($field_messages);
768
                }
769
 
770
                $response = [
771
                    'success'   => false,
772
                    'data'   => $messages
773
                ];
774
            }
775
 
776
        } else {
777
            $response = [
778
                'success' => false,
779
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
780
            ];
781
        }
782
 
783
        return new JsonModel($response);
784
    }
785
 
786
 
10962 eleazar 787
    public function timelineAction() {
11112 nelberth 788
 
1 www 789
        $currentUserPlugin = $this->plugin('currentUserPlugin');
790
        $currentUser = $currentUserPlugin->getUser();
791
        $currentCompany = $currentUserPlugin->getCompany();
8679 nelberth 792
 
7366 nelberth 793
 
7381 nelberth 794
 
7378 nelberth 795
 
7357 nelberth 796
 
7366 nelberth 797
        $request = $this->getRequest();
1 www 798
        if($request->isGet()) {
8672 nelberth 799
 
8673 nelberth 800
 
8672 nelberth 801
            $page = (int) $this->params()->fromQuery('page');
802
            $type   = $this->params()->fromRoute('type');
11091 nelberth 803
            $topic_uuid   = $this->params()->fromRoute('topic_id');
8672 nelberth 804
            $urgent   = $this->params()->fromRoute('urgent');
10820 eleazar 805
            $myt_id =  $this->params()->fromRoute('myt_id');
11098 nelberth 806
            $hptg_uuid =  $this->params()->fromRoute('hptg_id');
11108 nelberth 807
 
11109 nelberth 808
 
11098 nelberth 809
            if($hptg_uuid){
11113 nelberth 810
 
11114 nelberth 811
 
7381 nelberth 812
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
11098 nelberth 813
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($hptg_uuid);
7425 nelberth 814
 
7414 nelberth 815
                if (!$highPerformanceTeamsGroups) {
816
                    $data = [
817
                        'success' => false,
818
                        'data' => 'ERROR_RECORD_NOT_FOUND'
819
                    ];
820
 
821
                    return new JsonModel($data);
822
                }
823
 
824
                if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
825
 
826
                    return new JsonModel([
827
                        'success' => false,
828
                        'data' => 'ERROR_UNAUTHORIZED'
829
                    ]);
830
 
831
                }
832
 
833
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
834
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
835
                if($highPerformanceTeamsGroupsMember) {
836
                    if($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN ){
7701 nelberth 837
                        $queryMapper = QueryMapper::getInstance($this->adapter);
838
                        $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
839
                        $select->columns(['id']);
840
                        $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
841
                        $select->where->equalTo('company_id',$currentCompany->id);
842
                        $select->where->equalTo('high_performance_group_id',$highPerformanceTeamsGroups->id);
8739 nelberth 843
 
8737 nelberth 844
 
7643 nelberth 845
                        if(isset($topic_uuid)){
9539 nelberth 846
                            $topicMapper = TopicMapper::getInstance($this->adapter);
847
                            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
9537 nelberth 848
                            if($topic){
849
                                if($topic->status!='a'){
7766 nelberth 850
                                    return new JsonModel([
851
                                        'success' => false,
852
                                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
853
                                    ]);
854
                                }
9569 nelberth 855
                                $select->where->equalTo('topic_id',$topic->id);
7701 nelberth 856
 
7643 nelberth 857
                            }else{
858
                                return new JsonModel([
859
                                    'success' => false,
8689 nelberth 860
                                    'data' => 'ERROR_RECORD_NOT_FOUND'
7643 nelberth 861
                                ]);
862
                            }
7701 nelberth 863
                        }else{
8739 nelberth 864
                            if(isset($urgent)){
865
                                $select->where->equalTo('priority', Feed::PRIORITY_URGENT);
866
                            }else{
9569 nelberth 867
                                $select->where->IsNull('topic_id');
8739 nelberth 868
                            }
7701 nelberth 869
 
7643 nelberth 870
                        }
7701 nelberth 871
 
872
 
7420 nelberth 873
                        $select->where->and->equalTo('type', Feed::TYPE_HPTG);
874
                        $select->order('added_on desc');
875
 
7414 nelberth 876
                    }else{
877
                        return new JsonModel([
878
                            'success' => false,
879
                            'data' => 'ERROR_UNAUTHORIZED'
880
                        ]);
881
                    }
882
 
7381 nelberth 883
                } else {
7414 nelberth 884
 
885
                    return new JsonModel([
886
                        'success' => false,
887
                        'data' => 'ERROR_RECORD_NOT_FOUND'
888
                    ]);
7381 nelberth 889
                }
7379 nelberth 890
 
7381 nelberth 891
 
7414 nelberth 892
 
7420 nelberth 893
 
7381 nelberth 894
 
11115 nelberth 895
            }else if($myt_id){
10990 eleazar 896
                $feedMapper = FeedMapper::getInstance($this->adapter);
897
                $myt  = $feedMapper->fetchOneByUuid($myt_id);
10601 eleazar 898
                $queryMapper = QueryMapper::getInstance($this->adapter);
899
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
900
                $select->columns(['id']);
901
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
902
                $select->where->equalTo('company_id',$currentCompany->id);
10992 eleazar 903
                $select->where->equalTo('myt_id', $myt->id);
11001 eleazar 904
                $select->where->and->equalTo('type', Feed::TYPE_MYT_ANSWER);
10601 eleazar 905
                $select->order('added_on desc');
10557 eleazar 906
 
7350 nelberth 907
            }else{
7380 nelberth 908
 
7350 nelberth 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);
914
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
915
                $select->order('added_on desc');
916
            }
917
 
1 www 918
 
919
 
920
            $dbSelect = new DbSelect($select, $this->adapter);
921
            $paginator = new Paginator($dbSelect);
922
            $paginator->setCurrentPageNumber($page ? $page : 1);
923
            $paginator->setItemCountPerPage(10);
924
 
925
            $items = [];
926
            $feeds = $paginator->getCurrentItems();
10400 nelberth 927
 
1 www 928
            foreach($feeds as $feed)
929
            {
10418 nelberth 930
                $items[] = $this->renderFeed($feed->id);
1 www 931
            }
932
 
933
            $response = [
934
                'success' => true,
935
                'data' => [
936
                    'total' => [
937
                        'count' => $paginator->getTotalItemCount(),
938
                        'pages' => $paginator->getPages()->pageCount,
939
                    ],
940
                    'current' => [
941
                        'items'    => $items,
942
                        'page'     => $paginator->getCurrentPageNumber(),
943
                        'count'    => $paginator->getCurrentItemCount(),
944
                    ]
945
                ]
946
            ];
947
 
948
            return new JsonModel($response);
949
        }
950
 
951
        $response = [
952
            'success' => false,
953
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
954
        ];
955
 
956
 
957
        return new JsonModel($response);
958
    }
959
 
10119 nelberth 960
    public function oneFeedAction(){
10118 nelberth 961
        $currentUserPlugin = $this->plugin('currentUserPlugin');
962
        $currentUser = $currentUserPlugin->getUser();
963
        $currentCompany = $currentUserPlugin->getCompany();
11331 eleazar 964
 
10118 nelberth 965
        $request = $this->getRequest();
966
        if($request->isGet()) {
967
 
11331 eleazar 968
            $feed_uuid =  $this->params()->fromRoute('feed_id');
11195 eleazar 969
            $myt_id =  $this->params()->fromRoute('myt_id');
10118 nelberth 970
 
11331 eleazar 971
            if(!isset($feed_uuid)){
972
                    $data = [
973
                        'success'   => false,
974
                        'data'   => 'ERROR_INVALID_PARAMETER'
975
                    ];
976
 
977
                    return new JsonModel($data);
978
            }
10118 nelberth 979
 
980
            $items = [];
11331 eleazar 981
            $feedMapper = FeedMapper::getInstance($this->adapter);
982
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
983
 
984
            if (!$feed) {
985
                $data = [
986
                    'success' => false,
987
                    'data' => 'ERROR_RECORD_NOT_FOUND'
988
                ];
989
 
990
                return new JsonModel($data);
991
            }
11195 eleazar 992
 
11536 eleazar 993
            if ($feed->type=='mytq'){
11413 eleazar 994
 
11536 eleazar 995
                $items = $this->renderFeed($feed->id,$myt_id);
11195 eleazar 996
 
11536 eleazar 997
                $response = [
998
                    'success' => true,
999
                    'data' => [
1000
                        'item' =>$items,
1001
                        'feed_title'=>$feed->title,
1002
                        'topic_title'=>$feed->description
1003
                    ]
1004
                ];
11195 eleazar 1005
 
11536 eleazar 1006
            }
11195 eleazar 1007
 
11519 eleazar 1008
            if ($feed->type=='myta'){
1009
 
1010
                $items = $this->renderFeed($feed->id,$myt_id);
1011
 
1012
                $response = [
1013
                    'success' => true,
1014
                    'data' => [
1015
                        'item' =>$items,
1016
                        'feed_title'=>$feed->title,
1017
                        'topic_title'=>$feed->description
1018
                    ]
1019
                ];
1020
 
1021
            }
1022
 
11404 eleazar 1023
            if($feed->type=='hptg'){
10118 nelberth 1024
 
11404 eleazar 1025
                $group_uuid =  $this->params()->fromRoute('group_id');
1026
                $topic_uuid   = $this->params()->fromRoute('topic_id');
10118 nelberth 1027
 
11404 eleazar 1028
                if(!isset($topic_uuid)){
10118 nelberth 1029
 
11404 eleazar 1030
                    $data = [
1031
                        'success'   => false,
1032
                        'data'   => 'ERROR_INVALID_PARAMETER'
1033
                    ];
10118 nelberth 1034
 
11404 eleazar 1035
                    return new JsonModel($data);
1036
                }
1037
                if(!isset($group_uuid)){
10118 nelberth 1038
 
11404 eleazar 1039
                    $data = [
1040
                        'success'   => false,
1041
                        'data'   => 'ERROR_INVALID_PARAMETER'
1042
                    ];
10118 nelberth 1043
 
11404 eleazar 1044
                    return new JsonModel($data);
1045
                }
1046
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
1047
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
10118 nelberth 1048
 
11404 eleazar 1049
                if (!$highPerformanceTeamsGroups) {
1050
                    $data = [
1051
                        'success' => false,
1052
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1053
                    ];
10118 nelberth 1054
 
11404 eleazar 1055
                    return new JsonModel($data);
1056
                }
10118 nelberth 1057
 
1058
 
11404 eleazar 1059
                if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
10118 nelberth 1060
 
11404 eleazar 1061
                    return new JsonModel([
1062
                        'success' => false,
1063
                        'data' => 'ERROR_UNAUTHORIZED'
1064
                    ]);
10118 nelberth 1065
 
11404 eleazar 1066
                }
10118 nelberth 1067
 
11404 eleazar 1068
                if($feed->high_performance_group_id!=$highPerformanceTeamsGroups->id){
1069
                    return new JsonModel([
1070
                        'success' => false,
1071
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1072
                    ]);
1073
                }
10118 nelberth 1074
 
11404 eleazar 1075
                $topicMapper = TopicMapper::getInstance($this->adapter);
1076
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
10118 nelberth 1077
 
11404 eleazar 1078
                if (!$topic) {
1079
                    $data = [
1080
                        'success' => false,
1081
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1082
                    ];
10118 nelberth 1083
 
11404 eleazar 1084
                    return new JsonModel($data);
1085
                }
10118 nelberth 1086
 
11404 eleazar 1087
                if($feed->topic_id!=$topic->id){
1088
                    return new JsonModel([
1089
                        'success' => false,
1090
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1091
                    ]);
1092
                }
10521 eleazar 1093
 
11404 eleazar 1094
                $items = $this->renderFeed($feed->id,$group_uuid);
10118 nelberth 1095
 
11404 eleazar 1096
                $response = [
1097
                    'success' => true,
1098
                    'data' => [
1099
                        'item' =>$items,
1100
                        'topic_title'=>$topic->title,
1101
                        'feed_title'=>$feed->title
1102
                    ]
1103
                ];
1104
            }
10118 nelberth 1105
 
11331 eleazar 1106
            return new JsonModel($response);
11399 eleazar 1107
        }
10118 nelberth 1108
    }
1 www 1109
    /**
1110
     *
1111
     * @param string $str
1112
     * @return string
1113
     */
10118 nelberth 1114
    private function normalizeString ($str = ''){
1 www 1115
        $basename  = substr($str, 0, strrpos($str, '.'));
1116
        $basename  = str_replace('.', '-', $basename);
1117
 
1118
        $extension  = substr($str, strrpos($str, '.'));
1119
 
1120
        $str = $basename . $extension;
1121
 
1122
        $str = strip_tags($str);
1123
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
1124
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
1125
        $str = strtolower($str);
1126
        $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
1127
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
1128
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
1129
        $str = str_replace(' ', '-', $str);
1130
        $str = rawurlencode($str);
1131
        $str = str_replace('%', '-', $str);
1132
        return trim(strtolower($str));
1133
    }
1134
 
1135
 
1136
 
1137
    /**
1138
     *
1139
     * @param int $feed_id
1140
     * @param Company $company
1141
     * @return array
1142
     */
11195 eleazar 1143
    private function renderFeed($feed_id,$group_uuid="",$myt_id="")
1 www 1144
    {
9562 nelberth 1145
 
1 www 1146
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
1147
        if($sandbox) {
1148
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
1149
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
1150
 
1151
        } else {
1152
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
1153
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
1154
        }
1155
 
1156
 
1157
 
9561 nelberth 1158
 
1 www 1159
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1160
        $currentUser = $currentUserPlugin->getUser();
1161
        $currentCompany = $currentUserPlugin->getCompany();
1162
 
1163
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1164
        $company = $companyMapper->fetchOne($currentCompany->id);
1165
 
1166
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1167
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1168
 
1169
 
1170
 
1171
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
1172
 
1173
        $feedMapper = FeedMapper::getInstance($this->adapter);
1174
        $feed = $feedMapper->fetchOne($feed_id);
1175
 
1176
 
1177
        $params = [
1178
            'id' => $feed->uuid
1179
        ];
1180
 
1181
 
1182
        $item = [
1183
            'feed_unique' => uniqid(),
1184
            'feed_uuid' => $feed->uuid,
8218 nelberth 1185
            'feed_delete_url' =>  $this->url()->fromRoute('feeds/delete',  $params),
1 www 1186
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
8627 nelberth 1187
            'feed_priority'=> $feed->priority,
1 www 1188
        ];
8205 nelberth 1189
        if($feed->type == Feed::TYPE_HPTG)
1190
        {
10394 nelberth 1191
 
11120 nelberth 1192
                $uuid =  $this->params()->fromRoute('hptg_id');
11119 nelberth 1193
                if($group_uuid!=''){
1194
                    $uuid=$group_uuid;
1195
                }
8217 nelberth 1196
                $userMapper = UserMapper::getInstance($this->adapter);
1197
                $user = $userMapper->fetchOne($feed->user_id);
8224 nelberth 1198
                $item['owner_url'] =  str_replace('[uuid]', $user->uuid, $user_profile_url);
8217 nelberth 1199
                $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
1200
                $item['owner_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1201
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
11119 nelberth 1202
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($uuid);
10393 nelberth 1203
 
1204
                if (!$highPerformanceTeamsGroups) {
1205
                    $data = [
1206
                        'success' => false,
1207
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1208
                    ];
1209
 
1210
                    return new JsonModel($data);
1211
                }
1212
                if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
1213
 
1214
                    return new JsonModel([
1215
                        'success' => false,
1216
                        'data' => 'ERROR_UNAUTHORIZED'
1217
                    ]);
1218
 
1219
                }
10392 nelberth 1220
                $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
1221
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
1222
                if(!$highPerformanceTeamsGroupsMember) {
1223
                    return new JsonModel([
1224
                        'success' => false,
1225
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1226
                    ]);
1227
                }
1228
                if($feed->user_id == $currentUser->id||$highPerformanceTeamsGroupsMember->type!=HighPerformanceTeamsGroupsMembers::TYPE_USER) {
10391 nelberth 1229
                    $item['feed_delete_url'] = $this->url()->fromRoute('feeds/delete',  $params);
1230
                }else{
1231
                    $item['feed_delete_url'] = '';
8217 nelberth 1232
                }
10406 nelberth 1233
 
11417 eleazar 1234
        }
11582 eleazar 1235
        // if($feed->type == Feed::TYPE_MYT_QUESTION){
1236
        //     $uuid =  $this->params()->fromRoute('myt_id');
1237
        //         if($myt_id!=''){
1238
        //             $uuid=$myt_id;
1239
        //         }
1240
        //     $userMapper = UserMapper::getInstance($this->adapter);
1241
        //     $user = $userMapper->fetchOne($feed->user_id);
1242
        //     $item['feed_delete_url'] = $this->url()->fromRoute('feeds/delete',  $params);
1243
        //     $item['owner_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1244
        //     $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'user', 'filename' => $company->image]);
1245
        //     $item['owner_name'] = $company->name;
1246
        // }
11503 eleazar 1247
        if($feed->type == Feed::TYPE_MYT_ANSWER){
11195 eleazar 1248
            $uuid =  $this->params()->fromRoute('myt_id');
1249
                if($myt_id!=''){
1250
                    $uuid=$myt_id;
1251
                }
1252
            $userMapper = UserMapper::getInstance($this->adapter);
1253
            $user = $userMapper->fetchOne($feed->user_id);
10620 eleazar 1254
            $item['feed_delete_url'] = $this->url()->fromRoute('feeds/delete',  $params);
1255
            $item['owner_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1256
            $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'user', 'filename' => $company->image]);
1257
            $item['owner_name'] = $company->name;
11519 eleazar 1258
        }else {
10402 nelberth 1259
            $item['feed_delete_url'] = $this->url()->fromRoute('feeds/delete',  $params);
8205 nelberth 1260
            $item['owner_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1261
            $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]);
1262
            $item['owner_name'] = $company->name;
1263
        }
1 www 1264
 
1265
        $userMapper = UserMapper::getInstance($this->adapter);
1266
        $user = $userMapper->fetchOne($feed->user_id);
1267
 
1268
 
7235 stevensc 1269
        $item['owner_description'] = strip_tags($feed->description, 'p');
1 www 1270
        $item['owner_shared'] = $feed->total_shared;
1271
        $item['owner_comments'] = $feed->total_comments;
1272
 
1273
 
1274
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $feed->added_on);
1275
        $item['owner_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
1276
 
1277
        if($feed->file_type == Feed::FILE_TYPE_IMAGE) {
1278
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1279
 
1280
        }
1281
        if($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1282
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1283
        }
1284
        if($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1285
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
1286
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1287
        }
9021 nelberth 1288
        if($feed->file_type == Feed::FILE_TYPE_MEETING) {
9081 nelberth 1289
            $dt = \DateTime::createFromFormat('Y-m-d', $feed->date);
9086 nelberth 1290
            $dt2 = \DateTime::createFromFormat('H:i:s', $feed->time);
9023 nelberth 1291
            $item['owner_meeting'] =  true;
9082 nelberth 1292
            $item['owner_meeting_date'] =  $dt->format('d/m/Y');
9088 nelberth 1293
            $item['owner_meeting_time'] =  $dt2->format('h:i a');
9021 nelberth 1294
            $item['owner_meeting_link_type'] =  $feed->link_type;
1295
            $item['owner_meeting_link_name'] =  $feed->link_name;
1296
 
1297
        }
1 www 1298
 
1299
 
1300
 
1301
 
1302
        $commentMapper = CommentMapper::getInstance($this->adapter);
1303
        $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
1304
 
1305
 
1306
        $comments = [];
10073 nelberth 1307
        $comment_count=0;
1 www 1308
        foreach($records as $record)
1309
        {
1310
            $user = $userMapper->fetchOne($record->user_id);
1311
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1312
 
1313
            $comment = [];
1314
            $comment['unique'] = uniqid();
10073 nelberth 1315
            $comment_count++;
1316
            $comment['comment_index']=$comment_count;
1 www 1317
            $user = $userMapper->fetchOne($record->user_id);
1318
            if($user->id == $owner->user_id) {
1319
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
1320
                $comment['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1321
                $comment['user_name'] = $company->name;
1322
            } else {
1323
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1324
                $comment['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
1325
                $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1326
            }
10395 nelberth 1327
            if($feed->type == Feed::TYPE_HPTG)
1328
            {
10397 nelberth 1329
                if($record->user_id == $currentUser->id||$highPerformanceTeamsGroupsMember->type!=HighPerformanceTeamsGroupsMembers::TYPE_USER) {
10395 nelberth 1330
                    $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
1331
                }else{
10398 nelberth 1332
                    $comment['link_delete'] = '';
10395 nelberth 1333
                }
1334
            }else{
1335
                $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
1336
            }
10406 nelberth 1337
 
8385 nelberth 1338
            $comment['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer',['id' => $feed->uuid, 'comment' => $record->uuid ]);
1 www 1339
            $comment['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1340
            $comment['comment'] = $record->comment;
1341
 
8414 nelberth 1342
            $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1343
            $answers = [];
8499 nelberth 1344
            $contador=0;
8414 nelberth 1345
            foreach($records2 as $record2)
1346
            {
1347
                $user = $userMapper->fetchOne($record2->user_id);
1348
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record2->added_on);
1349
 
1350
                $answer = [];
1351
                $answer['unique'] = uniqid();
1352
 
1353
 
1354
                $user = $userMapper->fetchOne($record2->user_id);
1355
                if($user->id == $owner->user_id) {
1356
                    $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
1357
                    $answer['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1358
                    $answer['user_name'] = $company->name;
1359
                } else {
1360
                    $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1361
                    $answer['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
1362
                    $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1363
                }
10398 nelberth 1364
                if($feed->type == Feed::TYPE_HPTG)
1365
                {
10399 nelberth 1366
                    if($record2->user_id == $currentUser->id||$highPerformanceTeamsGroupsMember->type!=HighPerformanceTeamsGroupsMembers::TYPE_USER) {
10398 nelberth 1367
                        $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record2->uuid ]);
1368
                    }else{
1369
                        $answer['link_delete'] ='';
1370
                    }
1371
                }else{
1372
                    $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record2->uuid ]);
1373
                }
10406 nelberth 1374
 
8414 nelberth 1375
                $answer['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1376
                $answer['comment'] = $record2->comment;
1377
 
1378
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1379
 
8499 nelberth 1380
                $contador++;
8414 nelberth 1381
                array_push($answers, $answer);
1382
            }
8499 nelberth 1383
            $comment['number_answers']=$contador;
8416 nelberth 1384
            $comment['answers'] = $answers;
1 www 1385
            array_push($comments, $comment);
1386
        }
1387
        $item['comment_add_url'] = $this->url()->fromRoute('feeds/comments', ['id' => $feed->uuid]);
9064 nelberth 1388
            $item['comments'] = $comments;
1 www 1389
 
9064 nelberth 1390
 
9065 nelberth 1391
 
1 www 1392
        return $item;
1393
    }
1394
 
1395
    /**
1396
     *
1397
     * @param int $comment_id
1398
     * @return array
1399
     */
1400
    private function renderComment($comment_id)
1401
    {
1402
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1403
        $currentUser = $currentUserPlugin->getUser();
1404
        $currentCompany = $currentUserPlugin->getCompany();
1405
 
1406
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1407
        $company = $companyMapper->fetchOne($currentCompany->id);
1408
 
1409
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1410
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1411
 
1412
 
1413
 
1414
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
1415
        if($sandbox) {
1416
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
1417
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
1418
        } else {
1419
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
1420
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
1421
        }
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
 
1435
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1436
 
1437
 
1438
            $item = [];
1439
            $item['unique'] = uniqid();
1440
 
1441
 
1442
            $user = $userMapper->fetchOne($record->user_id);
1443
            if($user->id == $owner->user_id) {
1444
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
1445
                $item['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
1446
                $item['user_name'] = $company->name;
1447
            } else {
1448
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1449
                $item['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
1450
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1451
            }
1452
 
1453
 
1454
 
8446 nelberth 1455
            $item['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer',['id' => $feed->uuid, 'comment' => $record->uuid ]);
1 www 1456
            $item['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
1457
            $item['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1458
            $item['comment'] = $record->comment;
1459
 
1460
        }
1461
        return $item;
1462
    }
1463
 
1464
    /**
1465
     *
1466
     * @param string $path
1467
     * @return boolean
1468
     */
1469
    private function deletePath($path)
1470
    {
1471
        try {
1472
            if (is_dir($path)){
1473
                if ($dh = opendir($path)) {
1474
                    while (($file = readdir($dh)) !== false)
1475
                    {
1476
                        if($file == '.' || $file == '..') {
1477
                            continue;
1478
                        }
1479
                        unlink($path . DIRECTORY_SEPARATOR . $file);
1480
                    }
1481
                    closedir($dh);
1482
                }
1483
 
1484
                rmdir($path);
1485
            }
1486
            return true;
1487
        }
1488
        catch (\Throwable $e)
1489
        {
1490
            error_log($e->getTraceAsString());
1491
            return false;
1492
        }
1493
    }
1494
 
1495
}