Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17277 | Rev 17279 | 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
    {
17278 stevensc 483
        try {
484
            $request = $this->getRequest();
16322 anderson 485
 
17278 stevensc 486
            $currentUserPlugin = $this->plugin('currentUserPlugin');
487
            $currentUser = $currentUserPlugin->getUser();
488
 
489
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
490
            $currentNetwork = $currentNetworkPlugin->getNetwork();
491
 
492
            $currentCompany = $currentUserPlugin->getCompany();
17277 stevensc 493
 
17278 stevensc 494
            $myt_id =  $this->params()->fromRoute('myt_id');
7403 nelberth 495
 
17278 stevensc 496
            if (!$request->isPost()) {
497
                return new JsonModel([
498
                    'success' => false,
499
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
500
                ]);
501
            }
7653 nelberth 502
 
17278 stevensc 503
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
504
            $feed_content_type = empty($dataPost['feed_content_type']) ? '' :  $dataPost['feed_content_type'];
16701 efrain 505
 
17278 stevensc 506
 
507
            if( $feed_content_type == Feed::FILE_TYPE_FAST_SURVEY) {
508
                $form = new FastSurveyForm();
509
                $form->setData($dataPost);
16701 efrain 510
 
17278 stevensc 511
                if ($form->isValid()) {
16701 efrain 512
 
17278 stevensc 513
                    $dataPost = (array) $form->getData();
16701 efrain 514
 
17278 stevensc 515
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
516
                    $companyUser = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
517
                    $now = $companyUserMapper->getDatebaseNow();
16701 efrain 518
 
519
 
17278 stevensc 520
                    $hydrator = new ObjectPropertyHydrator();
521
                    $fastSurvey = new FastSurvey();
522
                    $hydrator->hydrate($dataPost, $fastSurvey);
16701 efrain 523
 
17278 stevensc 524
                    $fastSurvey->network_id = $currentNetwork->id;
525
                    $fastSurvey->company_id = $currentCompany->id;
526
                    $fastSurvey->user_id = $companyUser->id;
527
                    $fastSurvey->status = FastSurvey::STATUS_ACTIVE;
528
 
529
 
530
                    $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
531
                    $result = $fastSurveyMapper->insert($fastSurvey);
532
                    if ($result) {
533
                        $feed = new Feed();
534
                        $feed->company_id = $currentCompany->id;
535
                        $feed->network_id = $currentNetwork->id;
536
                        $feed->user_id = $companyUser->id;
537
                        $feed->fast_survey_id = $fastSurvey->id;
538
                        $feed->type = Feed::TYPE_COMPANY;
539
                        $feed->file_type = Feed::FILE_TYPE_FAST_SURVEY;
540
                        $feed->posted_or_shared = Feed::POSTED;
541
                        $feed->status = Feed::STATUS_PUBLISHED;
542
                        $feed->title = '-';
543
                        $feed->description = '-';
544
                        $feed->total_comments   = 0;
545
                        $feed->total_shared     = 0;
546
                        $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
547
 
548
                        $feedMapper = FeedMapper::getInstance($this->adapter);
549
                        $feedMapper->insert($feed);
550
 
551
                        $this->logger->info('Se agrego la encuesta rápida : ' . $fastSurvey->question, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
552
 
553
                        $response = [
554
                            'success'   => true,
555
                            'data'   => $this->renderFeed($feed->id, $now)
556
                        ];
557
 
558
 
559
                    } else {
560
                        $response = [
561
                            'success' => false,
562
                            'data' => $fastSurveyMapper->getError()
563
                        ];
564
                    }
565
 
566
                    return new JsonModel($response);
16701 efrain 567
                } else {
17278 stevensc 568
                    $messages = [];
569
                    $form_messages = (array) $form->getMessages();
570
                    foreach ($form_messages as $fieldname => $field_messages) {
571
 
572
                        $messages[$fieldname] = array_values($field_messages);
573
                    }
574
 
575
                    return new JsonModel([
16701 efrain 576
                        'success' => false,
17278 stevensc 577
                        'data' => $messages
578
                    ]);
16701 efrain 579
                }
17278 stevensc 580
            }
581
            $form = new CreateFeedForm($this->adapter);
582
 
583
            $form->setData($dataPost);
584
 
585
            if (!$form->isValid()) {
17277 stevensc 586
                $messages = [];
587
                $form_messages = (array) $form->getMessages();
17278 stevensc 588
                foreach ($form_messages  as $fieldname => $field_messages)
589
                {
17277 stevensc 590
                    $messages[$fieldname] = array_values($field_messages);
1 www 591
                }
17277 stevensc 592
                return new JsonModel([
17278 stevensc 593
                    'success'   => false,
594
                    'data'   => $messages
17277 stevensc 595
                ]);
1 www 596
            }
17277 stevensc 597
 
17278 stevensc 598
            $companyMapper = CompanyMapper::getInstance($this->adapter);
599
            $now = $companyMapper->getDatebaseNow();
600
 
601
            $company = $companyMapper->fetchOne($currentCompany->id);
17277 stevensc 602
 
17278 stevensc 603
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
604
            $owner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
17277 stevensc 605
 
17278 stevensc 606
            $dataPost['priority'] =  isset($dataPost['priority']) ? Feed::PRIORITY_URGENT  : '';
17277 stevensc 607
 
17278 stevensc 608
            $hydrator = new ObjectPropertyHydrator();
609
            $feed = new Feed();
610
            $hydrator->hydrate($dataPost, $feed);
17277 stevensc 611
 
17278 stevensc 612
            if ($myt_id) {
613
                $feedMapper = FeedMapper::getInstance($this->adapter);
614
                $myt  = $feedMapper->fetchOneByUuid($myt_id);
615
                $feed->network_id       = $currentUser->network_id;
616
                $feed->company_id       = $currentCompany->id;
617
                $feed->group_id         = null;
618
                $feed->user_id          = $owner->user_id;
619
                $feed->myt_id           = $myt->id;
620
                $feed->related_feed     = $myt->id;
621
                $feed->type             = Feed::TYPE_MYT_ANSWER;
622
                $feed->posted_or_shared = Feed::POSTED;
623
                $feed->shared_with      = Feed::SHARE_WITH_PUBLIC;
624
            } else {
625
                $feed->network_id       = $currentUser->network_id;
626
                $feed->company_id       = $currentCompany->id;
627
                $feed->group_id         = null;
628
                $feed->user_id          = $owner->user_id;
629
                $feed->type             = Feed::TYPE_COMPANY;
630
                $feed->posted_or_shared = Feed::POSTED;
631
                $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
632
            }
17277 stevensc 633
 
17278 stevensc 634
            $feed->total_comments   = 0;
635
            $feed->total_shared     = 0;
636
 
17277 stevensc 637
            $feedMapper = FeedMapper::getInstance($this->adapter);
16322 anderson 638
 
17278 stevensc 639
            if(!$feedMapper->insert($feed)) {
17277 stevensc 640
                return new JsonModel([
641
                    'success'   => false,
17278 stevensc 642
                    'data'   => $feedMapper->getError()
17277 stevensc 643
                ]);
644
            }
645
 
17278 stevensc 646
            $feed = $feedMapper->fetchOne($feed->id);
17277 stevensc 647
 
17278 stevensc 648
            $storage = Storage::getInstance($this->config, $this->adapter);
649
            $storage->setFiles($request->getFiles()->toArray());
650
 
651
            if(!$storage->setCurrentFilename('file')) {
17277 stevensc 652
                return new JsonModel([
653
                    'success'   => false,
17278 stevensc 654
                    'data'   => 'ERROR_UPLOAD_FILE'
17277 stevensc 655
                ]);
656
            }
657
 
17278 stevensc 658
            $file_type = $storage->getFileType();
17277 stevensc 659
 
17278 stevensc 660
            if ($file_type == Feed::FILE_TYPE_DOCUMENT) {
661
                $tmp_filename = $storage->getTmpFilename();
662
                $filename = 'feed-' . $feed->uuid . '.pdf';
663
                $target_filename = $storage->composePathToFilename(
664
                    Storage::TYPE_FEED,
665
                    $feed->uuid,
666
                    $filename
667
                );
668
 
669
                if (!$storage->putFile($tmp_filename, $target_filename)) {
670
                    return new JsonModel([
671
                        'success'   => false,
672
                        'data'   => 'ERROR_UPLOAD_FILE'
673
                    ]);
674
                }
675
 
676
                $feed->file_type = $file_type;
677
                $feed->file_name = $filename;
678
 
679
                if(!$feedMapper->update($feed)) {
680
                    return new JsonModel([
681
                        'success'   => false,
682
                        'data'   => 'ERROR_UPDATING_FEED'
683
                    ]);
684
                }
685
            }
686
 
687
            if ($file_type == Feed::FILE_TYPE_IMAGE) {
688
                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
689
 
690
                $tmp_filename = $storage->getTmpFilename();
691
                $filename = 'feed-' . $feed->uuid . '.png';
692
                $target_filename = $storage->composePathToFilename(
693
                    Storage::TYPE_FEED,
694
                    $feed->uuid,
695
                    $filename
696
                );
697
 
698
                if(!$storage->uploadImageResize($tmp_filename, $target_filename, $target_width, $target_height)) {
699
                    return new JsonModel([
700
                        'success'   => false,
701
                        'data'   => 'ERROR_UPLOAD_FILE'
702
                    ]);
703
                }
704
 
705
                $feed->file_type = $file_type;
706
                $feed->file_name = $filename;
707
 
708
                if(!$feedMapper->update($feed)) {
709
                    return new JsonModel([
710
                        'success'   => false,
711
                        'data'   => 'ERROR_UPDATING_FEED'
712
                    ]);
713
                }
17277 stevensc 714
            }
715
 
17278 stevensc 716
            if ($file_type == Feed::FILE_TYPE_VIDEO) {
717
                $tmp_filename = $storage->getTmpFilename();
718
                $filename = 'feed-' . $feed->uuid . '.mp4';
719
                $target_filename = $storage->composePathToFilename(
720
                    Storage::TYPE_FEED,
721
                    $feed->uuid,
722
                    $filename
723
                );
17277 stevensc 724
 
17278 stevensc 725
                if(!$storage->putFile($tmp_filename, $target_filename)) {
726
                    return new JsonModel([
727
                        'success'   => false,
728
                        'data'   => 'ERROR_UPLOAD_FILE'
729
                    ]);
730
                }
731
 
732
                // Generate poster image filename
733
                $poster_filename = 'feed-' . $feed->uuid . '-poster.png';
734
                $poster_target_filename = $storage->composePathToFilename(
735
                    Storage::TYPE_FEED,
736
                    $feed->uuid,
737
                    $poster_filename
738
                );
739
 
740
                // Extract poster from video using Storage class method
741
                if (!$storage->extractPosterFromVideo($target_filename, $poster_target_filename)) {
742
                    return new JsonModel([
743
                        'success'   => false,
744
                        'data'   => 'ERROR_GENERATING_VIDEO_POSTER'
745
                    ]);
746
                }
747
 
748
                $feed->file_type = $file_type;
749
                $feed->file_name = $filename;
750
                $feed->file_image_preview = $poster_filename;
751
 
752
                if(!$feedMapper->update($feed)) {
753
                    return new JsonModel([
754
                        'success'   => false,
755
                        'data'   => 'ERROR_UPDATING_FEED'
756
                    ]);
757
                }
758
 
759
                $videoConvert = new VideoConvert();
760
                $videoConvert->uuid = $feed->uuid;
761
                $videoConvert->filename = $filename;
762
                $videoConvert->type = VideoConvert::TYPE_FEED;
763
 
764
                $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
765
                if(!$videoConvertMapper->insert($videoConvert)) {
766
                    return new JsonModel([
767
                        'success'   => false,
768
                        'data'   => 'ERROR_INSERTING_VIDEO_CONVERT'
769
                    ]);
770
                }
17277 stevensc 771
            }
17278 stevensc 772
 
773
            return new JsonModel([
774
                'success'   => true,
775
                'data'   => $this->renderFeed($feed->id, $now)
776
            ]);
777
        } catch (\Throwable $th) {
778
            return new JsonModel([
779
                'success'   => false,
780
                'data'   => $th->getMessage()
781
            ]);
17277 stevensc 782
        }
1 www 783
    }
16322 anderson 784
 
785
 
14740 efrain 786
    public function timelineAction()
787
    {
1 www 788
        $currentUserPlugin = $this->plugin('currentUserPlugin');
789
        $currentUser = $currentUserPlugin->getUser();
790
        $currentCompany = $currentUserPlugin->getCompany();
7357 nelberth 791
 
16322 anderson 792
 
793
 
794
 
795
 
7366 nelberth 796
        $request = $this->getRequest();
16322 anderson 797
        if ($request->isGet()) {
798
 
17002 efrain 799
            $page   = (int) $this->params()->fromQuery('page');
800
            $myt_id = $this->params()->fromRoute('myt_id');
801
 
16983 efrain 802
            if ($myt_id) {
10990 eleazar 803
                $feedMapper = FeedMapper::getInstance($this->adapter);
16701 efrain 804
                $now = $feedMapper->getDatebaseNow();
805
 
10990 eleazar 806
                $myt  = $feedMapper->fetchOneByUuid($myt_id);
10601 eleazar 807
                $queryMapper = QueryMapper::getInstance($this->adapter);
808
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
809
                $select->columns(['id']);
810
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 811
                $select->where->equalTo('company_id', $currentCompany->id);
10992 eleazar 812
                $select->where->equalTo('myt_id', $myt->id);
11001 eleazar 813
                $select->where->and->equalTo('type', Feed::TYPE_MYT_ANSWER);
10601 eleazar 814
                $select->order('added_on desc');
16322 anderson 815
            } else {
10557 eleazar 816
 
7350 nelberth 817
                $queryMapper = QueryMapper::getInstance($this->adapter);
16701 efrain 818
                $now = $queryMapper->getDatebaseNow();
819
 
7350 nelberth 820
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
821
                $select->columns(['id']);
822
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
16322 anderson 823
                $select->where->equalTo('company_id', $currentCompany->id);
7350 nelberth 824
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
825
                $select->order('added_on desc');
16701 efrain 826
 
827
                //echo $select->getSqlString($this->adapter->platform); exit;
828
 
7350 nelberth 829
            }
16322 anderson 830
 
831
 
832
 
17008 efrain 833
            $dbSelect = new \Laminas\Paginator\Adapter\DbSelect($select, $this->adapter);
834
            $paginator = new \Laminas\Paginator\Paginator($dbSelect);
1 www 835
            $paginator->setCurrentPageNumber($page ? $page : 1);
836
            $paginator->setItemCountPerPage(10);
16322 anderson 837
 
1 www 838
            $items = [];
839
            $feeds = $paginator->getCurrentItems();
16322 anderson 840
 
841
            foreach ($feeds as $feed) {
14740 efrain 842
                $items[] = $this->renderFeed($feed->id, $now);
1 www 843
            }
16322 anderson 844
 
1 www 845
            $response = [
846
                'success' => true,
847
                'data' => [
848
                    'total' => [
849
                        'count' => $paginator->getTotalItemCount(),
850
                        'pages' => $paginator->getPages()->pageCount,
851
                    ],
852
                    'current' => [
853
                        'items'    => $items,
854
                        'page'     => $paginator->getCurrentPageNumber(),
855
                        'count'    => $paginator->getCurrentItemCount(),
856
                    ]
857
                ]
858
            ];
16322 anderson 859
 
1 www 860
            return new JsonModel($response);
861
        }
16322 anderson 862
 
1 www 863
        $response = [
864
            'success' => false,
865
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
866
        ];
16322 anderson 867
 
868
 
1 www 869
        return new JsonModel($response);
870
    }
16322 anderson 871
 
14740 efrain 872
    public function oneFeedAction()
873
    {
16701 efrain 874
 
875
 
16322 anderson 876
 
877
 
10118 nelberth 878
        $currentUserPlugin = $this->plugin('currentUserPlugin');
879
        $currentUser = $currentUserPlugin->getUser();
880
        $currentCompany = $currentUserPlugin->getCompany();
11331 eleazar 881
 
10118 nelberth 882
        $request = $this->getRequest();
16322 anderson 883
        if ($request->isGet()) {
884
 
11725 eleazar 885
            $feed_uuid =  $this->params()->fromRoute('id');
886
            $myt_id =  $this->params()->fromRoute('id');
16322 anderson 887
 
888
            if (!isset($feed_uuid)) {
889
                $data = [
890
                    'success'   => false,
891
                    'data'   => 'ERROR_INVALID_PARAMETER'
892
                ];
893
 
894
                return new JsonModel($data);
11331 eleazar 895
            }
16322 anderson 896
 
10118 nelberth 897
            $items = [];
11331 eleazar 898
            $feedMapper = FeedMapper::getInstance($this->adapter);
16701 efrain 899
            $now = $feedMapper->getDatebaseNow();
900
 
11331 eleazar 901
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
902
 
903
            if (!$feed) {
904
                $data = [
905
                    'success' => false,
906
                    'data' => 'ERROR_RECORD_NOT_FOUND'
907
                ];
16322 anderson 908
 
11331 eleazar 909
                return new JsonModel($data);
16322 anderson 910
            }
911
 
912
            if ($feed->type == 'mytq') {
913
 
14740 efrain 914
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11195 eleazar 915
 
11536 eleazar 916
                $response = [
917
                    'success' => true,
918
                    'data' => [
16322 anderson 919
                        'item' => $items,
920
                        'feed_title' => $feed->title,
921
                        'topic_title' => $feed->description
11536 eleazar 922
                    ]
923
                ];
16983 efrain 924
            } else  if ($feed->type == 'myta') {
925
 
16322 anderson 926
 
14740 efrain 927
                $items = $this->renderFeed($feed->id, $now, $myt_id);
11519 eleazar 928
 
929
                $response = [
930
                    'success' => true,
931
                    'data' => [
16322 anderson 932
                        'item' => $items,
933
                        'feed_title' => $feed->title,
934
                        'topic_title' => $feed->description
11519 eleazar 935
                    ]
936
                ];
16983 efrain 937
            }
938
 
939
            /*else if ($feed->type == 'hptg') {
11519 eleazar 940
 
11404 eleazar 941
                $group_uuid =  $this->params()->fromRoute('group_id');
942
                $topic_uuid   = $this->params()->fromRoute('topic_id');
10118 nelberth 943
 
16322 anderson 944
                if (!isset($topic_uuid)) {
945
 
11404 eleazar 946
                    $data = [
947
                        'success'   => false,
948
                        'data'   => 'ERROR_INVALID_PARAMETER'
949
                    ];
16322 anderson 950
 
11404 eleazar 951
                    return new JsonModel($data);
952
                }
16322 anderson 953
                if (!isset($group_uuid)) {
954
 
11404 eleazar 955
                    $data = [
956
                        'success'   => false,
957
                        'data'   => 'ERROR_INVALID_PARAMETER'
958
                    ];
16322 anderson 959
 
11404 eleazar 960
                    return new JsonModel($data);
961
                }
962
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
963
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
16322 anderson 964
 
11404 eleazar 965
                if (!$highPerformanceTeamsGroups) {
966
                    $data = [
967
                        'success' => false,
968
                        'data' => 'ERROR_RECORD_NOT_FOUND'
969
                    ];
16322 anderson 970
 
11404 eleazar 971
                    return new JsonModel($data);
972
                }
10118 nelberth 973
 
16322 anderson 974
 
975
                if ($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
976
 
11404 eleazar 977
                    return new JsonModel([
978
                        'success' => false,
979
                        'data' => 'ERROR_UNAUTHORIZED'
980
                    ]);
16322 anderson 981
                }
10118 nelberth 982
 
16322 anderson 983
                if ($feed->high_performance_group_id != $highPerformanceTeamsGroups->id) {
11404 eleazar 984
                    return new JsonModel([
985
                        'success' => false,
986
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
987
                    ]);
988
                }
16322 anderson 989
 
11404 eleazar 990
                $topicMapper = TopicMapper::getInstance($this->adapter);
991
                $topic = $topicMapper->fetchOneByUuid($topic_uuid);
10118 nelberth 992
 
11404 eleazar 993
                if (!$topic) {
994
                    $data = [
995
                        'success' => false,
996
                        'data' => 'ERROR_RECORD_NOT_FOUND'
997
                    ];
16322 anderson 998
 
11404 eleazar 999
                    return new JsonModel($data);
16322 anderson 1000
                }
10118 nelberth 1001
 
16322 anderson 1002
                if ($feed->topic_id != $topic->id) {
11404 eleazar 1003
                    return new JsonModel([
1004
                        'success' => false,
1005
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
1006
                    ]);
16322 anderson 1007
                }
10521 eleazar 1008
 
16322 anderson 1009
                $items = $this->renderFeed($feed->id, $now, $group_uuid);
1010
 
11404 eleazar 1011
                $response = [
1012
                    'success' => true,
1013
                    'data' => [
16322 anderson 1014
                        'item' => $items,
1015
                        'topic_title' => $topic->title,
1016
                        'feed_title' => $feed->title
11404 eleazar 1017
                    ]
1018
                ];
16983 efrain 1019
            }*/
16322 anderson 1020
 
11331 eleazar 1021
            return new JsonModel($response);
11399 eleazar 1022
        }
10118 nelberth 1023
    }
17018 efrain 1024
 
16322 anderson 1025
 
1026
 
1 www 1027
    /**
1028
     *
1029
     * @param int $feed_id
17008 efrain 1030
     * @param \LeadersLinked\Model\Company $company
1 www 1031
     * @return array
1032
     */
16322 anderson 1033
    private function renderFeed($feed_id, $now, $group_uuid = '', $myt_id = '')
1 www 1034
    {
15351 efrain 1035
 
1 www 1036
 
1037
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1038
        $currentUser = $currentUserPlugin->getUser();
1039
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1040
 
1 www 1041
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1042
        $company = $companyMapper->fetchOne($currentCompany->id);
16322 anderson 1043
 
1 www 1044
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
1045
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
15351 efrain 1046
 
1047
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1048
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1049
 
1 www 1050
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
16322 anderson 1051
 
1 www 1052
        $feedMapper = FeedMapper::getInstance($this->adapter);
1053
        $feed = $feedMapper->fetchOne($feed_id);
1054
 
16322 anderson 1055
 
1 www 1056
        $params = [
1057
            'id' => $feed->uuid
1058
        ];
1059
 
17018 efrain 1060
        $storage = Storage::getInstance($this->config, $this->adapter);
17002 efrain 1061
        $path = $storage->getPathFeed();
16322 anderson 1062
 
1 www 1063
        $item = [
1064
            'feed_unique' => uniqid(),
1065
            'feed_uuid' => $feed->uuid,
1066
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
16322 anderson 1067
            'owner_url' =>  'https://' . $network->main_hostname . '/company/view/' . $company->uuid,
17002 efrain 1068
            'owner_image' => $storage->getCompanyImage($company),
16322 anderson 1069
            'owner_name' => $company->name,
1 www 1070
        ];
16701 efrain 1071
 
16322 anderson 1072
 
16701 efrain 1073
 
1074
 
17008 efrain 1075
        $userMapper = \LeadersLinked\Mapper\UserMapper::getInstance($this->adapter);
1 www 1076
        $user = $userMapper->fetchOne($feed->user_id);
1077
 
16322 anderson 1078
 
16701 efrain 1079
 
1 www 1080
        $item['owner_shared'] = $feed->total_shared;
1081
        $item['owner_comments'] = $feed->total_comments;
16701 efrain 1082
 
1083
 
1084
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1085
            $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
1086
            $fastSurvey = $fastSurveyMapper->fetchOne($feed->fast_survey_id);
1087
 
1088
            $owner_description = [
1089
                'question' => $fastSurvey->question,
1090
                'number_of_answers' => $fastSurvey->number_of_answers,
1091
                'answer1' => $fastSurvey->answer1,
1092
                'answer2' => $fastSurvey->answer2,
1093
                'answer3' => $fastSurvey->answer3,
1094
                'answer4' => $fastSurvey->answer4,
1095
                'answer5' => $fastSurvey->answer5,
1096
                'result_type' => $fastSurvey->result_type,
1097
 
1098
            ];
1099
 
1100
            if($fastSurvey->expire_on > $now) {
1101
 
1102
 
1103
 
1104
                $owner_description['active'] = 1;
1105
                $owner_description['time_remaining'] =  Functions::getDateDiff($now, $fastSurvey->expire_on);
1106
 
1107
            } else {
1108
                if($fastSurvey->result_type == FastSurvey::RESULT_TYPE_PUBLIC) {
1109
                    $owner_description['votes1'] = $fastSurvey->votes1;
1110
                    $owner_description['votes2'] = $fastSurvey->votes2;
1111
                    $owner_description['votes3'] = $fastSurvey->votes3;
1112
                    $owner_description['votes4'] = $fastSurvey->votes4;
1113
                    $owner_description['votes5'] = $fastSurvey->votes5;
1114
                }
1115
 
1116
 
1117
                $owner_description['active'] = 0;
1118
                $owner_description['time_remaining'] = 0;
1119
            }
1120
 
1121
 
1122
            $item['owner_description'] =  $owner_description;
1123
 
1124
 
1125
            $item['feed_delete_url'] = '';
1126
        } else {
1127
            $item['owner_description'] = strip_tags($feed->description, 'p');
1128
            $item['feed_delete_url'] = $this->url()->fromRoute('feeds/delete',  $params);
1129
        }
16322 anderson 1130
 
1131
 
1132
        $item['owner_time_elapse'] = Functions::timeAgo($feed->added_on, $now);
1133
 
1134
        if ($feed->file_type == Feed::FILE_TYPE_IMAGE) {
17002 efrain 1135
            $item['owner_file_image'] = $storage->getGenericImage($path, $feed->uuid,  $feed->file_name);
1 www 1136
        }
16322 anderson 1137
        if ($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
17002 efrain 1138
            $item['owner_file_document'] = $storage->getGenericFile($path, $feed->uuid,  $feed->file_name);
1 www 1139
        }
16322 anderson 1140
        if ($feed->file_type == Feed::FILE_TYPE_VIDEO) {
17002 efrain 1141
            $item['owner_file_image_preview'] = $storage->getGenericImage($path, $feed->uuid,  $feed->file_image_preview);
1142
            $item['owner_file_video'] = $$storage->getGenericFile($path, $feed->uuid,  $feed->file_name);
1 www 1143
        }
16322 anderson 1144
 
16817 efrain 1145
 
1146
 
1147
 
16701 efrain 1148
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1149
            $item['comment_add_url'] = '';
1150
            $item['comments'] = [];
1151
        } else {
1152
            $commentMapper = CommentMapper::getInstance($this->adapter);
1153
            $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
16817 efrain 1154
 
16701 efrain 1155
 
1156
            $comments = [];
1157
            $comment_count = 0;
1158
            foreach ($records as $record) {
1159
                $user = $userMapper->fetchOne($record->user_id);
1160
 
1161
                $comment = [];
1162
                $comment['unique'] = uniqid();
1163
                $comment_count++;
1164
                $comment['comment_index'] = $comment_count;
1165
                $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1166
                if ($user->id == $owner->user_id) {
17002 efrain 1167
                    $comment['user_image'] = $storage->getCompanyImage($company);
16701 efrain 1168
                    $comment['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1169
                    $comment['user_name'] = $company->name;
8414 nelberth 1170
                } else {
17012 efrain 1171
                    $comment['user_image'] = $storage->getUserImage($user);
16701 efrain 1172
                    $comment['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1173
                    $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
10406 nelberth 1174
                }
16701 efrain 1175
                $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1176
                $comment['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1177
                $comment['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1178
                $comment['comment'] = $record->comment;
1179
 
1180
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1181
                $answers = [];
1182
                $contador = 0;
1183
                foreach ($records2 as $record2) {
1184
                    $user = $userMapper->fetchOne($record2->user_id);
1185
 
1186
 
1187
                    $answer = [];
1188
                    $answer['unique'] = uniqid();
1189
 
1190
 
1191
                    $user = $userMapper->fetchOne($record2->user_id);
1192
                    if ($user->id == $owner->user_id) {
17002 efrain 1193
                        $answer['user_image'] = $storage->getCompanyImage($company);
16701 efrain 1194
                        $answer['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1195
                        $answer['user_name'] = $company->name;
1196
                    } else {
17002 efrain 1197
                        $answer['user_image'] = $storage->getUserImage( $user);
16701 efrain 1198
                        $answer['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1199
                        $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
1200
                    }
1201
                    $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record2->uuid]);
1202
                    $answer['time_elapsed'] = Functions::timeAgo($record2->added_on, $now);
1203
                    $answer['comment'] = $record2->comment;
1204
 
1205
                    $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1206
 
1207
                    $contador++;
1208
                    array_push($answers, $answer);
1209
                }
1210
                $comment['number_answers'] = $contador;
1211
                $comment['answers'] = $answers;
1212
                array_push($comments, $comment);
8414 nelberth 1213
            }
16701 efrain 1214
            $item['comment_add_url'] = $this->url()->fromRoute('feeds/comments', ['id' => $feed->uuid]);
1215
            $item['comments'] = $comments;
1 www 1216
        }
16322 anderson 1217
 
1218
 
1 www 1219
        return $item;
1220
    }
16322 anderson 1221
 
1 www 1222
    /**
1223
     *
1224
     * @param int $comment_id
1225
     * @return array
1226
     */
14740 efrain 1227
    private function renderComment($comment_id, $now)
1 www 1228
    {
1229
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1230
        $currentUser = $currentUserPlugin->getUser();
16322 anderson 1231
 
15351 efrain 1232
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
1233
        $network = $currentNetworkPlugin->getNetwork();
16322 anderson 1234
 
1235
 
1 www 1236
        $currentCompany = $currentUserPlugin->getCompany();
16322 anderson 1237
 
1 www 1238
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1239
        $company = $companyMapper->fetchOne($currentCompany->id);
15351 efrain 1240
 
16322 anderson 1241
 
1 www 1242
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
16322 anderson 1243
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
1244
 
1245
 
1246
 
1247
 
1248
 
1249
 
1 www 1250
        $item = [];
16322 anderson 1251
 
1 www 1252
        $commentMapper = CommentMapper::getInstance($this->adapter);
1253
        $record = $commentMapper->fetchOne($comment_id);
16322 anderson 1254
 
1 www 1255
        $feedMapper = FeedMapper::getInstance($this->adapter);
1256
        $feed = $feedMapper->fetchOne($record->feed_id);
16322 anderson 1257
 
1258
        if ($record) {
17008 efrain 1259
            $userMapper = \LeadersLinked\Mapper\UserMapper::getInstance($this->adapter);
14740 efrain 1260
 
16322 anderson 1261
 
1 www 1262
            $item = [];
1263
            $item['unique'] = uniqid();
16322 anderson 1264
 
17018 efrain 1265
            $storage = Storage::getInstance($this->config, $this->adapter);
17002 efrain 1266
 
16322 anderson 1267
 
1 www 1268
            $user = $userMapper->fetchOne($record->user_id);
16322 anderson 1269
            if ($user->id == $owner->user_id) {
17002 efrain 1270
                $item['user_image'] = $storage->getCompanyImage($company);
16322 anderson 1271
                $item['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1 www 1272
                $item['user_name'] = $company->name;
1273
            } else {
17002 efrain 1274
                $item['user_image'] = $storage->getUserImage($user);
16322 anderson 1275
                $item['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1 www 1276
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
1277
            }
16322 anderson 1278
 
1279
 
1280
 
1281
            $item['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1282
            $item['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
14740 efrain 1283
            $item['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1 www 1284
            $item['comment'] = $record->comment;
1285
        }
1286
        return $item;
1287
    }
16322 anderson 1288
 
1 www 1289
    /**
1290
     *
1291
     * @param string $path
1292
     * @return boolean
1293
     */
1294
    private function deletePath($path)
1295
    {
1296
        try {
16322 anderson 1297
            if (is_dir($path)) {
1 www 1298
                if ($dh = opendir($path)) {
16322 anderson 1299
                    while (($file = readdir($dh)) !== false) {
1300
                        if ($file == '.' || $file == '..') {
1 www 1301
                            continue;
1302
                        }
1303
                        unlink($path . DIRECTORY_SEPARATOR . $file);
1304
                    }
1305
                    closedir($dh);
1306
                }
16322 anderson 1307
 
1 www 1308
                rmdir($path);
1309
            }
1310
            return true;
16322 anderson 1311
        } catch (\Throwable $e) {
1 www 1312
            error_log($e->getTraceAsString());
1313
            return false;
1314
        }
1315
    }
1316
}