<?php
namespace Noahtech\Sistemas\FuszionBundle\Handler;
use Noahtech\Sistemas\FuszionBundle\Entity\McCurso;
use Noahtech\Sistemas\FuszionBundle\Utils\Constants;
use Noahtech\Sistemas\FuszionBundle\Utils\EmailsMessages;
use Noahtech\Sistemas\FuszionBundle\Utils\Encrypt;
use DateInterval;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class McCursoHandler extends BaseHandler {
public function __construct(ContainerInterface $container, EntityManagerInterface $entityManager) {
$this->container = $container;
$this->entityManager = $entityManager;
$this->repository = $entityManager->getRepository(McCurso::class);
}
public function search($offset, $limit, $sortField, $sortDirection, $searchParam) {
$lp = $this->repository->search($offset, $limit, $sortField, $sortDirection, $searchParam);
$cursos = $this->toarray($lp->getListado(), 'curso');
$lp->setListado($cursos);
return $lp;
}
public function buscarCursosWeb($offset, $limit, $sortField, $sortDirection, $searchParam) {
$lp = $this->repository->buscarCursosWeb($offset, $limit, $sortField, $sortDirection, $searchParam);
$cursos = $this->toarray($lp->getListado(), 'curso');
return $cursos;
}
public function saveImageFile(&$archivo){
$data['result'] = false;
$path = $this->getPathFiles();
//Crea la carpeta si no existe
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
$info = pathinfo($archivo['name']);
$ext = $info['extension']; // get the extension of the file
$name = $info['filename'];
$nameMd5 = md5($name.time());
$nameFileMd5 = "$nameMd5.$ext";
$nameFileMd5File = "$nameMd5.$ext";
$pathFile = $path.$nameFileMd5;
$archivo['result'] = true;
move_uploaded_file($archivo['tmp_name'], $pathFile);
$archivo['name_md5']=$nameMd5;
$archivo['name_file_Md5'] = $nameFileMd5;
$archivo['path_file']=$pathFile;
$archivo['path_only']=$path;
return $pathFile;
}
private function getPathFiles(){
$basePath = $this->container->getParameter('kernel.root_dir');
$basePath = str_replace('/app', '/web', $basePath);
$basePath = $basePath . $this->container->getParameter('path_files_cursos');
$path = "$basePath/";
return $path;
}
private function deleteFile($pathFile) {
try {
unlink($pathFile);
} catch (Exception $e) {
}
return $pathFile;
}
public function comprobarArchivo($archivo) {
//Sección que almadena el archivo relacionado
if (!is_null($archivo) && $archivo['name'] !== '') {
$pathFile = $this->saveImageFile($archivo);
if ($archivo['result']) {
$archivo = $archivo['name_file_Md5'];
} else {
$this->deleteFile($pathFile);
}
} else {
$archivo = null;
}
return $archivo;
// fin carga de archivo
}
public function getCursoFromRequest(Request $request, $archivo, $id=null):McCurso {
$nombre = $request->request->get('nombre');
$carga_horaria = $request->request->get('carga_horaria');
$director = $request->request->get('director');
$dirigido = $request->request->get('dirigido');
$duracion = $request->request->get('duracion');
$datetimeF = new \DateTime($request->request->get('fecha_finalizacion'));
$datetimeF->setTime(12, 00, 00);
$fecha_finalizacion = $datetimeF;
$datetimeI = new \DateTime($request->request->get('fecha_inicio'));
$datetimeI->setTime(12, 00, 00);
$fecha_inicio = $datetimeI;
// $fecha_finalizacion = $request->request->get('fecha_finalizacion');
// $fecha_inicio = $request->request->get('fecha_inicio');
$foto_curso = $request->request->get('foto_curso');
$lugar_dictado = $request->request->get('lugar_dictado');
$modalidad = $request->request->get('modalidad');
$metodologia = $request->request->get('metodologia');
$precio = $request->request->get('precio');
$descripcion = $request->request->get('descripcion');
$aprender = $request->request->get('aprender');
$web = $request->request->get('web');
if (!is_null($web)) {
$web = 1;
}
if (is_null($id)) {
$curso = new McCurso();
$archivoAux = $this->comprobarArchivo($archivo);
//$curso->setFechaCreacion(new DateTime());
} else {
$curso = $this->repository->findOneById($id);
$archivoBD = $curso->getFotoCurso();
$archivoAux = $this->comprobarArchivo($archivo);
if (is_null($archivoAux)) {
$archivoAux = $archivoBD;
}
//$curso->setFechaActualizacion(new DateTime());
}
$curso->setNombre($nombre);
$curso->setCargaHoraria($carga_horaria);
$curso->setDirector($director);
$curso->setDirigido($dirigido);
$curso->setDuracion($duracion);
$curso->setFechaFinalizacion($fecha_finalizacion);
$curso->setFechaInicio($fecha_inicio);
$curso->setFotoCurso($archivoAux);
$curso->setLugarDictado($lugar_dictado);
$curso->setModalidad($modalidad);
$curso->setMetodologia($metodologia);
$curso->setPrecio($precio);
$curso->setDescripcion($descripcion);
$curso->setAprender($aprender);
$curso->setWeb($web);
return $curso;
}
public function save(McCurso $curso) {
$curso = $this->repository->save($curso);
$curso = $this->toarray($curso, "curso");
return $curso;
}
public function update(McCurso $cursoDB) {
$cursoDB = $this->repository->update($cursoDB);
$cursoDB = $this->toarray($cursoDB, "curso");
return $cursoDB;
}
public function getById($cursoId) {
$curso = $this->repository->findOneById($cursoId);
return $this->toarray($curso, 'curso');
}
public function getCursoById($id) {
return $this->repository->findOneById($id);
}
public function getCursos() {
$cursos = $this->repository->findAll();
$cursos = $this->toarray($cursos, 'curso');
return $cursos;
}
public function asignarProfesorToCurso($cursoId, $profesorId) {
$usuario = $this->container->get("Noahtech\Sistemas\FuszionBundle\Handler\McUsuarioHandler")->getUsuarioById($profesorId);
$curso = $this->repository->findOneById($cursoId);
//Corroboro que el profesor no este asignado ya al curso
$asignar = true;
if (COUNT($curso->getUsuarios()) > 0) {
foreach ($curso->getUsuarios() as $user) {
if ($user == $usuario->getId()) {
$asignar = false;
}
}
}
if ($asignar) {
$curso->addUsuario($usuario);
$curso = $this->repository->save($curso);
return $this->toarray($curso, 'curso');
} else {
throw new HttpException(409, "Ya esta asignado el profesor al curso seleccionado.");
}
}
public function quitarProfesorToCurso($cursoId, $profesorId) {
$usuario = $this->container->get("Noahtech\Sistemas\FuszionBundle\Handler\McUsuarioHandler")->getUsuarioById($profesorId);
$curso = $this->repository->findOneById($cursoId);
$curso->removeUsuario($usuario);
$curso = $this->repository->save($curso);
$cursos = $this->toarray($curso, 'curso');
return $cursos;
}
public function getCursoByProfesor($cursoId, $profesorId) {
$curso = $this->repository->getCursoAsignadoProfesor($cursoId, $profesorId);
return $this->toarray($curso, 'curso');
}
public function getCursosWeb() {
$cursos = $this->repository->findBy(array('web'=> 1));
$cursos = $this->toarray($cursos, 'curso');
return $cursos;
}
}