Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7190 nelberth 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\JsonModel;
16
 
17
use LeadersLinked\Library\Functions;
18
use LeadersLinked\Mapper\CompanyUserMapper;
19
use LeadersLinked\Form\Feed\CreateForm;
20
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
21
use LeadersLinked\Model\Feed;
22
use LeadersLinked\Mapper\FeedMapper;
23
use LeadersLinked\Library\Image;
24
use LeadersLinked\Mapper\GroupMapper;
25
use LeadersLinked\Mapper\UserMapper;
26
use LeadersLinked\Mapper\CommentMapper;
27
use LeadersLinked\Mapper\ConnectionMapper;
28
use LeadersLinked\Mapper\CompanyFollowerMapper;
29
use LeadersLinked\Mapper\QueryMapper;
30
use Laminas\Paginator\Paginator;
31
use Laminas\Paginator\Adapter\DbSelect;
32
use LeadersLinked\Mapper\LikeMapper;
33
use LeadersLinked\Model\Like;
34
use LeadersLinked\Form\Feed\CommentForm;
35
use LeadersLinked\Model\Comment;
36
use LeadersLinked\Form\Feed\CreateGroupCompanyForm;
37
use LeadersLinked\Model\CompanyUser;
38
use LeadersLinked\Model\VideoConvert;
39
use LeadersLinked\Mapper\VideoConvertMapper;
40
use LeadersLinked\Mapper\CompanyMapper;
41
use LeadersLinked\Model\Company;
42
use LeadersLinked\Model\Group;
43
use LeadersLinked\Mapper\GroupMemberMapper;
44
use LeadersLinked\Model\GroupMember;
45
use LeadersLinked\Model\Notification;
46
use LeadersLinked\Mapper\NotificationMapper;
47
use LeadersLinked\Mapper\UserNotificationSettingMapper;
48
use LeadersLinked\Mapper\EmailTemplateMapper;
49
use LeadersLinked\Model\EmailTemplate;
50
use LeadersLinked\Library\QueueEmail;
51
 
52
 
53
class HighPerformanceTeamsGroupFeedController extends AbstractActionController
54
{
55
    /**
56
     *
57
     * @var AdapterInterface
58
     */
59
    private $adapter;
60
 
61
 
62
    /**
63
     *
64
     * @var AbstractAdapter
65
     */
66
    private $cache;
67
 
68
    /**
69
     *
70
     * @var  LoggerInterface
71
     */
72
    private $logger;
73
 
74
 
75
    /**
76
     *
77
     * @var array
78
     */
79
    private $config;
80
 
81
    /**
82
     *
83
     * @param AdapterInterface $adapter
84
     * @param AbstractAdapter $cache
85
     * @param LoggerInterface $logger
86
     * @param array $config
87
     */
88
    public function __construct($adapter, $cache , $logger,  $config)
89
    {
90
        $this->adapter      = $adapter;
91
        $this->cache        = $cache;
92
        $this->logger       = $logger;
93
        $this->config       = $config;
94
 
95
    }
96
 
97
    /**
98
     *
99
     * Generación del listado de perfiles
100
     * {@inheritDoc}
101
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
102
     */
103
    public function indexAction()
104
    {
105
 
106
        return new JsonModel([
107
            'success' => false,
108
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
109
        ]);
110
    }
111
 
112
    public function commentAction()
113
    {
114
        $id = $this->params()->fromRoute('id');
115
 
116
        $request = $this->getRequest();
117
        if($request->isPost()) {
118
            $feedMapper = FeedMapper::getInstance($this->adapter);
119
            $feed = $feedMapper->fetchOneByUuid($id);
120
            if(!$feed) {
121
                $response = [
122
                    'success' => false,
123
                    'data' => 'ERROR_POST_NOT_FOUND'
124
                ];
125
                return new JsonModel($response);
126
            }
127
 
128
            $dataPost = $request->getPost()->toArray();
129
            $form = new CommentForm();
130
            $form->setData($dataPost);
131
 
132
            if($form->isValid()) {
133
                $currentUserPlugin = $this->plugin('currentUserPlugin');
134
                $currentUser = $currentUserPlugin->getUser();
135
 
136
                $dataPost = (array) $form->getData();
137
 
138
                $comment = new Comment();
139
                $comment->comment = $dataPost['comment'];
140
                $comment->user_id = $currentUser->id;
141
                $comment->feed_id = $feed->id;
142
 
143
                $commentMapper = CommentMapper::getInstance($this->adapter);
144
                if($commentMapper->insert($comment)) {
145
 
146
 
147
                    if($feed->type == Feed::TYPE_UPDATE) {
148
                        $userMapper = UserMapper::getInstance($this->adapter);
149
                        $ownerFeed = $userMapper->fetchOne($feed->user_id);
150
 
151
                        $notification = new Notification();
152
                        $notification->type = Notification::TYPE_COMMENT_MY_FEED;
153
                        $notification->feed_id = $feed->id;
154
                        $notification->read     = Notification::NO;
155
                        $notification->user_id  = $ownerFeed->id;
156
                        $notification->message  = 'LABEL_COMMENT_MY_FEED';
157
                        $notification->url      = $this->url()->fromRoute('dashboard',['feed' => $feed->uuid]);
158
 
159
                        $notificationMapper = NotificationMapper::getInstance($this->adapter);
160
                        $notificationMapper->insert($notification);
161
 
162
                        $userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);
163
                        $userNotification = $userNotificationMapper->fetchOne($ownerFeed->id);
164
 
165
                        if($userNotification && $userNotification->comment_my_feed)
166
                        {
167
                            $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
168
                            $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_COMMENT_MY_FEED);
169
 
170
                            if($emailTemplate) {
171
                                $arrayCont = [
172
                                    'firstname'             => $currentUser->first_name,
173
                                    'lastname'              => $currentUser->last_name,
174
                                    'other_user_firstname'  => $ownerFeed->first_name,
175
                                    'other_user_lastname'   => $ownerFeed->last_name,
176
                                    'company_name'          => '',
177
                                    'group_name'            => '',
178
                                    'content'               => '',
179
                                    'code'                  => '',
180
                                    'link'                  => $this->url()->fromRoute('dashboard',['feed' => $feed->uuid], ['force_canonical' => true])
181
                                ];
182
 
183
                                $email = new QueueEmail($this->adapter);
184
                                $email->processEmailTemplate($emailTemplate, $arrayCont, $ownerFeed->email, trim($ownerFeed->first_name . ' ' . $ownerFeed->last_name));
185
                            }
186
                        }
187
                    }
188
 
189
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
190
 
191
                    $feed->total_comments = $total_comments;
192
                    $feedMapper->update($feed);
193
 
194
                    $response = [
195
                        'success'   => true,
196
                        'data'   => $this->renderComment($comment->id),
197
                        'total_comments' => $total_comments
198
                    ];
199
 
200
                    return new JsonModel($response);
201
 
202
                } else {
203
 
204
                    $response = [
205
                        'success'   => false,
206
                        'data'   => $commentMapper->getError()
207
                    ];
208
 
209
                    return new JsonModel($response);
210
                }
211
 
212
            } else {
213
                $message = '';;
214
                $form_messages = (array) $form->getMessages();
215
                foreach($form_messages  as $fieldname => $field_messages)
216
                {
217
                    foreach( $field_messages as $key => $value)
218
                    {
219
                        $message = $value;
220
                    }
221
                }
222
 
223
                $response = [
224
                    'success'   => false,
225
                    'data'   => $message
226
                ];
227
 
228
                return new JsonModel($response);
229
            }
230
 
231
 
232
        } else {
233
            $response = [
234
                'success' => false,
235
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
236
            ];
237
 
238
            return new JsonModel($response);
239
        }
