Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17287 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 17287 Rev 17288
Línea 32... Línea 32...
32
    /**
32
    /**
33
     *
33
     *
34
     * @var \Laminas\Db\Adapter\AdapterInterface
34
     * @var \Laminas\Db\Adapter\AdapterInterface
35
     */
35
     */
36
    private $adapter;
36
    private $adapter;
37
    
37
 
38
    /**
38
    /**
39
     *
39
     *
40
     * @var \LeadersLinked\Cache\CacheInterface
40
     * @var \LeadersLinked\Cache\CacheInterface
41
     */
41
     */
42
    private $cache;
42
    private $cache;
43
    
43
 
44
    
44
 
45
    /**
45
    /**
46
     *
46
     *
47
     * @var \Laminas\Log\LoggerInterface
47
     * @var \Laminas\Log\LoggerInterface
48
     */
48
     */
49
    private $logger;
49
    private $logger;
50
    
50
 
51
    /**
51
    /**
52
     *
52
     *
53
     * @var array
53
     * @var array
54
     */
54
     */
55
    private $config;
55
    private $config;
56
    
56
 
57
    
57
 
58
    /**
58
    /**
59
     *
59
     *
60
     * @var \Laminas\Mvc\I18n\Translator
60
     * @var \Laminas\Mvc\I18n\Translator
61
     */
61
     */
62
    private $translator;
62
    private $translator;
63
    
63
 
64
    
64
 
