Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16961 | Rev 16983 | 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)) {
16979 efrain 748
                                    mkdir($target_path, 0755, true);
16701 efrain 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)) {
16979 efrain 769
                                    mkdir($target_path, 0755, true);
16701 efrain 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'];
16961 efrain 798
                                    $cmd        = "/usr/bin/ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width,duration  $full_filename";
799
                                    //error_log($cmd);
800
 
801
                                    $response   = trim(shell_exec($cmd));
802
 
803
                                    $source_duration = 0;
804
 
805
 
806
                                    $lines = explode("\n", $response);
807
                                    foreach ($lines as $line) {
808
                                        $line = trim(strtolower($line));
809
                                        if (strpos($line, 'duration') !== false) {
810
                                            $values = explode('=', $line);
811
                                            $source_duration = intval(str_replace($values[1], '#', ''), 10);
812
                                        }
813
                                    }
814
 
815
 
816
                                    if ($source_duration == 0) {
817
                                        $second_extract = '00:00:02';
818
                                    } else {
819
                                        if ($source_duration > 10) {
820
                                            $second_extract = '00:00:10';
821
                                        } else {
822
                                            $second_extract = '00:00:02';
823
                                        }
824
                                    }
16701 efrain 825
 
826
                                    //extracción del cover
827
                                    $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
16961 efrain 828
                                    $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.jpg';
829
                                    //$cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
830
                                    $cmd = "/usr/bin/ffmpeg -y -i $full_filename  -pix_fmt yuvj422p -an -ss  $second_extract -f mjpeg -t 1 -r 1 -y  $generateFile";
16701 efrain 831
                                    exec($cmd);
832
 
833
 
834
                                    $feed->file_type = $file_type;
835
                                    $feed->file_name = basename($feed_filename);
836
                                    $feed->file_image_preview = basename($generateFile);
837
                                    $feedMapper->update($feed);
838
 
839
                                    $videoConvert = new VideoConvert();
840
                                    $videoConvert->filename = $full_filename;
841
                                    $videoConvert->type = VideoConvert::TYPE_FEED;
842
 
843
                                    $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
844
                                    $videoConvertMapper->insert($videoConvert);
845
                                } else {
846
                                    error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
847
                                }
848
                            } catch (\Throwable $e) {
849
                                error_log($e->getTraceAsString());
850
                            }
851
                        }
852
 
853
 
854
                        $response = [
855
                            'success'   => true,
856
                            'data'   => $this->renderFeed($feed->id, $now)
857
                        ];
858
                    } else {
859
                        $response = [
860
                            'success'   => false,
861
                            'data'   => $feedMapper->getError()
862
                        ];
1 www 863
                    }
864
                } else {
16701 efrain 865
                    $messages = [];
866
                    $form_messages = (array) $form->getMessages();
867
                    foreach ($form_messages  as $fieldname => $field_messages) {
868
                        $messages[$fieldname] = array_values($field_messages);
869
                    }
870
 
1 www 871
                    $response = [
872
                        'success'   => false,
16701 efrain 873
                        'data'   => $messages
1 www 874
                    ];
875
                }
876
            }
877
        } else {
878
            $response = [
879
                'success' => false,
880
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
881
            ];
882
        }
16322 anderson 883
 
1 www 884
        return new JsonModel($response);
885
    }
16322 anderson 886
 
887
 
14740 efrain 888
    public function timelineAction()
