Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev 17304 Rev 17305
Línea 803... Línea 803...
803
     *
803
     *
804
     * @return \Laminas\View\Model\JsonModel
804
     * @return \Laminas\View\Model\JsonModel
805
     */
805
     */
806
    public function imageAction()
806
    public function imageAction()
807
    {
807
    {
-
 
808
        // Obtener el objeto de solicitud
-
 
809
        $request = $this->getRequest();
-
 
810
 
808
        // Recuperar la información del usuario y la empresa actual
811
        // Recuperar la información del usuario y la empresa actual
809
        $currentUserPlugin = $this->plugin('currentUserPlugin');
812
        $currentUserPlugin = $this->plugin('currentUserPlugin');
810
        $currentUser = $currentUserPlugin->getUser();
813
        $currentUser = $currentUserPlugin->getUser();
811
        $currentCompany = $currentUserPlugin->getCompany();
814
        $currentCompany = $currentUserPlugin->getCompany();
Línea 812... Línea 815...
812
 
815
 
813
        // Determinar el tipo de operación (carga o eliminación)
816
        // Determinar el tipo de operación (carga o eliminación)
Línea 814... Línea -...
814
        $operation  = $this->params()->fromRoute('operation');
-
 
815
 
-
 
816
        // Obtener el objeto de solicitud
817
        $operation  = $this->params()->fromRoute('operation');
817
        $request = $this->getRequest();
-
 
818
        if ($request->isPost()) {
-
 
819
 
-
 
820
            // Inicializar almacenamiento y rutas para imágenes de empresa y usuario
-
 
821
            $storage = Storage::getInstance($this->config, $this->adapter);
-
 
822
            $target_company_path = $storage->getPathCompany();
-
 
823
            $target_user_path = $storage->getPathUser();
-
 
824
 
-
 
825
            // Obtener los detalles de la empresa actual
-
 
826
            $companyMapper = CompanyMapper::getInstance($this->adapter);
-
 
827
            $company = $companyMapper->fetchOne($currentCompany->id);
-
 
828
 
-
 
829
            // Manejar la operación de eliminación
-
 
830
            if ($operation == 'delete') {
-
 
831
                $this->logger->info('Se borro la imagen de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
-
 
832
 
-
 
833
                // Verificar si la empresa tiene una imagen e intentar eliminarla
-
 
834
                if ($company->image) {
-
 
835
 
-
 
836
                    // Si la eliminación falla, devolver una respuesta de error
-
 
837
                    if (!$storage->deleteFile($target_company_path, $company->uuid, $company->image)) {
-
 
838
                        return new JsonModel([
-
 
839
                            'success'   => false,
-
 
840
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
-
 
841
                        ]);
-
 
842
                    }
-
 
843
                }
-
 
844
 
-
 
845
                // Limpiar el campo de imagen en el registro de la empresa
-
 
846
                $company->image = '';
818
 
847
                if (!$companyMapper->updateImage($company)) {
819
        if (!$request->isPost()) {
848
                    return new JsonModel([
820
            return new JsonModel([
849
                        'success'   => false,
821
                'success'   => false,
850
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
822
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
Línea 851... Línea 823...
851
                    ]);
823
            ]);
852
                }
824
        }
853
 
825
 
854
                // Obtener el propietario de la empresa y actualizar su imagen si es necesario
-
 
855
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
-
 
856
                $companyUser = $companyUserMapper->fetchOwnerByCompanyId($company->id);
826
        // Inicializar almacenamiento y rutas para imágenes de empresa y usuario
857
 
-
 
858
                if ($companyUser) {
-
 
859
                    $userMapper = UserMapper::getInstance($this->adapter);
827
        $storage = Storage::getInstance($this->config, $this->adapter);
860
                    $user = $userMapper->fetchOne($companyUser->user_id);
-
 
861
                    if ($user) {
828
        $target_company_path = $storage->getPathCompany();
862
 
-
 
863
                        // Eliminar la imagen del usuario si existe
-
 
864
                        if ($user->image) {
-
 
865
                            $storage->deleteFile($target_user_path, $user->uuid, $user->image);
829
        $target_user_path = $storage->getPathUser();
866
                        }
-
 
867
 
830
 
868
                        // Limpiar el campo de imagen del usuario
831
        // Obtener los detalles de la empresa actual
869
                        $user->image = '';
-
 
870
                        $userMapper->updateImage($user);
-
 
871
 
-
 
872
                        // Actualizar el nombre del usuario si difiere del nombre de la empresa
-
 
873
                        if ($company->name != $user->first_name) {
-
 
874
                            $user->first_name = $company->name;
-
 
875
                            $user->last_name = '';
-
 
876
                            $userMapper->updateFirstNameAndLastName($user);
-
 
877
                        }
-
 
878
                    }
832
        $companyMapper = CompanyMapper::getInstance($this->adapter);
879
                }
-
 
880
            } else {
-
 
881
                // Manejar la operación de carga de imagen
-
 
882
                $form = new ProfileImageForm($this->config);
-
 
883
                $data = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
-
 
884
 
-
 
885
                $form->setData($data);
833
        $company = $companyMapper->fetchOne($currentCompany->id);
886
 
-
 
887
                // Validar los datos del formulario
-
 
888
                if (!$form->isValid()) {
834
 
889
                    $messages = [];
-
 
890
                    $form_messages = (array) $form->getMessages();
-
 
891
                    foreach ($form_messages  as $fieldname => $field_messages) {
-
 
892
                        $messages[$fieldname] = array_values($field_messages);
-
 
893
                    }
-
 
894
                    return new JsonModel([
-
 
895
                        'success'   => false,
-
 
Línea 896... Línea 835...
896
                        'data'   => $messages
835
        // Manejar la operación de eliminación
-
 
836
        if ($operation == 'delete') {
Línea 897... Línea 837...
897
                    ]);
837
            $this->logger->info('Se borro la imagen de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
898
                }
838
 
899
 
839
            // Verificar si la empresa tiene una imagen e intentar eliminarla
900
                $storage->setFiles($request->getFiles()->toArray());
840
            if ($company->image) {
901
 
841
 
902
                // Verificar y establecer el nombre de archivo actual
842
                // Si la eliminación falla, devolver una respuesta de error
903
                if (!$storage->setCurrentFilename('image')) {
843
                if (!$storage->deleteFile($target_company_path, $company->uuid, $company->image)) {
-
 
844
                    return new JsonModel([
Línea 904... Línea 845...
904
                    return new JsonModel([
845
                        'success'   => false,
905
                        'success'   => false,
-
 
906
                        'data'   => 'ERROR_UPLOAD_FILE'
846
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
907
                    ]);
847
                    ]);
908
                }
-
 
909
 
848
                }
910
                /* // Obtener dimensiones objetivo para el redimensionamiento
849
            }
911
                list($target_width_str, $target_height_str) = explode('x', $this->config['leaderslinked.image_sizes.company_image_size']);
850
 
912
                $target_width = (int)$target_width_str;
-
 
913
                $target_height = (int)$target_height_str; */
-
 
914
 
851
            // Limpiar el campo de imagen en el registro de la empresa
915
                // Generar nombres de archivo únicos
-
 
916
                $source = $storage->getTmpFilename();
-
 
917
                $filename = 'company-image-' . $company->uuid . '.png';
852
            $company->image = '';
Línea -... Línea 853...
-
 
853
            if (!$companyMapper->updateImage($company)) {
-
 
854
                return new JsonModel([
-
 
855
                    'success'   => false,
-
 
856
                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
-
 
857
                ]);
-
 
858
            }
-
 
859
 
-
 
860
            // Obtener el propietario de la empresa y actualizar su imagen si es necesario
-
 
861
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
918
                $target_filename = $storage->composePathToFilename(Storage::TYPE_COMPANY, $company->uuid, $filename);
862
            $companyUser = $companyUserMapper->fetchOwnerByCompanyId($company->id);
919
 
863
 
920
                // Subir y redimensionar la imagen
864
            if ($companyUser) {
921
                if (!$storage->uploadImageWithOutChangeSize($source, $target_filename)) {
-
 
922
                    return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
865
                $userMapper = UserMapper::getInstance($this->adapter);
923
                }
-
 
Línea 924... Línea 866...
924
 
866
                $user = $userMapper->fetchOne($companyUser->user_id);
925
                // Eliminar la imagen anterior si existe
867
                if ($user) {
926
                if ($company->image) {
868
 
-
 
869
                    // Eliminar la imagen del usuario si existe
-
 
870
                    if ($user->image) {
-
 
871
                        $storage->deleteFile($target_user_path, $user->uuid, $user->image);
-
 
872
                    }
-
 
873
 
927
                    if (!$storage->deleteFile($target_company_path, $company->uuid, $company->image)) {
874
                    // Limpiar el campo de imagen del usuario
-
 
875
                    $user->image = '';
928
                        return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
876
                    $userMapper->updateImage($user);
929
                    }
-
 
930
                }
-
 
931
 
-
 
932
                // Actualizar el perfil con la nueva imagen
877
 
Línea 933... Línea 878...
933
                $company->image = $filename;
878
                    // Actualizar el nombre del usuario si difiere del nombre de la empresa
934
                if (!$companyMapper->update($company)) {
879
                    if ($company->name != $user->first_name) {
935
                    return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
880
                        $user->first_name = $company->name;
Línea 936... Línea 881...
936
                }
881
                        $user->last_name = '';
937
 
882
                        $userMapper->updateFirstNameAndLastName($user);
Línea -... Línea 883...
-
 
883
                    }
-
 
884
                }
-
 
885
            }
-
 
886
 
938
                // Registrar la actualización de la imagen
887
            return new JsonModel([
-
 
888
                'success'   => true,
-
 
889
                'data' => $storage->getCompanyImage($company)
-
 
890
 
-
 
891
            ]);
-
 
892
        }
-
 
893
 
-
 
894
        // Manejar la operación de carga de imagen
-
 
895
        $form = new ProfileImageForm($this->config);
-
 
896
        $files = $request->getFiles()->toArray();
939
                $this->logger->info('Se actualizo la imagen de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
897
 
-
 
898
        // Establecer los datos del formulario y los archivos
-
 
899
        $form->setData($files);
-
 
900
        $storage->setFiles($files);
-
 
901
 
-
 
902
        // Validar los datos del formulario
-
 
903
        if (!$form->isValid()) {
-
 
904
            $messages = [];
-
 
905
            $form_messages = (array) $form->getMessages();
-
 
906
            foreach ($form_messages  as $fieldname => $field_messages) {
940
            }
907
                $messages[$fieldname] = array_values($field_messages);
941
 
908
            }
-
 
909
            return new JsonModel([
-
 
910
                'success'   => false,
-
 
911
                'data'   => $messages
-
 
912
            ]);
-
 
913
        }
-
 
914
 
-
 
915
        // Verificar y establecer el nombre de archivo actual
-
 
916
        if (!$storage->setCurrentFilename('image')) {
-
 
917
            return new JsonModel([
-
 
918
                'success'   => false,
-
 
919
                'data'   => 'ERROR_UPLOAD_FILE'
-
 
920
            ]);
-
 
921
        }
-
 
922
 
-
 
923
        /* // Obtener dimensiones objetivo para el redimensionamiento
-
 
924
        list($target_width_str, $target_height_str) = explode('x', $this->config['leaderslinked.image_sizes.company_image_size']);
-
 
925
        $target_width = (int)$target_width_str;
-
 
926
        $target_height = (int)$target_height_str; */
-
 
927
 
-
 
928
        // Generar nombres de archivo únicos
-
 
929
        $source = $storage->getTmpFilename();
-
 
930
        $filename = 'company-' . uniqid() . '.png';
-
 
931
        $target_filename = $storage->composePathToFilename(Storage::TYPE_COMPANY, $company->uuid, $filename);
-
 
932
 
-
 
933
        // Subir y redimensionar la imagen
-
 
934
        if (!$storage->uploadImageWithOutChangeSize($source, $target_filename)) {
-
 
935
            return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
-
 
936
        }
-
 
937
 
942
            return new JsonModel([
938
        // Eliminar la imagen anterior si existe
-
 
939
        if ($company->image) {
-
 
940
            if (!$storage->deleteFile($target_company_path, $company->uuid, $company->image)) {
-
 
941
                return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
Línea 943... Línea 942...
943
                'success'   => true,
942
            }
-
 
943
        }
-
 
944
 
-
 
945
        // Actualizar el perfil con la nueva imagen
944
                'data' => $storage->getCompanyImage($company)
946
        $company->image = $filename;
Línea 945... Línea 947...
945
 
947
        if (!$companyMapper->update($company)) {
946
            ]);
948
            return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
947
        }
949
        }