Proyectos de Subversion LeadersLinked - Services

Rev

Rev 596 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 596 Rev 622
Línea 697... Línea 697...
697
        return new JsonModel($data);
697
        return new JsonModel($data);
698
    }
698
    }
Línea 699... Línea 699...
699
 
699
 
700
    /**
700
    /**
-
 
701
     * Actualización de los idiomas
-
 
702
     * 
701
     * Actualización de los idiomas
703
     * Esta acción maneja la lógica para obtener y actualizar los idiomas asociados
-
 
704
     * a un perfil de usuario específico.
-
 
705
     * - En una petición GET, devuelve la lista actual de IDs de idiomas del perfil.
-
 
706
     * - En una petición POST, valida los datos del formulario, actualiza los idiomas
-
 
707
     *   (borrando los antiguos y añadiendo los nuevos) y devuelve la nueva lista
-
 
708
     *   de idiomas con su ID y nombre.
-
 
709
     * 
-
 
710
     * @return \Laminas\View\Model\JsonModel Retorna un modelo JSON con el resultado de la operación.
-
 
711
     *         - success (bool): Indica si la operación fue exitosa.
-
 
712
     *         - data (array|string): 
-
 
713
     *           - En GET exitoso: Array de IDs de idiomas.
-
 
714
     *           - En POST exitoso: Array de objetos idioma (con 'value' => id, 'label' => nombre).
702
     * @return \Laminas\View\Model\JsonModel
715
     *           - En error: Mensaje de error o array de mensajes de validación del formulario.
703
     */
716
     */
704
    public function languageAction()
717
    public function languageAction()
