Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 422 | Rev 424 | 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\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 FeedController 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');
427
            $response = $this->postOrShareFeed($dataPost);
428
 
429
 
430
            return new JsonModel($response);
431
 
432
        } else {
433
            $response = [
434
                'success' => false,
435
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
436
            ];
437
        }
438
 
439
        return new JsonModel($response);
440
    }
441
 
442
    public function postOrShareFeed($dataPost)
443
    {
444
        $currentUserPlugin = $this->plugin('currentUserPlugin');
445
        $currentUser = $currentUserPlugin->getUser();
446
 
447
        $companyId  = empty($dataPost['company_id']) ? '' : $dataPost['company_id'];
448
        $groupId    = empty($dataPost['group_id']) ? '' : $dataPost['group_id'];
449
 
450
 
451
        if($groupId || $companyId) {
452
            $form = new  CreateGroupCompanyForm($this->adapter);
453
        } else {
454
            $form = new  CreateForm($this->adapter);
455
        }
456
        $form->setData($dataPost);
457
        if($form->isValid()) {
458
 
412 geraldo 459
 
460
 
1 www 461
 
462
            $hydrator = new ObjectPropertyHydrator();
463
            $feed = new Feed();
464
            $hydrator->hydrate($dataPost, $feed);
465
 
466
            $company = null;
467
            $group = null;
468
 
469
            if($companyId) {
470
                $companyMapper = CompanyMapper::getInstance($this->adapter);
471
                $company = $companyMapper->fetchOneByUuid($companyId);
472
 
473
 
474
                if(!$company) {
475
                    return [
476
                        'success'   => false,
477
                        'data'   => 'ERROR_COMPANY_NOT_FOUND'
478
                    ];
479
                }
480
 
481
                if($company->status != Company::STATUS_ACTIVE) {
482
                    return [
483
                        'success'   => false,
484
                        'data'   => 'ERROR_COMPANY_IS_NOT_ACTIVE'
485
                    ];
486
                }
487
 
488
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
489
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
490
 
491
                //print_r($companyUser); exit;
492
 
493
 
494
                if(!$companyUser || $companyUser->status != CompanyUser::STATUS_ACCEPTED) {
495
                    return [
496
                        'success'   => false,
497
                        'data'   => 'ERROR_UNAUTHORIZED'
498
                    ];
499
                }
500
 
501
            }
502
 
503
            if($groupId) {
504
                $groupMapper = GroupMapper::getInstance($this->adapter);
505
                $group = $groupMapper->fetchOneByUuid($groupId);
506
 
507
                if(!$group) {
508
                    return [
509
                        'success'   => false,
510
                        'data'   => 'ERROR_GROUP_NOT_FOUND'
511
                    ];
512
                }
513
 
514
                if($group->status != Group::STATUS_ACTIVE) {
515
                    return [
516
                        'success'   => false,
517
                        'data'   => 'ERROR_GROUP_IS_NOT_ACTIVE'
518
                    ];
519
                }
520
 
521
                $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
522
                $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
523
                if(!$groupMember || !in_array($groupMember->status, [GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN])) {
524
                    return [
525
                        'success'   => false,
526
                        'data'   => 'ERROR_UNAUTHORIZED'
527
                    ];
528
                }
529
            }
530
 
531
            $feed->company_id   = $company ? $company->id : null;
532
            $feed->group_id     = $group ? $group->id : null;
533
            $feed->user_id      = $currentUser->id;
413 geraldo 534
 
535
            if($companyId) {
536
                $feed->type = Feed::TYPE_COMPANY;
537
            } else if ($groupId) {
538
                $feed->type = Feed::TYPE_GROUP;
539
            } else {
540
                $feed->type = Feed::TYPE_UPDATE;
541
            }
542
 
543
            $posted_or_shared   = $dataPost['posted_or_shared'];
544
            if($posted_or_shared != Feed::POSTED && $posted_or_shared != Feed::SHARED) {
545
                return [
546
                    'success'   => false,
547
                    'data'      => 'ERROR_SUPPLY_VALID_SHARING_STATUS'
548
                ];
549
            }
550
            $feed->posted_or_shared = $posted_or_shared;
551
            $feedMapper = FeedMapper::getInstance($this->adapter);
414 geraldo 552
 
553
            $shared_with = isset($dataPost['shared_with']) ? $dataPost['shared_with'] : Feed::SHARE_WITH_PUBLIC;
554
            if ($shared_with != Feed::SHARE_WITH_PUBLIC && $shared_with != Feed::SHARE_WITH_CONNECTIONS) {
555
                return [
556
                    'status' => false,
557
                    'error' => 'ERROR_SUPPLY_VALID_SHARING_WITH_TYPE',
558
                ];
559
            }
560
 
561
            $feed->shared_with = $shared_with;
562
            if(Feed::SHARED == $feed->posted_or_shared) {
563
                $shared_feed_id     = empty($dataPost['shared_feed_id']) ? 0 : $dataPost['shared_feed_id'];
564
 
565
 
566
                $sharedFeed = $feedMapper->fetchOne($shared_feed_id);
567
                if(!$sharedFeed) {
568
                    return [
569
                        'status' => false,
570
                        'error' => 'ERROR_POST_SHARE',
571
                    ];
572
 
573
                }
574
 
575
                $feed->shared_feed_id       = $sharedFeed->id;
576
                $feed->shared_company_id    = $sharedFeed->shared_company_id;
577
                $feed->shared_group_id      = $sharedFeed->shared_group_id;
578
                $feed->shared_job_id        = $sharedFeed->shared_job_id;
579
            } else {
580
                $sharedFeed = null;
581
            }
582
 
583
            $feed->status = Feed::STATUS_PUBLISHED;
584
            $feed->total_comments    = 0;
585
            $feed->total_shared     = 0;
586
 
1 www 587
 
414 geraldo 588
            $files = $this->getRequest()->getFiles()->toArray();
589
            $file_type = '';
415 geraldo 590
 
591
            $encoding = $this->params()->fromRoute('encoding');
592
            if($encoding == 'base64') {
593
 
594
 
595
                $fileBase64Name = $this->params()->fromPost('file_base64_name');
596
                $fileBase64Content = $this->params()->fromPost('file_base64_content');
597
 
598
                if($fileBase64Name && $fileBase64Content) {
599
 
600
                    try {
601
                        $fileBase64Content = base64_decode($fileBase64Content);
602
                        if($fileBase64Content) {
603
                            $feed_filename      = $this->normalizeString($fileBase64Name);
604
                            $feed_tmp_filename = 'data' . DIRECTORY_SEPARATOR . 'tmp';
605
                            if(!file_exists($feed_tmp_filename)) {
606
                                mkdir($feed_tmp_filename, 0755, true);
607
                            }
608
 
609
 
610
 
611
                            $feed_tmp_filename = 'data' . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . $feed_filename;
612
                            file_put_contents($feed_tmp_filename, $fileBase64Content);
613
 
614
 
615
 
616
                            $mime_type = mime_content_type($feed_tmp_filename);
617
                            //echo '$mime_type = '. $mime_type; exit;
618
 
619
 
620
                            if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
621
                                $file_type = Feed::FILE_TYPE_IMAGE;
622
                            } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
623
                                $file_type = Feed::FILE_TYPE_VIDEO;
624
                            } else if($mime_type == 'application/pdf') {
625
                                $file_type = Feed::FILE_TYPE_DOCUMENT;
626
                            }
627
 
628
                        }
629
                    } catch(\Exception $e) {
630
 
631
                    }
632
                }
633
 
634
            } else {
635
 
636
                if(isset($files['file']) && empty($files['file']['error'])) {
637
                    $feed_tmp_filename  = $files['file']['tmp_name'];
638
                    $feed_filename      = $this->normalizeString($files['file']['name']);
639
 
640
                    $mime_type = mime_content_type($feed_tmp_filename);
641
 
642
 
643
                    if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
644
                        $file_type = Feed::FILE_TYPE_IMAGE;
645
                    } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
646
                        $file_type = Feed::FILE_TYPE_VIDEO;
647
                    } else if($mime_type == 'application/pdf') {
648
                        $file_type = Feed::FILE_TYPE_DOCUMENT;
649
                    }
