public ActionResult Create([Bind(Include = "ProductionId,Title,Playwright,Description,Runtime,OpeningDay,ClosingDay,DefaultPhoto,ShowtimeEve,ShowtimeMat,TicketLink,Season,IsCurrent,IsWorldPremiere")] Production production, HttpPostedFileBase uploadFile) { //========== VALIDATION ========== //===== PHOTO - Check if photo is not null but not a valid photo format if (uploadFile != null && !PhotoController.ValidatePhoto(uploadFile)) { ModelState.AddModelError("DefaultPhoto", "File must be a valid photo format."); } //===== SHOWTIME - at list one (ShowtimeEve, ShowtimeMat) need to be assigned if (production.ShowtimeEve == null && production.ShowtimeMat == null) { ModelState.AddModelError("ShowtimeEve", "At least one showtime must be specified."); ModelState.AddModelError("ShowtimeMat", "At least one showtime must be specified."); } //========== SAVE ========== if (ModelState.IsValid) { //===== DEFAULT PHOTO //--- save photo using photo controller, save entry to ProductionPhotos, photoName set to production title, description set to "Default Photo" if (uploadFile != null) { //----- Save New Photo or retrieve existing photo if the same - using photo controller Debug.WriteLine("Saving photo..."); int photoId = PhotoController.CreatePhoto(uploadFile, production.Title); //----- Save New ProductionPhoto var productionPhoto = new ProductionPhotos() { PhotoId = photoId, Title = production.Title, Description = "Default Photo" }; db.ProductionPhotos.Add(productionPhoto); db.SaveChanges(); //----- Save New Production, add DefaultPhoto object reference to production production.DefaultPhoto = productionPhoto; db.Productions.Add(production); db.SaveChanges(); //----- Add Production object reference to productionPhoto productionPhoto.Production = production; db.Entry(productionPhoto).State = EntityState.Modified; db.SaveChanges(); } //===== NO PHOTO else { db.Productions.Add(production); db.SaveChanges(); } return(RedirectToAction("Index")); } return(View(production)); }
private List <ProductionPhotos> ShufflePhotos(List <ProductionPhotos> photos) { int n = photos.Count; while (n > 1) { n--; int rnd = random.Next(n + 1); ProductionPhotos value = photos[rnd]; photos[rnd] = photos[n]; photos[n] = value; } return(photos); }
public ActionResult AddProductionPhoto([Bind(Include = "Title,Description")] ProductionPhotos productionPhotos, HttpPostedFileBase file, int productionId) { productionPhotos.PhotoId = PhotoController.CreatePhoto(file, productionPhotos.Title); if (ModelState.IsValid) { Production production = db.Productions.Find(productionId); productionPhotos.Production = production; if (production.DefaultPhoto == null) { production.DefaultPhoto = productionPhotos; } db.ProductionPhotos.Add(productionPhotos); db.SaveChanges(); return(RedirectToAction("Index")); } return(View("Edit")); }
public ActionResult DeleteConfirmed(int id) { using (ApplicationDbContext db = new ApplicationDbContext()) { Photo photo = db.Photo.Find(id); ProductionPhotos productionPhoto = db.ProductionPhotos.FirstOrDefault(x => x.PhotoId == photo.PhotoId); if (productionPhoto != null) { DbEntityEntry <ProductionPhotos> dbEntityEntry = db.Entry(productionPhoto); ProductionPhotos photoUnavailable = db.ProductionPhotos.Where(b => b.Title == "Photo Unavailable").FirstOrDefault(); productionPhoto.PhotoId = photoUnavailable.PhotoId; dbEntityEntry.CurrentValues.SetValues(productionPhoto); } // Checks for a production using this photo as a deleted photo Production production = db.Productions.FirstOrDefault(x => x.DefaultPhoto.PhotoId == photo.PhotoId); if (production != null) // If Production exists { // Checks to see if there is another photo related to the production if (production.ProductionPhotos.Where(p => p.PhotoId != null).Count() > 0) { foreach (var potentialDefaultPhoto in production.ProductionPhotos) { if (potentialDefaultPhoto.PhotoId == photo.PhotoId) { continue; // Ignores current default photo } // Error handling for deleted photos that still have references else if (potentialDefaultPhoto == null || potentialDefaultPhoto.PhotoId == null) { continue; } else { // Sets new default photo production.DefaultPhoto = potentialDefaultPhoto; break; // Exists the loop since a photo has been found } } } // Sets the default photo to "Photo Unavailable" else { production.DefaultPhoto = db.ProductionPhotos.Where(p => p.Title == "Photo Unavailable").FirstOrDefault(); } DbEntityEntry <Production> dbEntityEntry = db.Entry(production); dbEntityEntry.CurrentValues.SetValues(production); } Sponsor sponsor = db.Sponsors.FirstOrDefault(x => x.PhotoId == photo.PhotoId); if (sponsor != null) { DbEntityEntry <Sponsor> dbEntityEntry = db.Entry(sponsor); sponsor.PhotoId = null; dbEntityEntry.CurrentValues.SetValues(sponsor); } CastMember cast = db.CastMembers.FirstOrDefault(x => x.PhotoId == photo.PhotoId); if (cast != null) { DbEntityEntry <CastMember> dbEntityEntry = db.Entry(cast); cast.PhotoId = null; dbEntityEntry.CurrentValues.SetValues(cast); } db.Photo.Remove(photo); db.SaveChanges(); } return(RedirectToAction("Index")); }