Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7379 | Rev 7381 | 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
2
/**
3
 *
4
 * Controlador: Mis Perfiles
5
 *
6
 */
7
declare(strict_types=1);
8
 
9
namespace LeadersLinked\Controller;
10
 
11
use Laminas\Db\Adapter\AdapterInterface;
12
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
13
use Laminas\Mvc\Controller\AbstractActionController;
14
use Laminas\Log\LoggerInterface;
15
use Laminas\View\Model\ViewModel;
16
use Laminas\View\Model\JsonModel;
17
 
18
use LeadersLinked\Mapper\CompanyMapper;
19
use LeadersLinked\Mapper\CompanyUserMapper;
20
use LeadersLinked\Form\CreateFeedForm;
21
use LeadersLinked\Form\CommentForm;
22
use LeadersLinked\Model\Comment;
23
use LeadersLinked\Mapper\CommentMapper;
24
use LeadersLinked\Mapper\FeedMapper;
25
use LeadersLinked\Mapper\GroupMapper;
26
use LeadersLinked\Model\Feed;
27
use LeadersLinked\Mapper\QueryMapper;
28
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
29
use LeadersLinked\Library\Image;
30
use LeadersLinked\Model\VideoConvert;
31
use LeadersLinked\Mapper\VideoConvertMapper;
32
use LeadersLinked\Mapper\LikeMapper;
33
use Laminas\Paginator\Adapter\DbSelect;
34
use Laminas\Paginator\Paginator;
35
use LeadersLinked\Mapper\UserMapper;
36
use LeadersLinked\Library\Functions;
37
use LeadersLinked\Model\Company;
38
use LeadersLinked\Model\UserType;
39
 
