public ActionResult Edit([Bind(Include = "Id,Name,ForeignName,Description,ForeignDescription,Price,NativeLang,ForeignLang,Text,NewNativeLangCode,NewNativeLangName,NewForeignLangCode,NewForeignLangName,TransUILabels", Exclude = "SoldNumber,UserId")] CreateViewModel vm, HttpPostedFileBase file) { Module m = db.Modules.Find(vm.Id); if (m == null) { return(HttpNotFound()); } //check security var curUser = db.AspNetUsers.FirstOrDefault(o => o.UserName == User.Identity.Name); bool isAdmin = curUser == null ? false : curUser.IsAdmin == true; if (!isAdmin) { if (m.UserId != User.Identity.GetUserId()) { TempData["warning"] = "You must be creator of this module to edit/delete it."; } if (m.Locked) { TempData["warning"] = "This module is locked and cannot be edited or deleted."; } if (TempData["warning"] != null) { return(RedirectToAction("Details", new { id = m.Id })); } } if (ModelState.IsValid) //save module details { m.ImageFileName = SaveFile(m.Id, file); m.NewNativeLangCode = vm.NewNativeLangCode; //new lang and TransUI are optional, when module is approved for locking, admin decides if they are correct and adds new lang to lang table m.NewNativeLangName = vm.NewNativeLangName; m.NewForeignLangCode = vm.NewForeignLangCode; m.NewForeignLangName = vm.NewForeignLangName; m.TransUILabels = vm.TransUILabels; m.Name = vm.Name += "_" + vm.Id; //append unique suffix m.ForeignName = vm.ForeignName; m.Description = vm.Description; m.ForeignDescription = vm.ForeignDescription; m.ForeignLang = vm.ForeignLang; m.NativeLang = vm.NativeLang; m.Price = vm.Price; m.Locked = vm.Locked; db.SaveChanges(); return(RedirectToAction("Index")); //on success return to index } return(View(vm)); }
public ActionResult Create() { IEnumerable <Lang> l = db.Langs.Where(o => o.LangCode != "---"); var vm = new CreateViewModel() { ForeignLangList = new SelectList(l, "LangCode", "LangName").ToList(), NativeLangList = new SelectList(l, "LangCode", "LangName").ToList(), TransUILabels = transUILabelsTemplate }; vm.ForeignLangList.Single(o => o.Value == "es-ES").Selected = true; vm.NativeLangList.Single(o => o.Value == "en-US").Selected = true; var tmp = vm.NativeLangList.ToList(); return(View(vm)); }
// GET: /Module/Details/5 public ActionResult Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Module module = db.Modules.Find(id); if (module == null) { return(HttpNotFound()); } var curUser = db.AspNetUsers.FirstOrDefault(o => o.UserName == User.Identity.Name); bool isAdmin = curUser == null ? false : curUser.IsAdmin == true; string filePath = Directory.GetFiles(Server.MapPath("~/Content/Upload"), module.Id + ".*").FirstOrDefault(); var vm = new CreateViewModel() { Id = module.Id, IsAdmin = isAdmin, Name = module.Name, ForeignName = module.ForeignName, Description = module.Description, ForeignDescription = module.ForeignDescription, ForeignLang = module.ForeignLang, NativeLang = module.NativeLang, Price = module.Price, Text = module.Text, SoldNumber = isAdmin ? module.SoldNumber : 0, UserName = isAdmin ? module.AspNetUser.UserName : null, PaypalButtonId = module.PaypalButtonId, ImagePath = filePath != null ? "../../Content/Upload/" + Path.GetFileName(filePath) : "../../Content/Upload/lds-audio-book.jpeg" }; if (!String.IsNullOrWhiteSpace(vm.Text)) //truncate text for details view, after working on phrases and TTS status! { vm.Text = vm.Text.Substring(0, Math.Min(vm.Text.Length, 100)) + "..."; } vm.Name = vm.Name.Substring(0, vm.Name.LastIndexOf('_')); //cut off the unique suffix return(View(vm)); }
public ActionResult Create([Bind(Include = "Id,Name,Description,Price,NativeLang,ForeignLang,Text,ForeignName,ForeignDescription", Exclude = "SoldNumber,UserId")] CreateViewModel vm, HttpPostedFileBase file) { if (User.Identity.Name == null) { return(RedirectToAction("Index")); //must be logged in to create/edit/delete } IEnumerable <Lang> l = db.Langs.Where(o => o.LangCode != "---"); vm.ForeignLangList = new SelectList(l, "LangCode", "LangName"); vm.NativeLangList = new SelectList(l, "LangCode", "LangName"); vm.TransUILabels = transUILabelsTemplate; if (ModelState.IsValid) { Module m = new Module() { UserId = User.Identity.GetUserId(), Name = vm.Name, ForeignName = vm.ForeignName, Description = vm.Description, ForeignDescription = vm.ForeignDescription, ForeignLang = vm.ForeignLang, NativeLang = vm.NativeLang, Price = vm.Price, Text = vm.Text, NewNativeLangCode = vm.NewNativeLangCode, NewNativeLangName = vm.NewNativeLangName, NewForeignLangCode = vm.NewForeignLangCode, NewForeignLangName = vm.NewForeignLangName, TransUILabels = vm.TransUILabels }; db.Modules.Add(m); db.SaveChanges(); m.Name += "_" + m.Id; //append unique suffix m.ImageFileName = SaveFile(m.Id, file); db.SaveChanges(); Utils.PopulateModuleCache(m.Id, db); // if module is successfully created, then prepare cache for editor return(RedirectToAction("Index")); } return(View(vm)); }
public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // just in case, if module was closed and reopened before FlushModuleCache was called by agent, lets flush cache to db before reading module if (Utils.moduleCache.ContainsKey(id.Value) && Utils.moduleCache[id.Value].IsDirty) { Utils.FlushModuleCache(id.Value); } Module m = db.Modules.Find(id); if (m == null) { return(HttpNotFound()); } //check security var curUser = db.AspNetUsers.FirstOrDefault(o => o.UserName == User.Identity.Name); bool isAdmin = curUser == null ? false : curUser.IsAdmin == true; if (!isAdmin) { if (m.UserId != User.Identity.GetUserId()) { TempData["warning"] = "You must be creator of this module to edit it."; } if (m.Locked) { TempData["warning"] = "This module is locked and cannot be edited or deleted."; } if (TempData["warning"] != null) { return(RedirectToAction("Details", new { id = id })); } } IEnumerable <Lang> l = db.Langs.Where(o => o.LangCode != "---").ToList(); string filePath = Directory.GetFiles(Server.MapPath("~/Content/Upload"), m.Id + ".*").FirstOrDefault(); var vm = new CreateViewModel() { Id = m.Id, IsAdmin = isAdmin, ForeignLangList = new SelectList(l, "LangCode", "LangName"), NativeLangList = new SelectList(l, "LangCode", "LangName"), Name = m.Name.Substring(0, m.Name.LastIndexOf('_')),//cut off the unique suffix ForeignName = m.ForeignName, Description = m.Description, ForeignDescription = m.ForeignDescription, ForeignLang = m.ForeignLang, NativeLang = m.NativeLang, Price = m.Price, Text = m.Text, Locked = m.Locked, ImagePath = filePath != null ? "../../Content/Upload/" + Path.GetFileName(filePath) : null, NewNativeLangCode = m.NewNativeLangCode, NewNativeLangName = m.NewNativeLangName, NewForeignLangCode = m.NewForeignLangCode, NewForeignLangName = m.NewForeignLangName, TransUILabels = m.TransUILabels ?? transUILabelsTemplate //if module have some lang defined, put it here, otherwise, put a template }; Utils.PopulateModuleCache(m.Id, db); // if module is open for editing, then prepare cache for editor var moduleIds = Session["ModuleIds"] as List <int>; if (moduleIds == null) { moduleIds = new List <int>(); Session["ModuleIds"] = moduleIds; //when session expires, we'll remove its modules from cache (except those still downloading TTS) } if (!moduleIds.Contains(m.Id)) { moduleIds.Add(m.Id); } return(View(vm)); }