240
 
241
 
242
    }
243
 
244
    public function shareAction()
245
    {
246
        $id = $this->params()->fromRoute('id');
247
 
248
        $request = $this->getRequest();
249
        if($request->isPost()) {
250
            $feedMapper = FeedMapper::getInstance($this->adapter);
251
            $feed = $feedMapper->fetchOneByUuid($id);
252
            if(!$feed) {
253
                $response = [
254
                    'success' => false,
255
                    'data' => 'ERROR_POST_NOT_FOUND'
256
                ];
257
                return new JsonModel($response);
258
            }
259
 
260
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
261
            $dataPost['company_id'] = $this->params()->fromRoute('company_id');
262
            $dataPost['group_id'] = $this->params()->fromRoute('group_id');
263
            $dataPost['shared_feed_id'] = $feed->id;
264
 
265
 
266
 
267
 
268
            $response = $this->postOrShareFeed($dataPost);
269
            if( $response ['success']) {
270
                $feedMapper->incTotalShared($feed->id);
271
                $total_shared = $feedMapper->fetchTotalShared($feed->id);
272
 
273
                $response['total_shared'] = $total_shared;
274
            }
275
 
276
 
277
            return new JsonModel($response);
278
 
279
        } else {
280
            $response = [
281
                'success' => false,
282
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
283
            ];
284
        }
285
 
286
        return new JsonModel($response);
287
    }
288
 
289
    public function commentDeleteAction()
290
    {
291
        $request = $this->getRequest();
292
        if($request->isPost()) {
293
            $currentUserPlugin = $this->plugin('currentUserPlugin');
294
            $currentUser = $currentUserPlugin->getUser();
295
 
296
            $feed_id = $this->params()->fromRoute('id');
297
            $comment = $this->params()->fromRoute('comment');
298
 
299
            $feedMapper = FeedMapper::getInstance($this->adapter);
300
            $feed = $feedMapper->fetchOneByUuid($feed_id);
301
 
302
            if($feed) {
303
 
304
                $commentMapper = CommentMapper::getInstance($this->adapter);
305
                $comment = $commentMapper->fetchOneByUuid($comment);
306
 
307
                if($comment && $comment->feed_id == $feed->id && $comment->user_id == $currentUser->id) {
308
 
309
                    $comment->status = Comment::STATUS_DELETED;
310
 
311
                    if($commentMapper->update($comment)) {
312
 
313
                        $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
314
 
315
 
316
                        $feedMapper = FeedMapper::getInstance($this->adapter);
317
                        $feed = $feedMapper->fetchOne($comment->feed_id);
318
                        $feed->total_comments = $total_comments;
319
                        $feedMapper->update($feed);
320
 
321
 
322
 
323
 
324
 
325
                        $response = [
326
                            'success' => true,
327
                            'data' => 'LABEL_COMMENT_WAS_DELETED',
328
                            'total_comments' => $total_comments
329
                        ];
330
 
331
                    } else {
332
                        $response = [
333
                            'success' => false,
334
                            'data' => $commentMapper->getError()
335
                        ];
336
                    }
337
 
338
                } else {
339
                    $response = [
340
                        'success' => false,
341
                        'data' => 'ERROR_COMMENT_NOT_FOUND'
342
                    ];
343
                }
344
            } else {
345
                $response = [
346
                    'success' => false,
347
                    'data' => 'ERROR_COMMENT_NOT_FOUND'
348
                ];
349
            }
350
        } else {
351
            $response = [
352
                'success' => false,
353
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
354
            ];
355
        }
356
 
357
        return new JsonModel($response);
358
    }
359
 
360
    public function deleteAction()
361
    {
362
        $request = $this->getRequest();
363
        if($request->isPost()) {
364
            $currentUserPlugin = $this->plugin('currentUserPlugin');
365
            $currentUser = $currentUserPlugin->getUser();
366
 
367
            $feed_id =  $this->params()->fromRoute('id');
368
 
369
            $feedMapper = FeedMapper::getInstance($this->adapter);
370
            $feed = $feedMapper->fetchOneByUuid($feed_id);
371
 
372
            if($feed) {
373
 
374
                if($feed->user_id && $feed->user_id == $currentUser->id) {
375
 
376
                    return new JsonModel($this->deleteFeed($feed));
377
                } else if ($feed->group_id) {
378
 
379
                    $groupMapper = GroupMapper::getInstance($this->adapter);
380
                    $group = $groupMapper->fetchOne($feed->group_id);
381
                    if($group && $group->user_id == $currentUser->id) {
382
                        return new JsonModel($this->deleteFeed($feed));
383
                    }
384
 
385
                } else if ($feed->company_id) {
386
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
387
                    $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($feed->company_id, $currentUser->id);
388
                    if($companyUser) {
389
                        if(in_array($companyUser->type, [CompanyUser::TYPE_OWNER, CompanyUser::TYPE_ADMINISTRATOR, CompanyUser::TYPE_MANAGER])) {
390
                            return new JsonModel($this->deleteFeed($feed));
391
                        }
392
                    }
393
                }
394
 
395
                $response = [
396
                    'success' => false,
397
                    'data' => ' ERROR_UNAUTHORIZED'
398
                ];
399
 
400
 
401
            } else {
402
                $response = [
403
                    'success' => false,
404
                    'data' => 'ERROR_FEED_NOT_FOUND'
405
                ];
406
            }
407
 
408
            return new JsonModel($response);
409
 
410
        } else {
411
            $response = [
412
                'success' => false,
413
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
414
            ];
415
        }
416
 
417
        return new JsonModel($response);
418
    }