650
                }
651
            }
422 geraldo 652
            $feed->id=300;
653
            $feed->uuid=time();
423 geraldo 654
            $feed->file_image_preview='text.png';
420 geraldo 655
 
416 geraldo 656
            $result = $feedMapper->insert($feed);
657
            if($result) {
1 www 658
            return [
659
                'success'   => false,
421 geraldo 660
               'datoSave'   => $feed
1 www 661
            ];
662
        }
421 geraldo 663
 
664
        return [
665
            'success'   => false,
666
           'data'   => $feed
667
        ];
416 geraldo 668
        }
1 www 669
    }
670
 
671
    public function likeAction()
672
    {
673
        $id = $this->params()->fromRoute('id');
674
 
675
        $request = $this->getRequest();
676
        if($request->isPost()) {
677
            $currentUserPlugin = $this->plugin('currentUserPlugin');
678
            $currentUser = $currentUserPlugin->getUser();
679
 
680
            $feedMapper = FeedMapper::getInstance($this->adapter);
681
            $feed = $feedMapper->fetchOneByUuid($id);
682
            if(!$feed) {
683
                $response = [
684
                    'success' => false,
685
                    'data' => 'ERROR_POST_NOT_FOUND'
686
                ];
687
                return new JsonModel($response);
688
            }
689
 
690
            $likeMapper = LikeMapper::getInstance($this->adapter);
691
            $like = $likeMapper->fetchOneByFeedIdAndUserId($feed->id, $currentUser->id);
692
 
693
            if($like) {
694
                $response = [
695
                    'success' => false,
696
                    'data' => 'ERROR_DUPLICATE_ACTION'
697
                ];
698
                return new JsonModel($response);
699
            }
700
 
701
            $like = new Like();
702
            $like->user_id = $currentUser->id;
703
            $like->feed_id = $feed->id;
704
 
705
            if($likeMapper->insert($like))
706
            {
707
                if($feed->type == Feed::TYPE_UPDATE) {
708
 
709
 
710
                    $userMapper = UserMapper::getInstance($this->adapter);
711
                    $ownerFeed = $userMapper->fetchOne($feed->user_id);
712
 
713
                    $notification = new Notification();
714
                    $notification->type     = Notification::TYPE_LIKE_MY_FEED;
715
                    $notification->read     = Notification::NO;
716
                    $notification->user_id  = $ownerFeed->id;
717
                    $notification->feed_id = $feed->id;
718
                    $notification->message  = 'LABEL_LIKE_MY_FEED';
719
                    $notification->url      = $this->url()->fromRoute('dashboard',['feed' => $feed->uuid]);
720
 
721
                    $notificationMapper = NotificationMapper::getInstance($this->adapter);
722
                    $notificationMapper->insert($notification);
723
 
724
                    $userNotificationMapper = UserNotificationSettingMapper::getInstance($this->adapter);
725
                    $userNotification = $userNotificationMapper->fetchOne($ownerFeed->id);
726
 
727
                    if($userNotification && $userNotification->like_my_feed)
728
                    {
729
                        $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
730
                        $emailTemplate = $emailTemplateMapper->fetchOne(EmailTemplate::ID_LIKE_MY_FEED);
731
 
732
                        if($emailTemplate) {
733
                            $arrayCont = [
734
                                'firstname'             => $currentUser->first_name,
735
                                'lastname'              => $currentUser->last_name,
736
                                'other_user_firstname'  => $ownerFeed->first_name,
737
                                'other_user_lastname'   => $ownerFeed->last_name,
738
                                'company_name'          => '',
739
                                'group_name'            => '',
740
                                'content'               => '',
741
                                'code'                  => '',
742
                                'link'                  => $this->url()->fromRoute('dashboard',['feed' => $feed->uuid], ['force_canonical' => true])
743
                            ];
744
 
745
                            $email = new QueueEmail($this->adapter);
746
                            $email->processEmailTemplate($emailTemplate, $arrayCont, $ownerFeed->email, trim($ownerFeed->first_name . ' ' . $ownerFeed->last_name));
747
                        }
748
                    }
749
 
750
                }
751
 
752
 
753
 
754
 
755
 
756
 
757
 
758
 
759
                $response = [
760
                    'success' =>true,
761
                ];
762
            } else {
763
                $response = [
764
                    'success' => false,
765
                    'data' => $likeMapper->getError()
766
                ];
767
            }
768
            return new JsonModel($response);
769
 
770
        }
771
 
772
        $response = [
773
            'success' => false,
774
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
775
        ];
776
        return new JsonModel($response);
777
    }
