public void MergeAndDelete(Group merge) { if (this.K==merge.K) throw new DsiUserFriendlyException("Can't merge group into itself!"); Cambro.Web.Helpers.WriteAlertHeader(); Cambro.Web.Helpers.WriteAlert("Starting group merge...", true); Cambro.Web.Helpers.WriteAlert("Merging group members...", true); //members Query qGu = new Query(); qGu.QueryCondition=new Q(GroupUsr.Columns.GroupK,merge.K); GroupUsrSet gus = new GroupUsrSet(qGu); int count = 0; foreach (GroupUsr guMerge in gus) { if (count%10==0) Cambro.Web.Helpers.WriteAlert("Merging usr " + guMerge.UsrK + " ("+count+" / "+gus.Count+")..."); try { count++; GroupUsr guMaster = this.GetGroupUsr(guMerge.Usr); if (guMaster == null) { guMaster = new GroupUsr(); guMaster.UsrK = guMerge.UsrK; guMaster.GroupK = this.K; guMaster.Status = guMerge.Status; guMaster.StatusChangeDateTime = guMerge.StatusChangeDateTime; guMaster.StatusChangeUsrK = guMerge.StatusChangeUsrK; guMaster.Owner = guMerge.Owner; guMaster.Moderator = guMerge.Moderator; guMaster.NewsAdmin = guMerge.NewsAdmin; guMaster.MemberAdmin = guMerge.MemberAdmin; guMaster.MemberAdminNewUserEmails = guMerge.MemberAdminNewUserEmails; guMaster.Favourite = guMerge.Favourite; guMaster.InviteMessage = guMerge.InviteMessage; guMaster.InviteUsrK = guMerge.InviteUsrK; guMaster.Update(); guMaster.Usr.UpdateIsGroupModerator(); } else { if (guMaster.StatusPermissionLevel < guMerge.StatusPermissionLevel) { guMaster.Status = guMerge.Status; guMaster.StatusChangeDateTime = guMerge.StatusChangeDateTime; guMaster.StatusChangeUsrK = guMerge.StatusChangeUsrK; guMaster.InviteMessage = guMerge.InviteMessage; guMaster.InviteUsrK = guMerge.InviteUsrK; } if (this.BrandK == 0 || merge.BrandK > 0) { if (guMerge.Owner) guMaster.Owner = true; if (guMerge.Moderator) guMaster.Moderator = true; if (guMerge.NewsAdmin) guMaster.NewsAdmin = true; if (guMerge.MemberAdmin) { guMaster.MemberAdmin = true; guMaster.MemberAdminNewUserEmails = guMerge.MemberAdminNewUserEmails; } } if (guMerge.Favourite) guMaster.Favourite = true; guMaster.Update(); guMaster.Usr.UpdateIsGroupModerator(); } if (guMaster.IsMember) { Mailer m = new Mailer(); m.UsrRecipient = guMerge.Usr; m.Subject = "A group you were in has been merged"; m.Body = "<p><i>" + merge.FriendlyName + "</i> has been merged with <i>" + this.FriendlyName + "</i>. " + "Your membership details have been moved across. If you ever want to exit the group, click the button " + "on the <a href=\"[LOGIN(" + this.Url() + ")]\">group homepage</a>.</p>"; m.RedirectUrl = this.Url(); m.Bulk = true; m.Send(); } if (guMaster.IsMember && CommentAlert.IsEnabled(guMerge.UsrK, guMerge.GroupK, Model.Entities.ObjectType.Group)) CommentAlert.Enable(guMaster.Usr, guMaster.GroupK, Model.Entities.ObjectType.Group); } catch { Cambro.Web.Helpers.WriteAlert("Exception! ... deleting membership for usr " + guMerge.UsrK + " (" + count + " / " + gus.Count + ")..."); guMerge.Delete(); } } Cambro.Web.Helpers.WriteAlert("Done merging usrs..."); //picture if (merge.HasPic && !this.HasPic) { Cambro.Web.Helpers.WriteAlert("Copying picture...", true); try { Utilities.CopyPic(merge, this); } catch { Cambro.Web.Helpers.WriteAlert("Exception while copying picture...", true); } Cambro.Web.Helpers.WriteAlert("Done copying picture...", true); } //recommended events if (this.BrandK == 0) { Cambro.Web.Helpers.WriteAlert("Merging recommended events...", true); Query qEv = new Query(); qEv.QueryCondition = new Q(GroupEvent.Columns.GroupK, merge.K); GroupEventSet ges = new GroupEventSet(qEv); foreach (GroupEvent geMerge in ges) { try { GroupEvent geMaster = new GroupEvent(this.K, geMerge.EventK); } catch (BobNotFound) { GroupEvent geMaster = new GroupEvent(); geMaster.GroupK = this.K; geMaster.EventK = geMerge.EventK; geMaster.Update(); } } Cambro.Web.Helpers.WriteAlert("Done merging recommended events..."); } Cambro.Web.Helpers.WriteAlert("Merging top photos...", true); //top photos Query qPh = new Query(); qPh.QueryCondition=new Q(GroupPhoto.Columns.GroupK,merge.K); GroupPhotoSet gps = new GroupPhotoSet(qPh); foreach (GroupPhoto gpMerge in gps) { try { GroupPhoto gpMaster = new GroupPhoto(this.K,gpMerge.PhotoK); if (!gpMaster.ShowOnFrontPage && gpMerge.ShowOnFrontPage) { gpMaster.Caption=gpMerge.Caption; gpMaster.DateTime=gpMerge.DateTime; gpMaster.AddedByUsrK=gpMerge.AddedByUsrK; gpMaster.ShowOnFrontPage=gpMerge.ShowOnFrontPage; gpMaster.Update(); } } catch (BobNotFound) { GroupPhoto gpMaster = new GroupPhoto(); gpMaster.GroupK=this.K; gpMaster.PhotoK=gpMerge.PhotoK; gpMaster.Caption=gpMerge.Caption; gpMaster.DateTime=gpMerge.DateTime; gpMaster.AddedByUsrK=gpMerge.AddedByUsrK; gpMaster.ShowOnFrontPage=gpMerge.ShowOnFrontPage; gpMaster.Update(); } } Cambro.Web.Helpers.WriteAlert("Done merging top photos..."); //addedbyusrk's if (true) { Cambro.Web.Helpers.WriteAlert("Updating invited users...", true); Update update = new Update(); update.Changes.Add(new Assign(Usr.Columns.AddedByGroupK, this.K)); update.Table = TablesEnum.Usr; update.Where = new Q(Usr.Columns.AddedByGroupK, merge.K); update.Run(); Cambro.Web.Helpers.WriteAlert("Done updating invited users..."); } Cambro.Web.Helpers.WriteAlert("Merging topics (1/4)...", true); //chats if (merge.PrivateChat != this.PrivateChat || merge.ThemeK != this.ThemeK || merge.MusicTypeK != this.MusicTypeK) { Update update = new Update(); update.Table=TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.PrivateGroup,this.PrivateChat)); update.Changes.Add(new Assign(Thread.Columns.ThemeK, this.ThemeK)); update.Changes.Add(new Assign(Thread.Columns.MusicTypeK, this.MusicTypeK)); update.Where=new Q(Thread.Columns.GroupK,merge.K); update.Run(); } Cambro.Web.Helpers.WriteAlert("Done merging topics (1/4)..."); if (true) { Cambro.Web.Helpers.WriteAlert("Merging topics (2/4)...", true); Update update = new Update(); update.Table=TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.UrlFragment,"groups/"+this.UrlName)); update.Changes.Add(new Assign(Thread.Columns.CountryK, this.CountryK)); update.Changes.Add(new Assign(Thread.Columns.PlaceK,this.PlaceK)); update.Where=new And(new Q(Thread.Columns.ParentObjectType,Model.Entities.ObjectType.Group),new Q(Thread.Columns.ParentObjectK,merge.K)); update.Run(); Cambro.Web.Helpers.WriteAlert("Done merging topics (2/4)..."); } if (true) { Cambro.Web.Helpers.WriteAlert("Merging topics (3/4)...", true); Update update = new Update(); update.Table=TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.GroupK,this.K)); update.Where=new Q(Thread.Columns.GroupK,merge.K); update.Run(); Cambro.Web.Helpers.WriteAlert("Done merging topics (3/4)..."); } if (true) { Cambro.Web.Helpers.WriteAlert("Merging topics (4/4)...", true); Update update = new Update(); update.Table=TablesEnum.Thread; update.Changes.Add(new Assign(Thread.Columns.ParentObjectK,this.K)); update.Where=new And(new Q(Thread.Columns.ParentObjectType,Model.Entities.ObjectType.Group),new Q(Thread.Columns.ParentObjectK,merge.K)); update.Run(); Cambro.Web.Helpers.WriteAlert("Done merging topics (4/4)..."); } Cambro.Web.Helpers.WriteAlert("Deleting old group...", true); merge.DeleteAll(null); Cambro.Web.Helpers.WriteAlert("Done deleting old group..."); Cambro.Web.Helpers.WriteAlert("Updating stats...", true); this.UpdateTotalComments(null); this.UpdateTotalMembers(); Cambro.Web.Helpers.WriteAlert("Done updating stats..."); Cambro.Web.Helpers.WriteAlert("Finished merging groups.", true); }
public GroupUsr ChangeUsr(bool Remove, int UsrK, bool Moderator, bool NewsAdmin, bool MemberAdmin, bool Owner, GroupUsr.StatusEnum Status, DateTime DateTimeAdded, bool UpdateTotalMembers) { bool found = false; GroupUsr gu = new GroupUsr(); try { gu = new GroupUsr(UsrK, this.K); found=true; } catch{} if (found) { if (Remove) { gu.Delete(); if (UpdateTotalMembers) this.UpdateTotalMembers(); } else { gu.Moderator=Moderator || NewsAdmin || MemberAdmin || Owner; gu.NewsAdmin=NewsAdmin || Owner; if (gu.MemberAdmin != (MemberAdmin || Owner)) { gu.MemberAdmin = MemberAdmin || Owner; gu.MemberAdminNewUserEmails = MemberAdmin || Owner; } gu.Owner=Owner; if (!gu.Status.Equals(Status)) { gu.Status=Status; gu.StatusChangeDateTime=DateTimeAdded; gu.StatusChangeUsrK=UsrK; } gu.Update(); gu.Usr.UpdateIsGroupModerator(); if (UpdateTotalMembers) this.UpdateTotalMembers(); } } else { if (Remove) { gu = null; } else { gu.UsrK=UsrK; gu.GroupK=this.K; if (!gu.Status.Equals(Status)) { gu.Status=Status; gu.StatusChangeDateTime=DateTimeAdded; gu.StatusChangeUsrK=UsrK; } gu.Moderator=Moderator || NewsAdmin || MemberAdmin || Owner; gu.NewsAdmin=NewsAdmin || Owner; if (gu.MemberAdmin != (MemberAdmin || Owner)) { gu.MemberAdmin = MemberAdmin || Owner; gu.MemberAdminNewUserEmails = MemberAdmin || Owner; } gu.Owner=Owner; gu.Update(); gu.Usr.UpdateIsGroupModerator(); if (UpdateTotalMembers) this.UpdateTotalMembers(); } } return gu; }
public Return InviteReject(Usr TargetUsr, GroupUsr TargetGroupUsr) { Return r = new Return(); if (this.Restriction.Equals(Group.RestrictionEnum.Custom)) { r.Success=false; r.MessageHtml="The "+this.FriendlyName+" group is a special group - the membership "+ "is automatically controlled. You can't decline an invite to this group."; return r; } if (TargetGroupUsr==null) { r.Success=false; r.MessageHtml="You haven't been invited to the "+this.FriendlyName+" group!"; return r; } else if (TargetGroupUsr.Status.Equals(GroupUsr.StatusEnum.Invite)) { TargetGroupUsr.Status = GroupUsr.StatusEnum.InviteRejected; TargetGroupUsr.StatusChangeDateTime = DateTime.Now; TargetGroupUsr.StatusChangeUsrK = TargetUsr.K; GroupUsr gu = this.GetGroupUsr(TargetGroupUsr.InviteUsr); if (gu.MemberAdminNewUserEmails) { Mailer m = new Mailer(); m.UsrRecipient = TargetGroupUsr.InviteUsr; m.Subject = "Your invitation for " + TargetUsr.NickName + " to join the " + this.FriendlyName + " group has been rejected."; m.Body = "<p>Your invitation for " + TargetUsr.LinkEmail() + " to join the " + this.FriendlyName + " group has been rejected. " + TargetUsr.LinkEmail() + " did not want to join the group.</p>"; m.RedirectUrl = TargetUsr.Url(); m.Send(); } TargetGroupUsr.Update(); r.Success=true; return r; } else { r.Success=false; r.MessageHtml="You haven't been invited to the "+this.FriendlyName+" group!"; return r; } }
public void UnBar(Usr TargetUsr, GroupUsr TargetGroupUsr, Usr PerformingUsr, GroupUsr PerformingGroupUsr) { if (this.Restriction.Equals(Group.RestrictionEnum.Custom)) throw new DsiUserFriendlyException("Can't unbar from a custom group!"); if (!PerformingUsr.IsAdmin && (PerformingGroupUsr==null || !PerformingGroupUsr.MemberAdmin)) throw new DsiUserFriendlyException("You must be a membership admin of this group to unbar someone!"); if (TargetGroupUsr!=null && TargetGroupUsr.Status.Equals(GroupUsr.StatusEnum.Barred)) { TargetGroupUsr.Status = GroupUsr.StatusEnum.Invite; TargetGroupUsr.StatusChangeDateTime = DateTime.Now; TargetGroupUsr.StatusChangeUsrK = PerformingUsr.K; Query qAdmin = new Query(); qAdmin.QueryCondition=this.MemberAdminQ; qAdmin.TableElement=Group.UsrMemberJoin; qAdmin.Columns=Usr.EmailColumns; UsrSet usAdmins = new UsrSet(qAdmin); foreach (Usr admin in usAdmins) { Mailer mAdmin = new Mailer(); mAdmin.UsrRecipient=admin; mAdmin.Subject="Member un-barred - "+TargetUsr.NickName+" has been un-barred from the "+ this.FriendlyName+ " group by "+PerformingUsr.NickName; mAdmin.Body="<p>"+TargetUsr.LinkEmail()+" has been un-barred from the "+ this.FriendlyName+ " group by "+PerformingUsr.LinkEmail()+"</p>"; mAdmin.RedirectUrl=this.UrlApp("admin","mode","membership"); mAdmin.Send(); } Mailer m = new Mailer(); m.UsrRecipient = TargetUsr; m.Subject = "You have been un-barred from the the "+this.FriendlyName+" group."; m.Body = "<p>You have been un-barred from the the "+this.FriendlyName+" group. You may join the group by clicking the button on the group homepage. You can contact a group moderator for more information.</p>"; m.RedirectUrl = this.Url(); m.Send(); TargetGroupUsr.Update(); } }
private void RejectPrivate(Usr RejectedUsr, GroupUsr RejectedGroupUsr, Usr PerformingUsr, GroupUsr PerformingGroupUsr) { if (RejectedUsr==null) { throw new Exception("InvitedGroupUsr is null!"); } if (RejectedGroupUsr.Status.Equals(GroupUsr.StatusEnum.Request)) RejectedGroupUsr.Status = GroupUsr.StatusEnum.RequestRejected; else if (RejectedGroupUsr.Status.Equals(GroupUsr.StatusEnum.Recommend)) RejectedGroupUsr.Status = GroupUsr.StatusEnum.RecommendRejected; else throw new Exception("Incorrect status to reject!"); RejectedGroupUsr.StatusChangeDateTime = DateTime.Now; RejectedGroupUsr.StatusChangeUsrK=PerformingUsr.K; if (RejectedGroupUsr.Status.Equals(GroupUsr.StatusEnum.RequestRejected)) { Mailer m = new Mailer(); m.UsrRecipient = RejectedUsr; m.Subject = "Your request to join the "+this.FriendlyName+" group has been rejected."; m.Body = "<p>Your request to join the "+this.FriendlyName+" group has been rejected. You can contact a group moderator for more information.</p>"; m.RedirectUrl = this.Url(); m.Send(); } else if (RejectedGroupUsr.Status.Equals(GroupUsr.StatusEnum.RecommendRejected)) { Mailer m = new Mailer(); m.UsrRecipient = RejectedGroupUsr.InviteUsr; m.Subject = "Your recommendation for "+RejectedUsr.NickName+" to join the "+this.FriendlyName+" group has been rejected."; m.Body = "<p>Your recommendation for "+RejectedUsr.LinkEmail()+" to join the "+this.FriendlyName+" group has been rejected. You can contact a group moderator for more information.</p>"; m.RedirectUrl = this.Url(); m.Send(); } RejectedGroupUsr.Update(); }
private void JoinPrivate(Usr InvitedUsr, GroupUsr InvitedGroupUsr, Usr InvitingUsr, GroupUsr InvitingGroupUsr) { InvitedGroupUsr.Status = GroupUsr.StatusEnum.Member; InvitedGroupUsr.StatusChangeDateTime = DateTime.Now; InvitedGroupUsr.StatusChangeUsrK=InvitingUsr.K; InvitedGroupUsr.Update(); this.UpdateTotalMembers(); SendJoinedEmail(InvitedUsr); }