Proyectos de Subversion LeadersLinked - Backend

Rev

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