Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16817 | Rev 16928 | 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;
545
 
546
                    $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
547
                    $result = $fastSurveyMapper->insert($fastSurvey);
548
                    if ($result) {
549
                        $feed = new Feed();
550
                        $feed->company_id = $currentCompany->id;
551
                        $feed->network_id = $currentNetwork->id;
552
                        $feed->user_id = $companyUser->id;
553
                        $feed->fast_survey_id = $fastSurvey->id;
554
                        $feed->type = Feed::TYPE_COMPANY;
555
                        $feed->file_type = Feed::FILE_TYPE_FAST_SURVEY;
556
                        $feed->posted_or_shared = Feed::POSTED;
557
                        $feed->status = Feed::STATUS_PUBLISHED;
558
                        $feed->title = '';
559
                        $feed->description = '';
560
                        $feed->total_comments   = 0;
561
                        $feed->total_shared     = 0;
562
                        $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
563
 
564
                        $feedMapper = FeedMapper::getInstance($this->adapter);
565
                        $feedMapper->insert($feed);
566
 
567
                        $this->logger->info('Se agrego la encuesta rápida : ' . $fastSurvey->question, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
568
 
569
                        $response = [
570
                            'success'   => true,
571
                            'data'   => $this->renderFeed($feed->id, $now)
572
                        ];
573
 
574
 
575
                    } else {
576
                        $response = [
7409 nelberth 577
                            'success' => false,
16701 efrain 578
                            'data' => $fastSurveyMapper->getError()
7409 nelberth 579
                        ];
580
                    }
16701 efrain 581
 
582
                    return new JsonModel($response);
583
                } else {
584
                    $messages = [];
585
                    $form_messages = (array) $form->getMessages();
586
                    foreach ($form_messages as $fieldname => $field_messages) {
587
 
588
                        $messages[$fieldname] = array_values($field_messages);
16322 anderson 589
                    }
16701 efrain 590
 
591
                    return new JsonModel([
592
                        'success' => false,
593
                        'data' => $messages
594
                    ]);
595
                }
