Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15454 | Rev 16322 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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