public void Accept(ManagedSecurityContext sec, string message) { GetACL().Check(sec, DataOperation.AllExceptUpdate); AccountGroupAccount account = new AccountGroupAccount(); account.Account = mInstance.Account; account.AccountGroup = mInstance.AccountGroup; account.Created = account.Modified = DateTime.UtcNow; Session.Save(account); ManagedAccount recepient = new ManagedAccount(Session, account.Account); ManagedSiteConnector.TrySendAccountEmailMessageUriAsAdmin( Session, recepient, string.Format("EmailAccountGroupAccountRequestAccept.aspx?id={0}&aid={1}&message={2}", this.Id, sec.Account.Id, Renderer.UrlEncode(message))); Session.Delete(mInstance); }
public void Leave(int accountid, ManagedSecurityContext sec) { GetACL().Check(sec, DataOperation.Retreive); Account adminaccount = null; bool fHasAdministrator = false; bool fMember = false; foreach (AccountGroupAccount account in Collection <AccountGroupAccount> .GetSafeCollection(mInstance.AccountGroupAccounts)) { if (account.Account.Id == accountid) { Session.Delete(account); fMember = true; } else if (account.IsAdministrator) { // has at least one administrator left fHasAdministrator = true; adminaccount = account.Account; } } if (!fMember) { throw new Exception("Not a member of the group."); } if (!fHasAdministrator) { // deleted the last administrator AccountGroupAccount admin = new AccountGroupAccount(); admin.Account = ManagedAccount.GetAdminAccount(Session); if (admin.Account.Id == accountid) { // the systme administrator tried to leave the group, he was last and is automatically re-added throw new Exception("System administrator cannot be the last to leave a group."); } adminaccount = admin.Account; admin.AccountGroup = mInstance; admin.Created = admin.Modified = DateTime.UtcNow; admin.IsAdministrator = true; Session.Save(admin); } // orphan any invitations that this account sent foreach (AccountGroupAccountInvitation invitation in Collection <AccountGroupAccountInvitation> .GetSafeCollection(mInstance.AccountGroupAccountInvitations)) { if (invitation.Requester.Id == accountid) { invitation.Requester = adminaccount; Session.Save(invitation); } } // orhphan group discussion int discussion_id = ManagedDiscussion.GetOrCreateDiscussionId(Session, typeof(AccountGroup).Name, Id, sec); Discussion discussion = Session.Load <Discussion>(discussion_id); if (discussion.Account.Id == accountid) { discussion.Account = adminaccount; Session.Save(discussion); } }