596
            }  else {
597
 
598
 
599
 
600
 
601
                $form = new CreateFeedForm($this->adapter);
602
 
603
                $form->setData($dataPost);
604
 
605
                if ($form->isValid()) {
606
 
607
 
608
                    $companyMapper = CompanyMapper::getInstance($this->adapter);
609
                    $now = $companyMapper->getDatebaseNow();
610
 
611
 
612
                    $company = $companyMapper->fetchOne($currentCompany->id);
613
 
614
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
615
                    $owner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
616
 
617
                    $dataPost['priority'] =  isset($dataPost['priority']) ? Feed::PRIORITY_URGENT  : '';
618
 
619
 
620
                    $hydrator = new ObjectPropertyHydrator();
621
                    $feed = new Feed();
622
                    $hydrator->hydrate($dataPost, $feed);
623
                    if ($hptg_uuid) {
624
 
625
 
626
 
627
                        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
628
                        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($hptg_uuid);
629
 
630
                        if (!$highPerformanceTeamsGroups) {
631
                            $data = [
632
                                'success' => false,
633
                                'data' => 'ERROR_RECORD_NOT_FOUND'
634
                            ];
635
 
636
                            return new JsonModel($data);
637
                        }
638
 
639
                        if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
640
 
7413 nelberth 641
                            return new JsonModel([
642
                                'success' => false,
643
                                'data' => 'ERROR_UNAUTHORIZED'
644
                            ]);
645
                        }
16701 efrain 646
 
647
                        $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
648
                        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
649
                        if ($highPerformanceTeamsGroupsMember) {
650
                            if ($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) {
651
                                $id =  $highPerformanceTeamsGroups->id;
652
                            } else {
653
 
654
                                return new JsonModel([
655
                                    'success' => false,
656
                                    'data' => 'ERROR_UNAUTHORIZED'
657
                                ]);
658
                            }
16322 anderson 659
                        } else {
16701 efrain 660
 
7644 nelberth 661
                            return new JsonModel([
662
                                'success' => false,
663
                                'data' => 'ERROR_RECORD_NOT_FOUND'
664
                            ]);
665
                        }
16701 efrain 666
                        $topic_uuid =  $this->params()->fromRoute('topic_id');
667
                        if ($topic_uuid) {
668
                            $topicMapper = TopicMapper::getInstance($this->adapter);
669
                            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
670
                            if ($topic) {
671
                                $feed->topic_id = $topic->id;
1 www 672
                            } else {
16701 efrain 673
                                return new JsonModel([
674
                                    'success' => false,
675
                                    'data' => 'ERROR_RECORD_NOT_FOUND'
676
                                ]);
1 www 677
                            }
678
                        }
16701 efrain 679
 
680
 
681
                        $feed->network_id       = $currentUser->network_id;
682
                        $feed->company_id       = $currentCompany->id;
683
                        $feed->group_id         = null;
684
                        $feed->high_performance_group_id = $id;
685
                        $feed->user_id          = $currentUser->id;
686
                        $feed->type             = Feed::TYPE_HPTG;
687
                        $feed->posted_or_shared = Feed::POSTED;
688
                        $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
689
                    } else if ($myt_id) {
690
                        $feedMapper = FeedMapper::getInstance($this->adapter);
691
                        $myt  = $feedMapper->fetchOneByUuid($myt_id);
692
                        $feed->network_id       = $currentUser->network_id;
693
                        $feed->company_id       = $currentCompany->id;
694
                        $feed->group_id         = null;
695
                        $feed->user_id          = $owner->user_id;
696
                        $feed->myt_id           = $myt->id;
697
                        $feed->related_feed     = $myt->id;
698
                        $feed->type             = Feed::TYPE_MYT_ANSWER;
699
                        $feed->posted_or_shared = Feed::POSTED;
700
                        $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
701
                    } else {
702
                        $feed->network_id       = $currentUser->network_id;
703
                        $feed->company_id       = $currentCompany->id;
704
                        $feed->group_id         = null;
705
                        $feed->user_id          = $owner->user_id;
706
                        $feed->type             = Feed::TYPE_COMPANY;
707
                        $feed->posted_or_shared = Feed::POSTED;
708
                        $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
1 www 709
                    }
16701 efrain 710
 
711
 
712
 
713
 
714
                    $feed->total_comments   = 0;
715
                    $feed->total_shared     = 0;
716
 
717
 
718
                    $files = $this->getRequest()->getFiles()->toArray();
719
                    $file_type = '';
720
                    if (isset($files['file']) && empty($files['file']['error'])) {
721
                        $feed_tmp_filename  = $files['file']['tmp_name'];
722
                        $feed_filename      = $this->normalizeString($files['file']['name']);
723
 
724
                        $mime_type = mime_content_type($feed_tmp_filename);
725
                        if ($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
726
                            $file_type = Feed::FILE_TYPE_IMAGE;
16822 efrain 727
                        } else if ($mime_type == 'video/quicktime' ||  $mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
16701 efrain 728
                            $file_type = Feed::FILE_TYPE_VIDEO;
729
                        } else if ($mime_type == 'application/pdf') {
730
                            $file_type = Feed::FILE_TYPE_DOCUMENT;
1 www 731
                        }
732
                    }
16701 efrain 733
 
734
 
735
                    $feedMapper = FeedMapper::getInstance($this->adapter);
736
                    $result = $feedMapper->insert($feed);
737
 
738
 
739
                    if ($result) {
740
 
741
                        $feed = $feedMapper->fetchOne($feed->id);
742
 
743
                        if ($file_type == Feed::FILE_TYPE_DOCUMENT) {
744
                            try {
745
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
746
                                if (!file_exists($target_path)) {
747
                                    mkdir($target_path, 0755);
748
                                }
749
 
750
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
751
                                $result = move_uploaded_file($feed_tmp_filename, $full_filename);
752
                                if ($result) {
753
 
754
                                    $feed->file_type = $file_type;
755
                                    $feed->file_name = basename($feed_filename);
756
                                    $feedMapper->update($feed);
757
                                } else {
758
                                    error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
759
                                }
760
                            } catch (\Throwable $e) {
761
                                error_log($e->getTraceAsString());
1 www 762
                            }
16701 efrain 763
                        }
764
                        if ($file_type == Feed::FILE_TYPE_IMAGE) {
765
                            try {
766
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
767
                                if (!file_exists($target_path)) {
768
                                    mkdir($target_path, 0755);
769
                                }
770
 
771
                                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
772
 
773
                                $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
774
                                $crop_to_dimensions = false;
775
                                if (Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions)) {
776
                                    $feed->file_type = $file_type;
777
                                    $feed->file_name = basename($feed_filename);
778
                                    $feedMapper->update($feed);
779
                                }
780
                            } catch (\Throwable $e) {
781
                                error_log($e->getTraceAsString());
1 www 782
                            }
783
                        }
16701 efrain 784
                        if ($file_type == Feed::FILE_TYPE_VIDEO) {
785
                            try {
786
                                $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
787
                                if (!file_exists($target_path)) {
788
                                    mkdir($target_path, 0755);
789
                                }
790
 
791
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
792
 
793
                                $result = move_uploaded_file($feed_tmp_filename, $full_filename);
794
                                if ($result) {
795
 
796
                                    $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
797
                                    $getFromSecound = 2;
798
 
799
                                    //extracción del cover
800
                                    $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
801
                                    $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
802
                                    $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
803
                                    exec($cmd);
804
 
805
 
806
                                    $feed->file_type = $file_type;
807
                                    $feed->file_name = basename($feed_filename);
808
                                    $feed->file_image_preview = basename($generateFile);
809
                                    $feedMapper->update($feed);
810
 
811
                                    $videoConvert = new VideoConvert();
812
                                    $videoConvert->filename = $full_filename;
813
                                    $videoConvert->type = VideoConvert::TYPE_FEED;
814
 
815
                                    $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
816
                                    $videoConvertMapper->insert($videoConvert);
817
                                } else {
818
                                    error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename);
819
                                }
820
                            } catch (\Throwable $e) {
821
                                error_log($e->getTraceAsString());
822
                            }
823
                        }
