Proyectos de Subversion LeadersLinked - Backend

Rev

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