Proyectos de Subversion LeadersLinked - Backend

Rev

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