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);
        }
示例#2
0
        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);
            }
        }