889
    {
16322 anderson 890
 
16701 efrain 891
 
892
 
16322 anderson 893
 
1 www 894
        $currentUserPlugin = $this->plugin('currentUserPlugin');
895
        $currentUser = $currentUserPlugin->getUser();
896
        $currentCompany = $currentUserPlugin->getCompany();
7357 nelberth 897
 
16322 anderson 898
 
899
 
900
 
901
 
7366 nelberth 902
        $request = $this->getRequest();
16322 anderson 903
        if ($request->isGet()) {
904
 
8672 nelberth 905
            $page = (int) $this->params()->fromQuery('page');
906
            $type   = $this->params()->fromRoute('type');
11091 nelberth 907
            $topic_uuid   = $this->params()->fromRoute('topic_id');
8672 nelberth 908
            $urgent   = $this->params()->fromRoute('urgent');
10820 eleazar 909
            $myt_id =  $this->params()->fromRoute('myt_id');
11098 nelberth 910
            $hptg_uuid =  $this->params()->fromRoute('hptg_id');
11108 nelberth 911
 
11113 nelberth 912
 
16322 anderson 913
            if ($hptg_uuid) {
914
 
915
 
7381 nelberth 916
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
16701 efrain 917
                $now = $highPerformanceTeamsGroupsMapper->getDatebaseNow();
918
 
11098 nelberth 919
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($hptg_uuid);
16322 anderson 920
 
7414 nelberth 921
                if (!$highPerformanceTeamsGroups) {
922
                    $data = [
923
                        'success' => false,
924
                        'data' => 'ERROR_RECORD_NOT_FOUND'
925
                    ];
926
 
927
                    return new JsonModel($data);
928
                }
929
 
16322 anderson 930
                if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
7414 nelberth 931
 
932
                    return new JsonModel([
933
                        'success' => false,
934
                        'data' => 'ERROR_UNAUTHORIZED'
935
                    ]);
16322 anderson 936
                }
7414 nelberth 937
 
938
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
939
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
16322 anderson 940
                if ($highPerformanceTeamsGroupsMember) {
941
                    if ($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) {
7701 nelberth 942
                        $queryMapper = QueryMapper::getInstance($this->adapter);
943
                        $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
944
                        $select->columns(['id']);
945
                        $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 946
                        $select->where->equalTo('company_id', $currentCompany->id);
947
                        $select->where->equalTo('high_performance_group_id', $highPerformanceTeamsGroups->id);
948
 
949
 
950
                        if (isset($topic_uuid)) {
9539 nelberth 951
                            $topicMapper = TopicMapper::getInstance($this->adapter);
952
                            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
16322 anderson 953
                            if ($topic) {
954
                                if ($topic->status != 'a') {
7766 nelberth 955
                                    return new JsonModel([
956
                                        'success' => false,
957
                                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
958
                                    ]);
959
                                }
16322 anderson 960
                                $select->where->equalTo('topic_id', $topic->id);
961
                            } else {
7643 nelberth 962
                                return new JsonModel([
963
                                    'success' => false,
8689 nelberth 964
                                    'data' => 'ERROR_RECORD_NOT_FOUND'
7643 nelberth 965
                                ]);
966
                            }
16322 anderson 967
                        } else {
968
                            if (isset($urgent)) {
8739 nelberth 969
                                $select->where->equalTo('priority', Feed::PRIORITY_URGENT);
16322 anderson 970
                            } else {
9569 nelberth 971
                                $select->where->IsNull('topic_id');
8739 nelberth 972
                            }
7643 nelberth 973
                        }
16322 anderson 974
 
975
 
7420 nelberth 976
                        $select->where->and->equalTo('type', Feed::TYPE_HPTG);
977
                        $select->order('added_on desc');
16322 anderson 978
                    } else {
7414 nelberth 979
                        return new JsonModel([
980
                            'success' => false,
981
                            'data' => 'ERROR_UNAUTHORIZED'
982
                        ]);
983
                    }
7381 nelberth 984
                } else {
7414 nelberth 985
 
986
                    return new JsonModel([
987
                        'success' => false,
988
                        'data' => 'ERROR_RECORD_NOT_FOUND'
989
                    ]);
7381 nelberth 990
                }
16322 anderson 991
            } else if ($myt_id) {
10990 eleazar 992
                $feedMapper = FeedMapper::getInstance($this->adapter);
16701 efrain 993
                $now = $feedMapper->getDatebaseNow();
994
 
10990 eleazar 995
                $myt  = $feedMapper->fetchOneByUuid($myt_id);
10601 eleazar 996
                $queryMapper = QueryMapper::getInstance($this->adapter);
997
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
998
                $select->columns(['id']);
999
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 1000
                $select->where->equalTo('company_id', $currentCompany->id);
10992 eleazar 1001
                $select->where->equalTo('myt_id', $myt->id);
11001 eleazar 1002
                $select->where->and->equalTo('type', Feed::TYPE_MYT_ANSWER);
10601 eleazar 1003
                $select->order('added_on desc');
16322 anderson 1004
            } else {
10557 eleazar 1005
 
7350 nelberth 1006
                $queryMapper = QueryMapper::getInstance($this->adapter);
16701 efrain 1007
                $now = $queryMapper->getDatebaseNow();
1008
 
7350 nelberth 1009
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
1010
                $select->columns(['id']);
1011
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 1012
                $select->where->equalTo('company_id', $currentCompany->id);
7350 nelberth 1013
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
1014
                $select->order('added_on desc');
16701 efrain 1015
 
1016
                //echo $select->getSqlString($this->adapter->platform); exit;
1017
 
7350 nelberth 1018
            }
16322 anderson 1019
 
1020
 
1021
 
1 www 1022
            $dbSelect = new DbSelect($select, $this->adapter);
1023
            $paginator = new Paginator($dbSelect);
1024
            $paginator->setCurrentPageNumber($page ? $page : 1);
1025
            $paginator->setItemCountPerPage(10);
16322 anderson 1026
 
1 www 1027
            $items = [];
1028
            $feeds = $paginator->getCurrentItems();
16322 anderson 1029
 
1030
            foreach ($feeds as $feed) {
14740 efrain 1031
                $items[] = $this->renderFeed($feed->id, $now);
1 www 1032
            }
16322 anderson 1033
 
1 www 1034
            $response = [
1035
                'success' => true,
1036
                'data' => [
1037
                    'total' => [
1038
                        'count' => $paginator->getTotalItemCount(),
1039
                        'pages' => $paginator->getPages()->pageCount,
1040
                    ],
1041
                    'current' => [
1042
                        'items'    => $items,
1043
                        'page'     => $paginator->getCurrentPageNumber(),
1044
                        'count'    => $paginator->getCurrentItemCount(),
1045
                    ]
1046
                ]
1047
            ];
16322 anderson 1048
 
1 www 1049
            return new JsonModel($response);
1050
        }
