Proyectos de Subversion LeadersLinked - Backend

Rev

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