778
 
779
    public function unlikeAction()
780
    {
781
        $id = $this->params()->fromRoute('id');
782
 
783
        $request = $this->getRequest();
784
        if($request->isPost()) {
785
            $currentUserPlugin = $this->plugin('currentUserPlugin');
786
            $currentUser = $currentUserPlugin->getUser();
787
 
788
            $feedMapper = FeedMapper::getInstance($this->adapter);
789
            $feed = $feedMapper->fetchOneByUuid($id);
790
            if(!$feed) {
791
                $response = [
792
                    'success' => false,
793
                    'data' => 'ERROR_POST_NOT_FOUND'
794
                ];
795
                return new JsonModel($response);
796
            }
797
 
798
            $likeMapper = LikeMapper::getInstance($this->adapter);
799
            $like = $likeMapper->fetchOneByFeedIdAndUserId($feed->id, $currentUser->id);
800
 
801
            if(!$like) {
802
                $response = [
803
                    'success' => false,
804
                    'data' => 'ERROR_DUPLICATE_ACTION'
805
                ];
806
                return new JsonModel($response);
807
            }
808
 
809
            if($likeMapper->deleteByFeedIdAndUserId($feed->id, $currentUser->id))
810
            {
811
                $response = [
812
                    'success' =>true,
813
                ];
814
            } else {
815
                $response = [
816
                    'success' => false,
817
                    'data' => $likeMapper->getError()
818
                ];
819
            }
820
            return new JsonModel($response);
821
 
822
        }
823
 
824
        $response = [
825
            'success' => false,
826
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
827
        ];
828
        return new JsonModel($response);
829
    }
