Proyectos de Subversion LeadersLinked - Backend

Rev

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