16322 anderson 1051
 
1 www 1052
        $response = [
1053
            'success' => false,
1054
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1055
        ];
16322 anderson 1056
 
1057
 
1 www 1058
        return new JsonModel($response);
1059
    }
16322 anderson 1060
 
14740 efrain 1061
    public function oneFeedAction()
1062
    {
16701 efrain 1063
 
1064
 
16322 anderson 1065
 
1066
 
10118 nelberth 1067
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1068
        $currentUser = $currentUserPlugin->getUser();
1069
        $currentCompany = $currentUserPlugin->getCompany();
11331 eleazar 1070
 
10118 nelberth 1071
        $request = $this->getRequest();
16322 anderson 1072
        if ($request->isGet()) {
1073
 
11725 eleazar 1074
            $feed_uuid =  $this->params()->fromRoute('id');
1075
            $myt_id =  $this->params()->fromRoute('id');
16322 anderson 1076
 
1077
            if (!isset($feed_uuid)) {
1078
                $data = [
1079
                    'success'   => false,
1080
                    'data'   => 'ERROR_INVALID_PARAMETER'
1081
                ];
1082
 
1083
                return new JsonModel($data);
11331 eleazar 1084
            }
16322 anderson 1085
 
10118 nelberth 1086
            $items = [];
11331 eleazar 1087
            $feedMapper = FeedMapper::getInstance($this->adapter);
16701 efrain 1088
            $now = $feedMapper->getDatebaseNow();
1089
 
11331 eleazar 1090
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
1091
 
1092
            if (!$feed) {
1093
                $data = [
1094
                    'success' => false,
1095
                    'data' => 'ERROR_RECORD_NOT_FOUND'
1096
                ];
16322 anderson 1097
 
11331 eleazar 1098
                return new JsonModel($data);
16322 anderson 1099
            }
1100
 
1101
            if ($feed->type == 'mytq') {
1102
 
14740 efrain 1103
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11195 eleazar 1104
 
11536 eleazar 1105
                $response = [
1106
                    'success' => true,
1107
                    'data' => [
16322 anderson 1108
                        'item' => $items,
1109
                        'feed_title' => $feed->title,
1110
                        'topic_title' => $feed->description
11536 eleazar 1111
                    ]
1112
                ];
16322 anderson 1113
            } else if ($feed->type == 'myta') {
1114
 
14740 efrain 1115
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11519 eleazar 1116
 
1117
                $response = [
1118
                    'success' => true,
1119
                    'data' => [
16322 anderson 1120
                        'item' => $items,
1121
                        'feed_title' => $feed->title,
1122
                        'topic_title' => $feed->description
11519 eleazar 1123
                    ]
1124
                ];
16322 anderson 1125
            } else if ($feed->type == 'hptg') {
11519 eleazar 1126
 
11404 eleazar 1127
                $group_uuid =  $this->params()->fromRoute('group_id');
1128
                $topic_uuid   = $this->params()->fromRoute('topic_id');
10118 nelberth 1129
 
16322 anderson 1130
                if (!isset($topic_uuid)) {
1131
 
11404 eleazar 1132
                    $data = [
1133
                        'success'   => false,
1134
                        'data'   => 'ERROR_INVALID_PARAMETER'
1135
                    ];
16322 anderson 1136
 
11404 eleazar 1137
                    return new JsonModel($data);
1138
                }
16322 anderson 1139
                if (!isset($group_uuid)) {
1140
 
11404 eleazar 1141
                    $data = [
1142
                        'success'   => false,
1143
                        'data'   => 'ERROR_INVALID_PARAMETER'
1144
                    ];
16322 anderson 1145
 
11404 eleazar 1146
                    return new JsonModel($data);
1147
                }
1148
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
1149
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
16322 anderson 1150
 
11404 eleazar 1151
                if (!$highPerformanceTeamsGroups) {
1152
                    $data = [
1153
                        'success' => false,
1154
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1155
                    ];
16322 anderson 1156
 
11404 eleazar 1157
                    return new JsonModel($data);
1158
                }
10118 nelberth 1159
 
16322 anderson 1160
 
1161
                if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
1162
 
11404 eleazar 1163
                    return new JsonModel([
1164
                        'success' => false,
1165
                        'data' => 'ERROR_UNAUTHORIZED'
1166
                    ]);
16322 anderson 1167
                }
10118 nelberth 1168
 
16322 anderson 1169
                if ($feed->high_performance_group_id != $highPerformanceTeamsGroups->id) {
11404 eleazar 1170
                    return new JsonModel([
1171
                        'success' => false,
1172
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1173
                    ]);
1174
                }
16322 anderson 1175
 
11404 eleazar 1176
                $topicMapper = TopicMapper::getInstance($this->adapter);
1177
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
10118 nelberth 1178
 
11404 eleazar 1179
                if (!$topic) {
1180
                    $data = [
1181
                        'success' => false,
1182
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1183
                    ];
16322 anderson 1184
 
11404 eleazar 1185
                    return new JsonModel($data);
16322 anderson 1186
                }
10118 nelberth 1187
 
16322 anderson 1188
                if ($feed->topic_id != $topic->id) {
11404 eleazar 1189
                    return new JsonModel([
1190
                        'success' => false,
1191
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1192
                    ]);
16322 anderson 1193
                }
10521 eleazar 1194
 
16322 anderson 1195
                $items = $this->renderFeed($feed->id, $now, $group_uuid);
1196
 
11404 eleazar 1197
                $response = [
1198
                    'success' => true,
1199
                    'data' => [
16322 anderson 1200
                        'item' => $items,
1201
                        'topic_title' => $topic->title,
1202
                        'feed_title' => $feed->title
11404 eleazar 1203
                    ]
1204
                ];
1205
            }
16322 anderson 1206
 
11331 eleazar 1207
            return new JsonModel($response);
11399 eleazar 1208
        }