830
 
831
    public function timelineAction()
832
    {
833
        $currentUserPlugin = $this->plugin('currentUserPlugin');
834
        $currentUser = $currentUserPlugin->getUser();
835
 
836
 
837
        $type   = $this->params()->fromRoute('type');
838
        if($type == 'user') {
839
            $id = $currentUser->id;
840
        } else {
841
            $id     = $this->params()->fromRoute('id');
842
        }
843
 
844
 
845
 
846
        $request = $this->getRequest();
847
        if($request->isGet()) {
848
 
849
            $page = (int) $this->params()->fromQuery('page');
850
            if($type == 'user') {
851
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
852
                $records = $connectionMapper->fetchAllConnectionsByUser($id);
853
 
854
                $connectionIds = [0];
855
                foreach($records as $record)
856
                {
857
                    if($currentUser->id == $record->request_from) {
858
                        array_push($connectionIds, $record->request_to);
859
                    } else {
860
                        array_push($connectionIds, $record->request_from);
861
                    }
862
                }
863
                array_push($connectionIds, 1);
864
 
865
                $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
866
                $records = $companyFollowerMapper->fetchAllByFollowerId($currentUser->id);
867
 
868
                $companyIds = [0];
869
                foreach($records as $record)
870
                {
871
                    if(!in_array($record->company_id, $companyIds)) {
872
                        array_push($companyIds, $record->company_id);
873
                    }
874
                }
875
 
876
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
877
                $companyUsers = $companyUserMapper->fetchAllByUserId($currentUser->id);
878
 
879
                foreach($companyUsers as $companyUser)
880
                {
881
                    if($companyUser->status == CompanyUser::STATUS_ACCEPTED) {
882
                        if(!in_array($companyUser->company_id, $companyIds)) {
883
                            array_push($companyIds, $companyUser->company_id);
884
                        }
885
                    }
886
                }
887
 
888
 
889
                $queryMapper = QueryMapper::getInstance($this->adapter);
890
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
891
                $select->columns(['id']);
892
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED)
893
                    ->AND->NEST
894
                    ->OR->NEST->equalTo('user_id',$id)->and->equalTo('type', Feed::TYPE_UPDATE)->UNNEST
895
                    ->OR->NEST->and->equalTo('type', Feed::TYPE_UPDATE)->and->equalTo('shared_with', Feed::SHARE_WITH_PUBLIC)->UNNEST
896
                    ->OR->NEST->in('user_id', $connectionIds)->and->equalTo('type', Feed::TYPE_UPDATE)->and->equalTo('shared_with', Feed::SHARE_WITH_CONNECTIONS)->UNNEST
897
                    ->OR->NEST->or->in('company_id', $companyIds)->and->equalTo('type', Feed::TYPE_COMPANY)->UNNEST
898
                    ->UNNEST;
899
                $select->order('added_on desc');
900
 
901
 
902
            }
903
            if($type == 'company') {
904
                $companyMapper = CompanyMapper::getInstance($this->adapter);
905
                $company = $companyMapper->fetchOneByUuid($id);
906
 
907
                if(!$company || $company->status != Company::STATUS_ACTIVE) {
908
                    $id = 0;
909
                } else {
910
                    $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
911
                    $companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
912
                    if($companyFollower) {
913
                        $id = $company->id;
914
                    } else {
915
 
916
                        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
917
                        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
918
 
919
                        if(!$companyUser || $companyUser->status != CompanyUser::STATUS_ACCEPTED) {
920
                            $id = 0;
921
                        } else {
922
                            $id = $company->id;
923
                        }
924
 
925
                    }
926
 
927
                }
928
 
929
 
930
                $queryMapper = QueryMapper::getInstance($this->adapter);
931
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
932
                $select->columns(['id']);
933
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
934
                $select->where->equalTo('company_id',$id);
935
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
936
                $select->order('added_on desc');
937
            }
938
            if($type == 'group') {
939
                $groupMapper = GroupMapper::getInstance($this->adapter);
940
                $group = $groupMapper->fetchOneByUuid($id);
941
                if(!$group || $group->status != Group::STATUS_ACTIVE) {
942
                    $id = 0;
943
                } else {
944
                    $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
945
                    $groupMember = $groupMemberMapper->fetchOneByGroupIdAndUserId($group->id, $currentUser->id);
946
                    if($groupMember) {
947
                        $id = $groupMember->status == GroupMember::STATUS_ACCEPTED ? $group->id : 0;
948
 
949
                    } else {
950
                        $id = 0;
951
                    }
952
                }
953
 
954
                $queryMapper = QueryMapper::getInstance($this->adapter);
955
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
956
                $select->columns(['id']);
957
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
958
                $select->where->equalTo('group_id',$id);
959
                $select->where->and->equalTo('type', Feed::TYPE_GROUP);
960
                $select->order('added_on desc');
961
            }
962
 
963
            $dbSelect = new DbSelect($select, $this->adapter);
964
            $paginator = new Paginator($dbSelect);
965
            $paginator->setCurrentPageNumber($page ? $page : 1);
966
            $paginator->setItemCountPerPage(10);
967
 
968
            $items = [];
969
            $feeds = $paginator->getCurrentItems();
970
            foreach($feeds as $feed)
971
            {
972
                $items[] = $this->renderFeed($feed->id);
973
            }
974
 
975
            $response = [
976
                'success' => true,
977
                'data' => [
978
                    'total' => [
979
                        'count' => $paginator->getTotalItemCount(),
980
                        'pages' => $paginator->getPages()->pageCount,
981
                    ],
982
                    'current' => [
983
                        'items'    => $items,
984
                        'page'     => $paginator->getCurrentPageNumber(),
985
                        'count'    => $paginator->getCurrentItemCount(),
986
                    ]
987
                ]
988
            ];
989
 
990
            return new JsonModel($response);
991
        }