705
    {
-
 
-
 
718
    {
706
 
719
        // Obtener el usuario actualmente autenticado
707
        $currentUserPlugin = $this->plugin('currentUserPlugin');
720
        $currentUserPlugin = $this->plugin('currentUserPlugin');
Línea -... Línea 721...
-
 
721
        $currentUser = $currentUserPlugin->getUser();
708
        $currentUser = $currentUserPlugin->getUser();
722
 
709
 
723
        // Obtener el ID del perfil de usuario desde los parámetros de la ruta
Línea -... Línea 724...
-
 
724
        $user_profile_id = $this->params()->fromRoute('id');
710
        $user_profile_id = $this->params()->fromRoute('id');
725
        $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
-
 
726
 
711
        $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
727
        // Buscar el perfil de usuario por su UUID
712
 
728
        $userProfile = $userProfileMapper->fetchOneByUuid($user_profile_id);
713
        $userProfile = $userProfileMapper->fetchOneByUuid($user_profile_id);
729
        // Si el perfil no se encuentra, devolver error
714
        if (!$userProfile) {
730
        if (!$userProfile) {
715
            $response = [
731
            $response = [
Línea 716... Línea 732...
716
                'success' => false,
732
                'success' => false,
717
                'data' => 'ERROR_INVALID_PARAMETER'
733
                'data' => 'ERROR_INVALID_PARAMETER'
Línea 718... Línea -...
718
            ];
-
 
-
 
734
            ];
719
 
735
 
720
            return new JsonModel($response);
736
            return new JsonModel($response);
721
        }
737
        }
722
 
738
 
723
 
739
        // Verificar que el usuario actual es el propietario del perfil
Línea 724... Línea 740...
724
        if ($currentUser->id != $userProfile->user_id) {
740
        if ($currentUser->id != $userProfile->user_id) {
725
            $response = [
741
            $response = [
Línea 726... Línea -...
726
                'success' => false,
-
 
-
 
742
                'success' => false,
727
                'data' => 'ERROR_UNAUTHORIZED'
743
                'data' => 'ERROR_UNAUTHORIZED'
-
 
744
            ];
728
            ];
745
 
-
 
746
            return new JsonModel($response);
729
 
747
        }
Línea -... Línea 748...
-
 
748
 
730
            return new JsonModel($response);
749
 
731
        }
750
        // Obtener la petición HTTP actual
Línea -... Línea 751...
-
 
751
        $request = $this->getRequest();
732
 
752
        // Procesar si la petición es GET
733
 
753
        if ($request->isGet()) {
734
 
754
            // Registrar la acción (aunque es un GET, se registra como actualización, revisar si es intencional)
735
        $request = $this->getRequest();
755
            $this->logger->info('Se actualizaron los idiomas del perfil ' . ($userProfile->public == UserProfile::PUBLIC_YES ? 'público' : $userProfile->name), ['user_id' => $userProfile->user_id, 'ip' => Functions::getUserIP()]);
Línea 748... Línea 768...
748
                'success' => true,
768
                'success' => true,
749
                'data' => $items
769
                'data' => $items
750
            ];
770
            ];
Línea 751... Línea 771...
751
 
771
 
-
 
772
            return new JsonModel($data);
752
            return new JsonModel($data);
773
            // Procesar si la petición es POST
753
        } else if ($request->isPost()) {
-
 
-
 
774
        } else if ($request->isPost()) {
754
 
775
            // Instanciar el formulario de idiomas
755
            $form = new LanguageForm($this->adapter);
776
            $form = new LanguageForm($this->adapter);
Línea -... Línea 777...
-
 
777
            $dataPost = $request->getPost()->toArray();
756
            $dataPost = $request->getPost()->toArray();
778
 
Línea -... Línea 779...
-
 
779
            // Establecer los datos del POST en el formulario
757
 
780
            $form->setData($dataPost);
758
            $form->setData($dataPost);
-
 
-
 
781
 
759
 
782
            // Validar el formulario
760
            if ($form->isValid()) {
783
            if ($form->isValid()) {
-
 
784
                // Mappers para idiomas y la relación usuario-idioma
-
 
785
                $languageMapper = LanguageMapper::getInstance($this->adapter);
-
 
786
                $userLanguageMapper = UserLanguageMapper::getInstance($this->adapter);
761
 
787
                // Ya no se eliminan todos los idiomas existentes, se añaden solo los nuevos.
-
 
788
 
-
 
789
                // 1. Obtener los IDs de los idiomas actualmente asociados al perfil en la base de datos.
-
 
790
                $existingUserLanguages = $userLanguageMapper->fetchAllByUserProfileId($userProfile->id);
-
 
791
                $existingLanguageIdsInDB = [];
Línea -... Línea 792...
-
 
792
                foreach ($existingUserLanguages as $exUserLang) {
762
                $languageMapper = LanguageMapper::getInstance($this->adapter);
793
                    $existingLanguageIdsInDB[] = $exUserLang->language_id;
763
                $userLanguageMapper = UserLanguageMapper::getInstance($this->adapter);
-
 
764
                $userLanguageMapper->deleteByUserProfileId($userProfile->id);
-
 
765
 
-
 
766
                $dataPost = (array) $form->getData();
-
 
767
                $languages = $dataPost['languages'];
-
 
768
                foreach ($languages as $language_id) {
794
                }
769
                    $language = $languageMapper->fetchOne($language_id);
-
 
770
 
795
 
Línea -... Línea 796...
-
 
796
                // Obtener los datos validados del formulario
-
 
797
                $dataPost = (array) $form->getData();
-
 
798
                // Asegurarse de que $submittedLanguageIds es un array, incluso si está vacío.
-
 
799
                $submittedLanguageIds = isset($dataPost['languages']) && is_array($dataPost['languages']) ? $dataPost['languages'] : [];
-
 
800
 
-
 
801
                // Iterar sobre los IDs de idiomas enviados desde el formulario
-
 
802
                foreach ($submittedLanguageIds as $submitted_language_id) {
-
 
803
                    // Verificar si este idioma ya está asociado al perfil del usuario
-
 
804
                    if (!in_array($submitted_language_id, $existingLanguageIdsInDB)) {
-
 
805
                        // El idioma no está asociado, proceder a añadirlo.
-
 
806
                        $language = $languageMapper->fetchOne($submitted_language_id); // Obtener el objeto idioma completo
-
 
807
 
-
 
808
                        if ($language) { // Asegurarse de que el idioma existe en la tabla principal de idiomas
-
 
809
                            // Crear y configurar la nueva entidad de relación usuario-idioma
-
 
810
                            $userLanguage = new UserLanguage();
771
                    $userLanguage = new UserLanguage();
811
                            $userLanguage->user_id = $userProfile->user_id;
-
 
812
                            $userLanguage->user_profile_id = $userProfile->id;
-
 
813
                            $userLanguage->language_id = $language->id;
772
                    $userLanguage->user_id = $userProfile->user_id;
814
 
Línea -... Línea 815...
-
 
815
                            // Insertar el nuevo registro de idioma para el perfil
-
 
816
                            $userLanguageMapper->insert($userLanguage);
773
                    $userLanguage->user_profile_id = $userProfile->id;
817
                        }
774
                    $userLanguage->language_id = $language->id;
818
                    }
775
 
819
                }
776
                    $userLanguageMapper->insert($userLanguage);
820
 
777
                }
821
                // Preparar la respuesta con la lista actualizada de idiomas (ID y nombre)
Línea 786... Línea 830...
786
                return new JsonModel([
830
                return new JsonModel([
787
                    'success'   => true,
831
                    'success'   => true,
788
                    'data'   => $items
832
                    'data'   => $items
789
                ]);
833
                ]);
790
            } else {
834
            } else {
-
 
835
                // Si el formulario no es válido, obtener y devolver los mensajes de error
791
                $messages = [];
836
                $messages = [];
792
                $form_messages = (array) $form->getMessages();
837
                $form_messages = (array) $form->getMessages();
793
                foreach ($form_messages  as $fieldname => $field_messages) {
838
                foreach ($form_messages  as $fieldname => $field_messages) {
794
                    $messages[$fieldname] = array_values($field_messages);
839
                    $messages[$fieldname] = array_values($field_messages);
795
                }
840
                }