824
 
825
 
826
                        $response = [
827
                            'success'   => true,
828
                            'data'   => $this->renderFeed($feed->id, $now)
829
                        ];
830
                    } else {
831
                        $response = [
832
                            'success'   => false,
833
                            'data'   => $feedMapper->getError()
834
                        ];
1 www 835
                    }
836
                } else {
16701 efrain 837
                    $messages = [];
838
                    $form_messages = (array) $form->getMessages();
839
                    foreach ($form_messages  as $fieldname => $field_messages) {
840
                        $messages[$fieldname] = array_values($field_messages);
841
                    }
842
 
1 www 843
                    $response = [
844
                        'success'   => false,
16701 efrain 845
                        'data'   => $messages
1 www 846
                    ];
847
                }
848
            }
849
        } else {
850
            $response = [
851
                'success' => false,
852
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
853
            ];
854
        }
16322 anderson 855
 
1 www 856
        return new JsonModel($response);
857
    }
16322 anderson 858
 
859
 
14740 efrain 860
    public function timelineAction()
861
    {
16322 anderson 862
 
16701 efrain 863
 
864
 
16322 anderson 865
 
1 www 866
        $currentUserPlugin = $this->plugin('currentUserPlugin');
867
        $currentUser = $currentUserPlugin->getUser();
868
        $currentCompany = $currentUserPlugin->getCompany();
7357 nelberth 869
 
16322 anderson 870
 
871
 
872
 
873
 
7366 nelberth 874
        $request = $this->getRequest();
16322 anderson 875
        if ($request->isGet()) {
876
 
8672 nelberth 877
            $page = (int) $this->params()->fromQuery('page');
878
            $type   = $this->params()->fromRoute('type');
11091 nelberth 879
            $topic_uuid   = $this->params()->fromRoute('topic_id');
8672 nelberth 880
            $urgent   = $this->params()->fromRoute('urgent');
10820 eleazar 881
            $myt_id =  $this->params()->fromRoute('myt_id');
11098 nelberth 882
            $hptg_uuid =  $this->params()->fromRoute('hptg_id');
11108 nelberth 883
 
11113 nelberth 884
 
16322 anderson 885
            if ($hptg_uuid) {
886
 
887
 
7381 nelberth 888
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
16701 efrain 889
                $now = $highPerformanceTeamsGroupsMapper->getDatebaseNow();
890
 
11098 nelberth 891
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($hptg_uuid);
16322 anderson 892
 
7414 nelberth 893
                if (!$highPerformanceTeamsGroups) {
894
                    $data = [
895
                        'success' => false,
896
                        'data' => 'ERROR_RECORD_NOT_FOUND'
897
                    ];
898
 
899
                    return new JsonModel($data);
900
                }
901
 
16322 anderson 902
                if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
7414 nelberth 903
 
904
                    return new JsonModel([
905
                        'success' => false,
906
                        'data' => 'ERROR_UNAUTHORIZED'
907
                    ]);
16322 anderson 908
                }
7414 nelberth 909
 
910
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
911
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMemberMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
16322 anderson 912
                if ($highPerformanceTeamsGroupsMember) {
913
                    if ($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) {
7701 nelberth 914
                        $queryMapper = QueryMapper::getInstance($this->adapter);
915
                        $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
916
                        $select->columns(['id']);
917
                        $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 918
                        $select->where->equalTo('company_id', $currentCompany->id);
919
                        $select->where->equalTo('high_performance_group_id', $highPerformanceTeamsGroups->id);
920
 
921
 
922
                        if (isset($topic_uuid)) {
9539 nelberth 923
                            $topicMapper = TopicMapper::getInstance($this->adapter);
924
                            $topic = $topicMapper->fetchOneByUuid($topic_uuid);
16322 anderson 925
                            if ($topic) {
926
                                if ($topic->status != 'a') {
7766 nelberth 927
                                    return new JsonModel([
928
                                        'success' => false,
929
                                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
930
                                    ]);
931
                                }
16322 anderson 932
                                $select->where->equalTo('topic_id', $topic->id);
933
                            } else {
7643 nelberth 934
                                return new JsonModel([
935
                                    'success' => false,
8689 nelberth 936
                                    'data' => 'ERROR_RECORD_NOT_FOUND'
7643 nelberth 937
                                ]);
938
                            }
16322 anderson 939
                        } else {
940
                            if (isset($urgent)) {
8739 nelberth 941
                                $select->where->equalTo('priority', Feed::PRIORITY_URGENT);
16322 anderson 942
                            } else {
9569 nelberth 943
                                $select->where->IsNull('topic_id');
8739 nelberth 944
                            }
7643 nelberth 945
                        }
16322 anderson 946
 
947
 
7420 nelberth 948
                        $select->where->and->equalTo('type', Feed::TYPE_HPTG);
949
                        $select->order('added_on desc');
16322 anderson 950
                    } else {
7414 nelberth 951
                        return new JsonModel([
952
                            'success' => false,
953
                            'data' => 'ERROR_UNAUTHORIZED'
954
                        ]);
955
                    }
7381 nelberth 956
                } else {
7414 nelberth 957
 
958
                    return new JsonModel([
959
                        'success' => false,
960
                        'data' => 'ERROR_RECORD_NOT_FOUND'
961
                    ]);
7381 nelberth 962
                }
16322 anderson 963
            } else if ($myt_id) {
10990 eleazar 964
                $feedMapper = FeedMapper::getInstance($this->adapter);
16701 efrain 965
                $now = $feedMapper->getDatebaseNow();
966
 
10990 eleazar 967
                $myt  = $feedMapper->fetchOneByUuid($myt_id);
10601 eleazar 968
                $queryMapper = QueryMapper::getInstance($this->adapter);
969
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
970
                $select->columns(['id']);
971
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 972
                $select->where->equalTo('company_id', $currentCompany->id);
10992 eleazar 973
                $select->where->equalTo('myt_id', $myt->id);
11001 eleazar 974
                $select->where->and->equalTo('type', Feed::TYPE_MYT_ANSWER);
10601 eleazar 975
                $select->order('added_on desc');
16322 anderson 976
            } else {
10557 eleazar 977
 
7350 nelberth 978
                $queryMapper = QueryMapper::getInstance($this->adapter);
16701 efrain 979
                $now = $queryMapper->getDatebaseNow();
980
 
7350 nelberth 981
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
982
                $select->columns(['id']);
983
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 984
                $select->where->equalTo('company_id', $currentCompany->id);
7350 nelberth 985
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
986
                $select->order('added_on desc');
16701 efrain 987
 
988
                //echo $select->getSqlString($this->adapter->platform); exit;
989
 
7350 nelberth 990
            }
16322 anderson 991
 
992
 
993
 
1 www 994
            $dbSelect = new DbSelect($select, $this->adapter);
995
            $paginator = new Paginator($dbSelect);
996
            $paginator->setCurrentPageNumber($page ? $page : 1);
997
            $paginator->setItemCountPerPage(10);
16322 anderson 998
 
1 www 999
            $items = [];
1000
            $feeds = $paginator->getCurrentItems();
16322 anderson 1001
 
1002
            foreach ($feeds as $feed) {
14740 efrain 1003
                $items[] = $this->renderFeed($feed->id, $now);
1 www 1004
            }
16322 anderson 1005
 
1 www 1006
            $response = [
1007
                'success' => true,
1008
                'data' => [
1009
                    'total' => [
1010
                        'count' => $paginator->getTotalItemCount(),
1011
                        'pages' => $paginator->getPages()->pageCount,
1012
                    ],
1013
                    'current' => [
1014
                        'items'    => $items,
1015
                        'page'     => $paginator->getCurrentPageNumber(),
1016
                        'count'    => $paginator->getCurrentItemCount(),
1017
                    ]
1018
                ]
1019
            ];
16322 anderson 1020
 
1 www 1021
            return new JsonModel($response);
1022
        }
