Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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