65
    /**
65
    /**
66
     *
66
     *
67
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
67
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
68
     * @param \LeadersLinked\Cache\CacheInterface $cache
68
     * @param \LeadersLinked\Cache\CacheInterface $cache
69
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
69
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
Línea 468... Línea 468...
468
                'data'   => $th->getMessage()
468
                'data'   => $th->getMessage()
469
            ]);
469
            ]);
470
        }
470
        }
471
    }
471
    }
Línea -... Línea 472...
-
 
472
 
472
 
473
    // Esta función maneja la acción de agregar un nuevo feed.
473
    public function addAction()
474
    public function addAction()
474
    {
475
    {
-
 
476
        try {
475
        try {
477
            // Obtener el objeto de solicitud actual
Línea -... Línea 478...
-
 
478
            $request = $this->getRequest();
476
            $request = $this->getRequest();
479
 
477
 
480
            // Recuperar el usuario y la empresa actuales usando plugins
478
            $currentUserPlugin = $this->plugin('currentUserPlugin');
481
            $currentUserPlugin = $this->plugin('currentUserPlugin');
479
            $currentUser = $currentUserPlugin->getUser();
482
            $currentUser = $currentUserPlugin->getUser();
480
            
483
 
481
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
484
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
482
            $currentNetwork = $currentNetworkPlugin->getNetwork();
485
            $currentNetwork = $currentNetworkPlugin->getNetwork();
Línea -... Línea 486...
-
 
486
 
483
            
487
            $currentCompany = $currentUserPlugin->getCompany();
Línea -... Línea 488...
-
 
488
 
484
            $currentCompany = $currentUserPlugin->getCompany();
489
            // Obtener el ID de MYT de la ruta
485
 
490
            $myt_id =  $this->params()->fromRoute('myt_id');
486
            $myt_id =  $this->params()->fromRoute('myt_id');
491
 
487
 
492
            // Verificar si la solicitud es una solicitud POST
488
            if (!$request->isPost()) {
493
            if (!$request->isPost()) {
489
                return new JsonModel([
494
                return new JsonModel([
Línea -... Línea 495...
-
 
495
                    'success' => false,
490
                    'success' => false,
496
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
491
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
497
                ]);
492
                ]);
-
 
493
            }
498
            }
-
 
499
 
494
 
500
            // Combinar datos de POST y archivos
495
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
501
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
496
            $feed_content_type = empty($dataPost['feed_content_type']) ? '' :  $dataPost['feed_content_type'];
502
            $feed_content_type = empty($dataPost['feed_content_type']) ? '' :  $dataPost['feed_content_type'];
497
            
503
 
-
 
504
            // Verificar si el tipo de contenido del feed es una encuesta rápida
498
            
505
            if ($feed_content_type == Feed::FILE_TYPE_FAST_SURVEY) {
499
            if( $feed_content_type == Feed::FILE_TYPE_FAST_SURVEY) {
506
                $form = new FastSurveyForm();
500
                $form = new FastSurveyForm();
507
                $form->setData($dataPost);
501
                $form->setData($dataPost);
508
 
502
                
509
                // Validar el formulario
503
                if ($form->isValid()) {
510
                if ($form->isValid()) {
504
                    
511
 
505
                    $dataPost = (array) $form->getData();
-
 
506
                    
512
                    $dataPost = (array) $form->getData();
-
 
513
 
507
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
514
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
508
                    $companyUser = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
515
                    $companyUser = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
509
                    $now = $companyUserMapper->getDatebaseNow();
516
                    $now = $companyUserMapper->getDatebaseNow();
510
                    
517
 
-
 
518
                    // Hidratar los datos en un objeto FastSurvey
511
                    
519
                    $hydrator = new ObjectPropertyHydrator();
512
                    $hydrator = new ObjectPropertyHydrator();
520
                    $fastSurvey = new FastSurvey();
513
                    $fastSurvey = new FastSurvey();
521
                    $hydrator->hydrate($dataPost, $fastSurvey);
514
                    $hydrator->hydrate($dataPost, $fastSurvey);
522
 
515
                    
-
 
516
                    $fastSurvey->network_id = $currentNetwork->id;
523
                    // Asignar valores al objeto FastSurvey
517
                    $fastSurvey->company_id = $currentCompany->id;
524
                    $fastSurvey->network_id = $currentNetwork->id;
518
                    $fastSurvey->user_id = $companyUser->id;
525
                    $fastSurvey->company_id = $currentCompany->id;
519
                    $fastSurvey->status = FastSurvey::STATUS_ACTIVE;
526
                    $fastSurvey->user_id = $companyUser->id;
-
 
527
                    $fastSurvey->status = FastSurvey::STATUS_ACTIVE;
520
            
528
 
521
                    
529
                    $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
522
                    $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
530
                    $result = $fastSurveyMapper->insert($fastSurvey);
523
                    $result = $fastSurveyMapper->insert($fastSurvey);
531
                    if ($result) {
524
                    if ($result) {
532
                        // Crear un nuevo objeto Feed
Línea 534... Línea 542...
534
                        $feed->title = '-';
542
                        $feed->title = '-';
535
                        $feed->description = '-';
543
                        $feed->description = '-';
536
                        $feed->total_comments   = 0;
544
                        $feed->total_comments   = 0;
537
                        $feed->total_shared     = 0;
545
                        $feed->total_shared     = 0;
538
                        $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
546
                        $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
539
                        
547
 
540
                        $feedMapper = FeedMapper::getInstance($this->adapter);
548
                        $feedMapper = FeedMapper::getInstance($this->adapter);
541
                        $feedMapper->insert($feed);
549
                        $feedMapper->insert($feed);
542
                        
550
 
-
 
551
                        // Registrar la acción de agregar la encuesta rápida
543
                        $this->logger->info('Se agrego la encuesta rápida : ' . $fastSurvey->question, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
552
                        $this->logger->info('Se agrego la encuesta rápida : ' . $fastSurvey->question, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
544
                        
553
 
545
                        $response = [
554
                        $response = [
546
                            'success'   => true,
555
                            'success'   => true,
547
                            'data'   => $this->renderFeed($feed->id, $now)
556
                            'data'   => $this->renderFeed($feed->id, $now)
548
                        ];
557
                        ];
549
                        
-
 
550
                        
-
 
551
                    } else {
558
                    } else {
552
                        $response = [
559
                        $response = [
553
                            'success' => false,
560
                            'success' => false,
554
                            'data' => $fastSurveyMapper->getError()
561
                            'data' => $fastSurveyMapper->getError()
555
                        ];
562
                        ];
556
                    }
563
                    }
557
                    
564
 
558
                    return new JsonModel($response);
565
                    return new JsonModel($response);
559
                } else {
566
                } else {
-
 
567
                    // Manejar errores de validación del formulario
560
                    $messages = [];
568
                    $messages = [];
561
                    $form_messages = (array) $form->getMessages();
569
                    $form_messages = (array) $form->getMessages();
562
                    foreach ($form_messages as $fieldname => $field_messages) {
570
                    foreach ($form_messages as $fieldname => $field_messages) {
563
                        
571
 
564
                        $messages[$fieldname] = array_values($field_messages);
572
                        $messages[$fieldname] = array_values($field_messages);
565
                    }
573
                    }
566
                    
574
 
567
                    return new JsonModel([
575
                    return new JsonModel([
568
                        'success' => false,
576
                        'success' => false,
569
                        'data' => $messages
577
                        'data' => $messages
570
                    ]);
578
                    ]);
571
                }
579
                }
572
            }  
580
            }
-
 
581
            // Crear un nuevo formulario de feed
573
            $form = new CreateFeedForm($this->adapter);
582
            $form = new CreateFeedForm($this->adapter);
Línea 574... Línea 583...
574
 
583
 
Línea -... Línea 584...
-
 
584
            $form->setData($dataPost);
575
            $form->setData($dataPost);
585
 
576
 
586
            // Validar el formulario
577
            if (!$form->isValid()) {
587
            if (!$form->isValid()) {
578
                $messages = [];
588
                $messages = [];
579
                $form_messages = (array) $form->getMessages();
-
 
580
                foreach ($form_messages  as $fieldname => $field_messages)
589
                $form_messages = (array) $form->getMessages();
581
                {
590
                foreach ($form_messages  as $fieldname => $field_messages) {
582
                    $messages[$fieldname] = array_values($field_messages);
591
                    $messages[$fieldname] = array_values($field_messages);
583
                }
592
                }
584
                return new JsonModel([
593
                return new JsonModel([
585
                    'success'   => false,
594
                    'success'   => false,
586
                    'data'   => $messages
595
                    'data'   => $messages
Línea 587... Línea 596...
587
                ]);
596
                ]);
588
            }
597
            }
589
 
598
 
590
            $companyMapper = CompanyMapper::getInstance($this->adapter);
599
            $companyMapper = CompanyMapper::getInstance($this->adapter);
Línea 591... Línea 600...
591
            $now = $companyMapper->getDatebaseNow();
600
            $now = $companyMapper->getDatebaseNow();
592
            
601
 
Línea -... Línea 602...
-
 
602
            $company = $companyMapper->fetchOne($currentCompany->id);
593
            $company = $companyMapper->fetchOne($currentCompany->id);
603
 
Línea -... Línea 604...
-
 
604
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
594
 
605
            $owner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
595
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
606
 
596
            $owner = $companyUserMapper->fetchOwnerByCompanyId($company->id);
607
            // Establecer la prioridad del feed
Línea 597... Línea 608...
597
 
608
            $dataPost['priority'] =  isset($dataPost['priority']) ? Feed::PRIORITY_URGENT  : '';
Línea 623... Línea 634...
623
                $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
634
                $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
624
            }
635
            }
Línea 625... Línea 636...
625
 
636
 
626
            $feed->total_comments   = 0;
637
            $feed->total_comments   = 0;
627
            $feed->total_shared     = 0;
638
            $feed->total_shared     = 0;
628
        
639
 
Línea -... Línea 640...
-
 
640
            $feedMapper = FeedMapper::getInstance($this->adapter);
629
            $feedMapper = FeedMapper::getInstance($this->adapter);
641
 
630
 
642
            // Insertar el nuevo feed en la base de datos
631
            if(!$feedMapper->insert($feed)) {
643
            if (!$feedMapper->insert($feed)) {
632
                return new JsonModel([
644
                return new JsonModel([
633
                    'success'   => false,
645
                    'success'   => false,
634
                    'data'   => $feedMapper->getError()
646
                    'data'   => $feedMapper->getError()
Línea 638... Línea 650...
638
            $feed = $feedMapper->fetchOne($feed->id);
650
            $feed = $feedMapper->fetchOne($feed->id);
Línea 639... Línea 651...
639
 
651
 
640
            $storage = Storage::getInstance($this->config, $this->adapter);
652
            $storage = Storage::getInstance($this->config, $this->adapter);
Línea -... Línea 653...
-
 
653
            $storage->setFiles($request->getFiles()->toArray());
641
            $storage->setFiles($request->getFiles()->toArray());
654
 
642
 
655
            // Verificar y establecer el nombre de archivo actual
643
            if(!$storage->setCurrentFilename('file')) {
656
            if (!$storage->setCurrentFilename('file')) {
644
                return new JsonModel([
657
                return new JsonModel([
645
                    'success'   => false,
658
                    'success'   => false,
646
                    'data'   => 'ERROR_UPLOAD_FILE'
659
                    'data'   => 'ERROR_UPLOAD_FILE'
Línea 647... Línea 660...
647
                ]);
660
                ]);
Línea -... Línea 661...
-
 
661
            }
648
            }
662
 
649
 
663
            $file_type = $storage->getFileType();
650
            $file_type = $storage->getFileType();
664
 
651
 
665
            // Manejar la carga de archivos según el tipo de archivo
652
            if ($file_type == Feed::FILE_TYPE_DOCUMENT) {
666
            if ($file_type == Feed::FILE_TYPE_DOCUMENT) {
653
                $tmp_filename = $storage->getTmpFilename();
667
                $tmp_filename = $storage->getTmpFilename();
654
                $filename = 'feed-' . $feed->uuid . '.pdf';
668
                $filename = 'feed-' . $feed->uuid . '.pdf';
655
                $target_filename = $storage->composePathToFilename( 
669
                $target_filename = $storage->composePathToFilename(
656
                    Storage::TYPE_FEED,
670
                    Storage::TYPE_FEED,
657
                    $feed->uuid,
671
                    $feed->uuid,
658
                    $filename
672
                    $filename
659
                );
673
                );
660
                
674
 
661
                if (!$storage->putFile($tmp_filename, $target_filename)) {
675
                if (!$storage->putFile($tmp_filename, $target_filename)) {
662
                    return new JsonModel([
676
                    return new JsonModel([
Línea 663... Línea 677...
663
                        'success'   => false,
677
                        'success'   => false,
664
                        'data'   => 'ERROR_UPLOAD_FILE'
678
                        'data'   => 'ERROR_UPLOAD_FILE'
Línea 665... Línea 679...
665
                    ]);
679
                    ]);
666
                }
680
                }
667
 
681
 
668
                $feed->file_type = $file_type;
682
                $feed->file_type = $file_type;
669
                $feed->file_name = $filename;
683
                $feed->file_name = $filename;
670
 
684
 
671
                if(!$feedMapper->update($feed)) {
685
                if (!$feedMapper->update($feed)) {
Línea 672... Línea 686...
672
                    return new JsonModel([
686
                    return new JsonModel([
673
                        'success'   => false,
687
                        'success'   => false,
Línea 674... Línea 688...
674
                        'data'   => 'ERROR_UPDATING_FEED'
688
                        'data'   => 'ERROR_UPDATING_FEED'
675
                    ]);
689
                    ]);
676
                }
690
                }
677
            } 
691
            }
678
 
692
 
679
            if ($file_type == Feed::FILE_TYPE_IMAGE) {
693
            if ($file_type == Feed::FILE_TYPE_IMAGE) {
680
                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
694
                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.feed_image_size']);
681
 
695
 
682
                $tmp_filename = $storage->getTmpFilename();
696
                $tmp_filename = $storage->getTmpFilename();
683
                $filename = 'feed-' . $feed->uuid . '.png';
697
                $filename = 'feed-' . $feed->uuid . '.png';
684
                $target_filename = $storage->composePathToFilename( 
698
                $target_filename = $storage->composePathToFilename(
685
                    Storage::TYPE_FEED,
699
                    Storage::TYPE_FEED,
686
                    $feed->uuid,
700
                    $feed->uuid,
687
                    $filename
701
                    $filename
688
                );
702
                );
689
                
703
 
690
                if(!$storage->uploadImageResize($tmp_filename, $target_filename, $target_width, $target_height)) {
704
                if (!$storage->uploadImageResize($tmp_filename, $target_filename, $target_width, $target_height)) {
691
                    return new JsonModel([
705
                    return new JsonModel([
692
                        'success'   => false,
706
                        'success'   => false,
693
                        'data'   => 'ERROR_UPLOAD_FILE'
707
                        'data'   => 'ERROR_UPLOAD_FILE'
694
                    ]);
708
                    ]);
695
                }
709
                }
696
                
710
 
697
                $feed->file_type = $file_type;
711
                $feed->file_type = $file_type;
698
                $feed->file_name = $filename; 
712
                $feed->file_name = $filename;
Línea 699... Línea 713...
699
                
713
 
700
                if(!$feedMapper->update($feed)) {
714
                if (!$feedMapper->update($feed)) {
701
                    return new JsonModel([
715
                    return new JsonModel([
702
                        'success'   => false,
716
                        'success'   => false,
703
                        'data'   => 'ERROR_UPDATING_FEED'
717
                        'data'   => 'ERROR_UPDATING_FEED'
704
                    ]);
718
                    ]);
705
                }
719
                }
706
            }
720
            }
Línea 707... Línea 721...
707
 
721
 
708
            if ($file_type == Feed::FILE_TYPE_VIDEO) {
722
            if ($file_type == Feed::FILE_TYPE_VIDEO) {
709
                $tmp_filename = $storage->getTmpFilename();
723
                $tmp_filename = $storage->getTmpFilename();
710
                $filename = 'feed-' . $feed->uuid . '.mp4';
724
                $filename = 'feed-' . $feed->uuid . '.mp4';
711
                $target_filename = $storage->composePathToFilename( 
725
                $target_filename = $storage->composePathToFilename(
712
                    Storage::TYPE_FEED,
726
                    Storage::TYPE_FEED,
713
                    $feed->uuid,
727
                    $feed->uuid,
714
                    $filename
728
                    $filename
715
                );
729
                );
716
 
730
 
717
                if(!$storage->putFile($tmp_filename, $target_filename)) {
731
                if (!$storage->putFile($tmp_filename, $target_filename)) {
718
                    return new JsonModel([
732
                    return new JsonModel([
719
                        'success'   => false,
733
                        'success'   => false,
720
                        'data'   => 'ERROR_UPLOAD_FILE'
734
                        'data'   => 'ERROR_UPLOAD_FILE'
721
                    ]);
735
                    ]);
722
                }
736
                }
723
                
737
 
724
                // Generate poster image filename
738
                // Generar el nombre de archivo de la imagen del póster
725
                $poster_filename = 'feed-' . $feed->uuid . '-poster.png';
739
                $poster_filename = 'feed-' . $feed->uuid . '-poster.png';
726
                $poster_target_filename = $storage->composePathToFilename(
740
                $poster_target_filename = $storage->composePathToFilename(
727
                    Storage::TYPE_FEED,
741
                    Storage::TYPE_FEED,
728
                    $feed->uuid,
742
                    $feed->uuid,
729
                    $poster_filename
743
                    $poster_filename
730
                );
744
                );
731
                
745
 
732
                // Extract poster from video using Storage class method
746
                // Extraer la imagen del póster del video usando el método de la clase Storage
733
                if (!$storage->extractPosterFromVideo($target_filename, $poster_target_filename)) {
747
                if (!$storage->extractPosterFromVideo($target_filename, $poster_target_filename)) {
734
                    return new JsonModel([
748
                    return new JsonModel([
735
                        'success'   => false,
749
                        'success'   => false,
736
                        'data'   => 'ERROR_GENERATING_VIDEO_POSTER'
750
                        'data'   => 'ERROR_GENERATING_VIDEO_POSTER'
737
                    ]);
751
                    ]);
738
                }
752
                }
739
                
753
 
Línea 740... Línea 754...
740
                $feed->file_type = $file_type;
754
                $feed->file_type = $file_type;
741
                $feed->file_name = $filename;
755
                $feed->file_name = $filename;
742
                $feed->file_image_preview = $poster_filename;
756
                $feed->file_image_preview = $poster_filename;
743
                
757
 
744
                if(!$feedMapper->update($feed)) {
758
                if (!$feedMapper->update($feed)) {
745
                    return new JsonModel([
759
                    return new JsonModel([
Línea 746... Línea 760...
746
                        'success'   => false,
760
                        'success'   => false,
747
                        'data'   => 'ERROR_UPDATING_FEED'
761
                        'data'   => 'ERROR_UPDATING_FEED'
748
                    ]);
762
                    ]);
Línea 762... Línea 776...
762
                    return new JsonModel([
776
                    return new JsonModel([
763
                        'success'   => false,
777
                        'success'   => false,
764
                        'data'   => 'ERROR_INSERTING_VIDEO_CONVERT'
778
                        'data'   => 'ERROR_INSERTING_VIDEO_CONVERT'
765
                    ]);
779
                    ]);
766
                }
780
                }
767
                    
-
 
768
                
-
 
769
            }
781
            }
Línea -... Línea 782...
-
 
782
 
770
 
783
            // Devolver la respuesta con el feed renderizado
771
            return new JsonModel([
784
            return new JsonModel([
772
                'success'   => true,
785
                'success'   => true,
773
                'data'   => $this->renderFeed($feed->id, $now)
786
                'data'   => $this->renderFeed($feed->id, $now)
774
            ]);
787
            ]);
-
 
788
        } catch (\Throwable $th) {
775
        } catch (\Throwable $th) {
789
            // Manejar cualquier error que ocurra durante el proceso
776
            return new JsonModel([
790
            return new JsonModel([
777
                'success'   => false,
791
                'success'   => false,
778
                'data'   => $th->getMessage()
792
                'data'   => $th->getMessage()
779
            ]);
793
            ]);
780
        }
794
        }
Línea 781... Línea -...
781
    }
-
 
-
 
795
    }
782
 
796
 
783
 
797
    // Esta función maneja la acción del timeline, que recupera una lista paginada de feeds para la empresa actual.
784
    public function timelineAction()
798
    public function timelineAction()
-
 
799
    {
785
    {
800
        try {
786
        try {
801
            // Obtener el objeto de solicitud actual
-
 
802
            $request = $this->getRequest();
787
            $request = $this->getRequest();
803
 
788
            
804
            // Recuperar el usuario y la empresa actuales usando plugins
789
            $currentUserPlugin = $this->plugin('currentUserPlugin');
805
            $currentUserPlugin = $this->plugin('currentUserPlugin');
Línea -... Línea 806...
-
 
806
            $currentUser = $currentUserPlugin->getUser();
790
            $currentUser = $currentUserPlugin->getUser();
807
            $currentCompany = $currentUserPlugin->getCompany();
791
            $currentCompany = $currentUserPlugin->getCompany();
808
 
792
 
809
            // Verificar si la solicitud es una solicitud GET
793
            if (!$request->isGet()) {
810
            if (!$request->isGet()) {
794
                return new JsonModel([
811
                return new JsonModel([
795
                    'success' => false,
812
                    'success' => false,
Línea -... Línea 813...
-
 
813
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
796
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
814
                ]);
797
                ]);
815
            }
798
            }
816
 
-
 
817
            // Obtener el número de página de los parámetros de consulta
799
 
818
            $page = (int) $this->params()->fromQuery('page');
800
            $page = (int) $this->params()->fromQuery('page');
819
            $myt_id = $this->params()->fromRoute('myt_id');
801
            $myt_id = $this->params()->fromRoute('myt_id');
820
 
-
 
821
            // Inicializar mappers para consultar la base de datos
802
            
822
            $queryMapper = QueryMapper::getInstance($this->adapter);
-
 
823
            $feedMapper = FeedMapper::getInstance($this->adapter);
803
            $queryMapper = QueryMapper::getInstance($this->adapter);
824
 
-
 
825
            // Verificar si se proporciona un ID de MYT específico
804
            $feedMapper = FeedMapper::getInstance($this->adapter);
826
            if ($myt_id) {
805
            
827
                // Obtener la fecha y hora actuales de la base de datos
-
 
828
                $now = $feedMapper->getDatebaseNow();
806
            if ($myt_id) {
829
                // Obtener el feed MYT por UUID
807
                $now = $feedMapper->getDatebaseNow();
830
                $myt = $feedMapper->fetchOneByUuid($myt_id);
808
                $myt = $feedMapper->fetchOneByUuid($myt_id);
831
 
809
                
832
                // Si no se encuentra el feed MYT, devolver un error
810
                if (!$myt) {
833
                if (!$myt) {
811
                    return new JsonModel([
834
                    return new JsonModel([
812
                        'success' => false,
835
                        'success' => false,
-
 
836
                        'data' => 'ERROR_MYT_NOT_FOUND'
813
                        'data' => 'ERROR_MYT_NOT_FOUND'
837
                    ]);
814
                    ]);
838
                }
815
                }
839
 
816
                
840
                // Crear una consulta select para respuestas MYT
817
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
841
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
818
                $select->columns(['id']);
842
                $select->columns(['id']);
819
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
843
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
820
                $select->where->equalTo('company_id', $currentCompany->id);
844
                $select->where->equalTo('company_id', $currentCompany->id);
-
 
845
                $select->where->equalTo('myt_id', $myt->id);
821
                $select->where->equalTo('myt_id', $myt->id);
846
                $select->where->equalTo('type', Feed::TYPE_MYT_ANSWER);
822
                $select->where->equalTo('type', Feed::TYPE_MYT_ANSWER);
847
                $select->order('added_on desc');
-
 
848
            } else {
823
                $select->order('added_on desc');
849
                // Obtener la fecha y hora actuales de la base de datos
824
            } else {
850
                $now = $queryMapper->getDatebaseNow();
825
                $now = $queryMapper->getDatebaseNow();
851
 
826
                
852
                // Crear una consulta select para feeds de la empresa
827
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
853
                $select = $queryMapper->getSql()->select(FeedMapper::_TABLE);
828
                $select->columns(['id']);
854
                $select->columns(['id']);
829
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
855
                $select->where->equalTo('status', Feed::STATUS_PUBLISHED);
Línea -... Línea 856...
-
 
856
                $select->where->equalTo('company_id', $currentCompany->id);
830
                $select->where->equalTo('company_id', $currentCompany->id);
857
                $select->where->equalTo('type', Feed::TYPE_COMPANY);
831
                $select->where->equalTo('type', Feed::TYPE_COMPANY);
858
                $select->order('added_on desc');
832
                $select->order('added_on desc');
859
            }
833
            }
860
 
Línea -... Línea 861...
-
 
861
            // Crear un paginador para la consulta select
834
 
862
            $dbSelect = new \Laminas\Paginator\Adapter\DbSelect($select, $this->adapter);
-
 
863
            $paginator = new \Laminas\Paginator\Paginator($dbSelect);
835
            $dbSelect = new \Laminas\Paginator\Adapter\DbSelect($select, $this->adapter);
864
            $paginator->setCurrentPageNumber($page ? $page : 1);
836
            $paginator = new \Laminas\Paginator\Paginator($dbSelect);
865
            $paginator->setItemCountPerPage(10);
-
 
866
 
837
            $paginator->setCurrentPageNumber($page ? $page : 1);
867
            // Inicializar un array para contener los elementos del feed renderizados
838
            $paginator->setItemCountPerPage(10);
868
            $items = [];
839
 
869
            // Obtener los elementos actuales del paginador
840
            $items = [];
870
            $feeds = $paginator->getCurrentItems();
841
            $feeds = $paginator->getCurrentItems();
871
 
842
            
872
            // Renderizar cada elemento del feed
Línea -... Línea 873...
-
 
873
            foreach ($feeds as $feed) {
843
            foreach ($feeds as $feed) {
874
                $renderedFeed = $this->renderFeed($feed->id, $now);
844
                $renderedFeed = $this->renderFeed($feed->id, $now);
875
                if ($renderedFeed) {
845
                if ($renderedFeed) {
876
                    $items[] = $renderedFeed;
846
                    $items[] = $renderedFeed;
877
                }
847
                }
878
            }
Línea 859... Línea 890...
859
                        'page'     => $paginator->getCurrentPageNumber(),
890
                        'page'     => $paginator->getCurrentPageNumber(),
860
                        'count'    => $paginator->getCurrentItemCount(),
891
                        'count'    => $paginator->getCurrentItemCount(),
861
                    ]
892
                    ]
862
                ]
893
                ]
863
            ]);
894
            ]);
864
            
-
 
865
        } catch (\Throwable $th) {
895
        } catch (\Throwable $th) {
-
 
896
            // Registrar cualquier error que ocurra durante el proceso
866
            $this->logger->error('Error al obtener el timeline: ' . $th->getMessage(), ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
897
            $this->logger->error('Error al obtener el timeline: ' . $th->getMessage(), ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
-
 
898
            // Devolver una respuesta de error
867
            return new JsonModel([
899
            return new JsonModel([
868
                'success' => false,
900
                'success' => false,
869
                'data' => $th->getMessage()
901
                'data' => $th->getMessage()
870
            ]);
902
            ]);
871
        }
903
        }
872
    }
904
    }
Línea 873... Línea 905...
873
 
905
 
874
    public function oneFeedAction()
906
    public function oneFeedAction()
875
    {
907
    {
876
       
908
 
Línea 877... Línea 909...
877
       
909
 
878
 
910
 
879
 
911
 
Línea 897... Línea 929...
897
            }
929
            }
Línea 898... Línea 930...
898
 
930
 
899
            $items = [];
931
            $items = [];
900
            $feedMapper = FeedMapper::getInstance($this->adapter);
932
            $feedMapper = FeedMapper::getInstance($this->adapter);
901
            $now = $feedMapper->getDatebaseNow();
933
            $now = $feedMapper->getDatebaseNow();
902
            
934
 
Línea 903... Línea 935...
903
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
935
            $feed  = $feedMapper->fetchOneByUuid($feed_uuid);
904
 
936
 
905
            if (!$feed) {
937
            if (!$feed) {
Línea 922... Línea 954...
922
                        'feed_title' => $feed->title,
954
                        'feed_title' => $feed->title,
923
                        'topic_title' => $feed->description
955
                        'topic_title' => $feed->description
924
                    ]
956
                    ]
925
                ];
957
                ];
926
            } else  if ($feed->type == 'myta') {
958
            } else  if ($feed->type == 'myta') {
927
     
959
 
Línea 928... Línea 960...
928
 
960
 
Línea 929... Línea 961...
929
                $items = $this->renderFeed($feed->id, $now, $myt_id);
961
                $items = $this->renderFeed($feed->id, $now, $myt_id);
930
 
962
 
Línea 934... Línea 966...
934
                        'item' => $items,
966
                        'item' => $items,
935
                        'feed_title' => $feed->title,
967
                        'feed_title' => $feed->title,
936
                        'topic_title' => $feed->description
968
                        'topic_title' => $feed->description
937
                    ]
969
                    ]
938
                ];
970
                ];
939
            } 
971
            }
940
            
972
 
941
            /*else if ($feed->type == 'hptg') {
973
            /*else if ($feed->type == 'hptg') {
Línea 942... Línea 974...
942
 
974
 
943
                $group_uuid =  $this->params()->fromRoute('group_id');
975
                $group_uuid =  $this->params()->fromRoute('group_id');
Línea 1021... Línea 1053...
1021
            }*/
