Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15455 | Rev 16323 | 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
16322 anderson 2
 
1 www 3
/**
4
 *
5
 * Controlador: Mis Perfiles
6
 *
7
 */
16322 anderson 8
 
1 www 9
declare(strict_types=1);
10
 
11
namespace LeadersLinked\Controller;
12
 
13
use Laminas\Db\Adapter\AdapterInterface;
14
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
15
use Laminas\Mvc\Controller\AbstractActionController;
16
use Laminas\Log\LoggerInterface;
17
use Laminas\View\Model\ViewModel;
18
use Laminas\View\Model\JsonModel;
19
 
20
use LeadersLinked\Mapper\CompanyMapper;
21
use LeadersLinked\Mapper\CompanyUserMapper;
22
use LeadersLinked\Form\CreateFeedForm;
23
use LeadersLinked\Form\CommentForm;
8402 nelberth 24
use LeadersLinked\Form\CommentAnswerForm;
1 www 25
use LeadersLinked\Model\Comment;
26
use LeadersLinked\Mapper\CommentMapper;
27
use LeadersLinked\Mapper\FeedMapper;
28
use LeadersLinked\Mapper\GroupMapper;
29
use LeadersLinked\Model\Feed;
30
use LeadersLinked\Mapper\QueryMapper;
31
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
32
use LeadersLinked\Library\Image;
33
use LeadersLinked\Model\VideoConvert;
34
use LeadersLinked\Mapper\VideoConvertMapper;
35
use LeadersLinked\Mapper\LikeMapper;
36
use Laminas\Paginator\Adapter\DbSelect;
37
use Laminas\Paginator\Paginator;
38
use LeadersLinked\Mapper\UserMapper;
39
use LeadersLinked\Library\Functions;
40
use LeadersLinked\Model\Company;
41
use LeadersLinked\Model\UserType;
42
 
9537 nelberth 43
use LeadersLinked\Mapper\TopicMapper;
7381 nelberth 44
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
45
use LeadersLinked\Model\HighPerformanceTeamsGroups;
46
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
47
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
14740 efrain 48
use LeadersLinked\Mapper\UtilMapper;
15351 efrain 49
use LeadersLinked\Mapper\NetworkMapper;
7381 nelberth 50
 