40
class FeedController extends AbstractActionController
41
{
42
    /**
43
     *
44
     * @var AdapterInterface
45
     */
46
    private $adapter;
47
 
48
 
49
    /**
50
     *
51
     * @var AbstractAdapter
52
     */
53
    private $cache;
54
 
55
    /**
56
     *
57
     * @var  LoggerInterface
58
     */
59
    private $logger;
60
 
61
 
62
    /**
63
     *
64
     * @var array
65
     */
66
    private $config;
67
 
68
    /**
69
     *
70
     * @param AdapterInterface $adapter
71
     * @param AbstractAdapter $cache
72
     * @param LoggerInterface $logger
73
     * @param array $config
74
     */
75
    public function __construct($adapter, $cache , $logger,  $config)
76
    {
77
        $this->adapter      = $adapter;
78
        $this->cache        = $cache;
79
        $this->logger       = $logger;
80
        $this->config       = $config;
81
 
82
    }
83
 
84
    /**
85
     *
86
     * Generación del listado de perfiles
87
     * {@inheritDoc}
88
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
89
     */
90
    public function indexAction()
91
    {
92
        $currentUserPlugin = $this->plugin('currentUserPlugin');
93
        $currentUser = $currentUserPlugin->getUser();
94
        $currentCompany = $currentUserPlugin->getCompany();
95
 
96
 
97
 
98
        $request = $this->getRequest();
99
        if($request->isGet()) {
100
            $headers  = $request->getHeaders();
101
 
102
            $isJson = false;
103
            if($headers->has('Accept')) {
104
                $accept = $headers->get('Accept');
105
 
106
                $prioritized = $accept->getPrioritized();
107
 
108
                foreach($prioritized as $key => $value) {
109
                    $raw = trim($value->getRaw());
110
 
111
                    if(!$isJson) {
112
                        $isJson = strpos($raw, 'json');
113
                    }
114
 
115
                }
116
            }
117
 
118
            $formFeed = new CreateFeedForm();
119
 
120
            $this->layout()->setTemplate('layout/layout-backend');
121
            $viewModel = new ViewModel();
122
            $viewModel->setTemplate('leaders-linked/feeds/index.phtml');
123
            $viewModel->setVariables([
124
                'formFeed'      => $formFeed,
125
            ]);
126
            return $viewModel ;
127
 
128
 
129
        } else {
130
            return new JsonModel([
131
                'success' => false,
132
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
133
            ]);
134
        }
135
    }
136
 
137
 
138
    public function commentAction()
139
    {
140
        $currentUserPlugin = $this->plugin('currentUserPlugin');
141
        $currentUser = $currentUserPlugin->getUser();
142
        $currentCompany = $currentUserPlugin->getCompany();
143
 
144
 
145
        $id = $this->params()->fromRoute('id');
146
 
147
        $request = $this->getRequest();
148
        if($request->isPost()) {
149
            $feedMapper = FeedMapper::getInstance($this->adapter);
150
            $feed = $feedMapper->fetchOneByUuid($id);
151
            if(!$feed) {
152
                $response = [
153
                    'success' => false,
154
                    'data' => 'ERROR_POST_NOT_FOUND'
155
                ];
156
                return new JsonModel($response);
157
            }
158
 
159
            if($feed->company_id != $currentCompany->id) {
160
                $response = [
161
                    'success' => false,
162
                    'data' => 'ERROR_UNAUTHORIZED'
163
                ];
164
                return new JsonModel($response);
165
            }
166
 
167
            $dataPost = $request->getPost()->toArray();
168
            $form = new CommentForm();
169
            $form->setData($dataPost);
170
 
171
            if($form->isValid()) {
172
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
173
                $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
174
 
175
                $dataPost = (array) $form->getData();
176
 
177
                $comment = new Comment();
178
                $comment->comment = $dataPost['comment'];
179
                $comment->user_id = $owner->user_id;
180
                $comment->feed_id = $feed->id;
181
 
182
                $commentMapper = CommentMapper::getInstance($this->adapter);
183
                if($commentMapper->insert($comment)) {
184
 
185
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
186
 
187
                    $feed->total_comments = $total_comments;
188
                    $feedMapper->update($feed);
189
 
190
                    $response = [
191
                        'success'   => true,
192
                        'data'   => $this->renderComment($comment->id),
193
                        'total_comments' => $total_comments
194
                    ];
195
 
196
                    return new JsonModel($response);
197
 
198
                } else {
199
 
200
                    $response = [
201
                        'success'   => false,
202
                        'data'   => $commentMapper->getError()
203
                    ];
204
 
205
                    return new JsonModel($response);
206
                }
207
 
208
            } else {
209
                $message = '';;
210
                $form_messages = (array) $form->getMessages();
211
                foreach($form_messages  as $fieldname => $field_messages)
212
                {
213
                    foreach( $field_messages as $key => $value)
214
                    {
215
                        $message = $value;
216
                    }
217
                }
218
 
219
                $response = [
220
                    'success'   => false,
221
                    'data'   => $message
222
                ];
223
 
224
                return new JsonModel($response);
225
            }
226
 
227
 
228
        } else {
229
            $response = [
230
                'success' => false,
231
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
232
            ];
233
 
234
            return new JsonModel($response);
235
        }
236
 
237
 
238
    }
239
 
240
 
241
    public function commentDeleteAction()
242
    {
243
        $currentUserPlugin = $this->plugin('currentUserPlugin');
244
        $currentUser = $currentUserPlugin->getUser();
245
        $currentCompany = $currentUserPlugin->getCompany();
246
 
247
        $request = $this->getRequest();
248
        if($request->isPost()) {
249
            $currentUserPlugin = $this->plugin('currentUserPlugin');
250
            $currentUser = $currentUserPlugin->getUser();
251
 
252
            $id = $this->params()->fromRoute('id');
253
            $comment = $this->params()->fromRoute('comment');
254
 
255
            $feedMapper = FeedMapper::getInstance($this->adapter);
256
            $feed = $feedMapper->fetchOneByUuid($id);
257
            if(!$feed) {
258
                $response = [
259
                    'success' => false,
260
                    'data' => 'ERROR_POST_NOT_FOUND'
261
                ];
262
                return new JsonModel($response);
263
            }
264
 
265
            if($feed->company_id != $currentCompany->id) {
266
                $response = [
267
                    'success' => false,
268
                    'data' => 'ERROR_UNAUTHORIZED'
269
                ];
270
                return new JsonModel($response);
271
            }
272
 
273
            $commentMapper = CommentMapper::getInstance($this->adapter);
274
            $comment = $commentMapper->fetchOneByUuid($comment);
275
 
276
            if($comment && $comment->feed_id == $feed->id) {
277
                $comment->status = Comment::STATUS_DELETED;
278
                if($commentMapper->update($comment)) {
279
                    $total_comments = $commentMapper->fetchCountCommentByFeedId($comment->feed_id);
280
 
281
                    $feed = $feedMapper->fetchOne($comment->feed_id);
282
                    $feed->total_comments = $total_comments;
283
                    $feedMapper->update($feed);
284
 
285
 
286
 
287
 
288
 
289
                    $response = [
290
                        'success' => true,
291
                        'data' => [
292
                            'message' => 'LABEL_COMMENT_WAS_DELETED',
293
                            'total_comments' => $total_comments
294
                        ]
295
                   ];
296
                } else {
297
                    $response = [
298
                        'success' => false,
299
                        'data' => $commentMapper->getError()
300
                    ];
301
                }
302
 
303
            } else {
304
                $response = [
305
                    'success' => false,
306
                    'data' => 'ERROR_COMMENT_NOT_FOUND'
307
                ];
308
            }
309
 
310
        } else {
311
            $response = [
312
                'success' => false,
313
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
314
            ];
315
        }
316
 
317
        return new JsonModel($response);
318
    }
319
 
320
    public function deleteAction()
321
    {
322
        $currentUserPlugin = $this->plugin('currentUserPlugin');
323
        $currentUser = $currentUserPlugin->getUser();
324
        $currentCompany = $currentUserPlugin->getCompany();
325
 
326
        $request = $this->getRequest();
327
        if($request->isPost()) {
328
 
329
 
330
            $id =  $this->params()->fromRoute('id');
331
 
332
            $feedMapper = FeedMapper::getInstance($this->adapter);
333
            $feed = $feedMapper->fetchOneByUuid($id);
334
            if(!$feed) {
335
                $response = [
336
                    'success' => false,
337
                    'data' => 'ERROR_POST_NOT_FOUND'
338
                ];
339
                return new JsonModel($response);
340
            }
341
 
342
            if($feed->company_id != $currentCompany->id) {
343
                $response = [
344
                    'success' => false,
345
                    'data' => 'ERROR_UNAUTHORIZED'
346
                ];
347
                return new JsonModel($response);
348
            }
349
 
350
            $feedMapper = FeedMapper::getInstance($this->adapter);
351
            $feed->status = Feed::STATUS_DELETED;
352
            if($feedMapper->update($feed)) {
353
                $response = [
354
                    'success' => true,
355
                    'data' => 'LABEL_FEED_WAS_DELETED'
356
                ];
357
 
358
            } else {
359
                $response = [
360
                    'success' => false,
361
                    'data' => $feedMapper->getError()
362
                ];
363
            }
364
 
365
 
366
            return new JsonModel($response);
367
 
368
        } else {
369
            $response = [
370
                'success' => false,
371
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
372
            ];
373
        }
374
 
375
        return new JsonModel($response);
376
    }
377
 
378
    public function addAction()
379
    {
380
        $currentUserPlugin = $this->plugin('currentUserPlugin');
381
        $currentUser = $currentUserPlugin->getUser();
382
        $currentCompany = $currentUserPlugin->getCompany();
383
 
384
        $request = $this->getRequest();
385
        if($request->isPost()) {
386
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
387
 
388
            $form = new CreateFeedForm($this->adapter);
389
            $form->setData($dataPost);
390
            if($form->isValid()) {
391
 
392
 
393
                $companyMapper = CompanyMapper::getInstance($this->adapter);
394
                $company = $companyMapper->fetchOne($currentCompany->id);
395
 
396
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
397
                $owner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
398
 
399
 
400
                $hydrator = new ObjectPropertyHydrator();
401
                $feed = new Feed();
402
                $hydrator->hydrate($dataPost, $feed);
403
 
404
 
405
                $feed->company_id       = $currentCompany->id;
406
                $feed->group_id         = null;
407
                $feed->user_id          = $owner->user_id;
408
                $feed->type             = Feed::TYPE_COMPANY;
409
                $feed->posted_or_shared = Feed::POSTED;
410
                $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
411
 
412
 
413
 
414
                $feed->total_comments   = 0;
415
                $feed->total_shared     = 0;
416
 
417
 
418
                $files = $this->getRequest()->getFiles()->toArray();
419
                $file_type = '';
420
                if(isset($files['file']) && empty($files['file']['error'])) {
421
                    $feed_tmp_filename  = $files['file']['tmp_name'];
422
                    $feed_filename      = $this->normalizeString($files['file']['name']);
423
 
424
                    $mime_type = mime_content_type($feed_tmp_filename);
425
                    if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
426
                        $file_type = Feed::FILE_TYPE_IMAGE;
427
                    } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
428
                        $file_type = Feed::FILE_TYPE_VIDEO;
429
                    } else if($mime_type == 'application/pdf') {
430
                        $file_type = Feed::FILE_TYPE_DOCUMENT;
431
                    }
432
                }
433
 
434
                $feedMapper = FeedMapper::getInstance($this->adapter);
435
                $result = $feedMapper->insert($feed);
436
                if($result) {
437
                    $feed = $feedMapper->fetchOne($feed->id);
438
 
439
                    if( $file_type == Feed::FILE_TYPE_DOCUMENT) {
440
                        try {
441
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
442
                            if(!file_exists($target_path)) {
443
                                mkdir($target_path, 0755);
444
                            }
445
 
446
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR .$feed_filename;
447
                            $result = move_uploaded_file($feed_tmp_filename , $full_filename);
448
                            if($result) {
449
 
450
                                $feed->file_type = $file_type;
451
                                $feed->file_name = basename($feed_filename);
452
                                $feedMapper->update($feed);
453
                            } else {
454
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
455
                            }
456
                        } catch(\Throwable $e) {
457
                            error_log($e->getTraceAsString());
458
                        }
459
                    }
460
                    if( $file_type == Feed::FILE_TYPE_IMAGE) {
461
                        try {
462
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
463
                            if(!file_exists($target_path)) {
464
                                mkdir($target_path, 0755);
465
                            }
466
 
467
                            list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
468
 
469
                            $feed_filename = substr($feed_filename, 0, strrpos($feed_filename, '.'))  . '.png';
470
                            $crop_to_dimensions = false;
471
                            if(Image::uploadImage($feed_tmp_filename, $target_path, $feed_filename, $target_width, $target_height, $crop_to_dimensions )) {
472
                                $feed->file_type = $file_type;
473
                                $feed->file_name = basename($feed_filename);
474
                                $feedMapper->update($feed);
475
                            }
476
                        } catch(\Throwable $e) {
477
                            error_log($e->getTraceAsString());
478
                        }
479
                    }
480
                    if( $file_type == Feed::FILE_TYPE_VIDEO) {
481
                        try {
482
                            $target_path = $this->config['leaderslinked.fullpath.feed'] . $feed->uuid;
483
                            if(!file_exists($target_path)) {
484
                                mkdir($target_path, 0755);
485
                            }
486
 
487
                            $full_filename = $target_path  . DIRECTORY_SEPARATOR . $feed_filename;
488
 
489
                            $result = move_uploaded_file($feed_tmp_filename , $full_filename);
490
                            if($result) {
491
 
492
                                $size = $this->config['leaderslinked.image_sizes.feed_image_size'];
493
                                $getFromSecound = 2;
494
 
495
                                //extracción del cover
496
                                $generateFileName = substr($feed_filename, 0, strrpos($feed_filename, '.'));
497
                                $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
498
                                $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
499
                                exec($cmd);
500
 
501
 
502
                                $feed->file_type = $file_type;
503
                                $feed->file_name = basename($feed_filename);
504
                                $feed->file_image_preview = basename($generateFile);
505
                                $feedMapper->update($feed);
506
 
507
                                $videoConvert = new VideoConvert();
508
                                $videoConvert->filename = $full_filename;
509
                                $videoConvert->type = VideoConvert::TYPE_FEED;
510
 
511
                                $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
512
                                $videoConvertMapper->insert($videoConvert);
513
                            } else {
514
                                error_log('no se pudo mover o renombrar el documento : ' . $feed_tmp_filename . ' al directorio : ' . $full_filename );
515
                            }
516
                        } catch(\Throwable $e) {
517
                            error_log($e->getTraceAsString());
518
                        }
519
                    }
520
 
521
 
522
                    $response = [
523
                        'success'   => true,
524
                        'data'   => $this->renderFeed($feed->id)
525
                    ];
526
                } else {
527
                    $response = [
528
                        'success'   => false,
529
                        'data'   => $feedMapper->getError()
530
                    ];
531
                }
532
            } else {
533
                $messages = [];
534
                $form_messages = (array) $form->getMessages();
535
                foreach($form_messages  as $fieldname => $field_messages)
536
                {
537
                    $messages[$fieldname] = array_values($field_messages);
538
                }
539
 
540
                $response = [
541
                    'success'   => false,
542
                    'data'   => $messages
543
                ];
544
            }
545
 
546
        } else {
547
            $response = [
548
                'success' => false,
549
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
550
            ];
551
        }
