Proyectos de Subversion LeadersLinked - Backend

Rev

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