public void MergeAndDelete(Venue merge) { if (this.K == merge.K) throw new DsiUserFriendlyException("Can't merge a venue into itself!"); Cambro.Web.Helpers.WriteAlertHeader(); //throw new Exception("This function isn't finished yet!"); Cambro.Web.Helpers.WriteAlert("Starting merge...", true); #region Promoter Cambro.Web.Helpers.WriteAlert("Merging promoter...", true); if (merge.PromoterK > 0 && merge.PromoterStatus.Equals(Venue.PromoterStatusEnum.Confirmed) && merge.Promoter.IsEnabled) { this.PromoterK = merge.PromoterK; this.PromoterStatus = Venue.PromoterStatusEnum.Confirmed; } else if (this.PromoterK == 0 && merge.PromoterK > 0) { this.PromoterK = merge.PromoterK; this.PromoterStatus = merge.PromoterStatus; } Cambro.Web.Helpers.WriteAlert("Done merging promoter..."); #endregion #region Articles if (true) { Cambro.Web.Helpers.WriteAlert("Moving articles...", true); Query q = new Query(); q.QueryCondition = new And(new Q(Article.Columns.ParentObjectType, Model.Entities.ObjectType.Venue),new Q(Article.Columns.ParentObjectK, merge.K)); ArticleSet ars = new ArticleSet(q); foreach (Article a in ars) { Cambro.Web.Helpers.WriteAlert("Moving article " + a.K + "..."); a.ParentObjectK = this.K; a.VenueK = this.K; if (a.Relevance <= Model.Entities.Article.RelevanceEnum.Place) a.PlaceK = this.PlaceK; else a.PlaceK = 0; if (a.Relevance <= Model.Entities.Article.RelevanceEnum.Country) a.CountryK = this.Place.CountryK; else a.CountryK = 0; a.UrlFragment = this.UrlFilterPart; a.Update(); #region Threads if (true) { Update u = new Update(); u.Table = TablesEnum.Thread; u.Where = new Q(Thread.Columns.ArticleK, a.K); u.Changes.Add(new Assign(Thread.Columns.UrlFragment, a.UrlFilterPart)); u.Changes.Add(new Assign(Thread.Columns.VenueK, this.K)); u.Changes.Add(new Assign(Thread.Columns.PlaceK, this.PlaceK)); u.Changes.Add(new Assign(Thread.Columns.CountryK, this.Place.CountryK)); u.Run(); } #endregion #region Galleries if (true) { Update u = new Update(); u.Table = TablesEnum.Gallery; u.Where = new Q(Gallery.Columns.ArticleK, a.K); u.Changes.Add(new Assign(Gallery.Columns.UrlFragment, a.UrlFilterPart)); u.Run(); } #endregion #region Photos if (true) { Update u = new Update(); u.Table = TablesEnum.Photo; u.Where = new Q(Photo.Columns.ArticleK, a.K); u.Changes.Add(new Assign(Photo.Columns.UrlFragment, a.UrlFilterPart)); u.Run(); } #endregion } Cambro.Web.Helpers.WriteAlert("Done moving articles...", true); } #endregion #region Events if (true) { Cambro.Web.Helpers.WriteAlert("Moving events...", true); EventSet es = new EventSet(new Query(new Q(Event.Columns.VenueK, merge.K))); int count = 0; foreach (Event ev in es) { count++; Cambro.Web.Helpers.WriteAlert("Moving event "+ev.K+" ("+count+" / "+es.Count+")..."); ev.ChangeVenue(this.K, true); } Cambro.Web.Helpers.WriteAlert("Done moving events..."); } #endregion #region Thread ParentObjects if (true) { Cambro.Web.Helpers.WriteAlert("Merging topics (1/2)...", true); Update u = new Update(); u.Table = TablesEnum.Thread; u.Where = new And( new Q(Thread.Columns.ParentObjectType, Model.Entities.ObjectType.Venue), new Q(Thread.Columns.ParentObjectK, merge.K)); u.Changes.Add(new Assign(Thread.Columns.ParentObjectK, this.K)); u.Run(); Cambro.Web.Helpers.WriteAlert("Done merging topics (1/2)..."); } #endregion #region Thread if (true) { Cambro.Web.Helpers.WriteAlert("Merging topics (2/2)...", true); Update u = new Update(); u.Table = TablesEnum.Thread; u.Where = new And( new Q(Thread.Columns.VenueK, merge.K), new Q(Thread.Columns.EventK, 0), new Q(Thread.Columns.ArticleK, 0)); u.Changes.Add(new Assign(Thread.Columns.VenueK, this.K)); u.Changes.Add(new Assign(Thread.Columns.UrlFragment, this.UrlFilterPart)); u.Run(); Cambro.Web.Helpers.WriteAlert("Done merging topics (2/2)..."); } #endregion #region Pic if (!this.HasPic) { Cambro.Web.Helpers.WriteAlert("Merging picture...", true); this.Pic = merge.Pic; this.PicMiscK = merge.PicMiscK; this.PicPhotoK = merge.PicPhotoK; this.PicState = merge.PicState; merge.Pic = Guid.Empty; merge.PicMiscK = 0; merge.PicPhotoK = 0; merge.PicState = ""; merge.Update(); Cambro.Web.Helpers.WriteAlert("Done merging picture..."); } #endregion this.AdminNote += "Venue " + merge.K + " was merged with this one " + DateTime.Now.ToString() + ". The admin note from venue " + merge.K + " is:\n********************\n" + merge.AdminNote + "\n********************\n"; this.Update(); int mergePlaceK = merge.PlaceK; Cambro.Web.Helpers.WriteAlert("Deleting old venue...", true); merge.DeleteAll(null); Cambro.Web.Helpers.WriteAlert("Done deleting old venue..."); if (mergePlaceK != this.PlaceK) { Place mergePlace = new Place(mergePlaceK); Cambro.Web.Helpers.WriteAlert("Updating stats for old place...", true); mergePlace.UpdateTotalComments(null); mergePlace.UpdateTotalEvents(null); Cambro.Web.Helpers.WriteAlert("Done updating stats for old place..."); } Cambro.Web.Helpers.WriteAlert("Updating stats for new venue...", true); this.UpdateTotalComments(null); this.UpdateTotalEvents(null); Cambro.Web.Helpers.WriteAlert("Done updating stats for new venue..."); this.Update(); Cambro.Web.Helpers.WriteAlert("Done merging venues!", true); }
void Save(bool RedirectToPic) { if (IsEdit) { string newName = Cambro.Web.Helpers.Strip(NameTextBox.Text); bool changedName = !CurrentGroup.Name.Equals(newName); CurrentGroup.Name = newName; CurrentGroup.Description = Cambro.Web.Helpers.Strip(DescriptionTextBox.Text); CurrentGroup.PostingRules = Cambro.Web.Helpers.Strip(RulesTextBox.Text); CurrentGroup.LongDescriptionHtml = IntroHtml.GetHtml(); bool newPrivateChat; if (GroupPagePrivate.Checked) { CurrentGroup.PrivateGroupPage = true; CurrentGroup.PrivateMemberList = true; newPrivateChat = true; } else { CurrentGroup.PrivateGroupPage = false; CurrentGroup.PrivateMemberList = MembersListPrivate.Checked; newPrivateChat = ChatForumPrivate.Checked; } bool changedPrivateChat = newPrivateChat != CurrentGroup.PrivateChat; CurrentGroup.PrivateChat = newPrivateChat; if (MembershipMember.Checked) CurrentGroup.Restriction = Group.RestrictionEnum.Member; else if (MembershipModerator.Checked) CurrentGroup.Restriction = Group.RestrictionEnum.Moderator; else CurrentGroup.Restriction = Group.RestrictionEnum.None; int newTheme; if (ThemesRadioButtonList.SelectedValue.Equals("18")) newTheme = 0; else { Theme t = new Theme(int.Parse(ThemesRadioButtonList.SelectedValue)); newTheme = t.K; } bool changedTheme = newTheme != CurrentGroup.ThemeK; CurrentGroup.ThemeK = newTheme; int newCountry; int oldCountry = CurrentGroup.CountryK; if (LocationTypeCountry.Checked || LocationTypePlace.Checked) { Country c = new Country(int.Parse(LocationCountryDropDown.SelectedValue)); if (!c.Enabled) throw new Exception("invalid country!"); newCountry = c.K; } else { newCountry = 0; } bool changedCountry = CurrentGroup.CountryK != newCountry; CurrentGroup.CountryK = newCountry; int newPlace; int oldPlace = CurrentGroup.PlaceK; if (LocationTypePlace.Checked) { Place p = new Place(int.Parse(LocationPlaceDropDown.SelectedValue)); if (!p.Enabled || p.CountryK != CurrentGroup.CountryK) throw new Exception("invalid place!"); newPlace = p.K; } else { newPlace = 0; } bool changedPlace = CurrentGroup.PlaceK != newPlace; CurrentGroup.PlaceK = newPlace; int newMusicType; if (CurrentGroup.ThemeK == 1 || CurrentGroup.ThemeK == 2) { if (!MusicTypesRadioButtonList.SelectedValue.Equals("0")) { MusicType mt = new MusicType(int.Parse(MusicTypesRadioButtonList.SelectedValue)); if (!(mt.ParentK == 0 || mt.ParentK == 1)) throw new Exception("Invalid music type"); newMusicType = mt.K; } else { newMusicType = 0; } } else { newMusicType = 0; } bool changedMusic = CurrentGroup.MusicTypeK != newMusicType; CurrentGroup.MusicTypeK = newMusicType; if (changedName) CurrentGroup.CreateUniqueUrlName(false); Transaction transaction = null;//new Transaction(); try { if (changedPrivateChat) { Update update = new Update(); update.Table = TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.PrivateGroup, CurrentGroup.PrivateChat)); update.Where = new Q(Thread.Columns.GroupK, CurrentGroup.K); update.Run(transaction); } if (changedTheme) { Update update = new Update(); update.Table = TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.ThemeK, CurrentGroup.ThemeK)); update.Where = new Q(Thread.Columns.GroupK, CurrentGroup.K); update.Run(transaction); } if (changedCountry) { Update update = new Update(); update.Table = TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.CountryK, CurrentGroup.CountryK)); update.Where = new And(new Q(Thread.Columns.ParentObjectType, Model.Entities.ObjectType.Group), new Q(Thread.Columns.ParentObjectK, CurrentGroup.K)); update.Run(transaction); } if (changedPlace) { Update update = new Update(); update.Table = TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.PlaceK, CurrentGroup.PlaceK)); update.Where = new And(new Q(Thread.Columns.ParentObjectType, Model.Entities.ObjectType.Group), new Q(Thread.Columns.ParentObjectK, CurrentGroup.K)); update.Run(transaction); if (oldPlace > 0) { Place oldP = new Place(oldPlace); oldP.UpdateTotalComments(null); } if (newPlace > 0) { Place newP = new Place(newPlace); newP.UpdateTotalComments(null); } } if (changedMusic) { Update update = new Update(); update.Table = TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.MusicTypeK, CurrentGroup.MusicTypeK)); update.Where = new Q(Thread.Columns.GroupK, CurrentGroup.K); update.Run(transaction); } if (changedName) { Utilities.UpdateChildUrlFragmentsJob job = new Utilities.UpdateChildUrlFragmentsJob(Model.Entities.ObjectType.Group, CurrentGroup.K, true); job.ExecuteAsynchronously(); } CurrentGroup.Update(transaction); //transaction.Commit(); } catch (Exception ex) { //transaction.Rollback(); throw ex; } finally { //transaction.Close(); } if (RedirectToPic) { if (ContainerPage.Url["promoterk"].IsInt) Response.Redirect(CurrentGroup.UrlApp("edit", "pic", "", "promoterk", ContainerPage.Url["promoterk"])); else Response.Redirect(CurrentGroup.UrlApp("edit", "pic", "")); } else { RedirectSaved(); } } else { GroupSet gsDup = new GroupSet(new Query(new Q(Group.Columns.DuplicateGuid, (Guid)ContainerPage.ViewStatePublic["GroupDuplicateGuid"]))); if (gsDup.Count != 0) { Response.Redirect(gsDup[0].UrlApp("edit", "pic", "")); } else { Group g = new Group(); g.Name = Cambro.Web.Helpers.Strip(NameTextBox.Text); g.Description = Cambro.Web.Helpers.Strip(DescriptionTextBox.Text); g.LongDescriptionHtml = IntroHtml.GetHtml(); g.PostingRules = Cambro.Web.Helpers.Strip(RulesTextBox.Text, true, true, false, true); g.DateTimeCreated = DateTime.Now; g.PrivateGroupPage = GroupPagePrivate.Checked; if (GroupPagePrivate.Checked) { g.PrivateMemberList = true; g.PrivateChat = true; } else { g.PrivateMemberList = MembersListPrivate.Checked; g.PrivateChat = ChatForumPrivate.Checked; } if (MembershipMember.Checked) g.Restriction = Group.RestrictionEnum.Member; else if (MembershipModerator.Checked) g.Restriction = Group.RestrictionEnum.Moderator; else g.Restriction = Group.RestrictionEnum.None; if (ThemesRadioButtonList.SelectedValue.Equals("18")) g.ThemeK = 0; else { Theme t = new Theme(int.Parse(ThemesRadioButtonList.SelectedValue)); g.ThemeK = t.K; } if (LocationTypeCountry.Checked || LocationTypePlace.Checked) { Country c = new Country(int.Parse(LocationCountryDropDown.SelectedValue)); if (!c.Enabled) throw new Exception("invalid country!"); g.CountryK = c.K; } if (LocationTypePlace.Checked) { Place p = new Place(int.Parse(LocationPlaceDropDown.SelectedValue)); if (!p.Enabled || p.CountryK != g.CountryK) throw new Exception("invalid place!"); g.PlaceK = p.K; } if (g.ThemeK == 1 || g.ThemeK == 2) { if (!MusicTypesRadioButtonList.SelectedValue.Equals("0")) { MusicType mt = new MusicType(int.Parse(MusicTypesRadioButtonList.SelectedValue)); if (!(mt.ParentK == 0 || mt.ParentK == 1)) throw new Exception("Invalid music type"); g.MusicTypeK = mt.K; } } g.CreateUniqueUrlName(false); g.DuplicateGuid = (Guid)ContainerPage.ViewStatePublic["GroupDuplicateGuid"]; g.EmailOnAllThreads = false; g.Update(); g.ChangeUsr(false, Usr.Current.K, true, true, true, true, Bobs.GroupUsr.StatusEnum.Member, DateTime.Now, true); Response.Redirect(g.UrlApp("edit", "pic", "")); } } }