1 www 51
class FeedController extends AbstractActionController
52
{
53
    /**
54
     *
55
     * @var AdapterInterface
56
     */
57
    private $adapter;
16322 anderson 58
 
59
 
1 www 60
    /**
61
     *
62
     * @var AbstractAdapter
63
     */
64
    private $cache;
16322 anderson 65
 
1 www 66
    /**
67
     *
68
     * @var  LoggerInterface
69
     */
70
    private $logger;
71
 
16322 anderson 72
 
1 www 73
    /**
74
     *
75
     * @var array
76
     */
77
    private $config;
16322 anderson 78
 
1 www 79
    /**
80
     *
81
     * @param AdapterInterface $adapter
82
     * @param AbstractAdapter $cache
83
     * @param LoggerInterface $logger
84
     * @param array $config
85
     */
16322 anderson 86
    public function __construct($adapter, $cache, $logger,  $config)
1 www 87
    {
88
        $this->adapter      = $adapter;
89
        $this->cache        = $cache;
90
        $this->logger       = $logger;
91
        $this->config       = $config;
16322 anderson 92
    }
1 www 93
 
94
    /**
95
     *
96
     * Generación del listado de perfiles
97
     * {@inheritDoc}
98
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
99
     */
100
    public function indexAction()
101
    {
102
        $currentUserPlugin = $this->plugin('currentUserPlugin');
103
        $currentUser = $currentUserPlugin->getUser();
104
        $currentCompany = $currentUserPlugin->getCompany();
105
 
16322 anderson 106
 
107
 
1 www 108
        $request = $this->getRequest();
16322 anderson 109
        if ($request->isGet()) {
1 www 110
            $headers  = $request->getHeaders();
16322 anderson 111
 
1 www 112
            $isJson = false;
16322 anderson 113
            if ($headers->has('Accept')) {
1 www 114
                $accept = $headers->get('Accept');
16322 anderson 115
 
1 www 116
                $prioritized = $accept->getPrioritized();
16322 anderson 117
 
118
                foreach ($prioritized as $key => $value) {
1 www 119
                    $raw = trim($value->getRaw());
16322 anderson 120
 
121
                    if (!$isJson) {
1 www 122
                        $isJson = strpos($raw, 'json');
123
                    }
124
                }
125
            }
16322 anderson 126
 
7645 nelberth 127
            $formFeed = new CreateFeedForm($this->adapter);
16322 anderson 128
 
1 www 129
            $this->layout()->setTemplate('layout/layout-backend');
130
            $viewModel = new ViewModel();
131
            $viewModel->setTemplate('leaders-linked/feeds/index.phtml');
132
            $viewModel->setVariables([
133
                'formFeed'      => $formFeed,
134
            ]);
16322 anderson 135
            return $viewModel;
1 www 136
        } else {
137
            return new JsonModel([
138
                'success' => false,
139
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
140
            ]);
141
        }
142
    }
16322 anderson 143
 
144
 
1 www 145
    public function commentAction()
146
    {
8394 nelberth 147
 
16322 anderson 148
 
1 www 149
        $currentUserPlugin = $this->plugin('currentUserPlugin');
150
        $currentUser = $currentUserPlugin->getUser();
151
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 152
 
153
 
1 www 154
        $id = $this->params()->fromRoute('id');
16322 anderson 155
 
1 www 156
        $request = $this->getRequest();
16322 anderson 157
        if ($request->isPost()) {
1 www 158
            $feedMapper = FeedMapper::getInstance($this->adapter);
15364 efrain 159
            $feed = $feedMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
16322 anderson 160
            if (!$feed) {
1 www 161
                $response = [
162
                    'success' => false,
163
                    'data' => 'ERROR_POST_NOT_FOUND'
164
                ];
165
                return new JsonModel($response);
166
            }
16322 anderson 167
 
168
            if ($feed->company_id != $currentCompany->id) {
1 www 169
                $response = [
170
                    'success' => false,
171
                    'data' => 'ERROR_UNAUTHORIZED'
172
                ];
173
                return new JsonModel($response);
174
            }
16322 anderson 175
 
1 www 176
            $dataPost = $request->getPost()->toArray();
177
            $form = new CommentForm();
178
            $form->setData($dataPost);
16322 anderson 179
 
180
            if ($form->isValid()) {
14740 efrain 181
                $utilMapper = UtilMapper::getInstance($this->adapter);
182
                $now = $utilMapper->getDatebaseNow();
16322 anderson 183
 
1 www 184
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
185
                $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
16322 anderson 186
 
1 www 187
                $dataPost = (array) $form->getData();
188
                $comment = new Comment();
189
                $comment->comment = $dataPost['comment'];
190
                $comment->feed_id = $feed->id;
15364 efrain 191
                $comment->network_id = $currentUser->network_id;
16322 anderson 192
 
193
                if ($feed->type == 'hptg') {
8232 nelberth 194
                    $comment->user_id = $currentUser->id;
16322 anderson 195
                } else if ($feed->type == 'mytq') {
11420 eleazar 196
                    $comment->user_id = $currentCompany->id;
16322 anderson 197
                } else {
8232 nelberth 198
                    $comment->user_id = $owner->user_id;
199
                }
16322 anderson 200
 
1 www 201
                $commentMapper = CommentMapper::getInstance($this->adapter);
16322 anderson 202
                if ($commentMapper->insert($comment)) {
203
 
1 www 204
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
16322 anderson 205
 
1 www 206
                    $feed->total_comments = $total_comments;
207
                    $feedMapper->update($feed);
16322 anderson 208
 
1 www 209
                    $response = [
210
                        'success'   => true,
14740 efrain 211
                        'data'   => $this->renderComment($comment->id, $now),
1 www 212
                        'total_comments' => $total_comments
213
                    ];
16322 anderson 214
 
1 www 215
                    return new JsonModel($response);
216
                } else {
16322 anderson 217
 
1 www 218
                    $response = [
219
                        'success'   => false,
220
                        'data'   => $commentMapper->getError()
221
                    ];
16322 anderson 222
 
1 www 223
                    return new JsonModel($response);
224
                }
225
            } else {
226
                $message = '';;
227
                $form_messages = (array) $form->getMessages();
16322 anderson 228
                foreach ($form_messages  as $fieldname => $field_messages) {
229
                    foreach ($field_messages as $key => $value) {
1 www 230
                        $message = $value;
231
                    }
232
                }
16322 anderson 233
 
1 www 234
                $response = [
235
                    'success'   => false,
236
                    'data'   => $message
237
                ];
16322 anderson 238
 
1 www 239
                return new JsonModel($response);
240
            }
241
        } else {
242
            $response = [
243
                'success' => false,
244
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
245
            ];
16322 anderson 246
 
1 www 247
            return new JsonModel($response);
248
        }
249
    }
8390 nelberth 250
 
8402 nelberth 251
    public function answerAction()
252
    {
16322 anderson 253
 
254
 
8402 nelberth 255
        $currentUserPlugin = $this->plugin('currentUserPlugin');
256
        $currentUser = $currentUserPlugin->getUser();
257
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 258
 
259
 
8402 nelberth 260
        $id = $this->params()->fromRoute('id');
261
        $comment_uuid = $this->params()->fromRoute('comment');
16322 anderson 262
 
8402 nelberth 263
        $request = $this->getRequest();
16322 anderson 264
        if ($request->isPost()) {
8402 nelberth 265
            $feedMapper = FeedMapper::getInstance($this->adapter);
266
            $feed = $feedMapper->fetchOneByUuid($id);
16322 anderson 267
            if (!$feed) {
8402 nelberth 268
                $response = [
269
                    'success' => false,
270
                    'data' => 'ERROR_POST_NOT_FOUND'
271
                ];
272
                return new JsonModel($response);
273
            }
16322 anderson 274
 
275
            if ($feed->company_id != $currentCompany->id) {
8402 nelberth 276
                $response = [
277
                    'success' => false,
278
                    'data' => 'ERROR_UNAUTHORIZED'
279
                ];
280
                return new JsonModel($response);
281
            }
16322 anderson 282
 
8402 nelberth 283
            $dataPost = $request->getPost()->toArray();
284
            $form = new CommentAnswerForm();
285
            $form->setData($dataPost);
16322 anderson 286
 
287
            if ($form->isValid()) {
288
 
14740 efrain 289
                $utilMapper = UtilMapper::getInstance($this->adapter);
290
                $now = $utilMapper->getDatebaseNow();
16322 anderson 291
 
8402 nelberth 292
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
293
                $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
16322 anderson 294
 
8402 nelberth 295
                $dataPost = (array) $form->getData();
8408 nelberth 296
                $answer = new Comment();
297
                $answer->comment = $dataPost['answer'];
298
                $answer->feed_id = $feed->id;
16322 anderson 299
 
300
                if ($feed->type == 'hptg') {
8408 nelberth 301
                    $answer->user_id = $currentUser->id;
16322 anderson 302
                } else {
8408 nelberth 303
                    $answer->user_id = $owner->user_id;
8402 nelberth 304
                }
8408 nelberth 305
 
306
                $commentMapper = CommentMapper::getInstance($this->adapter);
16322 anderson 307
                $comment = $commentMapper->fetchOneByUuid($comment_uuid);
8408 nelberth 308
                $answer->parent_id = $comment->id;
16322 anderson 309
 
310
                if ($commentMapper->insert($answer)) {
311
 
8402 nelberth 312
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
16322 anderson 313
 
8402 nelberth 314
                    $feed->total_comments = $total_comments;
315
                    $feedMapper->update($feed);
16322 anderson 316
 
8402 nelberth 317
                    $response = [
318
                        'success'   => true,
14740 efrain 319
                        'data'   => $this->renderComment($answer->id, $now),
8402 nelberth 320
                        'total_comments' => $total_comments
321
                    ];
16322 anderson 322
 
8402 nelberth 323
                    return new JsonModel($response);
324
                } else {
16322 anderson 325
 
8402 nelberth 326
                    $response = [
327
                        'success'   => false,
328
                        'data'   => $commentMapper->getError()
329
                    ];
16322 anderson 330
 
8402 nelberth 331
                    return new JsonModel($response);
332
                }
333
            } else {
334
                $message = '';;
335
                $form_messages = (array) $form->getMessages();
16322 anderson 336
                foreach ($form_messages  as $fieldname => $field_messages) {
337
                    foreach ($field_messages as $key => $value) {
8402 nelberth 338
                        $message = $value;
339
                    }
340
                }
16322 anderson 341
 
8402 nelberth 342
                $response = [
343
                    'success'   => false,
344
                    'data'   => $message
345
                ];
16322 anderson 346
 
8402 nelberth 347
                return new JsonModel($response);
348
            }
349
        } else {
350
            $response = [
351
                'success' => false,
352
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
353
            ];
16322 anderson 354
 
8402 nelberth 355
            return new JsonModel($response);
356
        }
357
    }
358
 
16322 anderson 359
 
360
 
1 www 361
    public function commentDeleteAction()
362
    {
363
        $currentUserPlugin = $this->plugin('currentUserPlugin');
364
        $currentUser = $currentUserPlugin->getUser();
365
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 366
 
1 www 367
        $request = $this->getRequest();
16322 anderson 368
        if ($request->isPost()) {
1 www 369
            $currentUserPlugin = $this->plugin('currentUserPlugin');
370
            $currentUser = $currentUserPlugin->getUser();
16322 anderson 371
 
1 www 372
            $id = $this->params()->fromRoute('id');
373
            $comment = $this->params()->fromRoute('comment');
16322 anderson 374
 
1 www 375
            $feedMapper = FeedMapper::getInstance($this->adapter);
15364 efrain 376
            $feed = $feedMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
16322 anderson 377
            if (!$feed) {
1 www 378
                $response = [
379
                    'success' => false,
380
                    'data' => 'ERROR_POST_NOT_FOUND'
381
                ];
382
                return new JsonModel($response);
383
            }
16322 anderson 384
 
385
            if ($feed->company_id != $currentCompany->id) {
1 www 386
                $response = [
387
                    'success' => false,
388
                    'data' => 'ERROR_UNAUTHORIZED'
389
                ];
390
                return new JsonModel($response);
391
            }
16322 anderson 392
 
1 www 393
            $commentMapper = CommentMapper::getInstance($this->adapter);
394
            $comment = $commentMapper->fetchOneByUuid($comment);
16322 anderson 395
 
396
            if ($comment && $comment->feed_id == $feed->id) {
1 www 397
                $comment->status = Comment::STATUS_DELETED;
16322 anderson 398
                if ($commentMapper->update($comment)) {
1 www 399
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
16322 anderson 400
 
1 www 401
                    $feed = $feedMapper->fetchOne($comment->feed_id);
402
                    $feed->total_comments = $total_comments;
403
                    $feedMapper->update($feed);
16322 anderson 404
 
405
 
406
 
407
 
408
 
1 www 409
                    $response = [
410
                        'success' => true,
16322 anderson 411
                        'data' => [
1 www 412
                            'message' => 'LABEL_COMMENT_WAS_DELETED',
413
                            'total_comments' => $total_comments
16322 anderson 414
                        ]
415
                    ];
1 www 416
                } else {
417
                    $response = [
418
                        'success' => false,
419
                        'data' => $commentMapper->getError()
420
                    ];
421
                }
422
            } else {
423
                $response = [
424
                    'success' => false,
425
                    'data' => 'ERROR_COMMENT_NOT_FOUND'
426
                ];
427
            }
428
        } else {
429
            $response = [
430
                'success' => false,
431
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
432
            ];
433
        }
16322 anderson 434
 
1 www 435
        return new JsonModel($response);
436
    }
16322 anderson 437
 
1 www 438
    public function deleteAction()
439
    {
440
        $currentUserPlugin = $this->plugin('currentUserPlugin');
441
        $currentUser = $currentUserPlugin->getUser();
442
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 443
 
1 www 444
        $request = $this->getRequest();
16322 anderson 445
        if ($request->isPost()) {
1 www 446
 
16322 anderson 447
 
1 www 448
            $id =  $this->params()->fromRoute('id');
16322 anderson 449
 
1 www 450
            $feedMapper = FeedMapper::getInstance($this->adapter);
15364 efrain 451
            $feed = $feedMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
16322 anderson 452
            if (!$feed) {
1 www 453
                $response = [
454
                    'success' => false,
455
                    'data' => 'ERROR_POST_NOT_FOUND'
456
                ];
457
                return new JsonModel($response);
458
            }
16322 anderson 459
 
460
            if ($feed->company_id != $currentCompany->id) {
1 www 461
                $response = [
462
                    'success' => false,
463
                    'data' => 'ERROR_UNAUTHORIZED'
464
                ];
465
                return new JsonModel($response);
466
            }
16322 anderson 467
 
1 www 468
            $feedMapper = FeedMapper::getInstance($this->adapter);
469
            $feed->status = Feed::STATUS_DELETED;
16322 anderson 470
            if ($feedMapper->update($feed)) {
1 www 471
                $response = [
472
                    'success' => true,
473
                    'data' => 'LABEL_FEED_WAS_DELETED'
474
                ];
475
            } else {
476
                $response = [
477
                    'success' => false,
478
                    'data' => $feedMapper->getError()
479
                ];
480
            }
481
 
16322 anderson 482
 
1 www 483
            return new JsonModel($response);
484
        } else {
485
            $response = [
486
                'success' => false,
487
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
488
            ];
489
        }
16322 anderson 490
 
1 www 491
        return new JsonModel($response);
492
    }
16322 anderson 493
 
1 www 494
    public function addAction()
495
    {
14740 efrain 496
        $utilMapper = UtilMapper::getInstance($this->adapter);
497
        $now = $utilMapper->getDatebaseNow();
16322 anderson 498
 
1 www 499
        $currentUserPlugin = $this->plugin('currentUserPlugin');
500
        $currentUser = $currentUserPlugin->getUser();
501
        $currentCompany = $currentUserPlugin->getCompany();
10970 eleazar 502
        $myt_id =  $this->params()->fromRoute('myt_id');
11122 nelberth 503
        $hptg_uuid =  $this->params()->fromRoute('hptg_id');
7403 nelberth 504
 
505
        $request = $this->getRequest();
16322 anderson 506
        if ($request->isPost()) {
7653 nelberth 507
 
16322 anderson 508
 
7653 nelberth 509
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
16322 anderson 510
 
7653 nelberth 511
            $form = new CreateFeedForm($this->adapter);
16322 anderson 512
 
1 www 513
            $form->setData($dataPost);
16322 anderson 514
 
515
            if ($form->isValid()) {
516
 
517
 
1 www 518
                $companyMapper = CompanyMapper::getInstance($this->adapter);
519
                $company = $companyMapper->fetchOne($currentCompany->id);
16322 anderson 520
 
1 www 521
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
522
                $owner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
16322 anderson 523
 
9049 nelberth 524
                $dataPost['priority'] =  isset($dataPost['priority']) ? Feed::PRIORITY_URGENT  : '';
16322 anderson 525
 
526
 
1 www 527
                $hydrator = new ObjectPropertyHydrator();
528
                $feed = new Feed();
529
                $hydrator->hydrate($dataPost, $feed);
16322 anderson 530
                if ($hptg_uuid) {
7407 nelberth 531
 
16322 anderson 532
 
533
 
7409 nelberth 534
                    $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
11122 nelberth 535
                    $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($hptg_uuid);
16322 anderson 536
 
7409 nelberth 537
                    if (!$highPerformanceTeamsGroups) {
538
                        $data = [
539
                            'success' => false,
7414 nelberth 540
                            'data' => 'ERROR_RECORD_NOT_FOUND'
7409 nelberth 541
                        ];
7407 nelberth 542
 
7409 nelberth 543
                        return new JsonModel($data);
544
                    }
545
 
16322 anderson 546
                    if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
7409 nelberth 547
 
548
                        return new JsonModel([
549
                            'success' => false,
7414 nelberth 550
                            'data' => 'ERROR_UNAUTHORIZED'
7409 nelberth 551
                        ]);
16322 anderson 552
                    }
7409 nelberth 553
 
554
                    $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
555
                    $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
16322 anderson 556
                    if ($highPerformanceTeamsGroupsMember) {
557
                        if ($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) {
7413 nelberth 558
                            $id =  $highPerformanceTeamsGroups->id;
16322 anderson 559
                        } else {
7413 nelberth 560
 
561
                            return new JsonModel([
562
                                'success' => false,
563
                                'data' => 'ERROR_UNAUTHORIZED'
564
                            ]);
565
                        }
7409 nelberth 566
                    } else {
567
 
568
                        return new JsonModel([
569
                            'success' => false,
7414 nelberth 570
                            'data' => 'ERROR_RECORD_NOT_FOUND'
7409 nelberth 571
                        ]);
572
                    }
11126 nelberth 573
                    $topic_uuid =  $this->params()->fromRoute('topic_id');
16322 anderson 574
                    if ($topic_uuid) {
9539 nelberth 575
                        $topicMapper = TopicMapper::getInstance($this->adapter);
11126 nelberth 576
                        $topic = $topicMapper->fetchOneByUuid($topic_uuid);
16322 anderson 577
                        if ($topic) {
9569 nelberth 578
                            $feed->topic_id = $topic->id;
16322 anderson 579
                        } else {
7644 nelberth 580
                            return new JsonModel([
581
                                'success' => false,
582
                                'data' => 'ERROR_RECORD_NOT_FOUND'
583
                            ]);
584
                        }
585
                    }
7409 nelberth 586
 
16322 anderson 587
 
15364 efrain 588
                    $feed->network_id       = $currentUser->network_id;
7409 nelberth 589
                    $feed->company_id       = $currentCompany->id;
590
                    $feed->group_id         = null;
591
                    $feed->high_performance_group_id = $id;
8222 nelberth 592
                    $feed->user_id          = $currentUser->id;
7409 nelberth 593
                    $feed->type             = Feed::TYPE_HPTG;
594
                    $feed->posted_or_shared = Feed::POSTED;
595
                    $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
16322 anderson 596
                } else if ($myt_id) {
10985 eleazar 597
                    $feedMapper = FeedMapper::getInstance($this->adapter);
598
                    $myt  = $feedMapper->fetchOneByUuid($myt_id);
15364 efrain 599
                    $feed->network_id       = $currentUser->network_id;
10601 eleazar 600
                    $feed->company_id       = $currentCompany->id;
10981 eleazar 601
                    $feed->group_id         = null;
10601 eleazar 602
                    $feed->user_id          = $owner->user_id;
10985 eleazar 603
                    $feed->myt_id           = $myt->id;
10988 eleazar 604
                    $feed->related_feed     = $myt->id;
11491 eleazar 605
                    $feed->type             = Feed::TYPE_MYT_ANSWER;
10601 eleazar 606
                    $feed->posted_or_shared = Feed::POSTED;
10680 eleazar 607
                    $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
16322 anderson 608
                } else {
15364 efrain 609
                    $feed->network_id       = $currentUser->network_id;
7407 nelberth 610
                    $feed->company_id       = $currentCompany->id;
611
                    $feed->group_id         = null;
612
                    $feed->user_id          = $owner->user_id;
613
                    $feed->type             = Feed::TYPE_COMPANY;
614
                    $feed->posted_or_shared = Feed::POSTED;
615
                    $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
616
                }
1 www 617
 
16322 anderson 618
 
619
 
620
 
1 www 621
                $feed->total_comments   = 0;
622
                $feed->total_shared     = 0;
16322 anderson 623
 
624
 
1 www 625
                $files = $this->getRequest()->getFiles()->toArray();
626
                $file_type = '';
16322 anderson 627
                if (isset($files['file']) && empty($files['file']['error'])) {
1 www 628
                    $feed_tmp_filename  = $files['file']['tmp_name'];
629
                    $feed_filename      = $this->normalizeString($files['file']['name']);
16322 anderson 630
 
1 www 631
                    $mime_type = mime_content_type($feed_tmp_filename);
16322 anderson 632
                    if ($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
1 www 633
                        $file_type = Feed::FILE_TYPE_IMAGE;
16322 anderson 634
                    } else if ($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
1 www 635
                        $file_type = Feed::FILE_TYPE_VIDEO;
16322 anderson 636
                    } else if ($mime_type == 'application/pdf') {
1 www 637
                        $file_type = Feed::FILE_TYPE_DOCUMENT;
638
                    }
639
                }
16322 anderson 640
 
641
 
1 www 642
                $feedMapper = FeedMapper::getInstance($this->adapter);
643
                $result = $feedMapper->insert($feed);
16322 anderson 644
 
645
 
646
                if ($result) {
647
 
9552 nelberth 648
                    $feed = $feedMapper->fetchOne($feed->id);
16322 anderson 649
 
650
                    if ($file_type == Feed::FILE_TYPE_DOCUMENT) {
1 www 651
                        try {
652
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
16322 anderson 653
                            if (!file_exists($target_path)) {
1 www 654
                                mkdir($target_path, 0755);
655
                            }
16322 anderson 656
 
657
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
658
                            $result = move_uploaded_file($feed_tmp_filename, $full_filename);
659
                            if ($result) {
660
 
1 www 661
                                $feed->file_type = $file_type;
662
                                $feed->file_name = basename($feed_filename);
663
                                $feedMapper->update($feed);
664
                            } else {
16322 anderson 665
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
1 www 666
                            }
16322 anderson 667
                        } catch (\Throwable $e) {
1 www 668
                            error_log($e->getTraceAsString());
669
                        }
670
                    }
16322 anderson 671
                    if ($file_type == Feed::FILE_TYPE_IMAGE) {
1 www 672
                        try {
673
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
16322 anderson 674
                            if (!file_exists($target_path)) {
1 www 675
                                mkdir($target_path, 0755);
676
                            }
16322 anderson 677
 
1 www 678
                            list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
16322 anderson 679
 
1 www 680
                            $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
681
                            $crop_to_dimensions = false;
16322 anderson 682
                            if (Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions)) {
1 www 683
                                $feed->file_type = $file_type;
684
                                $feed->file_name = basename($feed_filename);
685
                                $feedMapper->update($feed);
686
                            }
16322 anderson 687
                        } catch (\Throwable $e) {
1 www 688
                            error_log($e->getTraceAsString());
689
                        }
690
                    }
16322 anderson 691
                    if ($file_type == Feed::FILE_TYPE_VIDEO) {
1 www 692
                        try {
693
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
16322 anderson 694
                            if (!file_exists($target_path)) {
1 www 695
                                mkdir($target_path, 0755);
696
                            }
16322 anderson 697
 
1 www 698
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
16322 anderson 699
 
700
                            $result = move_uploaded_file($feed_tmp_filename, $full_filename);
701
                            if ($result) {
702
 
1 www 703
                                $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
704
                                $getFromSecound = 2;
16322 anderson 705
 
1 www 706
                                //extracción del cover
707
                                $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
708
                                $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
709
                                $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
710
                                exec($cmd);
16322 anderson 711
 
712
 
1 www 713
                                $feed->file_type = $file_type;
714
                                $feed->file_name = basename($feed_filename);
715
                                $feed->file_image_preview = basename($generateFile);
716
                                $feedMapper->update($feed);
16322 anderson 717
 
1 www 718
                                $videoConvert = new VideoConvert();
719
                                $videoConvert->filename = $full_filename;
720
                                $videoConvert->type = VideoConvert::TYPE_FEED;
16322 anderson 721
 
1 www 722
                                $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
723
                                $videoConvertMapper->insert($videoConvert);
724
                            } else {
16322 anderson 725
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
1 www 726
                            }
16322 anderson 727
                        } catch (\Throwable $e) {
1 www 728
                            error_log($e->getTraceAsString());
729
                        }
730
                    }
16322 anderson 731
 
732
 
9557 nelberth 733
                    $response = [
734
                        'success'   => true,
14740 efrain 735
                        'data'   => $this->renderFeed($feed->id, $now)
9557 nelberth 736
                    ];
1 www 737
                } else {
738
                    $response = [
739
                        'success'   => false,
740
                        'data'   => $feedMapper->getError()
741
                    ];
742
                }
743
            } else {
744
                $messages = [];
745
                $form_messages = (array) $form->getMessages();
16322 anderson 746
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 747
                    $messages[$fieldname] = array_values($field_messages);
748
                }
16322 anderson 749
 
1 www 750
                $response = [
751
                    'success'   => false,
752
                    'data'   => $messages
753
                ];
754
            }