10118 nelberth 1209
    }
1 www 1210
    /**
1211
     *
1212
     * @param string $str
1213
     * @return string
1214
     */
16322 anderson 1215
    private function normalizeString($str = '')
1216
    {
1 www 1217
        $basename  = substr($str, 0, strrpos($str, '.'));
1218
        $basename  = str_replace('.', '-', $basename);
16322 anderson 1219
 
1 www 1220
        $extension  = substr($str, strrpos($str, '.'));
16322 anderson 1221
 
1 www 1222
        $str = $basename . $extension;
16322 anderson 1223
 
1 www 1224
        $str = strip_tags($str);
1225
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
1226
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
1227
        $str = strtolower($str);
16322 anderson 1228
        $str = html_entity_decode($str, ENT_QUOTES, "utf-8");
1 www 1229
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
1230
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
1231
        $str = str_replace(' ', '-', $str);
1232
        $str = rawurlencode($str);
1233
        $str = str_replace('%', '-', $str);
1234
        return trim(strtolower($str));
1235
    }
16322 anderson 1236
 
1237
 
1238
 
1 www 1239
    /**
1240
     *
1241
     * @param int $feed_id
1242
     * @param Company $company
1243
     * @return array
1244
     */
16322 anderson 1245
    private function renderFeed($feed_id, $now, $group_uuid = '', $myt_id = '')