16322 anderson 1023
 
1 www 1024
        $response = [
1025
            'success' => false,
1026
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1027
        ];
16322 anderson 1028
 
1029
 
1 www 1030
        return new JsonModel($response);
1031
    }
16322 anderson 1032
 
14740 efrain 1033
    public function oneFeedAction()
1034
    {
16701 efrain 1035
 
1036
 
16322 anderson 1037
 
1038
 
10118 nelberth 1039
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1040
        $currentUser = $currentUserPlugin->getUser();
1041
        $currentCompany = $currentUserPlugin->getCompany();
11331 eleazar 1042
 
10118 nelberth 1043
        $request = $this->getRequest();
16322 anderson 1044
        if ($request->isGet()) {
1045
 
11725 eleazar 1046
            $feed_uuid =  $this->params()->fromRoute('id');
1047
            $myt_id =  $this->params()->fromRoute('id');
16322 anderson 1048
 
1049
            if (!isset($feed_uuid)) {
1050
                $data = [
1051
                    'success'   => false,
1052
                    'data'   => 'ERROR_INVALID_PARAMETER'
1053
                ];
1054
 
1055
                return new JsonModel($data);
11331 eleazar 1056
            }
16322 anderson 1057
 
10118 nelberth 1058
            $items = [];
11331 eleazar 1059
            $feedMapper = FeedMapper::getInstance($this->adapter);
16701 efrain 1060
            $now = $feedMapper->getDatebaseNow();
1061
 
11331 eleazar 1062
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
1063
 
1064
            if (!$feed) {
1065
                $data = [
1066
                    'success' => false,
1067
                    'data' => 'ERROR_RECORD_NOT_FOUND'
1068
                ];
16322 anderson 1069
 
11331 eleazar 1070
                return new JsonModel($data);
16322 anderson 1071
            }
1072
 
1073
            if ($feed->type == 'mytq') {
1074
 
14740 efrain 1075
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11195 eleazar 1076
 
11536 eleazar 1077
                $response = [
1078
                    'success' => true,
1079
                    'data' => [
16322 anderson 1080
                        'item' => $items,
1081
                        'feed_title' => $feed->title,
1082
                        'topic_title' => $feed->description
11536 eleazar 1083
                    ]
1084
                ];
16322 anderson 1085
            } else if ($feed->type == 'myta') {
1086
 
14740 efrain 1087
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11519 eleazar 1088
 
1089
                $response = [
1090
                    'success' => true,
1091
                    'data' => [
16322 anderson 1092
                        'item' => $items,
1093
                        'feed_title' => $feed->title,
1094
                        'topic_title' => $feed->description
11519 eleazar 1095
                    ]
1096
                ];
16322 anderson 1097
            } else if ($feed->type == 'hptg') {
11519 eleazar 1098
 
11404 eleazar 1099
                $group_uuid =  $this->params()->fromRoute('group_id');
1100
                $topic_uuid   = $this->params()->fromRoute('topic_id');
10118 nelberth 1101
 
16322 anderson 1102
                if (!isset($topic_uuid)) {
1103
 
11404 eleazar 1104
                    $data = [
1105
                        'success'   => false,
1106
                        'data'   => 'ERROR_INVALID_PARAMETER'
1107
                    ];
16322 anderson 1108
 
11404 eleazar 1109
                    return new JsonModel($data);
1110
                }
16322 anderson 1111
                if (!isset($group_uuid)) {
1112
 
11404 eleazar 1113
                    $data = [
1114
                        'success'   => false,
1115
                        'data'   => 'ERROR_INVALID_PARAMETER'
1116
                    ];
16322 anderson 1117
 
11404 eleazar 1118
                    return new JsonModel($data);
1119
                }
1120
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
1121
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
16322 anderson 1122
 
11404 eleazar 1123
                if (!$highPerformanceTeamsGroups) {
1124
                    $data = [
1125
                        'success' => false,
1126
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1127
                    ];
16322 anderson 1128
 
11404 eleazar 1129
                    return new JsonModel($data);
1130
                }
10118 nelberth 1131
 
16322 anderson 1132
 
1133
                if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
1134
 
11404 eleazar 1135
                    return new JsonModel([
1136
                        'success' => false,
1137
                        'data' => 'ERROR_UNAUTHORIZED'
1138
                    ]);
16322 anderson 1139
                }
10118 nelberth 1140
 
16322 anderson 1141
                if ($feed->high_performance_group_id != $highPerformanceTeamsGroups->id) {
11404 eleazar 1142
                    return new JsonModel([
1143
                        'success' => false,
1144
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1145
                    ]);
1146
                }
16322 anderson 1147
 
11404 eleazar 1148
                $topicMapper = TopicMapper::getInstance($this->adapter);
1149
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
10118 nelberth 1150
 
11404 eleazar 1151
                if (!$topic) {
1152
                    $data = [
1153
                        'success' => false,
1154
                        'data' => 'ERROR_RECORD_NOT_FOUND'
1155
                    ];
16322 anderson 1156
 
11404 eleazar 1157
                    return new JsonModel($data);
16322 anderson 1158
                }
10118 nelberth 1159
 
16322 anderson 1160
                if ($feed->topic_id != $topic->id) {
11404 eleazar 1161
                    return new JsonModel([
1162
                        'success' => false,
1163
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1164
                    ]);
16322 anderson 1165
                }
10521 eleazar 1166
 
16322 anderson 1167
                $items = $this->renderFeed($feed->id, $now, $group_uuid);
1168
 
11404 eleazar 1169
                $response = [
1170
                    'success' => true,
1171
                    'data' => [
16322 anderson 1172
                        'item' => $items,
1173
                        'topic_title' => $topic->title,
1174
                        'feed_title' => $feed->title
11404 eleazar 1175
                    ]
1176
                ];
1177
            }
16322 anderson 1178
 
11331 eleazar 1179
            return new JsonModel($response);
11399 eleazar 1180
        }