755
        } else {
756
            $response = [
757
                'success' => false,
758
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
759
            ];
760
        }
16322 anderson 761
 
1 www 762
        return new JsonModel($response);
763
    }
16322 anderson 764
 
765
 
14740 efrain 766
    public function timelineAction()
767
    {
16322 anderson 768
 
14740 efrain 769
        $utilMapper = UtilMapper::getInstance($this->adapter);
770
        $now = $utilMapper->getDatebaseNow();
16322 anderson 771
 
1 www 772
        $currentUserPlugin = $this->plugin('currentUserPlugin');
773
        $currentUser = $currentUserPlugin->getUser();
774
        $currentCompany = $currentUserPlugin->getCompany();
7357 nelberth 775
 
16322 anderson 776
 
777
 
778
 
779
 
7366 nelberth 780
        $request = $this->getRequest();
16322 anderson 781
        if ($request->isGet()) {
782
 
783
 
8672 nelberth 784
            $page = (int) $this->params()->fromQuery('page');
785
            $type   = $this->params()->fromRoute('type');
11091 nelberth 786
            $topic_uuid   = $this->params()->fromRoute('topic_id');
8672 nelberth 787
            $urgent   = $this->params()->fromRoute('urgent');
10820 eleazar 788
            $myt_id =  $this->params()->fromRoute('myt_id');
11098 nelberth 789
            $hptg_uuid =  $this->params()->fromRoute('hptg_id');
11108 nelberth 790
 
11113 nelberth 791
 
16322 anderson 792
            if ($hptg_uuid) {
793
 
794
 
7381 nelberth 795
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
11098 nelberth 796
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($hptg_uuid);
16322 anderson 797
 
7414 nelberth 798
                if (!$highPerformanceTeamsGroups) {
799
                    $data = [
800
                        'success' => false,
801
                        'data' => 'ERROR_RECORD_NOT_FOUND'
802
                    ];
803
 
804
                    return new JsonModel($data);
805
                }
806
 
16322 anderson 807
                if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
7414 nelberth 808
 
809
                    return new JsonModel([
810
                        'success' => false,
811
                        'data' => 'ERROR_UNAUTHORIZED'
812
                    ]);
16322 anderson 813
                }
7414 nelberth 814
 
815
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
816
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
16322 anderson 817
                if ($highPerformanceTeamsGroupsMember) {
818
                    if ($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) {
7701 nelberth 819
                        $queryMapper = QueryMapper::getInstance($this->adapter);
820
                        $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
821
                        $select->columns(['id']);
822
                        $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 823
                        $select->where->equalTo('company_id', $currentCompany->id);
824
                        $select->where->equalTo('high_performance_group_id', $highPerformanceTeamsGroups->id);
825
 
826
 
827
                        if (isset($topic_uuid)) {
9539 nelberth 828
                            $topicMapper = TopicMapper::getInstance($this->adapter);
829
                            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
16322 anderson 830
                            if ($topic) {
831
                                if ($topic->status != 'a') {
7766 nelberth 832
                                    return new JsonModel([
833
                                        'success' => false,
834
                                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
835
                                    ]);
836
                                }
16322 anderson 837
                                $select->where->equalTo('topic_id', $topic->id);
838
                            } else {
7643 nelberth 839
                                return new JsonModel([
840
                                    'success' => false,
8689 nelberth 841
                                    'data' => 'ERROR_RECORD_NOT_FOUND'
7643 nelberth 842
                                ]);
843
                            }
16322 anderson 844
                        } else {
845
                            if (isset($urgent)) {
8739 nelberth 846
                                $select->where->equalTo('priority', Feed::PRIORITY_URGENT);
16322 anderson 847
                            } else {
9569 nelberth 848
                                $select->where->IsNull('topic_id');
8739 nelberth 849
                            }
7643 nelberth 850
                        }
16322 anderson 851
 
852
 
7420 nelberth 853
                        $select->where->and->equalTo('type', Feed::TYPE_HPTG);
854
                        $select->order('added_on desc');
16322 anderson 855
                    } else {
7414 nelberth 856
                        return new JsonModel([
857
                            'success' => false,
858
                            'data' => 'ERROR_UNAUTHORIZED'
859
                        ]);
860
                    }
7381 nelberth 861
                } else {
7414 nelberth 862
 
863
                    return new JsonModel([
864
                        'success' => false,
865
                        'data' => 'ERROR_RECORD_NOT_FOUND'
866
                    ]);
7381 nelberth 867
                }
16322 anderson 868
            } else if ($myt_id) {
10990 eleazar 869
                $feedMapper = FeedMapper::getInstance($this->adapter);
870
                $myt  = $feedMapper->fetchOneByUuid($myt_id);
10601 eleazar 871
                $queryMapper = QueryMapper::getInstance($this->adapter);
872
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
873
                $select->columns(['id']);
874
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 875
                $select->where->equalTo('company_id', $currentCompany->id);
10992 eleazar 876
                $select->where->equalTo('myt_id', $myt->id);
11001 eleazar 877
                $select->where->and->equalTo('type', Feed::TYPE_MYT_ANSWER);
10601 eleazar 878
                $select->order('added_on desc');
16322 anderson 879
            } else {
10557 eleazar 880
 
7350 nelberth 881
                $queryMapper = QueryMapper::getInstance($this->adapter);
882
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
883
                $select->columns(['id']);
884
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 885
                $select->where->equalTo('company_id', $currentCompany->id);
7350 nelberth 886
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
887
                $select->order('added_on desc');
888
            }
16322 anderson 889
 
890
 
891
 
1 www 892
            $dbSelect = new DbSelect($select, $this->adapter);
893
            $paginator = new Paginator($dbSelect);
894
            $paginator->setCurrentPageNumber($page ? $page : 1);
895
            $paginator->setItemCountPerPage(10);
16322 anderson 896
 
1 www 897
            $items = [];
898
            $feeds = $paginator->getCurrentItems();
16322 anderson 899
 
900
            foreach ($feeds as $feed) {
14740 efrain 901
                $items[] = $this->renderFeed($feed->id, $now);
1 www 902
            }
16322 anderson 903
 
1 www 904
            $response = [
905
                'success' => true,
906
                'data' => [
907
                    'total' => [
908
                        'count' => $paginator->getTotalItemCount(),
909
                        'pages' => $paginator->getPages()->pageCount,
910
                    ],
911
                    'current' => [
912
                        'items'    => $items,
913
                        'page'     => $paginator->getCurrentPageNumber(),
914
                        'count'    => $paginator->getCurrentItemCount(),
915
                    ]
916
                ]
917
            ];
16322 anderson 918
 
1 www 919
            return new JsonModel($response);
920
        }