1 www 1246
    {
15351 efrain 1247
 
1 www 1248
 
1249
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1250
        $currentUser = $currentUserPlugin->getUser();
1251
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1252
 
1 www 1253
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1254
        $company = $companyMapper->fetchOne($currentCompany->id);
16322 anderson 1255
 
1 www 1256
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1257
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
15351 efrain 1258
 
1259
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1260
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1261
 
1 www 1262
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
16322 anderson 1263
 
1 www 1264
        $feedMapper = FeedMapper::getInstance($this->adapter);
1265
        $feed = $feedMapper->fetchOne($feed_id);
1266
 
16322 anderson 1267
 
1 www 1268
        $params = [
1269
            'id' => $feed->uuid
1270
        ];
1271
 
16322 anderson 1272
 
1 www 1273
        $item = [
1274
            'feed_unique' => uniqid(),
1275
            'feed_uuid' => $feed->uuid,
1276
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
16322 anderson 1277
            'owner_url' =>  'https://' . $network->main_hostname . '/company/view/' . $company->uuid,
15454 efrain 1278
            'owner_image' => $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]),
16322 anderson 1279
            'owner_name' => $company->name,
1 www 1280
        ];
16701 efrain 1281
 
16322 anderson 1282
 
16701 efrain 1283
 
1284
 
1 www 1285
        $userMapper = UserMapper::getInstance($this->adapter);
1286
        $user = $userMapper->fetchOne($feed->user_id);
1287
 
16322 anderson 1288
 
16701 efrain 1289
 
1 www 1290
        $item['owner_shared'] = $feed->total_shared;
1291
        $item['owner_comments'] = $feed->total_comments;
16701 efrain 1292
 
1293
 
1294
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1295
            $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
1296
            $fastSurvey = $fastSurveyMapper->fetchOne($feed->fast_survey_id);
1297
 
