Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6849 | Rev 7094 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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