16322 anderson 921
 
1 www 922
        $response = [
923
            'success' => false,
924
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
925
        ];
16322 anderson 926
 
927
 
1 www 928
        return new JsonModel($response);
929
    }
16322 anderson 930
 
14740 efrain 931
    public function oneFeedAction()
932
    {
933
        $utilMapper = UtilMapper::getInstance($this->adapter);
934
        $now = $utilMapper->getDatebaseNow();
16322 anderson 935
 
936
 
10118 nelberth 937
        $currentUserPlugin = $this->plugin('currentUserPlugin');
938
        $currentUser = $currentUserPlugin->getUser();
939
        $currentCompany = $currentUserPlugin->getCompany();
11331 eleazar 940
 
10118 nelberth 941
        $request = $this->getRequest();
16322 anderson 942
        if ($request->isGet()) {
943
 
11725 eleazar 944
            $feed_uuid =  $this->params()->fromRoute('id');
945
            $myt_id =  $this->params()->fromRoute('id');
16322 anderson 946
 
947
            if (!isset($feed_uuid)) {
948
                $data = [
949
                    'success'   => false,
950
                    'data'   => 'ERROR_INVALID_PARAMETER'
951
                ];
952
 
953
                return new JsonModel($data);
11331 eleazar 954
            }
16322 anderson 955
 
10118 nelberth 956
            $items = [];
11331 eleazar 957
            $feedMapper = FeedMapper::getInstance($this->adapter);
958
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
959
 
960
            if (!$feed) {
961
                $data = [
962
                    'success' => false,
963
                    'data' => 'ERROR_RECORD_NOT_FOUND'
964
                ];
16322 anderson 965
 
11331 eleazar 966
                return new JsonModel($data);
16322 anderson 967
            }
968
 
969
            if ($feed->type == 'mytq') {
970
 
14740 efrain 971
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11195 eleazar 972
 
11536 eleazar 973
                $response = [
974
                    'success' => true,
975
                    'data' => [
16322 anderson 976
                        'item' => $items,
977
                        'feed_title' => $feed->title,
978
                        'topic_title' => $feed->description
11536 eleazar 979
                    ]
980
                ];
16322 anderson 981
            } else if ($feed->type == 'myta') {
982
 
14740 efrain 983
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11519 eleazar 984
 
985
                $response = [
986
                    'success' => true,
987
                    'data' => [
16322 anderson 988
                        'item' => $items,
989
                        'feed_title' => $feed->title,
990
                        'topic_title' => $feed->description
11519 eleazar 991
                    ]
992
                ];
16322 anderson 993
            } else if ($feed->type == 'hptg') {
11519 eleazar 994
 
11404 eleazar 995
                $group_uuid =  $this->params()->fromRoute('group_id');
996
                $topic_uuid   = $this->params()->fromRoute('topic_id');
10118 nelberth 997
 
16322 anderson 998
                if (!isset($topic_uuid)) {
999
 
11404 eleazar 1000
                    $data = [
1001
                        'success'   => false,
1002
                        'data'   => 'ERROR_INVALID_PARAMETER'
1003
                    ];
16322 anderson 1004
 
11404 eleazar 1005
                    return new JsonModel($data);
1006
                }
16322 anderson 1007
                if (!isset($group_uuid)) {
1008
 
11404 eleazar 1009
                    $data = [
1010
                        'success'   => false,
1011
                        'data'   => 'ERROR_INVALID_PARAMETER'
1012
                    ];
16322 anderson 1013
 
11404 eleazar 1014
                    return new JsonModel($data);
1015
                }
1016
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
1017
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
16322 anderson 1018
 
11404 eleazar 1019
                if (!$highPerformanceTeamsGroups) {
1020
                    $data = [
1021
                        'success' => false,
1022
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1023
                    ];
16322 anderson 1024
 
11404 eleazar 1025
                    return new JsonModel($data);
1026
                }
10118 nelberth 1027
 
16322 anderson 1028
 
1029
                if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
1030
 
11404 eleazar 1031
                    return new JsonModel([
1032
                        'success' => false,
1033
                        'data' => 'ERROR_UNAUTHORIZED'
1034
                    ]);
16322 anderson 1035
                }
10118 nelberth 1036
 
16322 anderson 1037
                if ($feed->high_performance_group_id != $highPerformanceTeamsGroups->id) {
11404 eleazar 1038
                    return new JsonModel([
1039
                        'success' => false,
1040
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1041
                    ]);
1042
                }
16322 anderson 1043
 
11404 eleazar 1044
                $topicMapper = TopicMapper::getInstance($this->adapter);
1045
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
10118 nelberth 1046
 
11404 eleazar 1047
                if (!$topic) {
1048
                    $data = [
1049
                        'success' => false,
1050
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1051
                    ];
16322 anderson 1052
 
11404 eleazar 1053
                    return new JsonModel($data);
16322 anderson 1054
                }
10118 nelberth 1055
 
16322 anderson 1056
                if ($feed->topic_id != $topic->id) {
11404 eleazar 1057
                    return new JsonModel([
1058
                        'success' => false,
1059
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1060
                    ]);
16322 anderson 1061
                }
10521 eleazar 1062
 
16322 anderson 1063
                $items = $this->renderFeed($feed->id, $now, $group_uuid);
1064
 
11404 eleazar 1065
                $response = [
1066
                    'success' => true,
1067
                    'data' => [
16322 anderson 1068
                        'item' => $items,
1069
                        'topic_title' => $topic->title,
1070
                        'feed_title' => $feed->title
11404 eleazar 1071
                    ]
1072
                ];
1073
            }
16322 anderson 1074
 
11331 eleazar 1075
            return new JsonModel($response);
11399 eleazar 1076
        }
