Proyectos de Subversion LeadersLinked - Backend

Rev

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