10118 nelberth 1181
    }
1 www 1182
    /**
1183
     *
1184
     * @param string $str
1185
     * @return string
1186
     */
16322 anderson 1187
    private function normalizeString($str = '')
1188
    {
1 www 1189
        $basename  = substr($str, 0, strrpos($str, '.'));
1190
        $basename  = str_replace('.', '-', $basename);
16322 anderson 1191
 
1 www 1192
        $extension  = substr($str, strrpos($str, '.'));
16322 anderson 1193
 
1 www 1194
        $str = $basename . $extension;
16322 anderson 1195
 
1 www 1196
        $str = strip_tags($str);
1197
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
1198
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
1199
        $str = strtolower($str);
16322 anderson 1200
        $str = html_entity_decode($str, ENT_QUOTES, "utf-8");
1 www 1201
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
1202
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
1203
        $str = str_replace(' ', '-', $str);
1204
        $str = rawurlencode($str);
1205
        $str = str_replace('%', '-', $str);
1206
        return trim(strtolower($str));
1207
    }
16322 anderson 1208
 
1209
 
1210
 
1 www 1211
    /**
1212
     *
1213
     * @param int $feed_id
1214
     * @param Company $company
1215
     * @return array
1216
     */
16322 anderson 1217
    private function renderFeed($feed_id, $now, $group_uuid = '', $myt_id = '')