419
 
420
    public function addAction()
421
    {
422
        $request = $this->getRequest();
423
        if($request->isPost()) {
424
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
425
            $dataPost['company_id'] = $this->params()->fromRoute('company_id');
426
            $dataPost['group_id'] = $this->params()->fromRoute('group_id');
7210 nelberth 427
 
7190 nelberth 428
            $response = $this->postOrShareFeed($dataPost);
429
 
430
 
431
            return new JsonModel($response);
432
 
433
        } else {
434
            $response = [
435
                'success' => false,
436
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
437
            ];
438
        }
439
 
440
        return new JsonModel($response);
441
    }
442
 
443
    public function postOrShareFeed($dataPost)
444
    {
445
        $currentUserPlugin = $this->plugin('currentUserPlugin');
446
        $currentUser = $currentUserPlugin->getUser();
447
 
448
        $companyId  = empty($dataPost['company_id']) ? '' : $dataPost['company_id'];
449
        $groupId    = empty($dataPost['group_id']) ? '' : $dataPost['group_id'];
450
 
451
 
452
        if($groupId || $companyId) {
453
            $form = new  CreateGroupCompanyForm($this->adapter);
454
        } else {
455
            $form = new  CreateForm($this->adapter);
456
        }
457
        $form->setData($dataPost);
458
        if($form->isValid()) {
459
 
460
 
461
 
462
 
463
            $hydrator = new ObjectPropertyHydrator();
464
            $feed = new Feed();
465
            $hydrator->hydrate($dataPost, $feed);
466
 
467
            $company = null;
468
            $group = null;
469
 
470
            if($companyId) {
471
                $companyMapper = CompanyMapper::getInstance($this->adapter);
472
                $company = $companyMapper->fetchOneByUuid($companyId);
473
 
474
 
475
                if(!$company) {
476
                    return [
477
                        'success'   => false,
478
                        'data'   => 'ERROR_COMPANY_NOT_FOUND'
479
                    ];
480
                }
481
 
482
                if($company->status != Company::STATUS_ACTIVE) {
483
                    return [
484
                        'success'   => false,
485
                        'data'   => 'ERROR_COMPANY_IS_NOT_ACTIVE'
486
                    ];
487
                }
488
 
489
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
490
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
491
 
492
                //print_r($companyUser); exit;
493
 
494
 
495
                if(!$companyUser || $companyUser->status != CompanyUser::STATUS_ACCEPTED) {
496
                    return [
497
                        'success'   => false,
498
                        'data'   => 'ERROR_UNAUTHORIZED'
499
                    ];
500
                }
501
 
502
            }
503
 
504
            if($groupId) {
505
                $groupMapper = GroupMapper::getInstance($this->adapter);
506
                $group = $groupMapper->fetchOneByUuid($groupId);
507
 
508
                if(!$group) {
509
                    return [
510
                        'success'   => false,
511
                        'data'   => 'ERROR_GROUP_NOT_FOUND'
512
                    ];
513
                }
514
 
515
                if($group->status != Group::STATUS_ACTIVE) {
516
                    return [
517
                        'success'   => false,
518
                        'data'   => 'ERROR_GROUP_IS_NOT_ACTIVE'
519
                    ];
520
                }
521
 
522
                $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
523
                $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
524
                if(!$groupMember || !in_array($groupMember->status, [GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN])) {
525
                    return [
526
                        'success'   => false,
527
                        'data'   => 'ERROR_UNAUTHORIZED'
528
                    ];
529
                }
530
            }
531
 
532
            $feed->company_id   = $company ? $company->id : null;
533
            $feed->group_id     = $group ? $group->id : null;
534
            $feed->user_id      = $currentUser->id;
535
 
536
            if($companyId) {
537
                $feed->type = Feed::TYPE_COMPANY;
538
            } else if ($groupId) {
539
                $feed->type = Feed::TYPE_GROUP;
540
            } else {
541
                $feed->type = Feed::TYPE_UPDATE;
542
            }
543
 
544
            $posted_or_shared   = $dataPost['posted_or_shared'];
545
            if($posted_or_shared != Feed::POSTED && $posted_or_shared != Feed::SHARED) {
546
                return [
547
                    'success'   => false,
548
                    'data'      => 'ERROR_SUPPLY_VALID_SHARING_STATUS'
549
                ];
550
            }
551
            $feed->posted_or_shared = $posted_or_shared;
552
            $feedMapper = FeedMapper::getInstance($this->adapter);
553
 
554
            $shared_with = isset($dataPost['shared_with']) ? $dataPost['shared_with'] : Feed::SHARE_WITH_PUBLIC;
555
            if ($shared_with != Feed::SHARE_WITH_PUBLIC && $shared_with != Feed::SHARE_WITH_CONNECTIONS) {
556
                return [
557
                    'status' => false,
558
                    'error' => 'ERROR_SUPPLY_VALID_SHARING_WITH_TYPE',
559
                ];
560
            }
561
 
562
            $feed->shared_with = $shared_with;
563
            if(Feed::SHARED == $feed->posted_or_shared) {
564
                $shared_feed_id     = empty($dataPost['shared_feed_id']) ? 0 : $dataPost['shared_feed_id'];
565
 
566
 
567
                $sharedFeed = $feedMapper->fetchOne($shared_feed_id);
568
                if(!$sharedFeed) {
569
                    return [
570
                        'status' => false,
571
                        'error' => 'ERROR_POST_SHARE',
572
                    ];
573
 
574
                }
575
 
576
                $feed->shared_feed_id       = $sharedFeed->id;
577
                $feed->shared_company_id    = $sharedFeed->shared_company_id;
578
                $feed->shared_group_id      = $sharedFeed->shared_group_id;
579
                $feed->shared_job_id        = $sharedFeed->shared_job_id;
580
            } else {
581
                $sharedFeed = null;
582
            }
583
 
584
            $feed->status = Feed::STATUS_PUBLISHED;
585
            $feed->total_comments    = 0;
586
            $feed->total_shared     = 0;
587
 
588
 
589
            $files = $this->getRequest()->getFiles()->toArray();
590
            $file_type = '';
591
 
592
            $encoding = $this->params()->fromRoute('encoding');
593
            if($encoding == 'base64') {
594
 
595
 
596
                $fileBase64Name = $this->params()->fromPost('file_base64_name');
597
                $fileBase64Content = $this->params()->fromPost('file_base64_content');
598
 
599
                if($fileBase64Name && $fileBase64Content) {
600
 
601
                    try {
602
                        $fileBase64Content = base64_decode($fileBase64Content);
603
                        if($fileBase64Content) {
604
                            $feed_filename      = $this->normalizeString($fileBase64Name);
605
                            $feed_tmp_filename = 'data' . DIRECTORY_SEPARATOR . 'tmp';
606
                            if(!file_exists($feed_tmp_filename)) {
607
                                mkdir($feed_tmp_filename, 0755, true);
608
                            }
609
 
610
 
611
 
612
                            $feed_tmp_filename = 'data' . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . $feed_filename;
613
                            file_put_contents($feed_tmp_filename, $fileBase64Content);
614
 
615
 
616
 
617
                            $mime_type = mime_content_type($feed_tmp_filename);
618
                            //echo '$mime_type = '. $mime_type; exit;
619
 
620
 
621
                            if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
622
                                $file_type = Feed::FILE_TYPE_IMAGE;
623
                            } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
624
                                $file_type = Feed::FILE_TYPE_VIDEO;
625
                            } else if($mime_type == 'application/pdf') {
626
                                $file_type = Feed::FILE_TYPE_DOCUMENT;
627
                            }
628
 
629
                        }
630
                    } catch(\Exception $e) {
631
 
632
                    }
633
                }
634
 
635
            } else {
636
 
637
                if(isset($files['file']) && empty($files['file']['error'])) {
638
                    $feed_tmp_filename  = $files['file']['tmp_name'];
639
                    $feed_filename      = $this->normalizeString($files['file']['name']);
640
 
641
                    $mime_type = mime_content_type($feed_tmp_filename);
642
 
643
 
644
                    if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
645
                        $file_type = Feed::FILE_TYPE_IMAGE;
646
                    } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
647
                        $file_type = Feed::FILE_TYPE_VIDEO;
648
                    } else if($mime_type == 'application/pdf') {
649
                        $file_type = Feed::FILE_TYPE_DOCUMENT;
650
                    }