10118 nelberth 1077
    }
1 www 1078
    /**
1079
     *
1080
     * @param string $str
1081
     * @return string
1082
     */
16322 anderson 1083
    private function normalizeString($str = '')
1084
    {
1 www 1085
        $basename  = substr($str, 0, strrpos($str, '.'));
1086
        $basename  = str_replace('.', '-', $basename);
16322 anderson 1087
 
1 www 1088
        $extension  = substr($str, strrpos($str, '.'));
16322 anderson 1089
 
1 www 1090
        $str = $basename . $extension;
16322 anderson 1091
 
1 www 1092
        $str = strip_tags($str);
1093
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
1094
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
1095
        $str = strtolower($str);
16322 anderson 1096
        $str = html_entity_decode($str, ENT_QUOTES, "utf-8");
1 www 1097
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
1098
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
1099
        $str = str_replace(' ', '-', $str);
1100
        $str = rawurlencode($str);
1101
        $str = str_replace('%', '-', $str);
1102
        return trim(strtolower($str));
1103
    }
16322 anderson 1104
 
1105
 
1106
 
1 www 1107
    /**
1108
     *
1109
     * @param int $feed_id
1110
     * @param Company $company
1111
     * @return array
1112
     */
16322 anderson 1113
    private function renderFeed($feed_id, $now, $group_uuid = '', $myt_id = '')