552
 
553
        return new JsonModel($response);
554
    }
555
 
556
    public function post($dataPost)
557
    {
558
 
559
 
560
 
561
 
562
 
563
    }
564
 
565
 
566
 
567
    public function timelineAction()
568
    {
569
        $currentUserPlugin = $this->plugin('currentUserPlugin');
570
        $currentUser = $currentUserPlugin->getUser();
571
        $currentCompany = $currentUserPlugin->getCompany();
7366 nelberth 572
 
7372 nelberth 573
 
7375 nelberth 574
        $type   = $this->params()->fromRoute('type');
7378 nelberth 575
 
7357 nelberth 576
 
7366 nelberth 577
        $request = $this->getRequest();
1 www 578
        if($request->isGet()) {
579
 
580
            $page = (int) $this->params()->fromQuery('page');
7374 nelberth 581
            $type   = $this->params()->fromRoute('type');
582
            if(isset($type)){
7372 nelberth 583
                $id =  $this->params()->fromRoute('id');
584
                $type   = $this->params()->fromRoute('type');
7378 nelberth 585
                $response = [
586
                    'success' => false,
7379 nelberth 587
                    'data' => $type
7378 nelberth 588
                ];
589
 
590
 
591
                return new JsonModel($response);
7379 nelberth 592
 
7350 nelberth 593
            }else{
7380 nelberth 594
                $response = [
595
                    'success' => false,
596
                    'data' => $type
597
                ];
598
 
599
 
600
                return new JsonModel($response);
7350 nelberth 601
                $queryMapper = QueryMapper::getInstance($this->adapter);
602
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
603
                $select->columns(['id']);
604
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
605
                $select->where->equalTo('company_id',$currentCompany->id);
606
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
607
                $select->order('added_on desc');
608
            }
609
 
1 www 610
 
611
 
612
            $dbSelect = new DbSelect($select, $this->adapter);
613
            $paginator = new Paginator($dbSelect);
614
            $paginator->setCurrentPageNumber($page ? $page : 1);
615
            $paginator->setItemCountPerPage(10);
616
 
617
            $items = [];
618
            $feeds = $paginator->getCurrentItems();
619
            foreach($feeds as $feed)
620
            {
621
                $items[] = $this->renderFeed($feed->id);
622
            }
623
 
624
            $response = [
625
                'success' => true,
626
                'data' => [
627
                    'total' => [
628
                        'count' => $paginator->getTotalItemCount(),
629
                        'pages' => $paginator->getPages()->pageCount,
630
                    ],
631
                    'current' => [
632
                        'items'    => $items,
633
                        'page'     => $paginator->getCurrentPageNumber(),
634
                        'count'    => $paginator->getCurrentItemCount(),
635
                    ]
636
                ]
637
            ];
638
 
639
            return new JsonModel($response);
640
        }
641
 
642
        $response = [
643
            'success' => false,
644
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
645
        ];
646
 
647
 
648
        return new JsonModel($response);
649
    }