992
 
993
        $response = [
994
            'success' => false,
995
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
996
        ];
997
 
998
 
999
        return new JsonModel($response);
1000
    }
1001
 
1002
    /**
1003
     *
1004
     * @param string $str
1005
     * @return string
1006
     */
1007
    private function normalizeString ($str = '')
1008
    {
1009
        $basename  = substr($str, 0, strrpos($str, '.'));
1010
        $basename  = str_replace('.', '-', $basename);
1011
 
1012
        $extension  = substr($str, strrpos($str, '.'));
1013
 
1014
        $str = $basename . $extension;
1015
 
1016
        $str = strip_tags($str);
1017
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
1018
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
1019
        $str = strtolower($str);
1020
        $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
1021
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
1022
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
1023
        $str = str_replace(' ', '-', $str);
1024
        $str = rawurlencode($str);
1025
        $str = str_replace('%', '-', $str);
1026
        return trim(strtolower($str));
1027
    }
1028
 
1029
 
1030
 
1031
    /**
1032
     *
1033
     * @param int $feed_id
1034
     * @return array
1035
     */
1036
    private function renderFeed($feed_id)
1037
    {
1038
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1039
        $currentUser = $currentUserPlugin->getUser();
1040
 
1041
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
1042
 
1043
        $userMapper = UserMapper::getInstance($this->adapter);
1044
        $feedMapper = FeedMapper::getInstance($this->adapter);
1045
        $feed = $feedMapper->fetchOne($feed_id);
1046
 
1047
 
1048
        $likeMapper = LikeMapper::getInstance($this->adapter);
1049
        $like = $likeMapper->fetchOneByFeedIdAndUserId($feed->id, $currentUser->id);
1050
 
1051
        $params = [
1052
            'id' => $feed->uuid
1053
        ];
1054
        if($feed->company_id) {
1055
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1056
            $company = $companyMapper->fetchOne($feed->company_id);
1057
 
1058
            $params['company_id'] = $company->uuid;
1059
        } else {
1060
            $company = null;
1061
        }
1062
        if($feed->group_id) {
1063
            $groupMapper = GroupMapper::getInstance($this->adapter);
1064
            $group = $groupMapper->fetchOne($feed->group_id);
1065
 
1066
            $params['group_id'] = $group->uuid;
1067
        } else {
1068
            $group = null;
1069
        }
1070
 
1071
        $item = [
1072
            'feed_unique' => uniqid(),
1073
            'feed_uuid' => $feed->uuid,
1074
            'feed_is_liked' => $like ? true : false,
1075
            'feed_like_url' => $this->url()->fromRoute('feed/like',  $params),
1076
            'feed_unlike_url' => $this->url()->fromRoute('feed/unlike',  $params),
1077
            'feed_share_url' => $this->url()->fromRoute('feed/share',  $params),
1078
            'feed_delete_url' =>  '',
1079
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
1080
        ];
1081
 
1082
        if($feed->posted_or_shared == Feed::POSTED) {
1083
 
1084
 
1085
            if($feed->type == Feed::TYPE_COMPANY)
1086
            {
1087
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1088
                $company = $companyMapper->fetchOne($feed->company_id);
1089
                $item['owner_url'] = $this->url()->fromRoute('company/view', ['id' => $company->uuid]);
1090
                $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]);
1091
                $item['owner_name'] = $company->name;
1092
                /*
1093
 
1094
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1095
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
1096
 
1097
 
1098
                if( $companyUser && $acl->isAllowed( $currentUser->usertype_id, 'my-company/feed' ) ) {
1099
                    $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1100
                }
1101
                */
1102
 
1103
 
1104
            } else if($feed->type == Feed::TYPE_GROUP)
