Proyectos de Subversion LeadersLinked - Backend

Rev

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