function crearClase($idUsuario, $idCurso, $uuid, $idTema, $fileName, $fileType) { require_once 'modulos/cursos/clases/Clase.php'; require_once 'modulos/cursos/modelos/ClaseModelo.php'; require_once 'modulos/usuarios/modelos/usuarioModelo.php'; require_once 'modulos/cursos/modelos/CursoModelo.php'; require_once 'modulos/cursos/modelos/TemaModelo.php'; $filePath = "archivos/temporal/uploaderFiles/"; if (getIdUsuarioDeCurso($idCurso) == $idUsuario && getIdUsuarioFromUuid($uuid) == $idUsuario && $idCurso == getIdCursoPerteneciente($idTema)) { //Validamos que el curso sea del usuario, que el uuid pertenezca a este usuario y que el tema sea del curso $clase = new Clase(); $clase->idTema = $idTema; //Revisamos que el nombre del archivo no pase de 50 caractéres if (strlen($fileName) > 45) { $auxFileName = substr($fileName, 0, 50); if (!rename($filePath . $fileName, $filePath . $auxFileName)) { //Ocurrió un error al renombrar el archivo die('Ocurrió un error al subir el archivo'); } $fileName = $auxFileName; } $clase->titulo = $fileName; $clase->idTipoClase = getTipoClase($fileType); if ($clase->idTipoClase == 0) { $clase->transformado = 0; $idClase = altaClase($clase); //Si es video creamos la clase con la bandera que todavía no se transforma //guardamos en la cola que falta transformar este video //$url = "http://localhost/videos.php"; $file = $filePath . $fileName; $params = array("idClase" => $idClase, "file" => $file, "fileType" => $fileType); $json = json_encode($params); require_once 'lib/php/beanstalkd/ColaMensajes.php'; $colaMensajes = new ColaMensajes("transformarvideos"); $colaMensajes->push($json); return $clase; } else { $clase->transformado = 1; //Si es de otro tipo, lo subimos al CDN de rackspace y creamos la clase require_once 'modulos/cdn/modelos/cdnModelo.php'; $file = $filePath . $fileName; //Le agregamos al nombre del archivo un codigo aleatorio de 5 caracteres $fileName = getUniqueCode(15) . "_" . $fileName; $uri = crearArchivoCDN($file, $fileName, $clase->idTipoClase); if ($uri != NULL) { //Si se creo correctamene el archivo CDN, creamos la clase y borramos el archivo local $clase->archivo = $uri; altaClase($clase); return $clase; } else { //Si ocurrió un error, se borra y regresamos false unlink($file); return NULL; } } } else { //Hay errores en la integridad usuario <-> curso //borramos el archivo unlink("archivos/temporal/uploaderFiles/" . $fileName); return NULL; } }
function crearClaseDeArchivo($idUsuario, $idCurso, $idTema, $fileName, $fileType) { require_once 'modulos/usuarios/modelos/usuarioModelo.php'; require_once 'modulos/cursos/modelos/CursoModelo.php'; require_once 'modulos/cursos/modelos/TemaModelo.php'; //Carpeta donde se va a guardar el archivo temporal $filePath = getServerRoot() . "/archivos/temporal/uploaderFiles/"; $res = array(); //Validamos que el curso sea del usuario y que el tema sea del curso if (getIdUsuarioDeCurso($idCurso) == $idUsuario && $idCurso == getIdCursoPerteneciente($idTema)) { //Guardamos el nombre original del archivo para establecerlo como titulo $pathInfo = pathinfo($filePath . $fileName); $titulo = $pathInfo['filename']; $newName = getUniqueCode(64) . "." . $pathInfo['extension']; require_once 'funcionesPHP/funcionesParaArchivos.php'; //Le cambiamos el nombre del archivo a uno generico if (rename($filePath . $fileName, $filePath . $newName)) { $file = $filePath . $newName; $pathInfo = pathinfo($file); $clase = new Clase(); $clase->idTema = $idTema; $clase->titulo = $titulo; $clase->idTipoClase = getTipoClase($fileType); //Establecemos el ancho de banda utilizado por la subida de este archivo $size = getFileSize($file); require_once 'modulos/principal/modelos/variablesDeProductoModelo.php'; deltaVariableDeProducto("usoActualAnchoDeBanda", $size); require_once 'modulos/aws/modelos/s3Modelo.php'; if ($clase->idTipoClase == 0 || $clase->idTipoClase == 4) { //Creamos la clase en la bd //Si es video o audio creamos la clase con la bandera que todavía no se transforma $clase->transformado = 0; $clase->usoDeDisco = 0; $clase->duracion = "00:00"; $clase->orden = getUltimoOrdenEnTema($idTema) + 1; $idClase = altaClase($clase); if ($idClase >= 0) { //Subimos el archivo al servicio S3 de amazon $s3res = uploadFileToS3($file); if ($s3res['res']) { //El archivo se subio al cdn //Generamos los datos del mensaje $datosDelMensaje = array("bucket" => $s3res['bucket'], "key" => $s3res['key'], "tipo" => $clase->idTipoClase, "host" => getDomainName(), "idClase" => $idClase); $datosJson = json_encode($datosDelMensaje); require_once 'modulos/aws/modelos/sqsModelo.php'; if (AddMessageToQueue($datosJson)) { //Se mando correctamente el mensaje //Se dió de alta correctamente $res['resultado'] = true; $res['url'] = "#"; } else { //Ocurrio un eror al agregar el mensaje $res['resultado'] = false; $res['mensaje'] = "Ocurrió un error al guardar tu archivo en nuestros servidores. Intenta de nuevo más tarde"; } } else { //Erro al subir el archivo al s3 de amazon $res['resultado'] = false; $res['mensaje'] = "Ocurrió un error al guardar tu archivo en nuestros servidores. Intenta de nuevo más tarde"; } } else { //Ocurrió un error al agregar a la bd $res['resultado'] = false; $res['mensaje'] = "Ocurrió un error al guardar tu archivo en nuestros servidores. Intenta de nuevo más tarde"; } } else { $clase->transformado = 1; //Subimos el archivo al servicio S3 de amazon $s3res = uploadFileToS3($file); if ($s3res['res']) { //Si se subio, guardamos la clase en la bd $clase->archivo = $s3res['link']; $clase->usoDeDisco = $size; $clase->orden = getUltimoOrdenEnTema($idTema) + 1; $idClase = altaClase($clase); if ($idClase >= 0) { //Se dió de alta correctamente $res['resultado'] = true; $res['url'] = "#"; } else { //Ocurrió un error al agregar a la bd $res['resultado'] = false; $res['mensaje'] = "Ocurrió un error al guardar tu archivo en nuestros servidores. Intenta de nuevo más tarde"; } } else { //Si ocurrió un error al subir al s3 $res['resultado'] = false; $res['mensaje'] = "Ocurrió un error al guardar tu archivo en nuestros servidores. Intenta de nuevo más tarde"; } } //Sin importar que paso, borramos el archivo temporal unlink($file); } else { //Si ocurrió un error, se borra y regresamos false unlink($filePath . $fileName); $res['resultado'] = false; $res['mensaje'] = "El nombre del archivo no es válido"; } } else { //Hay errores en la integridad usuario <-> curso //borramos el archivo unlink($filePath . $fileName); $res['resultado'] = false; $res['mensaje'] = "No tienes permisos para modificar este curso"; } return $res; }