view Agendas/trunk/src/Agendas.Web/Controllers/PatrocinadorController.cs @ 296:1edd42d24711

Patrocinadores: Modificar sin persistir archivo en disco.
author juanjose.montesdeocaarbos
date Sat, 18 Feb 2012 14:08:57 -0300
parents 8c742d5ccf67
children 48ab8788bd19
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Factories;
using AltNetHispano.Agendas.Web.Models;
using AltNetHispano.Agendas.Web.Services;


namespace AltNetHispano.Agendas.Web.Controllers
{
    public class PatrocinadorController : Controller
    {
		private HttpServerUtilityBase _server;

		public HttpServerUtilityBase HttpServer
		{
			get
			{
				if (_server == null)
				{
					var httpServer = HttpContext.Server;
					_server =  httpServer;
				}

				return _server;
			}
		}

		public PatrocinadorController()
		{
		}

		public PatrocinadorController(HttpServerUtilityBase server)
		{
			_server = server;
		}

    	public ActionResult GetLogo(string id)
		{
			var patrocinadores = AgendaFactory.GetPatrocinadorRepository();

			var patrocinador = patrocinadores.Get(new Guid(id));

			return File(patrocinador.Logo, "image/jpg");
		}

    	public ActionResult Index()
        {
        	var patrocinadores = AgendaFactory.GetPatrocinadorRepository();

        	var model = new PatrocinadorIndexModel
        	            	{
        	            		Items = from p in patrocinadores.GetAll()
										select new PatrocinadorDto
										       	{
										       		Id = p.Id,
													Nombre = p.Nombre
										       	}
        	            	};

            return View(model);
        }

		[CustomAuthorize(Roles = Roles.Administrador)]
        public ActionResult Nuevo()
        {
			var model = new PatrocinadorNewModel();
			return View("DefaultEditor", model);
        }

        [HttpPost]
		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Nuevo(PatrocinadorNewModel model)
		{
			if (ModelState.IsValid)
			{
				var patrocinadores = AgendaFactory.GetPatrocinadorRepository();

				if (patrocinadores.GetByNombre(model.Nombre) == null)
				{
					var patrocinador = new Patrocinador(model.Nombre);

					patrocinador.Logo = StreamToArray(model.Logo.InputStream);

					patrocinadores.Save(patrocinador);

					return RedirectToAction("Index");
				}
				this.AddError("El patrocinador ya existe.");
			}

			return View("DefaultEditor", model);
        }

    	private static byte[] StreamToArray(Stream stream)
    	{
    		var buffer = new byte[16*1024];
    		using (var ms = new MemoryStream())
    		{
    			int read;
    			while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
    				ms.Write(buffer, 0, read);
    			return ms.ToArray();
    		}
    	}

    	[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Modificar(string id)
		{
			var patrocinadores = AgendaFactory.GetPatrocinadorRepository();

			var patrocinador = patrocinadores.GetById(id);
			if (patrocinador == null)
			{
				this.AddError("No se encontró el patrocinador que intenta modificar");
				return RedirectToAction("Index");
			}
			var model = new PatrocinadorEditModel
			            	{
								Id = new Guid(id).ToString(),
								Nombre = patrocinador.Nombre
			            	};
			return View("DefaultEditor", model);
		}

		[HttpPost]
		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Modificar(PatrocinadorEditModel model)
		{
			if (ModelState.IsValid)
			{
				var patrocinadores = AgendaFactory.GetPatrocinadorRepository();
				var patrocinador = patrocinadores.GetById(model.Id);
				if (patrocinador != null)
				{
					patrocinador.Nombre = model.Nombre;
					patrocinador.Logo = StreamToArray(model.Logo.InputStream);

					patrocinadores.Save(patrocinador);

					return RedirectToAction("Index");
				}
				this.AddError("No se encuentra el patrocinador.");
			}
			return View("DefaultEditor", model);
		}

		[CustomAuthorize(Roles = Roles.Administrador)]
		public ActionResult Eliminar(string id)
        {
			if (!string.IsNullOrWhiteSpace(id))
			{
				var patrocinadores = AgendaFactory.GetPatrocinadorRepository();
				var patrocinador = patrocinadores.GetById(id);

				patrocinadores.Delete(patrocinador);
			}
			return RedirectToAction("Index");
		}

    }
}