Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7373 | Rev 7375 | 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
 
7357 nelberth 574
 
7372 nelberth 575
 
7366 nelberth 576
        $request = $this->getRequest();
1 www 577
        if($request->isGet()) {
578
 
579
            $page = (int) $this->params()->fromQuery('page');
7374 nelberth 580
            $type   = $this->params()->fromRoute('type');
581
            if(isset($type)){
7372 nelberth 582
                $id =  $this->params()->fromRoute('id');
583
                $type   = $this->params()->fromRoute('type');
7350 nelberth 584
            }else{
585
                $queryMapper = QueryMapper::getInstance($this->adapter);
586
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
587
                $select->columns(['id']);
588
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
589
                $select->where->equalTo('company_id',$currentCompany->id);
590
                $select->where->and->equalTo('type', Feed::TYPE_COMPANY);
591
                $select->order('added_on desc');
592
            }
593
 
1 www 594
 
595
 
596
            $dbSelect = new DbSelect($select, $this->adapter);
597
            $paginator = new Paginator($dbSelect);
598
            $paginator->setCurrentPageNumber($page ? $page : 1);
599
            $paginator->setItemCountPerPage(10);
600
 
601
            $items = [];
602
            $feeds = $paginator->getCurrentItems();
603
            foreach($feeds as $feed)
604
            {
605
                $items[] = $this->renderFeed($feed->id);
606
            }
607
 
608
            $response = [
609
                'success' => true,
610
                'data' => [
611
                    'total' => [
612
                        'count' => $paginator->getTotalItemCount(),
613
                        'pages' => $paginator->getPages()->pageCount,
614
                    ],
615
                    'current' => [
616
                        'items'    => $items,
617
                        'page'     => $paginator->getCurrentPageNumber(),
618
                        'count'    => $paginator->getCurrentItemCount(),
619
                    ]
620
                ]
621
            ];
622
 
623
            return new JsonModel($response);
624
        }
625
 
626
        $response = [
627
            'success' => false,
628
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
629
        ];
630
 
631
 
632
        return new JsonModel($response);
633
    }
634
 
635
    /**
636
     *
637
     * @param string $str
638
     * @return string
639
     */
640
    private function normalizeString ($str = '')
641
    {
642
        $basename  = substr($str, 0, strrpos($str, '.'));
643
        $basename  = str_replace('.', '-', $basename);
644
 
645
        $extension  = substr($str, strrpos($str, '.'));
646
 
647
        $str = $basename . $extension;
648
 
649
        $str = strip_tags($str);
650
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
651
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
652
        $str = strtolower($str);
653
        $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
654
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
655
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
656
        $str = str_replace(' ', '-', $str);
657
        $str = rawurlencode($str);
658
        $str = str_replace('%', '-', $str);
659
        return trim(strtolower($str));
660
    }
661
 
662
 
663
 
664
    /**
665
     *
666
     * @param int $feed_id
667
     * @param Company $company
668
     * @return array
669
     */
670
    private function renderFeed($feed_id)
