HEX
Server: Apache
System: Linux clpupre 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64
User: undanet (1000)
PHP: 7.4.3
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/undanet/www/PortalEmpleo/src/Repository/DBCandidatoIdiomaRepository.php
<?php

namespace PortalEmpleo\Repository;

require __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../../bootstrap.php';

use Dotenv\Dotenv;
use PortalEmpleo\Entity\DboCandidato;
use PortalEmpleo\Entity\DboCandidatoidioma;
use PortalEmpleo\Entity\DboIdiomas;
use PortalEmpleo\Entity\DboNivelidioma;
use Doctrine\Common\Collections\Criteria;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class DBCandidatoIdiomaRepository extends AbstractController
{
    private $dotenv;
    private $entityManager;
    private const MAX_OTROIDIOMA = 5;
    
    public function __construct()
    {
    }

    private function loadEnv()
    {
        try{
            $dotenv = Dotenv::createImmutable(__DIR__ . "/../../");
            $dotenv->load();

            $em = getEntityManager();
            
            return $em;
        }
        catch (Exception $ex){
            echo $exception->getMessage();
            return null;
        }
    }

    public function obtenerIdiomas($lang, $idCandidato)
    {
        try{
            $entityManager = $this->loadEnv();

            if(!isset($idCandidato))
            {
                $lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
                    ->createQueryBuilder('c')
                    ->where('c.baja = false')
                    ->addOrderBy('c.codigocandidato', 'DESC')
                    ->addOrderBy('c.codigoidioma', 'DESC')
                    ->getQuery()
                    ->execute();
            }
            else
            {
                $lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
                    ->createQueryBuilder('c')
                    ->where('c.baja = false')
                        ->andWhere('c.codigocandidato = :idcandidato')
                    ->setParameter('idcandidato', $idCandidato)
                    ->getQuery()
                    ->execute();
                
                if (!$lidiomas) {
                    return;
                    /*throw $this->createNotFoundException(
                        'No se encuentran idiomas para el usuario con el id'. $idCandidato
                    );*/
                }
            }

            if($lang)
            {
                $ltraduccionesidiomas = $this->obtenerListaTraducciones($entityManager, "traduccion_idiomas", "CodigoIdiomas", "Idioma", "Descripcion", $lang, null);

                if($ltraduccionesidiomas)
                {
                    foreach ($lidiomas as $cidiomas) {
                        foreach ($ltraduccionesidiomas as $traduccionidiomas) {
                            if(($cidiomas->getCodigoidiomas())->getIdidiomas() == $traduccionidiomas["CodigoIdiomas"])
                            {
                                ($cidiomas->getCodigoidiomas())->setIdioma($traduccionidiomas["Idioma"]);
                                ($cidiomas->getCodigoidiomas())->setDescripcion($traduccionidiomas["Descripcion"]);
                            }
                        }
                    }
                }

                $ltraduccionesnivelidioma = $this->obtenerListaTraducciones($entityManager, "traduccion_nivelidioma", "CodigoNivelIdioma", "NivelIdioma", "Descripcion", $lang, null);
                
                if($ltraduccionesnivelidioma)
                {
                    foreach ($lidiomas as $cand) {
                        foreach ($ltraduccionesnivelidioma as $traduccionnivelidioma) {
                            if(($cand->getCodigonivelidioma())->getIdnivelidioma() == $traduccionnivelidioma["CodigoNivelIdioma"])
                            {
                                ($cand->getCodigonivelidioma())->setNivelidioma($traduccionnivelidioma["NivelIdioma"]);
                                //($cand->getCodigonivelidioma())->setDescripcion($traduccionnivelidioma["Descripcion"]); ->DboNivelidioma no tiene descripción
                            }
                        }
                    }
                }
            }
            
            /*foreach ($lidiomas as $c) {
                echo $c->getIdcandidatoidioma();
                echo ($c->getCodigocandidato())->getIdcandidato();
                echo ($c->getCodigoidiomas())->getIdioma();
                echo ($c->getCodigonivelidioma())->getNivelidioma();
                echo $c->getOtroidioma();
                echo $c->getBaja();
                echo 'sale';
            }*/
			
			$entityManager->getConnection()->close();

            return $lidiomas;  //$result; 
        }
        catch (Exception $ex){
            echo $exception->getMessage();
            return null;
        }
    }

    private function obtenerListaTraducciones($em, $nombretablatraduccion, $columnaid, $columnatexto, $columna2, $language, $id)
    {
        try{
            $sql = "SELECT T." . $columnaid . " , T." . $columnatexto . " , T." . $columna2 . " , T.CodigoIdioma FROM " . $nombretablatraduccion . " T WHERE CodigoIdioma = '" . $language . "'";

            if(isset($id))
            {
                $sql = $sql . " AND T." . $columnaid . " = " . $id;
            }

            $rs = $em->getConnection()->query($sql)->fetchAll();

            return $rs; 
        }
        catch (Exception $ex){
            echo $exception->getMessage();
            return null;
        }
    }

    public function eliminarCandidatoIdioma($idCandIdioma)
    {
        try
        {
            $entityManager = $this->loadEnv();
            
            $cdtId = $entityManager->getRepository(DboCandidatoidioma::class)->find($idCandIdioma);

            if (!$cdtId) {
                throw $this->createNotFoundException(
                    'No se encuentra el candidatoidioma con el id '. $idCandIdioma
                );
            }

            $cdtId = $cdtId->setBaja(true);

            $entityManager->merge($cdtId);
            $entityManager->flush();
            $entityManager->clear();
			$entityManager->getConnection()->close();
        }
        catch (Exception $ex)
        {
            echo $exception->getMessage();
        }
    }


    //hay que hace la funcion de insertar y la de actualizar, el controller las llamará segun corresponda despues de comprobar si ya hay alguno de baja
    public function comprobarCandidatoIdioma($codigocandidato, $codigoidioma)
    {
        try{
            $entityManager = $this->loadEnv();

            $lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
                ->createQueryBuilder('c')
                ->where('c.codigocandidato = :cdt')
                    ->andWhere('c.codigoidiomas = :cidi')
                ->setParameter('cdt', $codigocandidato)
                ->setParameter('cidi', $codigoidioma)
                ->getQuery()
                ->execute();
                
            if (!$lidiomas) {
                return false;
            }
			
			$entityManager->getConnection()->close();
            
            return $lidiomas;  //$result; 
        }
        catch (Exception $ex){
            echo $exception->getMessage();
            return null;
        }
    }
    
    public function comprobarOtrosIdiomas($codigocandidatoidioma)
    {
        try{
            $entityManager = $this->loadEnv();

            $lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
                ->createQueryBuilder('c')
                ->where('c.codigocandidato = :cdt')
                    ->andWhere('c.codigoidiomas = :cidi')
                    ->andWhere('c.baja = false')
                ->setParameter('cdt', ($codigocandidatoidioma->getCodigocandidato())->getIdcandidato())
                ->setParameter('cidi', ($codigocandidatoidioma->getCodigoidiomas())->getIdidiomas())
                ->getQuery()
                ->execute();
                
            if(count($lidiomas) >= self::MAX_OTROIDIOMA) //Para que no se puedan añadir indefinidos otros idiomas
            {
                return false;
            }

            $lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
                ->createQueryBuilder('c')
                ->where('c.codigocandidato = :cdt')
                    ->andWhere('c.codigoidiomas = :cidi')
                    ->andWhere('c.otroidioma = :otridi')
                ->setParameter('cdt', ($codigocandidatoidioma->getCodigocandidato())->getIdcandidato())
                ->setParameter('cidi', ($codigocandidatoidioma->getCodigoidiomas())->getIdidiomas())
                ->setParameter('otridi', $codigocandidatoidioma->getOtroidioma())
                ->getQuery()
                ->execute();

            if (!$lidiomas) {
				$entityManager->getConnection()->close();
                return true;
            }
            
            if(is_array($lidiomas))
            {
                $lidiomas = reset($lidiomas);
            }
			
			$entityManager->getConnection()->close();

            return $lidiomas;  
        }
        catch (Exception $ex){
            echo $exception->getMessage();
            return null;
        }
    }

    public function actualizarCandidatoIdioma($candIdioma)
    {
        try
        {
            $entityManager = $this->loadEnv();

            if($candIdioma->getOtroidioma()!=null && strlen(trim($candIdioma->getOtroidioma()))>0)
            {
                $cdtIdi = $entityManager->getRepository(DboCandidatoidioma::class)
                    ->createQueryBuilder('c')
                    ->where('c.codigocandidato = :cdt')
                        ->andWhere('c.codigoidiomas = :cidi')
                        ->andWhere('c.otroidioma = :otridi')
                    ->setParameter('cdt', ($candIdioma->getCodigocandidato())->getIdcandidato())
                    ->setParameter('cidi', ($candIdioma->getCodigoidiomas())->getIdidiomas())
                    ->setParameter('otridi', $candIdioma->getOtroidioma())
                    ->getQuery()
                    ->execute();
            }
            else
            {
                $cdtIdi = $entityManager->getRepository(DboCandidatoidioma::class)
                ->createQueryBuilder('c')
                ->where('c.codigocandidato = :cdt')
                    ->andWhere('c.codigoidiomas = :cidi')
                ->setParameter('cdt', ($candIdioma->getCodigocandidato())->getIdcandidato())
                ->setParameter('cidi', ($candIdioma->getCodigoidiomas())->getIdidiomas())
                ->getQuery()
                ->execute();
            }

            if (!$cdtIdi) {
                throw $this->createNotFoundException(
                    'No se encuentra el candidatoidioma para el candidato '. ($candIdioma->getCodigocandidato())->getIdcandidato() . ' y el idioma ' . ($candIdioma->getCodigoidiomas())->getIdidiomas()
                );
            }

            if(is_array($cdtIdi))
            {
                $cdtIdi = reset($cdtIdi);
            }

            $cdtIdi = $cdtIdi->setOtroidioma($candIdioma->getOtroidioma());
            $cdtIdi = $cdtIdi->setBaja(false);
            
            $entityManager2 = $this->loadEnv();
            $cdtNvlIdi = $entityManager2->getRepository(DboNivelidioma::class)->find(($candIdioma->getCodigonivelidioma())->getIdnivelidioma());
            $entityManager2->clear();
            if (!$cdtNvlIdi) {
                throw $this->createNotFoundException(
                    'No se encuentra el nivel de idioma con el id '.($candIdioma->getCodigonivelidioma())->getIdnivelidioma()
                );
            }
            $cdtIdi = $cdtIdi->setCodigonivelidioma2($cdtNvlIdi);
            
            /*echo $cdtIdi->getIdcandidatoidioma() . ' //';
            echo ($cdtIdi->getCodigocandidato())->getIdcandidato() . ' // ';
            echo ($cdtIdi->getCodigoidiomas())->getIdidiomas() . ' // ';
            echo $cdtIdi->getOtroidioma() . ' // ';
            echo ($cdtIdi->getCodigonivelidioma())->getIdnivelidioma() . ' // ';
            echo $cdtIdi->getBaja();*/

            $entityManager->merge($cdtIdi);
            $entityManager->flush();
            $entityManager->clear();
			$entityManager->getConnection()->close();
        }
        catch (Exception $ex)
        {
            echo $exception->getMessage();
        }
    }

    public function nuevoCandidatoIdioma($candIdioma)
    {
        try
        {
            $entityManager = $this->loadEnv();
            
            $cdtIdioma = new DboCandidatoidioma();

            $cdtIdioma = $cdtIdioma->setOtroidioma($candIdioma->getOtroidioma());
            $cdtIdioma = $cdtIdioma->setBaja(false);
            
            $entityManager->persist($cdtIdioma);
            $entityManager->flush();

            $entityManager2 = $this->loadEnv();
            $cdt = $entityManager2->getRepository(DboCandidato::class)->find(($candIdioma->getCodigocandidato())->getIdcandidato());
            $entityManager2->clear();
            if (!$cdt) {
                throw $this->createNotFoundException(
                    'No se encuentra el candidato con el id '.($candIdioma->getCodigocandidato())->getIdcandidato()
                );
            }
            $cdtIdioma = $cdtIdioma->setCodigocandidato2($cdt);

            $cdtIdi = $entityManager2->getRepository(DboIdiomas::class)->find(($candIdioma->getCodigoidiomas())->getIdidiomas());
            $entityManager2->clear();
            if (!$cdtIdi) {
                throw $this->createNotFoundException(
                    'No se encuentra el idioma de candidato con el id '.($candIdioma->getCodigoidiomas())->getIdidiomas()
                );
            }
            $cdtIdioma = $cdtIdioma->setCodigoidiomas2($cdtIdi);

            $cdtNvlIdi = $entityManager2->getRepository(DboNivelidioma::class)->find(($candIdioma->getCodigonivelidioma())->getIdnivelidioma());
            $entityManager2->clear();
            if (!$cdtNvlIdi) {
                throw $this->createNotFoundException(
                    'No se encuentra el nivel de idioma con el id '.($candIdioma->getCodigonivelidioma())->getIdnivelidioma()
                );
            }
            $cdtIdioma = $cdtIdioma->setCodigonivelidioma2($cdtNvlIdi);

            $entityManager->merge($cdtIdioma);
            $entityManager->flush();
            $entityManager->clear();
			$entityManager->getConnection()->close();
        }
        catch (Exception $ex)
        {
            echo $exception->getMessage();
        }
    }
}

?>