1105
            {
1106
                $groupMapper = GroupMapper::getInstance($this->adapter);
1107
                $group = $groupMapper->fetchOne($feed->group_id);
1108
                $item['owner_url'] = '';
1109
                $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $group->uuid, 'type' => 'group', 'filename' => $group->image]);
1110
                $item['owner_name'] = $group->name;
1111
 
1112
                if($group->user_id == $currentUser->id) {
1113
                    $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1114
                }
1115
            } else {
1116
                $userMapper = UserMapper::getInstance($this->adapter);
1117
                $user = $userMapper->fetchOne($feed->user_id);
1118
 
1119
                $item['owner_url'] = $this->url()->fromRoute('profile/view', ['id' => $user->uuid]);
1120
                $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
1121
                $item['owner_name'] = $user->first_name . ' ' . $user->last_name;
1122
 
1123
                if($feed->user_id == $currentUser->id) {
1124
                    $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1125
                }
1126
 
1127
            }
1128
        } else {
1129
            if($feed->user_id == $currentUser->id) {
1130
                $item['feed_delete_url'] = $this->url()->fromRoute('feed/delete',  $params);
1131
            }
1132
        }
1133
 
1134
        $userMapper = UserMapper::getInstance($this->adapter);
1135
        $user = $userMapper->fetchOne($feed->user_id);
1136
 
