Proyectos de Subversion LeadersLinked - Backend

Rev

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