Proyectos de Subversion LeadersLinked - Backend

Rev

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