1053
            }*/
Línea 1022... Línea 1054...
1022
 
1054
 
1023
            return new JsonModel($response);
1055
            return new JsonModel($response);
1024
        }
1056
        }
1025
    }
1057
    }
1026
    
1058
 
1027
    /**
1059
    /**
1028
     *
1060
     *
1029
     * @param int $feed_id
1061
     * @param int $feed_id
1030
     * @param \LeadersLinked\Model\Company $company
1062
     * @param \LeadersLinked\Model\Company $company
Línea 1066... Línea 1098...
1066
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
1098
            'feed_content_type' => $feed->file_type ? $feed->file_type : '',
1067
            'owner_url' =>  'https://' . $network->main_hostname . '/company/view/' . $company->uuid,
1099
            'owner_url' =>  'https://' . $network->main_hostname . '/company/view/' . $company->uuid,
1068
            'owner_image' => $storage->getCompanyImage($company),
1100
            'owner_image' => $storage->getCompanyImage($company),
1069
            'owner_name' => $company->name,
1101
            'owner_name' => $company->name,
1070
        ];
1102
        ];
1071
        
-
 
Línea -... Línea 1103...
-
 
1103
 
1072
 
1104
 
1073
        
1105
 
1074
        
1106
 
1075
        $userMapper = \LeadersLinked\Mapper\UserMapper::getInstance($this->adapter);
1107
        $userMapper = \LeadersLinked\Mapper\UserMapper::getInstance($this->adapter);
Línea 1076... Línea 1108...
1076
        $user = $userMapper->fetchOne($feed->user_id);
1108
        $user = $userMapper->fetchOne($feed->user_id);
1077
 
1109
 
1078
 
1110
 
1079
        
1111
 
1080
        $item['owner_shared'] = $feed->total_shared;
1112
        $item['owner_shared'] = $feed->total_shared;
1081
        $item['owner_comments'] = $feed->total_comments;
1113
        $item['owner_comments'] = $feed->total_comments;
1082
        
1114
 
1083
        
1115
 
1084
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1116
        if ($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1085
            $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
1117
            $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
1086
            $fastSurvey = $fastSurveyMapper->fetchOne($feed->fast_survey_id);
1118
            $fastSurvey = $fastSurveyMapper->fetchOne($feed->fast_survey_id);
1087
            
1119
 
1088
            $owner_description = [
1120
            $owner_description = [
1089
                'question' => $fastSurvey->question,
1121
                'question' => $fastSurvey->question,
1090
                'number_of_answers' => $fastSurvey->number_of_answers,
1122
                'number_of_answers' => $fastSurvey->number_of_answers,
1091
                'answer1' => $fastSurvey->answer1,
1123
                'answer1' => $fastSurvey->answer1,
1092
                'answer2' => $fastSurvey->answer2,
1124
                'answer2' => $fastSurvey->answer2,
1093
                'answer3' => $fastSurvey->answer3,
1125
                'answer3' => $fastSurvey->answer3,
1094
                'answer4' => $fastSurvey->answer4,
1126
                'answer4' => $fastSurvey->answer4,
1095
                'answer5' => $fastSurvey->answer5,
1127
                'answer5' => $fastSurvey->answer5,
1096
                'result_type' => $fastSurvey->result_type,
1128
                'result_type' => $fastSurvey->result_type,
1097
                
1129
 
1098
            ]; 
1130
            ];
1099
             
1131
 
1100
            if($fastSurvey->expire_on > $now) {
1132
            if ($fastSurvey->expire_on > $now) {
1101
                
1133
 
1102
                
1134
 
1103
                
-
 
1104
                $owner_description['active'] = 1;
1135
 
1105
                $owner_description['time_remaining'] =  Functions::getDateDiff($now, $fastSurvey->expire_on);
1136
                $owner_description['active'] = 1;
1106
                
1137
                $owner_description['time_remaining'] =  Functions::getDateDiff($now, $fastSurvey->expire_on);
1107
            } else {
1138
            } else {
1108
                if($fastSurvey->result_type == FastSurvey::RESULT_TYPE_PUBLIC) {
1139
                if ($fastSurvey->result_type == FastSurvey::RESULT_TYPE_PUBLIC) {
1109
                    $owner_description['votes1'] = $fastSurvey->votes1;
1140
                    $owner_description['votes1'] = $fastSurvey->votes1;
1110
                    $owner_description['votes2'] = $fastSurvey->votes2;
1141
                    $owner_description['votes2'] = $fastSurvey->votes2;
1111
                    $owner_description['votes3'] = $fastSurvey->votes3;
1142
                    $owner_description['votes3'] = $fastSurvey->votes3;
1112
                    $owner_description['votes4'] = $fastSurvey->votes4;
1143
                    $owner_description['votes4'] = $fastSurvey->votes4;
1113
                    $owner_description['votes5'] = $fastSurvey->votes5;
1144
                    $owner_description['votes5'] = $fastSurvey->votes5;
1114
                }
1145
                }
1115
                
1146
 
1116
                
1147
 
1117
                $owner_description['active'] = 0;
1148
                $owner_description['active'] = 0;
1118
                $owner_description['time_remaining'] = 0;
1149
                $owner_description['time_remaining'] = 0;
1119
            }
1150
            }
1120
            
1151
 
1121
            
1152
 
1122
            $item['owner_description'] =  $owner_description;
1153
            $item['owner_description'] =  $owner_description;
1123
            
1154
 
1124
            
1155
 
1125
            $item['feed_delete_url'] = '';
1156
            $item['feed_delete_url'] = '';
1126
        } else {
1157
        } else {
Línea 1140... Línea 1171...
1140
        if ($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1171
        if ($feed->file_type == Feed::FILE_TYPE_VIDEO) {
1141
            $item['owner_file_image_preview'] = $storage->getGenericImage($path, $feed->uuid,  $feed->file_image_preview);
1172
            $item['owner_file_image_preview'] = $storage->getGenericImage($path, $feed->uuid,  $feed->file_image_preview);
1142
            $item['owner_file_video'] = $storage->getGenericFile($path, $feed->uuid,  $feed->file_name);
1173
            $item['owner_file_video'] = $storage->getGenericFile($path, $feed->uuid,  $feed->file_name);
1143
        }
1174
        }
Línea 1144... Línea -...
1144
 
-
 
Línea -... Línea 1175...
-
 
1175
 
1145
        
1176
 
1146
 
1177
 
1147
        
1178
 
1148
        if($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1179
        if ($feed->file_type == Feed::FILE_TYPE_FAST_SURVEY) {
1149
            $item['comment_add_url'] = '';
1180
            $item['comment_add_url'] = '';
1150
            $item['comments'] = [];
1181
            $item['comments'] = [];
1151
        } else {
1182
        } else {
1152
            $commentMapper = CommentMapper::getInstance($this->adapter);
1183
            $commentMapper = CommentMapper::getInstance($this->adapter);
1153
            $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
1184
            $records = $commentMapper->fetchAllPublishedByFeedId($feed->id);
1154
            
1185
 
1155
    
1186
 
1156
            $comments = [];
1187
            $comments = [];
1157
            $comment_count = 0;
1188
            $comment_count = 0;
1158
            foreach ($records as $record) {
1189
            foreach ($records as $record) {
1159
                $user = $userMapper->fetchOne($record->user_id);
1190
                $user = $userMapper->fetchOne($record->user_id);
1160
    
1191
 
1161
                $comment = [];
1192
                $comment = [];
1162
                $comment['unique'] = uniqid();
-
 
1163
                $comment_count++;
1193
                $comment['unique'] = uniqid();
1164
                $comment['comment_index'] = $comment_count;
1194
                $comment_count++;
1165
                $user = $userMapper->fetchOne($record->user_id);
1195
                $user = $userMapper->fetchOne($record->user_id);
1166
                if ($user->id == $owner->user_id) {
1196
                if ($user->id == $owner->user_id) {
1167
                    $comment['user_image'] = $storage->getCompanyImage($company);
1197
                    $comment['user_image'] = $storage->getCompanyImage($company);
Línea 1174... Línea 1204...
1174
                }
1204
                }
1175
                $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1205
                $comment['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1176
                $comment['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1206
                $comment['link_answer_add'] = $this->url()->fromRoute('feeds/comments/answer', ['id' => $feed->uuid, 'comment' => $record->uuid]);
1177
                $comment['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1207
                $comment['time_elapsed'] = Functions::timeAgo($record->added_on, $now);
1178
                $comment['comment'] = $record->comment;
1208
                $comment['comment'] = $record->comment;
1179
    
1209
 
1180
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1210
                $records2 = $commentMapper->fetchAllPublishedByCommentId($record->id);
1181
                $answers = [];
1211
                $answers = [];
1182
                $contador = 0;
1212
                $contador = 0;
1183
                foreach ($records2 as $record2) {
1213
                foreach ($records2 as $record2) {
1184
                    $user = $userMapper->fetchOne($record2->user_id);
1214
                    $user = $userMapper->fetchOne($record2->user_id);
1185
    
1215
 
1186
    
1216
 
1187
                    $answer = [];
1217
                    $answer = [];
1188
                    $answer['unique'] = uniqid();
1218
                    $answer['unique'] = uniqid();
1189
    
1219
 
1190
    
1220
 
1191
                    $user = $userMapper->fetchOne($record2->user_id);
1221
                    $user = $userMapper->fetchOne($record2->user_id);
1192
                    if ($user->id == $owner->user_id) {
1222
                    if ($user->id == $owner->user_id) {
1193
                        $answer['user_image'] = $storage->getCompanyImage($company);
1223
                        $answer['user_image'] = $storage->getCompanyImage($company);
1194
                        $answer['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1224
                        $answer['user_url'] =  'https://' . $network->main_hostname . '/company/view/' . $company->uuid;
1195
                        $answer['user_name'] = $company->name;
1225
                        $answer['user_name'] = $company->name;
1196
                    } else {
1226
                    } else {
1197
                        $answer['user_image'] = $storage->getUserImage( $user);
1227
                        $answer['user_image'] = $storage->getUserImage($user);
1198
                        $answer['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1228
                        $answer['user_url'] = 'https://' . $network->main_hostname . '/profile/view/' . $user->uuid;
1199
                        $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
1229
                        $answer['user_name'] = $user->first_name . ' ' . $user->last_name;
1200
                    }
1230
                    }
1201
                    $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record2->uuid]);
1231
                    $answer['link_delete'] = $this->url()->fromRoute('feeds/comments/delete', ['id' => $feed->uuid, 'comment' => $record2->uuid]);
1202
                    $answer['time_elapsed'] = Functions::timeAgo($record2->added_on, $now);
1232
                    $answer['time_elapsed'] = Functions::timeAgo($record2->added_on, $now);
1203
                    $answer['comment'] = $record2->comment;
1233
                    $answer['comment'] = $record2->comment;
1204
    
1234
 
1205
                    $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1235
                    $records2 = $commentMapper->fetchAllPublishedByCommentId($record2->id);
1206
    
1236
 
1207
                    $contador++;
1237
                    $contador++;
1208
                    array_push($answers, $answer);
1238
                    array_push($answers, $answer);
1209
                }
1239
                }
1210
                $comment['number_answers'] = $contador;
1240
                $comment['number_answers'] = $contador;
1211
                $comment['answers'] = $answers;
1241
                $comment['answers'] = $answers;
Línea 1261... Línea 1291...
1261
 
1291
 
1262
            $item = [];
1292
            $item = [];
Línea 1263... Línea 1293...
1263
            $item['unique'] = uniqid();
1293
            $item['unique'] = uniqid();
1264
 
1294
 
Línea 1265... Línea 1295...
1265
            $storage = Storage::getInstance($this->config, $this->adapter);
1295
            $storage = Storage::getInstance($this->config, $this->adapter);
1266
            
1296
 
1267
 
1297
 
1268
            $user = $userMapper->fetchOne($record->user_id);
1298
            $user = $userMapper->fetchOne($record->user_id);