/// <summary> /// Levanta archivo de audio del control, lo guarda en la carpeta "Audios" de la presentación, devuelve la ruta. /// </summary> private string SubirArchivoAudio(DiapositivaVM dvm, string control, int posicion, ref double duracion) { string appPath = HttpContext.Server.MapPath(AudiosPath); string path = string.Empty; var audioFile = Request.Files[control]; //Evaluo la diapositiva por orden, si es diferente de null implica que la diapositivaPorOrden es la que se esta editando, por lo tanto si no cargo un archivo le mantengo el que tenia if (audioFile.ContentLength == 0 && string.IsNullOrEmpty(audioFile.FileName) && diapositvaPorOrden != null) { Mp3FileReader fileReader = null; if (control.Contains("Texto") && !string.IsNullOrEmpty(diapositvaPorOrden.Textos[posicion - 1].Audio)) { fileReader = new Mp3FileReader(appPath + diapositvaPorOrden.Textos[posicion - 1].Audio); duracion = fileReader.TotalTime.TotalSeconds; path = diapositvaPorOrden.Textos[posicion - 1].Audio; } else if (control.Contains("Boton") && !string.IsNullOrEmpty(diapositvaPorOrden.Botones[posicion - 1].Audio)) { fileReader = new Mp3FileReader(appPath + diapositvaPorOrden.Botones[posicion - 1].Audio); duracion = fileReader.TotalTime.TotalSeconds; path = diapositvaPorOrden.Botones[posicion - 1].Audio; } return(path); } else if (audioFile != null && audioFile.ContentLength > 0 && !string.IsNullOrEmpty(audioFile.FileName)) { FileInfo fileInfo = new FileInfo(audioFile.FileName); if (fileInfo.Extension.ToLower().Equals(".mp3")) { // -- Puntero if (ModelState.IsValid) { Stream fileStream = audioFile.InputStream; string extension = fileInfo.Extension; var length = Convert.ToInt32(fileStream.Length); byte[] data = null; using (var reader = new BinaryReader(fileStream)) { data = reader.ReadBytes(length); } string[] extensions = { ".mp3" }; string deletePath; // -- Si existe el audio lo borro for (int i = 0; i < extensions.Count(); i++) { deletePath = appPath + string.Format(AudioDiapositivaPath, dvm.Diapositiva.EntityID, posicion, extensions[i]); if (System.IO.File.Exists(deletePath)) { System.IO.File.Delete(deletePath); } } // -- Creo Audio appPath += string.Format(AudioDiapositivaPath, dvm.Diapositiva.EntityID, posicion, extension); var file = new FileStream(appPath, FileMode.Create, FileAccess.Write); file.Write(data, 0, length); file.Close(); // -- Asigno Audio a diapositiva path = string.Format(AudioDiapositivaPath, dvm.Diapositiva.EntityID, posicion, extension); Mp3FileReader fileReader = new Mp3FileReader(appPath); duracion = fileReader.TotalTime.TotalSeconds; TempData["SaveSuccess"] = "Se guardó diapositiva correctamente"; } } else { ModelState.AddModelError("AudioDiapositiva", "Debe cargar un audio del tipo .mp3"); } } //else if (dvm.Diapositiva.Video == null) //{ // string[] extensions = { ".mp3" }; // // -- Si existe el video lo borro // string appPath = HttpContext.Server.MapPath(AudiosPath); // string deletePath; // for (int i = 0; i <= 3; i++) // { // deletePath = appPath + string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extensions[i]); // if (System.IO.File.Exists(deletePath)) // { // System.IO.File.Delete(deletePath); // } // } //} return(path); }
public ActionResult Save(long?diapositivaID, long cursoID) { // -- Inicio VM DiapositivaVM dvm = new DiapositivaVM(); // -- Inicio diapositiva Diapositiva diapositiva; // -- Recupero las diapositivas del curso var diapositivasCurso = logic.GetByCurso(cursoID); if (diapositivaID == null) { ViewBag.Title = "Crear Diapositiva"; diapositiva = new Diapositiva { Curso = new Curso { EntityID = cursoID }, Orden = 1, ColorTitulo = "#000000" }; } else { ViewBag.Title = "Editar Diapositiva"; diapositiva = logic.GetByID(diapositivaID.Value); // -- Saco de la lista la diapositiva actual para no generar referencia a si misma diapositivasCurso = diapositivasCurso.Where(x => x.EntityID != diapositivaID.Value).ToList(); // -- Seteo la plantilla seleccionada ViewBag.selectedddlPlantilla = diapositiva.Plantilla.EntityID; #region Botones foreach (var boton in diapositiva.Botones) { switch (boton.Orden) { case 1: dvm.TituloBoton1 = boton.Nombre; dvm.ColorBoton1 = boton.Color; dvm.ContenidoBoton1 = boton.Contenido; break; case 2: dvm.TituloBoton2 = boton.Nombre; dvm.ColorBoton2 = boton.Color; dvm.ContenidoBoton2 = boton.Contenido; break; case 3: dvm.TituloBoton3 = boton.Nombre; dvm.ColorBoton3 = boton.Color; dvm.ContenidoBoton3 = boton.Contenido; break; case 4: dvm.TituloBoton4 = boton.Nombre; dvm.ColorBoton4 = boton.Color; dvm.ContenidoBoton4 = boton.Contenido; break; case 5: dvm.TituloBoton5 = boton.Nombre; dvm.ColorBoton5 = boton.Color; dvm.ContenidoBoton5 = boton.Contenido; break; } } #endregion #region Textos centrados y horizontales if (diapositiva.Plantilla.EntityID == ParameterProvider.TipoPlantilla.TextosCentrados || diapositiva.Plantilla.EntityID == ParameterProvider.TipoPlantilla.TextosApiladosHorizontal) { foreach (var texto in diapositiva.Textos) { switch (texto.Orden) { case 1: dvm.TextoAlineado1 = texto.Contenido; break; case 2: dvm.TextoAlineado2 = texto.Contenido; break; case 3: dvm.TextoAlineado3 = texto.Contenido; break; case 4: dvm.TextoAlineado4 = texto.Contenido; break; case 5: dvm.TextoAlineado5 = texto.Contenido; break; } } } #endregion #region Textos zonas if (diapositiva.Plantilla.EntityID == ParameterProvider.TipoPlantilla.TextosDiferentesPosiciones) { foreach (var texto in diapositiva.Textos) { switch (texto.Orden) { case 1: dvm.TextoDistribuido1 = texto.Contenido; break; case 2: dvm.TextoDistribuido2 = texto.Contenido; break; case 3: dvm.TextoDistribuido3 = texto.Contenido; break; case 4: dvm.TextoDistribuido4 = texto.Contenido; break; case 5: dvm.TextoDistribuido5 = texto.Contenido; break; } } } #endregion #region Video if (diapositiva.Plantilla.EntityID == ParameterProvider.TipoPlantilla.Video) { dvm.Video = diapositiva.Video; } #endregion } // -- Armo la lista ViewBag.DiapositivasID = new MultiSelectList(diapositivasCurso, "EntityID", "Titulo", diapositiva.DiapositivasReferidas.Select(x => x.EntityID)); dvm.Diapositiva = diapositiva; return(View(dvm)); }
/// <summary> /// Guarda Diapositiva /// </summary> /// <param name="diapositiva"></param> /// <param name="cursoID"></param> /// <returns></returns> public ActionResult Save(DiapositivaVM dvm, long cursoID, List <long> DiapositivasID, long ddlPlantilla, bool isDiapositivaAudio) { // -- Seteo la plantilla dvm.Diapositiva.Plantilla = new Plantilla { EntityID = ddlPlantilla }; // -- Seteo si la diapositiva es de audio dvm.Diapositiva.IsDiapositivaAudio = isDiapositivaAudio; // -- Si viene como nulo lo instancio if (DiapositivasID == null) { DiapositivasID = new List <long>(); } // -- Recupero diapositva por orden diapositvaPorOrden = logic.GetByOrdenYCurso(cursoID, dvm.Diapositiva.Orden); // -- SI existe diapositva con el orden ingresado if (diapositvaPorOrden != null && dvm.Diapositiva.EntityID != diapositvaPorOrden.EntityID) { // -- Agrego el error ModelState.AddModelError("Diapositiva.Orden", "Ya existe una diapositiva con el orden ingresado"); } if (ModelState.IsValid) { // -- Agrego diapositivas dvm.Diapositiva.DiapositivasReferidas = new List <Diapositiva>(); DiapositivasID.ForEach(x => dvm.Diapositiva.DiapositivasReferidas.Add(new Diapositiva { EntityID = x })); dvm.Diapositiva.Curso = new Curso { EntityID = cursoID }; #region Tipo de plantilla double duracion = 0; double duracionTotal = 0; switch (ddlPlantilla) { case ParameterProvider.TipoPlantilla.Botones: #region Botones if (!string.IsNullOrWhiteSpace(dvm.TituloBoton1)) { Boton boton1 = new Boton { Orden = 1, Color = dvm.ColorBoton1, Contenido = dvm.ContenidoBoton1, Nombre = dvm.TituloBoton1, Activo = true }; boton1.Audio = SubirArchivoAudio(dvm, "AudioBoton1", 1, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Botones.Add(boton1); } if (!string.IsNullOrWhiteSpace(dvm.TituloBoton2)) { Boton boton2 = new Boton { Orden = 2, Color = dvm.ColorBoton2, Contenido = dvm.ContenidoBoton2, Nombre = dvm.TituloBoton2, Activo = true }; boton2.Audio = SubirArchivoAudio(dvm, "AudioBoton2", 2, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Botones.Add(boton2); } if (!string.IsNullOrWhiteSpace(dvm.TituloBoton3)) { Boton boton3 = new Boton { Orden = 3, Color = dvm.ColorBoton3, Contenido = dvm.ContenidoBoton3, Nombre = dvm.TituloBoton3, Activo = true }; boton3.Audio = SubirArchivoAudio(dvm, "AudioBoton3", 3, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Botones.Add(boton3); } if (!string.IsNullOrWhiteSpace(dvm.TituloBoton4)) { Boton boton4 = new Boton { Orden = 4, Color = dvm.ColorBoton4, Contenido = dvm.ContenidoBoton4, Nombre = dvm.TituloBoton4, Activo = true }; boton4.Audio = SubirArchivoAudio(dvm, "AudioBoton4", 4, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Botones.Add(boton4); } if (!string.IsNullOrWhiteSpace(dvm.TituloBoton5)) { Boton boton5 = new Boton { Orden = 5, Color = dvm.ColorBoton5, Contenido = dvm.ContenidoBoton5, Nombre = dvm.TituloBoton5, Activo = true }; boton5.Audio = SubirArchivoAudio(dvm, "AudioBoton5", 5, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Botones.Add(boton5); } break; #endregion case ParameterProvider.TipoPlantilla.TextosCentrados: #region Textos centrados y horizontales if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado1)) { Texto texto1 = new Texto { Orden = 1, Contenido = dvm.TextoAlineado1, Activo = true }; texto1.TiempoDeArranque = duracionTotal; texto1.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado1", 1, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto1); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado2)) { Texto texto2 = new Texto { Orden = 2, Contenido = dvm.TextoAlineado2, Activo = true }; texto2.TiempoDeArranque = duracionTotal; texto2.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado2", 2, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto2); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado3)) { Texto texto3 = new Texto { Orden = 3, Contenido = dvm.TextoAlineado3, Activo = true }; texto3.TiempoDeArranque = duracionTotal; texto3.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado3", 3, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto3); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado4)) { Texto texto4 = new Texto { Orden = 4, Contenido = dvm.TextoAlineado4, Activo = true }; texto4.TiempoDeArranque = duracionTotal; texto4.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado4", 4, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto4); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado5)) { Texto texto5 = new Texto { Orden = 5, Contenido = dvm.TextoAlineado5, Activo = true }; texto5.TiempoDeArranque = duracionTotal; texto5.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado5", 5, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto5); } break; #endregion case ParameterProvider.TipoPlantilla.TextosDiferentesPosiciones: #region Textos zonas if (!string.IsNullOrWhiteSpace(dvm.TextoDistribuido1)) { Texto texto1 = new Texto { Orden = 1, Contenido = dvm.TextoDistribuido1, Activo = true }; texto1.TiempoDeArranque = duracionTotal; texto1.Audio = SubirArchivoAudio(dvm, "AudioTextoDistribuido1", 1, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto1); } if (!string.IsNullOrWhiteSpace(dvm.TextoDistribuido2)) { Texto texto2 = new Texto { Orden = 2, Contenido = dvm.TextoDistribuido2, Activo = true }; texto2.TiempoDeArranque = duracionTotal; texto2.Audio = SubirArchivoAudio(dvm, "AudioTextoDistribuido2", 2, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto2); } if (!string.IsNullOrWhiteSpace(dvm.TextoDistribuido3)) { Texto texto3 = new Texto { Orden = 3, Contenido = dvm.TextoDistribuido3, Activo = true }; texto3.TiempoDeArranque = duracionTotal; texto3.Audio = SubirArchivoAudio(dvm, "AudioTextoDistribuido3", 3, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto3); } if (!string.IsNullOrWhiteSpace(dvm.TextoDistribuido4)) { Texto texto4 = new Texto { Orden = 4, Contenido = dvm.TextoDistribuido4, Activo = true }; texto4.TiempoDeArranque = duracionTotal; texto4.Audio = SubirArchivoAudio(dvm, "AudioTextoDistribuido4", 4, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto4); } if (!string.IsNullOrWhiteSpace(dvm.TextoDistribuido5)) { Texto texto5 = new Texto { Orden = 5, Contenido = dvm.TextoDistribuido5, Activo = true }; texto5.TiempoDeArranque = duracionTotal; texto5.Audio = SubirArchivoAudio(dvm, "AudioTextoDistribuido5", 5, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto5); } #endregion break; case ParameterProvider.TipoPlantilla.TextosApiladosHorizontal: #region Textos horizontales if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado1)) { Texto texto1 = new Texto { Orden = 1, Contenido = dvm.TextoAlineado1, Activo = true }; texto1.TiempoDeArranque = duracionTotal; texto1.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado1", 1, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto1); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado2)) { Texto texto2 = new Texto { Orden = 2, Contenido = dvm.TextoAlineado2, Activo = true }; texto2.TiempoDeArranque = duracionTotal; texto2.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado2", 2, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto2); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado3)) { Texto texto3 = new Texto { Orden = 3, Contenido = dvm.TextoAlineado3, Activo = true }; texto3.TiempoDeArranque = duracionTotal; texto3.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado3", 3, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto3); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado4)) { Texto texto4 = new Texto { Orden = 4, Contenido = dvm.TextoAlineado4, Activo = true }; texto4.TiempoDeArranque = duracionTotal; texto4.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado4", 4, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto4); } if (!string.IsNullOrWhiteSpace(dvm.TextoAlineado5)) { Texto texto5 = new Texto { Orden = 5, Contenido = dvm.TextoAlineado5, Activo = true }; texto5.TiempoDeArranque = duracionTotal; texto5.Audio = SubirArchivoAudio(dvm, "AudioTextoAlineado5", 5, ref duracion); duracionTotal += duracion; dvm.Diapositiva.Textos.Add(texto5); } break; #endregion case ParameterProvider.TipoPlantilla.Video: #region Video var videoFile = Request.Files["VideoDiapositiva"]; // -- Si tiene video if (videoFile != null && videoFile.ContentLength > 0 && !string.IsNullOrEmpty(videoFile.FileName)) { FileInfo fileInfo = new FileInfo(videoFile.FileName); if (fileInfo.Extension.ToLower().Equals(".mp4") || fileInfo.Extension.ToLower().Equals(".avi") || fileInfo.Extension.ToLower().Equals(".mpeg") || fileInfo.Extension.ToLower().Equals(".mpg") || fileInfo.Extension.ToLower().Equals(".wmv")) { // -- Puntero if (ModelState.IsValid) { // -- Si es nuevo lo agrego para tener el id del video if (dvm.Diapositiva.EntityID == 0) { logic.Add(dvm.Diapositiva); } string appPath = HttpContext.Server.MapPath(VideosPath); Stream fileStream = videoFile.InputStream; string extension = fileInfo.Extension; var length = Convert.ToInt32(fileStream.Length); byte[] data = null; using (var reader = new BinaryReader(fileStream)) { data = reader.ReadBytes(length); } string[] extensions = { ".mp4", ".avi", ".mpeg", ".mpg", ".wmv" }; string deletePath; // -- Si existe la imagen la borro for (int i = 0; i <= 4; i++) { deletePath = appPath + string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extensions[i]); if (System.IO.File.Exists(deletePath)) { System.IO.File.Delete(deletePath); } } // -- Creo video appPath += string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extension); var file = new FileStream(appPath, FileMode.Create, FileAccess.Write); file.Write(data, 0, length); file.Close(); // -- Asigno video a diapositiva dvm.Diapositiva.Video = string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extension); //logic.Update(dvm.Diapositiva); -- Se guarda cuando sale del switch TempData["SaveSuccess"] = "Se guardó diapositiva correctamente"; } } else { ModelState.AddModelError("VideoDiapositiva", "Debe cargar un video del tipo .mp4, .avi, .mpeg, .mpg o .wmv"); } } else if (dvm.Diapositiva.Video == null) { string[] extensions = { ".mp4", ".avi", ".mpeg", ".mpg", ".wmv" }; // -- Si existe el video lo borro string appPath = HttpContext.Server.MapPath(VideosPath); string deletePath; for (int i = 0; i <= 3; i++) { deletePath = appPath + string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extensions[i]); if (System.IO.File.Exists(deletePath)) { System.IO.File.Delete(deletePath); } } } break; #endregion } dvm.Diapositiva.TiempoTotal = duracionTotal; // -- Agrego o edito diapositiva if (dvm.Diapositiva.EntityID == 0) { logic.Add(dvm.Diapositiva); RenombrarAudios(dvm.Diapositiva.EntityID, ".mp3"); } else { logic.Update(dvm.Diapositiva); } #endregion #region Cargo Imagen de Diapositiva var imageFile = Request.Files["ImagenDiapositiva"]; // -- Si tiene imagen if (imageFile != null && imageFile.ContentLength > 0 && !string.IsNullOrEmpty(imageFile.FileName)) { FileInfo fileInfo = new FileInfo(imageFile.FileName); if (fileInfo.Extension.ToLower().Equals(".jpg") || fileInfo.Extension.ToLower().Equals(".jpeg") || fileInfo.Extension.ToLower().Equals(".gif") || fileInfo.Extension.ToLower().Equals(".png")) { // -- Puntero if (ModelState.IsValid) { string appPath = HttpContext.Server.MapPath(ImagenesPath); Stream fileStream = imageFile.InputStream; string extension = fileInfo.Extension; var length = Convert.ToInt32(fileStream.Length); byte[] data = null; using (var reader = new BinaryReader(fileStream)) { data = reader.ReadBytes(length); } string[] extensions = { ".jpg", ".jpeg", ".png", ".gif" }; string deletePath; // -- Si existe la imagen la borro for (int i = 0; i <= 3; i++) { deletePath = appPath + string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extensions[i]); if (System.IO.File.Exists(deletePath)) { System.IO.File.Delete(deletePath); } } // -- Creo imagen appPath += string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extension); var file = new FileStream(appPath, FileMode.Create, FileAccess.Write); file.Write(data, 0, length); file.Close(); // -- Asigno imagen a diapositiva dvm.Diapositiva.Imagen = string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extension); logic.Update(dvm.Diapositiva); TempData["SaveSuccess"] = "Se guardó diapositiva correctamente"; } } else { ModelState.AddModelError("ImagenDiapositiva", "Debe cargar una imagen del tipo .jpg .jpeg .gif o .png"); } } else if (dvm.Diapositiva.Imagen == null) { string[] extensions = { ".jpg", ".jpeg", ".png", "gif" }; // -- Si existe la imagen la borro string appPath = HttpContext.Server.MapPath(ImagenesPath); string deletePath; for (int i = 0; i <= 3; i++) { deletePath = appPath + string.Format(ImagenDiapositivaPath, dvm.Diapositiva.Curso.EntityID, dvm.Diapositiva.EntityID, extensions[i]); if (System.IO.File.Exists(deletePath)) { System.IO.File.Delete(deletePath); } } } #endregion return(RedirectToAction("Index", "Diapositiva", new { cursoID = cursoID })); } // -- Recupero las diapositivas del curso var diapositivasCurso = logic.GetByCurso(cursoID); // -- Armo la lista ViewBag.DiapositivasID = new MultiSelectList(diapositivasCurso, "EntityID", "Titulo", DiapositivasID); // -- Se reestablece el curso dvm.Diapositiva.Curso = new Curso { EntityID = cursoID }; // -- Seteo la plantilla seleccionada ViewBag.selectedddlPlantilla = ddlPlantilla; return(View(dvm)); }