1 www 1218
    {
15351 efrain 1219
 
1 www 1220
 
1221
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1222
        $currentUser = $currentUserPlugin->getUser();
1223
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1224
 
1 www 1225
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1226
        $company = $companyMapper->fetchOne($currentCompany->id);
16322 anderson 1227
 
1 www 1228
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1229
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
15351 efrain 1230
 
1231
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1232
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1233
 
1 www 1234
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
16322 anderson 1235
 
1 www 1236
        $feedMapper = FeedMapper::getInstance($this->adapter);
1237
        $feed = $feedMapper->fetchOne($feed_id);
1238
 
16322 anderson 1239
 
1 www 1240
        $params = [
1241
            'id' => $feed->uuid
1242
        ];
1243
 
16322 anderson 1244
 
1 www 1245
        $item = [
1246
            'feed_unique' => uniqid(),
1247
            'feed_uuid' => $feed->uuid,
1248
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
16322 anderson 1249
            'owner_url' =>  'https://' . $network->main_hostname . '/company/view/' . $company->uuid,
15454 efrain 1250
            'owner_image' => $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]),
16322 anderson 1251
            'owner_name' => $company->name,
1 www 1252
        ];
16701 efrain 1253
 
16322 anderson 1254
 
16701 efrain 1255
 
1256
 
