示例#1
0
 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"));
        }