1 www 1114
    {
15351 efrain 1115
 
1 www 1116
 
16322 anderson 1117
 
1118
 
1119
 
1 www 1120
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1121
        $currentUser = $currentUserPlugin->getUser();
1122
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1123
 
1 www 1124
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1125
        $company = $companyMapper->fetchOne($currentCompany->id);
16322 anderson 1126
 
1 www 1127
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1128
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
15351 efrain 1129
 
1130
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1131
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1132
 
1 www 1133
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
16322 anderson 1134
 
1 www 1135
        $feedMapper = FeedMapper::getInstance($this->adapter);
1136
        $feed = $feedMapper->fetchOne($feed_id);
1137
 
16322 anderson 1138
 
1 www 1139
        $params = [
1140
            'id' => $feed->uuid
1141
        ];
1142
 
16322 anderson 1143
 
1 www 1144
        $item = [
1145
            'feed_unique' => uniqid(),
1146
            'feed_uuid' => $feed->uuid,
8218 nelberth 1147
            'feed_delete_url' =>  $this->url()->fromRoute('feeds/delete',  $params),
1 www 1148
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
15454 efrain 1149
            'feed_delete_url' => $this->url()->fromRoute('feeds/delete',  $params),
16322 anderson 1150
            'owner_url' =>  'https://' . $network->main_hostname . '/company/view/' . $company->uuid,
15454 efrain 1151
            'owner_image' => $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]),