650
 
651
    /**
652
     *
653
     * @param string $str
654
     * @return string
655
     */
656
    private function normalizeString ($str = '')
657
    {
658
        $basename  = substr($str, 0, strrpos($str, '.'));
659
        $basename  = str_replace('.', '-', $basename);
660
 
661
        $extension  = substr($str, strrpos($str, '.'));
662
 
663
        $str = $basename . $extension;
664
 
665
        $str = strip_tags($str);
666
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
667
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
668
        $str = strtolower($str);
669
        $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
670
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
671
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
672
        $str = str_replace(' ', '-', $str);
673
        $str = rawurlencode($str);
674
        $str = str_replace('%', '-', $str);
675
        return trim(strtolower($str));
676
    }
677
 
678
 
679
 
680
    /**
681
     *
682
     * @param int $feed_id
683
     * @param Company $company
684
     * @return array
685
     */
686
    private function renderFeed($feed_id)
687
    {
688
 
689
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
690
        if($sandbox) {
691
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
692
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
693
 
694
        } else {
695
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
696
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
697
        }
698
 
699
 
700
 
701
 
702
        $currentUserPlugin = $this->plugin('currentUserPlugin');
703
        $currentUser = $currentUserPlugin->getUser();
704
        $currentCompany = $currentUserPlugin->getCompany();
705
 
706
        $companyMapper = CompanyMapper::getInstance($this->adapter);
707
        $company = $companyMapper->fetchOne($currentCompany->id);
708
 
709
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
710
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
711
 
712
 
713
 
714
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
715
 
716
        $feedMapper = FeedMapper::getInstance($this->adapter);
717
        $feed = $feedMapper->fetchOne($feed_id);
718
 
719
 
720
        $params = [
721
            'id' => $feed->uuid
722
        ];
723
 
724
 
725
        $item = [
726
            'feed_unique' => uniqid(),
727
            'feed_uuid' => $feed->uuid,
728
            'feed_delete_url' =>  $this->url()->fromRoute('feeds/delete',  $params),
729
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
730
        ];
731
 
732
 
733
        $item['owner_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
734
        $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]);