1 www 1257
        $userMapper = UserMapper::getInstance($this->adapter);
1258
        $user = $userMapper->fetchOne($feed->user_id);
1259
 
16322 anderson 1260
 
16701 efrain 1261
 
1 www 1262
        $item['owner_shared'] = $feed->total_shared;
1263
        $item['owner_comments'] = $feed->total_comments;
16701 efrain 1264
 
1265
 
1266
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1267
            $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
1268
            $fastSurvey = $fastSurveyMapper->fetchOne($feed->fast_survey_id);
1269
 
1270
            $owner_description = [
1271
                'question' => $fastSurvey->question,
1272
                'number_of_answers' => $fastSurvey->number_of_answers,
1273
                'answer1' => $fastSurvey->answer1,
1274
                'answer2' => $fastSurvey->answer2,
1275
                'answer3' => $fastSurvey->answer3,
1276
                'answer4' => $fastSurvey->answer4,
1277
                'answer5' => $fastSurvey->answer5,
1278
                'result_type' => $fastSurvey->result_type,
1279
 
1280
            ];
1281
 
1282
            if($fastSurvey->expire_on > $now) {
1283
 
1284
 
1285
 
1286
                $owner_description['active'] = 1;
1287
                $owner_description['time_remaining'] =  Functions::getDateDiff($now, $fastSurvey->expire_on);
1288
 
1289
            } else {
1290
                if($fastSurvey->result_type == FastSurvey::RESULT_TYPE_PUBLIC) {
1291
                    $owner_description['votes1'] = $fastSurvey->votes1;
1292
                    $owner_description['votes2'] = $fastSurvey->votes2;
1293
                    $owner_description['votes3'] = $fastSurvey->votes3;
1294
                    $owner_description['votes4'] = $fastSurvey->votes4;
1295
                    $owner_description['votes5'] = $fastSurvey->votes5;
1296
                }
1297
 
1298
 
1299
                $owner_description['active'] = 0;
1300
                $owner_description['time_remaining'] = 0;
1301
            }
1302
 
1303
 
1304
            $item['owner_description'] =  $owner_description;
1305
 
1306
 
1307
            $item['feed_delete_url'] = '';
1308
        } else {
1309
            $item['owner_description'] = strip_tags($feed->description, 'p');
1310
            $item['feed_delete_url'] = $this->url()->fromRoute('feeds/delete',  $params);
1311
        }
16322 anderson 1312
 
1313
 
1314
        $item['owner_time_elapse'] = Functions::timeAgo($feed->added_on, $now);
1315
 
1316
        if ($feed->file_type == Feed::FILE_TYPE_IMAGE) {
1 www 1317
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1318
        }
16322 anderson 1319
        if ($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
1 www 1320
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1321
        }
16322 anderson 1322
        if ($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1 www 1323
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
1324
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
1325
        }
16322 anderson 1326
 
16817 efrain 1327
 
1328
 
1329
 
16701 efrain 1330
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1331
            $item['comment_add_url'] = '';
1332
            $item['comments'] = [];
