public void JoinGroup( ManagedSecurityContext sec, string message) { ManagedAccountGroup group = new ManagedAccountGroup(Session, mInstance.AccountGroup); if (group.Instance.IsPrivate && !group.HasAdministratorAccount(mInstance.Requester.Id)) { TransitAccountGroupAccountRequest t_request = new TransitAccountGroupAccountRequest(); t_request.AccountGroupId = mInstance.AccountGroup.Id; t_request.AccountId = mInstance.Account.Id; t_request.Message = string.Format("{0} invited {1} to \"{2}\". " + "The invitation was accepted and needs to be approved by the group administrator.\n{3}", mInstance.Requester.Name, mInstance.Account.Name, mInstance.AccountGroup.Name, message); t_request.Submitted = DateTime.UtcNow; ManagedAccountGroupAccountRequest m_request = new ManagedAccountGroupAccountRequest(Session); m_request.CreateOrUpdate(t_request, sec); } else { TransitAccountGroupAccount t_account = new TransitAccountGroupAccount(); t_account.AccountId = mInstance.Account.Id; t_account.AccountGroupId = mInstance.AccountGroup.Id; t_account.Created = t_account.Modified = DateTime.UtcNow; ManagedAccountGroupAccount m_accountgroupaccount = new ManagedAccountGroupAccount(Session); m_accountgroupaccount.CreateOrUpdate(t_account, sec); } }
public override int CreateOrUpdate(TransitAccountGroupAccount t_instance, ManagedSecurityContext sec) { ManagedAccountGroup m_group = new ManagedAccountGroup(Session, t_instance.AccountGroupId); // check whether the user is already a member if (t_instance.Id == 0 && m_group.HasAccount(t_instance.AccountId)) { throw new Exception(string.Format( "You are already a member of \"{0}\".", m_group.Instance.Name)); } // ensure that user isn't trying to self promote if (t_instance.Id > 0 && t_instance.IsAdministrator) { // the caller isn't a group admin if (!m_group.HasAdministratorAccount(sec.Account.Id)) { throw new ManagedAccount.AccessDeniedException(); } } // ensure that not removing last admin if (t_instance.Id > 0 && !t_instance.IsAdministrator) { AccountGroupAccount existing_instance = Session.Load <AccountGroupAccount>(t_instance.Id); if (existing_instance.IsAdministrator) { bool fHasAnotherAdmin = false; foreach (AccountGroupAccount instance in existing_instance.AccountGroup.AccountGroupAccounts) { if (instance.IsAdministrator && instance != existing_instance) { fHasAnotherAdmin = true; break; } } if (!fHasAnotherAdmin) { throw new Exception("Cannot demote the last group administrator."); } } } int id = base.CreateOrUpdate(t_instance, sec); if (t_instance.Id == 0) { if (mInstance.AccountGroup.AccountGroupAccounts == null) { mInstance.AccountGroup.AccountGroupAccounts = new List <AccountGroupAccount>(); } mInstance.AccountGroup.AccountGroupAccounts.Add(mInstance); // subscribe the user to a group feed TransitAccountRssWatch t_watch = new TransitAccountRssWatch(); t_watch.UpdateFrequency = 24; t_watch.Name = mInstance.AccountGroup.Name; t_watch.Url = string.Format("AccountGroupRss.aspx?id={0}", mInstance.AccountGroup.Id); t_watch.Enabled = true; t_watch.AccountId = mInstance.Account.Id; ManagedAccountRssWatch m_watch = new ManagedAccountRssWatch(Session); m_watch.CreateOrUpdate(t_watch, ManagedAccount.GetUserSecurityContext(Session, mInstance.Account.Id)); Session.Flush(); // e-mail the user a welcome message ManagedAccount recepient = new ManagedAccount(Session, mInstance.Account); ManagedSiteConnector.TrySendAccountEmailMessageUriAsAdmin(Session, recepient, string.Format("EmailAccountGroupAccount.aspx?id={0}", id)); } return(id); }