651
                }
652
            }
653
 
654
 
655
            $result = $feedMapper->insert($feed);
656
            if($result) {
657
 
658
                if($sharedFeed && $sharedFeed->type == Feed::TYPE_UPDATE) {
659
 
660
 
661
                    $userMapper = UserMapper::getInstance($this->adapter);
662
                    $ownerFeed = $userMapper->fetchOne($sharedFeed->user_id);
663
 
664
                    $notification = new Notification();
665
                    $notification->type     = Notification::TYPE_SHARE_MY_FEED;
666
                    $notification->read     = Notification::NO;
667
                    $notification->user_id  = $ownerFeed->id;
668
                    $notification->feed_id = $feed->id;
669
                    $notification->message  = 'LABEL_SHARE_MY_FEED';
670
                    $notification->url      = $this->url()->fromRoute('dashboard',['feed' => $sharedFeed->uuid]);
671
 
672
                    $notificationMapper = NotificationMapper::getInstance($this->adapter);
673
                    $notificationMapper->insert($notification);
674
 
675
                    $userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);
676
                    $userNotification = $userNotificationMapper->fetchOne($ownerFeed->id);
677
 
678
                    if($userNotification && $userNotification->share_my_feed)
679
                    {
680
                        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
681
                        $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_SHARE_MY_FEED);
682
 
683
                        if($emailTemplate) {
684
                            $arrayCont = [
685
                                'firstname'             => $currentUser->first_name,
686
                                'lastname'              => $currentUser->last_name,
687
                                'other_user_firstname'  => $ownerFeed->first_name,
688
                                'other_user_lastname'   => $ownerFeed->last_name,
689
                                'company_name'          => '',
690
                                'group_name'            => '',
691
                                'content'               => '',
692
                                'code'                  => '',
693
                                'link'                  => $this->url()->fromRoute('dashboard',['feed' => $feed->uuid], ['force_canonical' => true])
694
                            ];
695
 
696
                            $email = new QueueEmail($this->adapter);
697
                            $email->processEmailTemplate($emailTemplate, $arrayCont, $ownerFeed->email, trim($ownerFeed->first_name . ' ' . $ownerFeed->last_name));
698
                        }
699
                    }
700
                }
701
 
702
 
703
                $feed = $feedMapper->fetchOne($feed->id);
704
 
705
                if( $file_type == Feed::FILE_TYPE_DOCUMENT) {
706
                    try {
707
                        $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
708
                        if(!file_exists($target_path)) {
709
                            mkdir($target_path, 0755);
710
                        }
711
 
712
                        $full_filename = $target_path  . DIRECTORY_SEPARATOR .$feed_filename;
713
 
714
                        if($encoding == 'base64') {
715
                            $resultMoveOrRename = rename($feed_tmp_filename , $full_filename);
716
                        } else {
717
                            $resultMoveOrRename = move_uploaded_file($feed_tmp_filename , $full_filename);
718
                        }
719
 
720
                        if($resultMoveOrRename) {
721
 
722
                            $feed->file_type = $file_type;
723
                            $feed->file_name = basename($feed_filename);
724
                            $feedMapper->update($feed);
725
                        } else {
726
                            error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
727
                        }
728
                    } catch(\Throwable $e) {
729
                        error_log($e->getTraceAsString());
730
                    }
731
                }
732
                if( $file_type == Feed::FILE_TYPE_IMAGE) {
733
                    try {
734
                        $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
735
                        if(!file_exists($target_path)) {
736
                            mkdir($target_path, 0755);
737
                        }
738
 
739
                        list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
740
 
741
                        $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
742
                        $crop_to_dimensions = false;
743
                        if(Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions )) {
744
                            $feed->file_type = $file_type;
745
                            $feed->file_name = basename($feed_filename);
746
                            $feedMapper->update($feed);
747
                        }
748
                    } catch(\Throwable $e) {
749
                        error_log($e->getTraceAsString());
750
                    }
751
                }
