Proyectos de Subversion LeadersLinked - Backend

Rev

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