1333
        } else {
1334
            $commentMapper = CommentMapper::getInstance($this->adapter);
1335
            $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
16817 efrain 1336
 
16701 efrain 1337
 
1338
            $comments = [];
1339
            $comment_count = 0;
1340
            foreach ($records as $record) {
1341
                $user = $userMapper->fetchOne($record->user_id);
1342
 
1343
                $comment = [];
1344
                $comment['unique'] = uniqid();
1345
                $comment_count++;
1346
                $comment['comment_index'] = $comment_count;
1347
                $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1348
                if ($user->id == $owner->user_id) {
16701 efrain 1349
                    $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
1350
                    $comment['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1351
                    $comment['user_name'] = $company->name;
8414 nelberth 1352
                } else {
16701 efrain 1353
                    $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
1354
                    $comment['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1355
                    $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1356
                }
16701 efrain 1357
                $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1358
                $comment['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1359
                $comment['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1360
                $comment['comment'] = $record->comment;
1361
 
1362
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1363
                $answers = [];
1364
                $contador = 0;
1365
                foreach ($records2 as $record2) {
1366
                    $user = $userMapper->fetchOne($record2->user_id);
1367
 
1368
 
1369
                    $answer = [];
1370
                    $answer['unique'] = uniqid();
1371
 
1372
 
1373
                    $user = $userMapper->fetchOne($record2->user_id);
1374
                    if ($user->id == $owner->user_id) {
1375
                        $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
1376
                        $answer['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1377
                        $answer['user_name'] = $company->name;
1378
                    } else {
1379
                        $answer['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
1380
                        $answer['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1381
                        $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
1382
                    }
1383
                    $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record2->uuid]);
1384
                    $answer['time_elapsed'] = Functions::timeAgo($record2->added_on, $now);
1385
                    $answer['comment'] = $record2->comment;
1386
 
1387
                    $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1388
 
1389
                    $contador++;
1390
                    array_push($answers, $answer);
1391
                }
1392
                $comment['number_answers'] = $contador;
1393
                $comment['answers'] = $answers;
1394
                array_push($comments, $comment);
8414 nelberth 1395
            }
16701 efrain 1396
            $item['comment_add_url'] = $this->url()->fromRoute('feeds/comments', ['id' => $feed->uuid]);
1397
            $item['comments'] = $comments;
1 www 1398
        }
16701 efrain 1399
 
1400
        //echo '<pre>';
1401
       // print_r($item);
1402
        //echo '</pre>';
1403
        //exit;
16322 anderson 1404
 
1405
 
1 www 1406
        return $item;
1407
    }
16322 anderson 1408
 
1 www 1409
    /**
1410
     *
1411
     * @param int $comment_id
1412
     * @return array
1413
     */
14740 efrain 1414
    private function renderComment($comment_id, $now)
1 www 1415
    {
1416
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1417
        $currentUser = $currentUserPlugin->getUser();
16322 anderson 1418
 
15351 efrain 1419
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1420
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1421
 
1422
 
1 www 1423
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1424
 
1 www 1425
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1426
        $company = $companyMapper->fetchOne($currentCompany->id);
15351 efrain 1427
 
16322 anderson 1428
 
1 www 1429
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
16322 anderson 1430
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1431
 
1432
 
1433
 
1434
 
1435
 
1436
 
1 www 1437
        $item = [];
16322 anderson 1438
 
1 www 1439
        $commentMapper = CommentMapper::getInstance($this->adapter);
1440
        $record = $commentMapper->fetchOne($comment_id);
16322 anderson 1441
 
1 www 1442
        $feedMapper = FeedMapper::getInstance($this->adapter);
1443
        $feed = $feedMapper->fetchOne($record->feed_id);
16322 anderson 1444
 
1445
        if ($record) {
1 www 1446
            $userMapper = UserMapper::getInstance($this->adapter);
14740 efrain 1447
 
16322 anderson 1448
 
1 www 1449
            $item = [];
1450
            $item['unique'] = uniqid();
16322 anderson 1451
 
1452
 
1 www 1453
            $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1454
            if ($user->id == $owner->user_id) {
16324 anderson 1455
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image]);
16322 anderson 1456
                $item['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1 www 1457
                $item['user_name'] = $company->name;
1458
            } else {
16324 anderson 1459
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image]);
16322 anderson 1460
                $item['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1 www 1461
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1462
            }
16322 anderson 1463
 
1464
 
1465
 
1466
            $item['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1467
            $item['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
14740 efrain 1468
            $item['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1 www 1469
            $item['comment'] = $record->comment;
1470
        }
1471
        return $item;
1472
    }
16322 anderson 1473
 
1 www 1474
    /**
1475
     *
1476
     * @param string $path
1477
     * @return boolean
1478
     */
1479
    private function deletePath($path)
1480
    {
1481
        try {
16322 anderson 1482
            if (is_dir($path)) {
1 www 1483
                if ($dh = opendir($path)) {
16322 anderson 1484
                    while (($file = readdir($dh)) !== false) {
1485
                        if ($file == '.' || $file == '..') {
1 www 1486
                            continue;
1487
                        }
1488
                        unlink($path . DIRECTORY_SEPARATOR . $file);
1489
                    }
1490
                    closedir($dh);
1491
                }
16322 anderson 1492
 
1 www 1493
                rmdir($path);
1494
            }
1495
            return true;
16322 anderson 1496
        } catch (\Throwable $e) {
1 www 1497
            error_log($e->getTraceAsString());
1498
            return false;
1499
        }
1500
    }
1501
}