1137
        if($feed->posted_or_shared == Feed::SHARED) {
1138
            $item['owner_url'] = $this->url()->fromRoute('profile/view', ['id' => $user->uuid]);
1139
            $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]);
1140
            $item['owner_name'] = $user->first_name . ' ' . $user->last_name;
1141
        }
1142
 
1143
        $item['owner_description'] = $feed->description;
1144
 
1145
        $item['owner_shared'] = $feed->total_shared;
1146
        $item['owner_comments'] = $feed->total_comments;
1147
 
1148
 
1149
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $feed->added_on);
1150
        $item['owner_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
1151
 
1152
        if($feed->file_type == Feed::FILE_TYPE_IMAGE) {
1153
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1154
 
1155
        }
1156
        if($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1157
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1158
        }
1159
        if($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1160
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
1161
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1162
        }
1163
 
1164
        if($feed->posted_or_shared == Feed::SHARED) {
1165
 
1166
 
1167
            $sharedFeed = $feedMapper->fetchOne($feed->shared_feed_id);
1168
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $sharedFeed->added_on);
1169
 
1170
 
1171
            $item['shared_description'] = $sharedFeed->description;
1172
            $item['shared_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
1173
 
1174
            if($sharedFeed->file_type == Feed::FILE_TYPE_IMAGE) {
1175
                $item['shared_file_image'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_name]);
1176
 
1177
            }
1178
            if($sharedFeed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1179
                $item['shared_file_document'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_name]);
1180
            }
1181
            if($sharedFeed->file_type == Feed::FILE_TYPE_VIDEO) {
1182
                $item['shared_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_image_preview]);
1183
                $item['shared_file_video'] = $this->url()->fromRoute('storage', ['code' => $sharedFeed->uuid, 'type' => 'feed', 'filename' => $sharedFeed->file_name]);
1184
            }
1185
 
1186
            $item['shared_content_type'] = $sharedFeed->file_type ? $sharedFeed->file_type : '';
1187
 
1188
            if($feed->company_id)
1189
            {
1190
 
1191
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1192
                $sharedCompany = $companyMapper->fetchOne($feed->company_id);
1193
                $item['shared_url'] = $this->url()->fromRoute('company/view', ['id' => $sharedCompany->uuid]);
1194
                $item['shared_image'] = $this->url()->fromRoute('storage', ['code' => $sharedCompany->uuid, 'type' => 'company', 'filename' => $sharedCompany->image]);
1195
                $item['shared_name'] = $sharedCompany->name;
1196
            } else if($feed->group_id)
1197
            {
1198
                $groupMapper = GroupMapper::getInstance($this->adapter);
1199
                $sharedGroup = $groupMapper->fetchOne($feed->group_id);
1200
                $item['shared_url'] = '';
1201
                $item['shared_image'] = $this->url()->fromRoute('storage', ['code' => $sharedGroup->uuid, 'type' => 'group', 'filename' =>  $sharedGroup->image]);
1202
                $item['shared_name'] = $sharedGroup->name;
1203
            } else {
1204
 
1205
                $sharedUser = $userMapper->fetchOne($sharedFeed->user_id);
1206
                $item['shared_url'] = $this->url()->fromRoute('profile/view', ['id' => $sharedUser->uuid]);
1207
                $item['shared_image'] = $this->url()->fromRoute('storage', ['code' => $sharedUser->uuid, 'type' => 'user', 'filename' => $sharedUser->image]);
1208
                $item['shared_name'] = $sharedUser->first_name . ' ' . $sharedUser->last_name;
1209
            }
1210
 
1211
        }
1212
 
1213
        $commentMapper = CommentMapper::getInstance($this->adapter);
1214
        $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
1215
 
1216
        $comments = [];
1217
        foreach($records as $record)
1218
        {
1219
            $user = $userMapper->fetchOne($record->user_id);
1220
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1221
 
1222
            if($record->user_id == $currentUser->id) {
1223
                $link_delete = $this->url()->fromRoute('feed/comment/delete',['id' => $feed->uuid, 'comment' => $record->uuid]);
1224
            } else {
1225
                $link_delete = '';
1226
            }
1227
 
1228
            array_push($comments, [
1229
                'unique' => uniqid(),
1230
                'user_url' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
1231
                'user_name' => $user->first_name . ' ' . $user->last_name,
1232
                'user_image' => $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]),
1233
                'time_elapsed' => Functions::timeElapsedString($dt->getTimestamp()),
1234
                'comment' => $record->comment,
1235
                'link_delete' => $link_delete
1236
            ]);