16322 anderson 1152
            'owner_name' => $company->name,
1 www 1153
        ];
16322 anderson 1154
 
1 www 1155
        $userMapper = UserMapper::getInstance($this->adapter);
1156
        $user = $userMapper->fetchOne($feed->user_id);
1157
 
16322 anderson 1158
 
1159
        $item['owner_description'] = strip_tags($feed->description, 'p');
1 www 1160
        $item['owner_shared'] = $feed->total_shared;
1161
        $item['owner_comments'] = $feed->total_comments;
16322 anderson 1162
 
1163
 
1164
        $item['owner_time_elapse'] = Functions::timeAgo($feed->added_on, $now);
1165
 
1166
        if ($feed->file_type == Feed::FILE_TYPE_IMAGE) {
1 www 1167
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1168
        }
16322 anderson 1169
        if ($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1 www 1170
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1171
        }
16322 anderson 1172
        if ($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1 www 1173
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
1174
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1175
        }
16322 anderson 1176
 
1 www 1177
        $commentMapper = CommentMapper::getInstance($this->adapter);
1178
        $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
16322 anderson 1179
 
1180
 
1 www 1181
        $comments = [];
16322 anderson 1182
        $comment_count = 0;
1183
        foreach ($records as $record) {
1 www 1184
            $user = $userMapper->fetchOne($record->user_id);
1185
 
1186
            $comment = [];
1187
            $comment['unique'] = uniqid();
10073 nelberth 1188
            $comment_count++;
16322 anderson 1189
            $comment['comment_index'] = $comment_count;
1 www 1190
            $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1191
            if ($user->id == $owner->user_id) {
1192
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
1193
                $comment['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1 www 1194
                $comment['user_name'] = $company->name;
1195
            } else {
16322 anderson 1196
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
1197
                $comment['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1 www 1198
                $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1199
            }
16322 anderson 1200
            $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1201
            $comment['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1202
            $comment['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1 www 1203
            $comment['comment'] = $record->comment;
16322 anderson 1204
 
8414 nelberth 1205
            $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1206
            $answers = [];
16322 anderson 1207
            $contador = 0;
1208
            foreach ($records2 as $record2) {
8414 nelberth 1209
                $user = $userMapper->fetchOne($record2->user_id);
1210
 
14740 efrain 1211
 
8414 nelberth 1212
                $answer = [];
1213
                $answer['unique'] = uniqid();
16322 anderson 1214
 
1215
 
8414 nelberth 1216
                $user = $userMapper->fetchOne($record2->user_id);
16322 anderson 1217
                if ($user->id == $owner->user_id) {
1218
                    $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
1219
                    $answer['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
8414 nelberth 1220
                    $answer['user_name'] = $company->name;
1221
                } else {
16322 anderson 1222
                    $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
1223
                    $answer['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
8414 nelberth 1224
                    $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1225
                }
16322 anderson 1226
                $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record2->uuid]);
14740 efrain 1227
                $answer['time_elapsed'] = Functions::timeAgo($record2->added_on, $now);
8414 nelberth 1228
                $answer['comment'] = $record2->comment;
16322 anderson 1229
 
8414 nelberth 1230
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1231
 
8499 nelberth 1232
                $contador++;
8414 nelberth 1233
                array_push($answers, $answer);
1234
            }
16322 anderson 1235
            $comment['number_answers'] = $contador;
8416 nelberth 1236
            $comment['answers'] = $answers;
1 www 1237
            array_push($comments, $comment);
1238
        }
1239
        $item['comment_add_url'] = $this->url()->fromRoute('feeds/comments', ['id' => $feed->uuid]);
16322 anderson 1240
        $item['comments'] = $comments;
1241
 
1242
 
1243
 
1 www 1244
        return $item;
1245
    }
16322 anderson 1246
 
1 www 1247
    /**
1248
     *
1249
     * @param int $comment_id
1250
     * @return array
1251
     */
14740 efrain 1252
    private function renderComment($comment_id, $now)
1 www 1253
    {
1254
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1255
        $currentUser = $currentUserPlugin->getUser();
16322 anderson 1256
 
15351 efrain 1257
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1258
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1259
 
1260
 
1 www 1261
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1262
 
1 www 1263
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1264
        $company = $companyMapper->fetchOne($currentCompany->id);
15351 efrain 1265
 
16322 anderson 1266
 
1 www 1267
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
16322 anderson 1268
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1269
 
1270
 
1271
 
1272
 
1273
 
1274
 
1 www 1275
        $item = [];
16322 anderson 1276
 
1 www 1277
        $commentMapper = CommentMapper::getInstance($this->adapter);
1278
        $record = $commentMapper->fetchOne($comment_id);
16322 anderson 1279
 
1 www 1280
        $feedMapper = FeedMapper::getInstance($this->adapter);
1281
        $feed = $feedMapper->fetchOne($record->feed_id);
16322 anderson 1282
 
1283
        if ($record) {
1 www 1284
            $userMapper = UserMapper::getInstance($this->adapter);
14740 efrain 1285
 
16322 anderson 1286
 
1 www 1287
            $item = [];
1288
            $item['unique'] = uniqid();
16322 anderson 1289
 
1290
 
1 www 1291
            $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1292
            if ($user->id == $owner->user_id) {
1293
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
1294
                $item['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1 www 1295
                $item['user_name'] = $company->name;
1296
            } else {
16322 anderson 1297
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
1298
                $item['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1 www 1299
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1300
            }
16322 anderson 1301
 
1302
 
1303
 
1304
            $item['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1305
            $item['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
14740 efrain 1306
            $item['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1 www 1307
            $item['comment'] = $record->comment;
1308
        }
1309
        return $item;
1310
    }
16322 anderson 1311
 
1 www 1312
    /**
1313
     *
1314
     * @param string $path
1315
     * @return boolean
1316
     */
1317
    private function deletePath($path)
1318
    {
1319
        try {
16322 anderson 1320
            if (is_dir($path)) {
1 www 1321
                if ($dh = opendir($path)) {
16322 anderson 1322
                    while (($file = readdir($dh)) !== false) {
1323
                        if ($file == '.' || $file == '..') {
1 www 1324
                            continue;
1325
                        }
1326
                        unlink($path . DIRECTORY_SEPARATOR . $file);
1327
                    }
1328
                    closedir($dh);
1329
                }
16322 anderson 1330
 
1 www 1331
                rmdir($path);
1332
            }
1333
            return true;
16322 anderson 1334
        } catch (\Throwable $e) {
1 www 1335
            error_log($e->getTraceAsString());
1336
            return false;
1337
        }
1338
    }
1339
}