Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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