Proyectos de Subversion LeadersLinked - Backend

Rev

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