Proyectos de Subversion LeadersLinked - Backend

Rev

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