Proyectos de Subversion LeadersLinked - Backend

Rev

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