Proyectos de Subversion LeadersLinked - Backend

Rev

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