1298
            $owner_description = [
1299
                'question' => $fastSurvey->question,
1300
                'number_of_answers' => $fastSurvey->number_of_answers,
1301
                'answer1' => $fastSurvey->answer1,
1302
                'answer2' => $fastSurvey->answer2,
1303
                'answer3' => $fastSurvey->answer3,
1304
                'answer4' => $fastSurvey->answer4,
1305
                'answer5' => $fastSurvey->answer5,
1306
                'result_type' => $fastSurvey->result_type,
1307
 
1308
            ];
1309
 
1310
            if($fastSurvey->expire_on > $now) {
1311
 
1312
 
1313
 
1314
                $owner_description['active'] = 1;
1315
                $owner_description['time_remaining'] =  Functions::getDateDiff($now, $fastSurvey->expire_on);
1316
 
1317
            } else {
1318
                if($fastSurvey->result_type == FastSurvey::RESULT_TYPE_PUBLIC) {
1319
                    $owner_description['votes1'] = $fastSurvey->votes1;
1320
                    $owner_description['votes2'] = $fastSurvey->votes2;
1321
                    $owner_description['votes3'] = $fastSurvey->votes3;
1322
                    $owner_description['votes4'] = $fastSurvey->votes4;
1323
                    $owner_description['votes5'] = $fastSurvey->votes5;
1324
                }
1325
 
1326
 
1327
                $owner_description['active'] = 0;
1328
                $owner_description['time_remaining'] = 0;
1329
            }
1330
 
1331
 
1332
            $item['owner_description'] =  $owner_description;
1333
 
1334
 
1335
            $item['feed_delete_url'] = '';
1336
        } else {
1337
            $item['owner_description'] = strip_tags($feed->description, 'p');
1338
            $item['feed_delete_url'] = $this->url()->fromRoute('feeds/delete',  $params);
1339
        }
16322 anderson 1340
 
1341
 
1342
        $item['owner_time_elapse'] = Functions::timeAgo($feed->added_on, $now);
1343
 
1344
        if ($feed->file_type == Feed::FILE_TYPE_IMAGE) {
1 www 1345
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1346
        }
16322 anderson 1347
        if ($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1 www 1348
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1349
        }
16322 anderson 1350
        if ($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1 www 1351
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
1352
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1353
        }
16322 anderson 1354
 
16817 efrain 1355
 
1356
 
1357
 
16701 efrain 1358
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1359
            $item['comment_add_url'] = '';
1360
            $item['comments'] = [];
