public ActionResult New(CivilizationForm form) { Debug.WriteLine(string.Format("POST: Civilization Controller: New Civilization - gameID={0}", GameState.GameID)); var game = GameState.Game; DB_civilization civilization = new DB_civilization(); civilization.game_id = game.Info.id; var selectedTraits = form.CivilizationTraits.Where(x => x.IsChecked).ToList(); if (selectedTraits.Count > 0) { civilization.civilization_traits_1_id = selectedTraits[0].ID; } if (selectedTraits.Count > 1) { civilization.civilization_traits_2_id = selectedTraits[1].ID; } if (selectedTraits.Count > 2) { civilization.civilization_traits_3_id = selectedTraits[2].ID; } civilization.tech_level_id = (form.SelectedTechLevel == -1) ? null : form.SelectedTechLevel; civilization.name = form.Name; civilization.colour = form.Colour; civilization.rp = form.RP; civilization.gmnotes = form.GMNotes; Database.Session.Save(civilization); foreach (var player in form.Players) { if (player.IsChecked) { DB_user_civilizations userCivilization = new DB_user_civilizations( player.ID, civilization.id, game.ID, game.GetPlayer(player.ID).GameUserInfo.id); Database.Session.Save(userCivilization); } } foreach (var civilizationMet in form.MetCivilizations) { if (civilizationMet.IsChecked) { DB_civilization_met dbCivilizationMet = new DB_civilization_met(civilization.id, civilizationMet.ID, game.ID); Database.Session.Save(dbCivilizationMet); } } Database.Session.Flush(); return(RedirectToRoute("Civilizations")); }
public ActionResult Edit(CivilizationForm form) { Debug.WriteLine(string.Format("POST: Civilization Controller: Edit Civilization - civilizationID={0}", form.ID)); var game = GameState.Game; var civilization = game.Civilizations.Find(x => x.Info.id == form.ID); if (civilization.Info.game_id != game.Info.id) { return(RedirectToRoute("game", new { gameID = game.Info.id })); } var selectedTraits = form.CivilizationTraits.Where(x => x.IsChecked).ToList(); if (selectedTraits.Count > 0) { civilization.Info.civilization_traits_1_id = selectedTraits[0].ID; } if (selectedTraits.Count > 1) { civilization.Info.civilization_traits_2_id = selectedTraits[1].ID; } if (selectedTraits.Count > 2) { civilization.Info.civilization_traits_3_id = selectedTraits[2].ID; } civilization.Info.tech_level_id = (form.SelectedTechLevel == -1) ? null : form.SelectedTechLevel; civilization.Info.name = form.Name; civilization.Info.colour = form.Colour; civilization.Info.rp = form.RP; civilization.Info.gmnotes = form.GMNotes; Database.Session.Update(civilization.Info); #region User Civilizations var userCivs = Database.Session.Query <DB_user_civilizations>() .Where(x => x.civilization_id == civilization.Info.id) .ToList(); var checkedOwners = form.Players .Where(x => x.IsChecked) .ToList(); List <DB_user_civilizations> ownerToRemove = new List <DB_user_civilizations>(); List <Checkbox> ownerToAdd = new List <Checkbox>(); // First determine what to remove foreach (var userCiv in userCivs) { bool foundMatch = false; foreach (var checkBox in checkedOwners) { // Player is already an Owner of this Civilization if (userCiv.user_id == checkBox.ID) { foundMatch = true; break; } } // No longer an Owner of this Civilization if (!foundMatch) { ownerToRemove.Add(userCiv); } } // Next determine what is new foreach (var checkBox in checkedOwners) { bool foundMatch = false; foreach (var userCiv in userCivs) { // Player is already an Owner of this civilization if (checkBox.ID == userCiv.user_id) { foundMatch = true; break; } } // We have a new owner! if (!foundMatch) { ownerToAdd.Add(checkBox); } } // Now apply the changes foreach (var remove in ownerToRemove) { Database.Session.Delete(remove); } foreach (var add in ownerToAdd) { Database.Session.Save(new DB_user_civilizations(add.ID, civilization.Info.id, game.ID, game.GetPlayer(add.ID).GameUserInfo.id)); } #endregion #region Met Civilizations var metCivilizations = Database.Session.Query <DB_civilization_met>() .Where(x => x.civilization_id1 == civilization.Info.id || x.civilization_id2 == civilization.Info.id) .ToList(); var checkedMetCivilizations = form.MetCivilizations .Where(x => x.IsChecked) .ToList(); List <DB_civilization_met> metCivilizationToRemove = new List <DB_civilization_met>(); List <Checkbox> metCivilizationToAdd = new List <Checkbox>(); // First determine what to remove foreach (var metCivilization in metCivilizations) { bool foundMatch = false; foreach (var checkBox in checkedMetCivilizations) { // Player has already met this Civilization if (metCivilization.civilization_id1 == checkBox.ID || metCivilization.civilization_id2 == checkBox.ID) { foundMatch = true; break; } } // No longer an met this Civilization if (!foundMatch) { metCivilizationToRemove.Add(metCivilization); } } // Next determine what is new foreach (var checkBox in checkedMetCivilizations) { bool foundMatch = false; foreach (var metCivilization in metCivilizations) { // Player has already met this civilization if (checkBox.ID == metCivilization.civilization_id1 || checkBox.ID == metCivilization.civilization_id2) { foundMatch = true; break; } } // We have a new owner! if (!foundMatch) { metCivilizationToAdd.Add(checkBox); } } // Now apply the changes foreach (var remove in metCivilizationToRemove) { Database.Session.Delete(remove); } foreach (var add in metCivilizationToAdd) { Database.Session.Save(new DB_civilization_met(civilization.Info.id, add.ID, game.ID)); } #endregion Database.Session.Flush(); return(RedirectToRoute("Civilizations")); }