752
                if( $file_type == Feed::FILE_TYPE_VIDEO) {
753
                    try {
754
                        $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
755
                        if(!file_exists($target_path)) {
756
                            mkdir($target_path, 0755);
757
                        }
758
 
759
                        $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
760
 
761
                        if($encoding == 'base64') {
762
                            $resultMoveOrRename = rename($feed_tmp_filename , $full_filename);
763
                        } else {
764
                            $resultMoveOrRename = move_uploaded_file($feed_tmp_filename , $full_filename);
765
                        }
766
 
767
                        if($resultMoveOrRename) {
768
 
769
                            $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
770
                           // $getFromSecound = 2;
771
 
772
                            //extracción del cover
773
                            $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
774
                            $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
775
                           // $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
776
                            $cmd            = "/usr/bin/ffmpeg -i $full_filename -frames:v 1 -s $size $generateFile";
777
 
778
 
779
                            exec($cmd);
780
 
781
 
782
                            $feed->file_type = $file_type;
783
                            $feed->file_name = basename($feed_filename);
784
                            $feed->file_image_preview = basename($generateFile);
785
                            $feedMapper->update($feed);
786
 
787
                            $videoConvert = new VideoConvert();
788
                            $videoConvert->filename = $full_filename;
789
                            $videoConvert->type = VideoConvert::TYPE_FEED;
790
 
791
                            $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
792
                            $videoConvertMapper->insert($videoConvert);
793
                        } else {
794
                            error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
795
                        }
796
                    } catch(\Throwable $e) {
797
                        error_log($e->getTraceAsString());
798
                    }
799
                }
800
 
801
 
802
                return [
803
                    'success'   => true,
804
                    'data'   => $this->renderFeed($feed->id)
805
                ];
806
           } else {
807
                return [
808
                    'success'   => false,
809
                    'data'   => $feedMapper->getError()
810
                ];
811
           }
812
        } else {
813
            $messages = [];
814
            $form_messages = (array) $form->getMessages();
815
            foreach($form_messages  as $fieldname => $field_messages)
816
            {
817
                $messages[$fieldname] = array_values($field_messages);
818
            }
819
 
820
            return [
821
                'success'   => false,
822
               'data'   => $messages
823
            ];
824
        }
825
    }
826
 
827
    public function likeAction()
828
    {
829
        $id = $this->params()->fromRoute('id');
830
 
831
        $request = $this->getRequest();
832
        if($request->isPost()) {
833
            $currentUserPlugin = $this->plugin('currentUserPlugin');
834
            $currentUser = $currentUserPlugin->getUser();
835
 
836
            $feedMapper = FeedMapper::getInstance($this->adapter);
837
            $feed = $feedMapper->fetchOneByUuid($id);
838
            if(!$feed) {
839
                $response = [
840
                    'success' => false,
841
                    'data' => 'ERROR_POST_NOT_FOUND'
842
                ];
843
                return new JsonModel($response);
844
            }
845
 
846
            $likeMapper = LikeMapper::getInstance($this->adapter);
847
            $like = $likeMapper->fetchOneByFeedIdAndUserId($feed->id, $currentUser->id);
848
 
849
            if($like) {
850
                $response = [
851
                    'success' => false,
852
                    'data' => 'ERROR_DUPLICATE_ACTION'
853
                ];
854
                return new JsonModel($response);
855
            }
856
 
857
            $like = new Like();
858
            $like->user_id = $currentUser->id;
859
            $like->feed_id = $feed->id;
860
 
861
            if($likeMapper->insert($like))
862
            {
863
 
864
                $likes = $likeMapper->fetchCountLikeByFeedId($feed->id);
865
 
866
 
867
 
868
                if($feed->type == Feed::TYPE_UPDATE) {
869
 
870
 
871
                    $userMapper = UserMapper::getInstance($this->adapter);
872
                    $ownerFeed = $userMapper->fetchOne($feed->user_id);
873
 
874
                    $notification = new Notification();
875
                    $notification->type     = Notification::TYPE_LIKE_MY_FEED;
876
                    $notification->read     = Notification::NO;
877
                    $notification->user_id  = $feed->user_id;
878
                    $notification->feed_id  = $feed->id;
879
                    $notification->message  = 'LABEL_LIKE_MY_FEED';
880
                    $notification->url      = $this->url()->fromRoute('dashboard',['feed' => $feed->uuid]);
881
 
882
                    $notificationMapper = NotificationMapper::getInstance($this->adapter);
883
                    $notificationMapper->insert($notification);
884
 
885
                    $userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);
886
                    $userNotification = $userNotificationMapper->fetchOne($ownerFeed->id);
887
 
888
                    if($userNotification && $userNotification->like_my_feed)
889
                    {
890
                        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
891
                        $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_LIKE_MY_FEED);
892
 
893
                        if($emailTemplate) {
894
                            $arrayCont = [
895
                                'firstname'             => $currentUser->first_name,
896
                                'lastname'              => $currentUser->last_name,
897
                                'other_user_firstname'  => $ownerFeed->first_name,
898
                                'other_user_lastname'   => $ownerFeed->last_name,
899
                                'company_name'          => '',
900
                                'group_name'            => '',
901
                                'content'               => '',
902
                                'code'                  => '',
903
                                'link'                  => $this->url()->fromRoute('dashboard',['feed' => $feed->uuid], ['force_canonical' => true])
904
                            ];
905
 
906
                            $email = new QueueEmail($this->adapter);
907
                            $email->processEmailTemplate($emailTemplate, $arrayCont, $ownerFeed->email, trim($ownerFeed->first_name . ' ' . $ownerFeed->last_name));
908
                        }
909
                    }
910
 
911
                }
912
 
913
 
914
 
915
 
916
 
917
 
918
 
919
 
920
                $response = [
921
                    'success' => true,
922
                    'data' => [
923
                        'likes' => $likes
924
                    ]
925
                ];
926
            } else {
927
                $response = [
928
                    'success' => false,
929
                    'data' => $likeMapper->getError()
930
                ];
931
            }
932
            return new JsonModel($response);
933
 
934
        }
935
 
936
        $response = [
937
            'success' => false,
938
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
939
        ];
940
        return new JsonModel($response);
941
    }
942
 
943
    public function unlikeAction()
944
    {
945
        $id = $this->params()->fromRoute('id');
946
 
947
        $request = $this->getRequest();
948
        if($request->isPost()) {
949
            $currentUserPlugin = $this->plugin('currentUserPlugin');
950
            $currentUser = $currentUserPlugin->getUser();
951
 
952
            $feedMapper = FeedMapper::getInstance($this->adapter);
953
            $feed = $feedMapper->fetchOneByUuid($id);
954
            if(!$feed) {
955
                $response = [
956
                    'success' => false,
957
                    'data' => 'ERROR_POST_NOT_FOUND'
958
                ];
959
                return new JsonModel($response);
960
            }
961
 
962
            $likeMapper = LikeMapper::getInstance($this->adapter);
963
            $like = $likeMapper->fetchOneByFeedIdAndUserId($feed->id, $currentUser->id);
964
 
965
            if(!$like) {
966
                $response = [
967
                    'success' => false,
968
                    'data' => 'ERROR_DUPLICATE_ACTION'
969
                ];
970
                return new JsonModel($response);
971
            }
972
 
973
            if($likeMapper->deleteByFeedIdAndUserId($feed->id, $currentUser->id))
974
            {
975
                $likes = $likeMapper->fetchCountLikeByFeedId($feed->id);
976
 
977
 
978
                $response = [
979
                    'success' => true,
980
                    'data' => [
981
                        'likes' => $likes
982
                    ]
983
                ];
984
            } else {
985
                $response = [
986
                    'success' => false,
987
                    'data' => $likeMapper->getError()
988
                ];
989
            }
990
            return new JsonModel($response);
991
 
992
        }
993
 
994
        $response = [
995
            'success' => false,
996
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
997
        ];
998
        return new JsonModel($response);
999
    }