1237
        }
1238
        $item['comment_add_url'] = $this->url()->fromRoute('feed/comment', ['id' => $feed->uuid]);
1239
        $item['comments'] = $comments;
1240
 
1241
        return $item;
1242
    }
1243
 
1244
    /**
1245
     *
1246
     * @param int $comment_id
1247
     * @return array
1248
     */
1249
    private function renderComment($comment_id)
1250
    {
1251
        $item = [];
1252
 
1253
        $commentMapper = CommentMapper::getInstance($this->adapter);
1254
        $record = $commentMapper->fetchOne($comment_id);
1255
 
1256
        $feedMapper = FeedMapper::getInstance($this->adapter);
1257
        $feed = $feedMapper->fetchOne($record->feed_id);
1258
 
1259
        if($record) {
1260
            $userMapper = UserMapper::getInstance($this->adapter);
1261
 
1262
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
1263
 
1264
 
1265
            $user = $userMapper->fetchOne($record->user_id);
1266
 
1267
            $item['unique'] = uniqid();
1268
            $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
1269
            $item['user_url'] = $this->url()->fromRoute('profile', ['id' => $user->uuid]);
1270
            $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1271
            $item['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
1272
            $item['comment'] = $record->comment;
1273
            $item['link_delete'] = $this->url()->fromRoute('feed/comment/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
1274
        }
1275
        return $item;
1276
    }
1277
 
1278
    /**
1279
     *
1280
     * @param string $path
1281
     * @return boolean
1282
     */
1283
    private function deletePath($path)
1284
    {
1285
        try {
1286
            if (is_dir($path)){
1287
                if ($dh = opendir($path)) {
1288
                    while (($file = readdir($dh)) !== false)
1289
                    {
1290
                        if($file == '.' || $file == '..') {
1291
                            continue;
1292
                        }
1293
                        unlink($path . DIRECTORY_SEPARATOR . $file);
1294
                    }
1295
                    closedir($dh);
1296
                }
1297
 
1298
                rmdir($path);
1299
            }
1300
            return true;
1301
        }
1302
        catch (\Throwable $e)
1303
        {
1304
            error_log($e->getTraceAsString());
1305
            return false;
1306
        }
1307
    }
1308
 
1309
 
1310
    /**
1311
     *
1312
     * @param Feed $feed
1313
     * @return array
1314
     */
1315
    private function deleteFeed($feed)
1316
    {
1317
        $feedMapper = FeedMapper::getInstance($this->adapter);
1318
        $feed->status = Feed::STATUS_DELETED;
1319
        if($feedMapper->update($feed)) {
1320
            $response = [
1321
                'success' => true,
1322
                'data' => 'LABEL_FEED_WAS_DELETED'
1323
            ];
1324
 
1325
        } else {
1326
            $response = [
1327
                'success' => false,
1328
                'data' => $feedMapper->getError()
1329
            ];
1330
        }
1331
 
1332
 
1333
        /*$commentMapper = CommentMapper::getInstance($this->adapter);
1334
        if($commentMapper->deleteAllByFeedId($feed->id)) {
1335
            if($feedMapper->delete($feed->id)) {
1336
                $target_path = $this->config['leaderslinked.fullpath.feed'] . DIRECTORY_SEPARATOR . $feed->id;
1337
                if(file_exists($target_path)) {
1338
                    $this->deletePath($target_path);
1339
                }
1340
 
1341
                $response = [
1342
                    'success' => true,
1343
                    'data' => 'LABEL_FEED_WAS_DELETED'
1344
                ];
1345
 
1346
            } else {
1347
                $response = [
1348
                    'success' => false,
1349
                    'data' => $feedMapper->getError()
1350
                ];
1351
            }
1352
        } else {
1353
            $response = [
1354
                'success' => false,
1355
                'data' => $commentMapper->getError()
1356
            ];
1357
 
1358
        }*/
1359
 
1360
        return $response;
1361
    }
1362
 
1363
 
1364
}