735
        $item['owner_name'] = $company->name;
736
 
737
 
738
        $userMapper = UserMapper::getInstance($this->adapter);
739
        $user = $userMapper->fetchOne($feed->user_id);
740
 
741
 
7235 stevensc 742
        $item['owner_description'] = strip_tags($feed->description, 'p');
1 www 743
        $item['owner_shared'] = $feed->total_shared;
744
        $item['owner_comments'] = $feed->total_comments;
745
 
746
 
747
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $feed->added_on);
748
        $item['owner_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
749
 
750
        if($feed->file_type == Feed::FILE_TYPE_IMAGE) {
751
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
752
 
753
        }
754
        if($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
755
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
756
        }
757
        if($feed->file_type == Feed::FILE_TYPE_VIDEO) {
758
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
759
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
760
        }
761
 
762
 
763
 
764
 
765
        $commentMapper = CommentMapper::getInstance($this->adapter);
766
        $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
767
 
768
 
769
 
770
        $comments = [];
771
        foreach($records as $record)
772
        {
773
            $user = $userMapper->fetchOne($record->user_id);
774
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
775
 
776
            $comment = [];
777
            $comment['unique'] = uniqid();
778
 
779
 
780
            $user = $userMapper->fetchOne($record->user_id);
781
            if($user->id == $owner->user_id) {
782
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
783
                $comment['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
784
                $comment['user_name'] = $company->name;
785
            } else {
786
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
787
                $comment['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
788
                $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
789
            }
790
 
791
            $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
792
            $comment['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
793
            $comment['comment'] = $record->comment;
794
 
795
 
796
 
797
            array_push($comments, $comment);
798
        }
799
        $item['comment_add_url'] = $this->url()->fromRoute('feeds/comments', ['id' => $feed->uuid]);
800
        $item['comments'] = $comments;
801
 
802
        return $item;
803
    }
804
 
805
    /**
806
     *
807
     * @param int $comment_id
808
     * @return array
809
     */
810
    private function renderComment($comment_id)
811
    {
812
        $currentUserPlugin = $this->plugin('currentUserPlugin');
813
        $currentUser = $currentUserPlugin->getUser();
814
        $currentCompany = $currentUserPlugin->getCompany();
815
 
816
        $companyMapper = CompanyMapper::getInstance($this->adapter);
817
        $company = $companyMapper->fetchOne($currentCompany->id);
818
 
819
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
820
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
821
 
822
 
823
 
824
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
825
        if($sandbox) {
826
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
827
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
828
        } else {
829
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
830
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
831
        }
832
 
833
 
834
        $item = [];
835
 
836
        $commentMapper = CommentMapper::getInstance($this->adapter);
837
        $record = $commentMapper->fetchOne($comment_id);
838
 
839
        $feedMapper = FeedMapper::getInstance($this->adapter);
840
        $feed = $feedMapper->fetchOne($record->feed_id);
841
 
842
        if($record) {
843
            $userMapper = UserMapper::getInstance($this->adapter);
844
 
845
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
846
 
847
 
848
            $item = [];
849
            $item['unique'] = uniqid();
850
 
851
 
852
            $user = $userMapper->fetchOne($record->user_id);
853
            if($user->id == $owner->user_id) {
854
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
855
                $item['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
856
                $item['user_name'] = $company->name;
857
            } else {
858
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
859
                $item['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
860
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
861
            }
862
 
863
 
864
 
865
            $item['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
866
            $item['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
867
            $item['comment'] = $record->comment;
868
 
869
        }
870
        return $item;
871
    }
872
 
873
    /**
874
     *
875
     * @param string $path
876
     * @return boolean
877
     */
878
    private function deletePath($path)
879
    {
880
        try {
881
            if (is_dir($path)){
882
                if ($dh = opendir($path)) {
883
                    while (($file = readdir($dh)) !== false)
884
                    {
885
                        if($file == '.' || $file == '..') {
886
                            continue;
887
                        }
888
                        unlink($path . DIRECTORY_SEPARATOR . $file);
889
                    }
890
                    closedir($dh);
891
                }
892
 
893
                rmdir($path);
894
            }
895
            return true;
896
        }
897
        catch (\Throwable $e)
898
        {
899
            error_log($e->getTraceAsString());
900
            return false;
901
        }
902
    }
903
 
904
}