1000
 
1001
    public function timelineAction()
1002
    {
1003
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1004
        $currentUser = $currentUserPlugin->getUser();
1005
 
1006
 
1007
        $type   = $this->params()->fromRoute('type');
1008
        if($type == 'user') {
1009
            $id = $currentUser->id;
1010
        } else {
1011
            $id     = $this->params()->fromRoute('id');
1012
        }
1013
 
7193 nelberth 1014
 
7192 nelberth 1015
 
1016
 
7193 nelberth 1017
 
7190 nelberth 1018
 
1019
        $request = $this->getRequest();
1020
        if($request->isGet()) {
7194 nelberth 1021
 
7190 nelberth 1022
            $page = (int) $this->params()->fromQuery('page');
7196 nelberth 1023
 
7190 nelberth 1024
            if($type == 'user') {
1025
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
1026
                $records = $connectionMapper->fetchAllConnectionsByUser($id);
7195 nelberth 1027
 
7190 nelberth 1028
                $connectionIds = [0];
1029
                foreach($records as $record)
1030
                {
1031
                    if($currentUser->id == $record->request_from) {
1032
                        array_push($connectionIds, $record->request_to);
1033
                    } else {
1034
                        array_push($connectionIds, $record->request_from);
1035
                    }
1036
                }
1037
                array_push($connectionIds, 1);
1038
 
1039
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
1040
                $records = $companyFollowerMapper->fetchAllByFollowerId($currentUser->id);
1041
 
1042
                $companyIds = [0];
1043
                foreach($records as $record)
1044
                {
1045
                    if(!in_array($record->company_id, $companyIds)) {
1046
                        array_push($companyIds, $record->company_id);
1047
                    }
1048
                }
1049
 
1050
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1051
                $companyUsers = $companyUserMapper->fetchAllByUserId($currentUser->id);
1052
 
1053
                foreach($companyUsers as $companyUser)
1054
                {
1055
                    if($companyUser->status == CompanyUser::STATUS_ACCEPTED) {
1056
                        if(!in_array($companyUser->company_id, $companyIds)) {
1057
                            array_push($companyIds, $companyUser->company_id);
1058
                        }
1059
                    }
1060
                }
1061
 
1062
 
1063
                $queryMapper = QueryMapper::getInstance($this->adapter);
1064
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
1065
                $select->columns(['id']);
1066
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED)
1067
                    ->AND->NEST
1068
                    ->OR->NEST->equalTo('user_id',$id)->and->equalTo('type', Feed::TYPE_UPDATE)->UNNEST
1069
                    ->OR->NEST->and->equalTo('type', Feed::TYPE_UPDATE)->and->equalTo('shared_with', Feed::SHARE_WITH_PUBLIC)->UNNEST
1070
                    ->OR->NEST->in('user_id', $connectionIds)->and->equalTo('type', Feed::TYPE_UPDATE)->and->equalTo('shared_with', Feed::SHARE_WITH_CONNECTIONS)->UNNEST
1071
                    ->OR->NEST->or->in('company_id', $companyIds)->and->equalTo('type', Feed::TYPE_COMPANY)->UNNEST
1072
                    ->UNNEST;
1073
                $select->order('added_on desc');
1074
 
1075
 
1076
            }
1077
            if($type == 'company') {
1078
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1079
                $company = $companyMapper->fetchOneByUuid($id);
1080
 
1081
                if(!$company || $company->status != Company::STATUS_ACTIVE) {
1082
                    $id = 0;
1083
                } else {
1084
                    $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
1085
                    $companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
1086
                    if($companyFollower) {
1087
                        $id = $company->id;
1088
                    } else {
1089
 
1090
                        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1091
                        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
1092
 
1093
                        if(!$companyUser || $companyUser->status != CompanyUser::STATUS_ACCEPTED) {
1094
                            $id = 0;
1095
                        } else {
1096
                            $id = $company->id;
1097
                        }
1098
 
1099
                    }
1100
 
1101
                }
1102
 
1103
 
1104
                $queryMapper = QueryMapper::getInstance($this->adapter);
1105
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
1106
                $select->columns(['id']);
1107
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
1108
                $select->where->equalTo('company_id',$id);
1109
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
1110
                $select->order('added_on desc');
1111
            }
1112
            if($type == 'group') {
7197 nelberth 1113
 
7190 nelberth 1114
                $groupMapper = GroupMapper::getInstance($this->adapter);
1115
                $group = $groupMapper->fetchOneByUuid($id);
1116
                if(!$group || $group->status != Group::STATUS_ACTIVE) {
1117
                    $id = 0;
1118
                } else {
1119
                    $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
1120
                    $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
1121
                    if($groupMember) {
1122
                        $id = $groupMember->status == GroupMember::STATUS_ACCEPTED ? $group->id : 0;
1123
 
1124
                    } else {
1125
                        $id = 0;
1126
                    }
1127
                }
7198 nelberth 1128
 
7190 nelberth 1129
                $queryMapper = QueryMapper::getInstance($this->adapter);
1130
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
1131
                $select->columns(['id']);
1132
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
1133
                $select->where->equalTo('group_id',$id);
1134
                $select->where->and->equalTo('type', Feed::TYPE_GROUP);
1135
                $select->order('added_on desc');
7199 nelberth 1136
 
7190 nelberth 1137
            }
1138
 
1139
            $dbSelect = new DbSelect($select, $this->adapter);
1140
            $paginator = new Paginator($dbSelect);
1141
            $paginator->setCurrentPageNumber($page ? $page : 1);
1142
            $paginator->setItemCountPerPage(10);
7200 nelberth 1143
 
7190 nelberth 1144
            $items = [];
1145
            $feeds = $paginator->getCurrentItems();
7202 nelberth 1146
 
7190 nelberth 1147
            foreach($feeds as $feed)
1148
            {
1149
                $items[] = $this->renderFeed($feed->id);
1150
            }
7201 nelberth 1151
 
7190 nelberth 1152
            $response = [
1153
                'success' => true,
1154
                'data' => [
1155
                    'total' => [
1156
                        'count' => $paginator->getTotalItemCount(),
1157
                        'pages' => $paginator->getPages()->pageCount,
1158
                    ],
1159
                    'current' => [
1160
                        'items'    => $items,
1161
                        'page'     => $paginator->getCurrentPageNumber(),
1162
                        'count'    => $paginator->getCurrentItemCount(),
1163
                    ]
1164
                ]
1165
            ];
1166
 
1167
            return new JsonModel($response);
1168
        }
