Proyectos de Subversion LeadersLinked - Backend

Rev

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