1361
        } else {
1362
            $commentMapper = CommentMapper::getInstance($this->adapter);
1363
            $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
16817 efrain 1364
 
16701 efrain 1365
 
1366
            $comments = [];
1367
            $comment_count = 0;
1368
            foreach ($records as $record) {
1369
                $user = $userMapper->fetchOne($record->user_id);
1370
 
1371
                $comment = [];
1372
                $comment['unique'] = uniqid();
1373
                $comment_count++;
1374
                $comment['comment_index'] = $comment_count;
1375
                $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1376
                if ($user->id == $owner->user_id) {
16701 efrain 1377
                    $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
1378
                    $comment['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1379
                    $comment['user_name'] = $company->name;
8414 nelberth 1380
                } else {
16701 efrain 1381
                    $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
1382
                    $comment['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1383
                    $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1384
                }
16701 efrain 1385
                $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1386
                $comment['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1387
                $comment['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1388
                $comment['comment'] = $record->comment;
1389
 
1390
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1391
                $answers = [];
1392
                $contador = 0;
1393
                foreach ($records2 as $record2) {
1394
                    $user = $userMapper->fetchOne($record2->user_id);
1395
 
1396
 
1397
                    $answer = [];
1398
                    $answer['unique'] = uniqid();
1399
 
1400
 
1401
                    $user = $userMapper->fetchOne($record2->user_id);
1402
                    if ($user->id == $owner->user_id) {
1403
                        $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
1404
                        $answer['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1405
                        $answer['user_name'] = $company->name;
1406
                    } else {
1407
                        $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
1408
                        $answer['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1409
                        $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
1410
                    }
1411
                    $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record2->uuid]);
1412
                    $answer['time_elapsed'] = Functions::timeAgo($record2->added_on, $now);
1413
                    $answer['comment'] = $record2->comment;
1414
 
1415
                    $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1416
 
1417
                    $contador++;
1418
                    array_push($answers, $answer);
1419
                }
1420
                $comment['number_answers'] = $contador;
1421
                $comment['answers'] = $answers;
1422
                array_push($comments, $comment);
8414 nelberth 1423
            }
16701 efrain 1424
            $item['comment_add_url'] = $this->url()->fromRoute('feeds/comments', ['id' => $feed->uuid]);
1425
            $item['comments'] = $comments;
1 www 1426
        }
16701 efrain 1427
 
1428
        //echo '<pre>';
1429
       // print_r($item);
1430
        //echo '</pre>';
1431
        //exit;
16322 anderson 1432
 
1433
 
1 www 1434
        return $item;
1435
    }
16322 anderson 1436
 
1 www 1437
    /**
1438
     *
1439
     * @param int $comment_id
1440
     * @return array
1441
     */
14740 efrain 1442
    private function renderComment($comment_id, $now)
1 www 1443
    {
1444
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1445
        $currentUser = $currentUserPlugin->getUser();
16322 anderson 1446
 
15351 efrain 1447
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1448
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1449
 
1450
 
1 www 1451
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1452
 
1 www 1453
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1454
        $company = $companyMapper->fetchOne($currentCompany->id);
15351 efrain 1455
 
16322 anderson 1456
 
1 www 1457
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
16322 anderson 1458
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1459
 
1460
 
1461
 
1462
 
1463
 
1464
 
1 www 1465
        $item = [];
16322 anderson 1466
 
1 www 1467
        $commentMapper = CommentMapper::getInstance($this->adapter);
1468
        $record = $commentMapper->fetchOne($comment_id);
16322 anderson 1469
 
1 www 1470
        $feedMapper = FeedMapper::getInstance($this->adapter);
1471
        $feed = $feedMapper->fetchOne($record->feed_id);
16322 anderson 1472
 
1473
        if ($record) {
1 www 1474
            $userMapper = UserMapper::getInstance($this->adapter);
14740 efrain 1475
 
16322 anderson 1476
 
1 www 1477
            $item = [];
1478
            $item['unique'] = uniqid();
16322 anderson 1479
 
1480
 
1 www 1481
            $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1482
            if ($user->id == $owner->user_id) {
16324 anderson 1483
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
16322 anderson 1484
                $item['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1 www 1485
                $item['user_name'] = $company->name;
1486
            } else {
16324 anderson 1487
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
16322 anderson 1488
                $item['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1 www 1489
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1490
            }
16322 anderson 1491
 
1492
 
1493
 
1494
            $item['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1495
            $item['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
14740 efrain 1496
            $item['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1 www 1497
            $item['comment'] = $record->comment;
1498
        }
1499
        return $item;
1500
    }
16322 anderson 1501
 
1 www 1502
    /**
1503
     *
1504
     * @param string $path
1505
     * @return boolean
1506
     */
1507
    private function deletePath($path)
1508
    {
1509
        try {
16322 anderson 1510
            if (is_dir($path)) {
1 www 1511
                if ($dh = opendir($path)) {
16322 anderson 1512
                    while (($file = readdir($dh)) !== false) {
1513
                        if ($file == '.' || $file == '..') {
1 www 1514
                            continue;
1515
                        }
1516
                        unlink($path . DIRECTORY_SEPARATOR . $file);
1517
                    }
1518
                    closedir($dh);
1519
                }
16322 anderson 1520
 
1 www 1521
                rmdir($path);
1522
            }
1523
            return true;
16322 anderson 1524
        } catch (\Throwable $e) {
1 www 1525
            error_log($e->getTraceAsString());
1526
            return false;
1527
        }
1528
    }
1529
}