1169
 
1170
        $response = [
1171
            'success' => false,
1172
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1173
        ];
1174
 
1175
 
1176
        return new JsonModel($response);
1177
    }
1178
 
1179
    /**
1180
     *
1181
     * @param string $str
1182
     * @return string
1183
     */
1184
    private function normalizeString ($str = '')
1185
    {
1186
        $basename  = substr($str, 0, strrpos($str, '.'));
1187
        $basename  = str_replace('.', '-', $basename);
1188
 
1189
        $extension  = substr($str, strrpos($str, '.'));
1190
 
1191
        $str = $basename . $extension;
1192
 
1193
        $str = strip_tags($str);
1194
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
1195
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
1196
        $str = strtolower($str);
1197
        $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
1198
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
1199
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
1200
        $str = str_replace(' ', '-', $str);
1201
        $str = rawurlencode($str);
1202
        $str = str_replace('%', '-', $str);
1203
        return trim(strtolower($str));
1204
    }
1205
 
1206
 
1207
 
1208
    /**
1209
     *
1210
     * @param int $feed_id
1211
     * @return array
1212
     */
1213
    private function renderFeed($feed_id)
1214
    {
7204 nelberth 1215
 
7190 nelberth 1216
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1217
        $currentUser = $currentUserPlugin->getUser();
1218
 
1219
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
1220
 
1221
        $userMapper = UserMapper::getInstance($this->adapter);
1222
        $feedMapper = FeedMapper::getInstance($this->adapter);
1223
        $feed = $feedMapper->fetchOne($feed_id);
1224
 
1225
 
1226
        $likeMapper = LikeMapper::getInstance($this->adapter);
1227
        $like = $likeMapper->fetchOneByFeedIdAndUserId($feed->id, $currentUser->id);
1228
        $likes = $likeMapper->fetchCountLikeByFeedId($feed->id);
1229
 
1230
        $params = [
1231
            'id' => $feed->uuid
1232
        ];
1233
        if($feed->company_id) {
1234
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1235
            $company = $companyMapper->fetchOne($feed->company_id);
1236
 
1237
            $params['company_id'] = $company->uuid;
1238
        } else {
1239
            $company = null;
1240
        }
1241
        if($feed->group_id) {
1242
            $groupMapper = GroupMapper::getInstance($this->adapter);
1243
            $group = $groupMapper->fetchOne($feed->group_id);
1244
 
1245
            $params['group_id'] = $group->uuid;
1246
        } else {
1247
            $group = null;
1248
        }
1249
 
1250
        $item = [
1251
            'feed_unique' => uniqid(),
1252
            'feed_uuid' => $feed->uuid,
1253
            'feed_is_liked' => $like ? true : false,
1254
            'feed_like_url' => $this->url()->fromRoute('feed/like',  $params),
1255
            'feed_unlike_url' => $this->url()->fromRoute('feed/unlike',  $params),
1256
            'feed_share_url' => $this->url()->fromRoute('feed/share',  $params),
1257
            'feed_delete_url' =>  '',
1258
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
1259
            'feed_likes' =>  $likes,
1260
        ];
1261
 
1262
        if($feed->posted_or_shared == Feed::POSTED) {
1263
 
1264
 
1265
            if($feed->type == Feed::TYPE_COMPANY)
1266
            {
1267
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1268
                $company = $companyMapper->fetchOne($feed->company_id);
1269
                $item['owner_url'] = $this->url()->fromRoute('company/view', ['id' => $company->uuid]);
1270
                $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]);
1271
                $item['owner_name'] = $company->name;
1272
                /*
1273
 
1274
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1275
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
1276
 
1277
 
1278
                if( $companyUser && $acl->isAllowed( $currentUser->usertype_id, 'my-company/feed' ) ) {
1279
                    $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1280
                }
1281
                */
1282
 
1283
 
1284
            } else if($feed->type == Feed::TYPE_GROUP)
1285
            {
1286
                $groupMapper = GroupMapper::getInstance($this->adapter);
1287
                $group = $groupMapper->fetchOne($feed->group_id);
1288
                $item['owner_url'] = '';
1289
                $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $group->uuid, 'type' => 'group', 'filename' => $group->image]);
1290
                $item['owner_name'] = $group->name;
1291
 
1292
                if($group->user_id == $currentUser->id) {
1293
                    $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1294
                }
1295
            } else {
1296
                $userMapper = UserMapper::getInstance($this->adapter);
1297
                $user = $userMapper->fetchOne($feed->user_id);
1298
 
7203 nelberth 1299
                $item['owner_url'] = $this->url()->fromRoute('profile', ['id' => $user->uuid]);
7190 nelberth 1300
                $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
1301
                $item['owner_name'] = $user->first_name . ' ' . $user->last_name;
1302
 
1303
                if($feed->user_id == $currentUser->id) {
1304
                    $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1305
                }
1306
 
1307
            }
1308
        } else {
1309
            if($feed->user_id == $currentUser->id) {
1310
                $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1311
            }
1312
        }
1313
 
1314
        $userMapper = UserMapper::getInstance($this->adapter);
1315
        $user = $userMapper->fetchOne($feed->user_id);
1316
 
1317
        if($feed->posted_or_shared == Feed::SHARED) {
7203 nelberth 1318
            $item['owner_url'] = $this->url()->fromRoute('profile', ['id' => $user->uuid]);
7190 nelberth 1319
            $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
1320
            $item['owner_name'] = $user->first_name . ' ' . $user->last_name;
1321
        }
1322
 
1323
        $item['owner_description'] = $feed->description;
1324
 
1325
        $item['owner_shared'] = $feed->total_shared;
1326
        $item['owner_comments'] = $feed->total_comments;
1327
 
1328
 
