Proyectos de Subversion LeadersLinked - Backend

Rev

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