Proyectos de Subversion LeadersLinked - Backend

Rev

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