1329
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $feed->added_on);
1330
        $item['owner_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
1331
 
1332
        if($feed->file_type == Feed::FILE_TYPE_IMAGE) {
1333
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1334
 
1335
        }
1336
        if($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1337
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1338
        }
1339
        if($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1340
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
1341
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1342
        }
1343
 
1344
        if($feed->posted_or_shared == Feed::SHARED) {
1345
 
1346
 
1347
            $sharedFeed = $feedMapper->fetchOne($feed->shared_feed_id);
1348
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $sharedFeed->added_on);
1349
 
1350
 
1351
            $item['shared_description'] = $sharedFeed->description;
1352
            $item['shared_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
1353
 
1354
            if($sharedFeed->file_type == Feed::FILE_TYPE_IMAGE) {
1355
                $item['shared_file_image'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_name]);
1356
 
1357
            }
1358
            if($sharedFeed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1359
                $item['shared_file_document'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_name]);
1360
            }
1361
            if($sharedFeed->file_type == Feed::FILE_TYPE_VIDEO) {
1362
                $item['shared_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_image_preview]);
1363
                $item['shared_file_video'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_name]);
1364
            }
1365
 
1366
            $item['shared_content_type'] = $sharedFeed->file_type ? $sharedFeed->file_type : '';
1367
 
1368
            if($feed->company_id)
1369
            {
1370
 
1371
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1372
                $sharedCompany = $companyMapper->fetchOne($feed->company_id);
1373
                $item['shared_url'] = $this->url()->fromRoute('company/view', ['id' => $sharedCompany->uuid]);
1374
                $item['shared_image'] = $this->url()->fromRoute('storage', ['code' => $sharedCompany->uuid, 'type' => 'company', 'filename' => $sharedCompany->image]);
1375
                $item['shared_name'] = $sharedCompany->name;
1376
            } else if($feed->group_id)
1377
            {
1378
                $groupMapper = GroupMapper::getInstance($this->adapter);
1379
                $sharedGroup = $groupMapper->fetchOne($feed->group_id);
1380
                $item['shared_url'] = '';
1381
                $item['shared_image'] = $this->url()->fromRoute('storage', ['code' => $sharedGroup->uuid, 'type' => 'group', 'filename' =>  $sharedGroup->image]);
1382
                $item['shared_name'] = $sharedGroup->name;
1383
            } else {
1384
 
1385
                $sharedUser = $userMapper->fetchOne($sharedFeed->user_id);
7203 nelberth 1386
                $item['shared_url'] = $this->url()->fromRoute('profile', ['id' => $sharedUser->uuid]);
7190 nelberth 1387
                $item['shared_image'] = $this->url()->fromRoute('storage', ['code' => $sharedUser->uuid, 'type' => 'user', 'filename' => $sharedUser->image]);
1388
                $item['shared_name'] = $sharedUser->first_name . ' ' . $sharedUser->last_name;
1389
            }
1390
 
1391
        }
1392
 
1393
        $commentMapper = CommentMapper::getInstance($this->adapter);
1394
        $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
1395
 
1396
        $comments = [];
1397
        foreach($records as $record)
1398
        {
1399
            $user = $userMapper->fetchOne($record->user_id);
1400
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1401
 
1402
            if($record->user_id == $currentUser->id) {
1403
                $link_delete = $this->url()->fromRoute('feed/comment/delete',['id' => $feed->uuid, 'comment' => $record->uuid]);
1404
            } else {
1405
                $link_delete = '';
1406
            }
1407
 
1408
            array_push($comments, [
1409
                'unique' => uniqid(),
7203 nelberth 1410
                'user_url' => $this->url()->fromRoute('profile', ['id' => $user->uuid]),
7190 nelberth 1411
                'user_name' => $user->first_name . ' ' . $user->last_name,
1412
                'user_image' => $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]),
1413
                'time_elapsed' => Functions::timeElapsedString($dt->getTimestamp()),
1414
                'comment' => $record->comment,
1415
                'link_delete' => $link_delete
1416
            ]);
1417
        }
1418
        $item['comment_add_url'] = $this->url()->fromRoute('feed/comment', ['id' => $feed->uuid]);
1419
        $item['comments'] = $comments;
1420
 
1421
        return $item;
1422
    }
1423
 
1424
    /**
1425
     *
1426
     * @param int $comment_id
1427
     * @return array
1428
     */
1429
    private function renderComment($comment_id)
1430
    {
1431
        $item = [];
1432
 
1433
        $commentMapper = CommentMapper::getInstance($this->adapter);
1434
        $record = $commentMapper->fetchOne($comment_id);
1435
 
1436
        $feedMapper = FeedMapper::getInstance($this->adapter);
1437
        $feed = $feedMapper->fetchOne($record->feed_id);
1438
 
1439
        if($record) {
1440
            $userMapper = UserMapper::getInstance($this->adapter);
1441
 
1442
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1443
 
1444
 
1445
            $user = $userMapper->fetchOne($record->user_id);
1446
 
1447
            $item['unique'] = uniqid();
1448
            $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1449
            $item['user_url'] = $this->url()->fromRoute('profile', ['id' => $user->uuid]);
1450
            $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1451
            $item['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1452
            $item['comment'] = $record->comment;
1453
            $item['link_delete'] = $this->url()->fromRoute('feed/comment/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
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
 
1490
    /**
1491
     *
1492
     * @param Feed $feed
1493
     * @return array
1494
     */
1495
    private function deleteFeed($feed)
1496
    {
1497
        $feedMapper = FeedMapper::getInstance($this->adapter);
1498
        $feed->status = Feed::STATUS_DELETED;
1499
        if($feedMapper->update($feed)) {
1500
            $response = [
1501
                'success' => true,
1502
                'data' => 'LABEL_FEED_WAS_DELETED'
1503
            ];
1504
 
1505
        } else {
1506
            $response = [
1507
                'success' => false,
1508
                'data' => $feedMapper->getError()
1509
            ];
1510
        }
1511
 
1512
 
1513
        /*$commentMapper = CommentMapper::getInstance($this->adapter);
1514
        if($commentMapper->deleteAllByFeedId($feed->id)) {
1515
            if($feedMapper->delete($feed->id)) {
1516
                $target_path = $this->config['leaderslinked.fullpath.feed'] . DIRECTORY_SEPARATOR . $feed->id;
1517
                if(file_exists($target_path)) {
1518
                    $this->deletePath($target_path);
1519
                }
1520
 
1521
                $response = [
1522
                    'success' => true,
1523
                    'data' => 'LABEL_FEED_WAS_DELETED'
1524
                ];
1525
 
1526
            } else {
1527
                $response = [
1528
                    'success' => false,
1529
                    'data' => $feedMapper->getError()
1530
                ];
1531
            }
1532
        } else {
1533
            $response = [
1534
                'success' => false,
1535
                'data' => $commentMapper->getError()
1536
            ];
1537
 
1538
        }*/
1539
 
1540
        return $response;
1541
    }
1542
 
1543
 
1544
}