671
    {
672
 
673
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
674
        if($sandbox) {
675
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
676
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
677
 
678
        } else {
679
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
680
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
681
        }
682
 
683
 
684
 
685
 
686
        $currentUserPlugin = $this->plugin('currentUserPlugin');
687
        $currentUser = $currentUserPlugin->getUser();
688
        $currentCompany = $currentUserPlugin->getCompany();
689
 
690
        $companyMapper = CompanyMapper::getInstance($this->adapter);
691
        $company = $companyMapper->fetchOne($currentCompany->id);
692
 
693
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
694
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
695
 
696
 
697
 
698
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
699
 
700
        $feedMapper = FeedMapper::getInstance($this->adapter);
701
        $feed = $feedMapper->fetchOne($feed_id);
702
 
703
 
704
        $params = [
705
            'id' => $feed->uuid
706
        ];
707
 
708
 
709
        $item = [
710
            'feed_unique' => uniqid(),
711
            'feed_uuid' => $feed->uuid,
712
            'feed_delete_url' =>  $this->url()->fromRoute('feeds/delete',  $params),
713
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
714
        ];
715
 
716
 
717
        $item['owner_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
718
        $item['owner_image'] = $this->url()->fromRoute('storage', ['code' => $company->uuid, 'type' => 'company', 'filename' => $company->image]);
719
        $item['owner_name'] = $company->name;
720
 
721
 
722
        $userMapper = UserMapper::getInstance($this->adapter);
723
        $user = $userMapper->fetchOne($feed->user_id);
724
 
725
 
7235 stevensc 726
        $item['owner_description'] = strip_tags($feed->description, 'p');
1 www 727
        $item['owner_shared'] = $feed->total_shared;
728
        $item['owner_comments'] = $feed->total_comments;
729
 
730
 
731
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $feed->added_on);
732
        $item['owner_time_elapse'] = Functions::timeElapsedString( $dt->getTimestamp());
733
 
734
        if($feed->file_type == Feed::FILE_TYPE_IMAGE) {
735
            $item['owner_file_image'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
736
 
737
        }
738
        if($feed->file_type == Feed::FILE_TYPE_DOCUMENT) {
739
            $item['owner_file_document'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
740
        }
741
        if($feed->file_type == Feed::FILE_TYPE_VIDEO) {
742
            $item['owner_file_image_preview'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_image_preview]);
743
            $item['owner_file_video'] = $this->url()->fromRoute('storage', ['code' => $feed->uuid, 'type' => 'feed', 'filename' => $feed->file_name]);
744
        }
745
 
746
 
747
 
748
 
749
        $commentMapper = CommentMapper::getInstance($this->adapter);
750
        $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
751
 
752
 
753
 
754
        $comments = [];
755
        foreach($records as $record)
756
        {
757
            $user = $userMapper->fetchOne($record->user_id);
758
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
759
 
760
            $comment = [];
761
            $comment['unique'] = uniqid();
762
 
763
 
764
            $user = $userMapper->fetchOne($record->user_id);
765
            if($user->id == $owner->user_id) {
766
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
767
                $comment['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
768
                $comment['user_name'] = $company->name;
769
            } else {
770
                $comment['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
771
                $comment['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
772
                $comment['user_name'] = $user->first_name . ' ' . $user->last_name;
773
            }
774
 
775
            $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
776
            $comment['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
777
            $comment['comment'] = $record->comment;
778
 
779
 
780
 
781
            array_push($comments, $comment);
782
        }
783
        $item['comment_add_url'] = $this->url()->fromRoute('feeds/comments', ['id' => $feed->uuid]);
784
        $item['comments'] = $comments;
785
 
786
        return $item;
787
    }
788
 
789
    /**
790
     *
791
     * @param int $comment_id
792
     * @return array
793
     */
794
    private function renderComment($comment_id)
795
    {
796
        $currentUserPlugin = $this->plugin('currentUserPlugin');
797
        $currentUser = $currentUserPlugin->getUser();
798
        $currentCompany = $currentUserPlugin->getCompany();
799
 
800
        $companyMapper = CompanyMapper::getInstance($this->adapter);
801
        $company = $companyMapper->fetchOne($currentCompany->id);
802
 
803
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
804
        $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
805
 
806
 
807
 
808
        $sandbox = $this->config['leaderslinked.runmode.sandbox'];
809
        if($sandbox) {
810
            $company_profile_url = $this->config['leaderslinked.frontend.sandbox_company_profile'];
811
            $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
812
        } else {
813
            $company_profile_url = $this->config['leaderslinked.frontend.production_company_profile'];
814
            $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
815
        }
816
 
817
 
818
        $item = [];
819
 
820
        $commentMapper = CommentMapper::getInstance($this->adapter);
821
        $record = $commentMapper->fetchOne($comment_id);
822
 
823
        $feedMapper = FeedMapper::getInstance($this->adapter);
824
        $feed = $feedMapper->fetchOne($record->feed_id);
825
 
826
        if($record) {
827
            $userMapper = UserMapper::getInstance($this->adapter);
828
 
829
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
830
 
831
 
832
            $item = [];
833
            $item['unique'] = uniqid();
834
 
835
 
836
            $user = $userMapper->fetchOne($record->user_id);
837
            if($user->id == $owner->user_id) {
838
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'company',  'code' => $company->uuid, 'filename' =>  $company->image ]);
839
                $item['user_url'] =  str_replace('[uuid]', $company->uuid, $company_profile_url);
840
                $item['user_name'] = $company->name;
841
            } else {
842
                $item['user_image'] = $this->url()->fromRoute('storage', ['type' => 'user',  'code' => $user->uuid, 'filename' =>  $user->image ]);
843
                $item['user_url'] = str_replace('[uuid]', $user->uuid, $user_profile_url);
844
                $item['user_name'] = $user->first_name . ' ' . $user->last_name;
845
            }
846
 
847
 
848
 
849
            $item['link_delete'] = $this->url()->fromRoute('feeds/comments/delete',['id' => $feed->uuid, 'comment' => $record->uuid ]);
850
            $item['time_elapsed'] = Functions::timeElapsedString($dt->getTimestamp());
851
            $item['comment'] = $record->comment;
852
 
853
        }
854
        return $item;
855
    }
856
 
857
    /**
858
     *
859
     * @param string $path
860
     * @return boolean
861
     */
862
    private function deletePath($path)
863
    {
864
        try {
865
            if (is_dir($path)){
866
                if ($dh = opendir($path)) {
867
                    while (($file = readdir($dh)) !== false)
868
                    {
869
                        if($file == '.' || $file == '..') {
870
                            continue;
871
                        }
872
                        unlink($path . DIRECTORY_SEPARATOR . $file);
873
                    }
874
                    closedir($dh);
875
                }
876
 
877
                rmdir($path);
878
            }
879
            return true;
880
        }
881
        catch (\Throwable $e)
882
        {
883
            error_log($e->getTraceAsString());
884
            return false;
885
        }
886
    }
887
 
888
}