Ejemplo n.º 1
0
        public void RunInvitationReminders(ISession session, ManagedSecurityContext sec)
        {
            // fetch invitations that are older than a month
            IEnumerator <AccountInvitation> invitations = session.CreateQuery(
                string.Format("FROM AccountInvitation WHERE Modified < '{0}'", DateTime.UtcNow.AddMonths(-1).ToString(DateTimeFormatInfo.InvariantInfo)))
                                                          .Enumerable <AccountInvitation>().GetEnumerator();

            while (invitations.MoveNext() && !IsStopping)
            {
                AccountInvitation invitation = invitations.Current;

                if (invitation.Created == invitation.Modified)
                {
                    try
                    {
                        // this invitation was never resent
                        ManagedAccountInvitation mi = new ManagedAccountInvitation(session, invitation);
                        mi.Send();
                    }
                    catch (ThreadAbortException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        EventLogManager.WriteEntry(string.Format("Error sending an invitation reminder to {0} <{1}>: {2}",
                                                                 invitation.Account.Id, invitation.Email, ex.Message), EventLogEntryType.Warning);
                    }
                    finally
                    {
                        invitation.Modified = DateTime.UtcNow;
                        session.Save(invitation);
                    }
                }
                else
                {
                    // delete an invitation that has not been responded to for over a month
                    session.Delete(invitation);
                }
            }
        }
Ejemplo n.º 2
0
        public void RunInvitationReminders(ISession session, ManagedSecurityContext sec)
        {
            // fetch invitations that are older than a month
            IEnumerator<AccountInvitation> invitations = session.CreateQuery(
                string.Format("FROM AccountInvitation WHERE Modified < '{0}'", DateTime.UtcNow.AddMonths(-1).ToString(DateTimeFormatInfo.InvariantInfo)))
                .Enumerable<AccountInvitation>().GetEnumerator();

            while (invitations.MoveNext() && ! IsStopping)
            {
                AccountInvitation invitation = invitations.Current;

                if (invitation.Created == invitation.Modified)
                {
                    try
                    {
                        // this invitation was never resent
                        ManagedAccountInvitation mi = new ManagedAccountInvitation(session, invitation);
                        mi.Send();
                    }
                    catch (ThreadAbortException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        EventLogManager.WriteEntry(string.Format("Error sending an invitation reminder to {0} <{1}>: {2}",
                            invitation.Account.Id, invitation.Email, ex.Message), EventLogEntryType.Warning);
                    }
                    finally
                    {
                        invitation.Modified = DateTime.UtcNow;
                        session.Save(invitation);
                    }
                }
                else
                {
                    // delete an invitation that has not been responded to for over a month
                    session.Delete(invitation);
                }
            }
        }
Ejemplo n.º 3
0
        public void DeclineInvitation(int id, string code)
        {
            using (SnCore.Data.Hibernate.Session.OpenConnection())
            {
                ISession session = SnCore.Data.Hibernate.Session.Current;

                ManagedAccountInvitation invitation = new ManagedAccountInvitation(session, id);
                if (invitation.Code != code)
                {
                    throw new ManagedAccount.AccessDeniedException();
                }

                ManagedAccount recepient = new ManagedAccount(session, invitation.AccountId);
                ManagedSiteConnector.TrySendAccountEmailMessageUriAsAdmin(session, recepient,
                    string.Format("EmailAccountInvitationReject.aspx?id={0}", invitation.Id));

                invitation.Delete(ManagedAccount.GetAdminSecurityContext(session));
                SnCore.Data.Hibernate.Session.Flush();
            }
        }
Ejemplo n.º 4
0
        public int CreateAccountWithInvitation(int invitationid, string code, TransitAccount ta)
        {
            using (SnCore.Data.Hibernate.Session.OpenConnection())
            {
                ISession session = SnCore.Data.Hibernate.Session.Current;

                ManagedAccountInvitation invitation = new ManagedAccountInvitation(session, invitationid);
                if (invitation.Code != code)
                {
                    throw new ManagedAccount.AccessDeniedException();
                }

                ManagedAccount acct = new ManagedAccount(session);
                int id = acct.Create(invitation.Instance.Email, ta, true, ManagedAccount.GetAdminSecurityContext(session));

                // become friends with the person who invited you
                TransitAccountFriend t_friend = new TransitAccountFriend();
                AccountFriend friend = new AccountFriend();
                friend.Account = session.Load<Account>(invitation.AccountId);
                friend.Keen = session.Load<Account>(id);
                friend.Created = DateTime.UtcNow;
                session.Save(friend);
                SnCore.Data.Hibernate.Session.Flush();

                // notify that a friend has joined
                ManagedAccount recepient = new ManagedAccount(session, invitation.AccountId);
                ManagedSiteConnector.TrySendAccountEmailMessageUriAsAdmin(session, recepient,
                    string.Format("EmailAccountInvitationAccept.aspx?id={0}&aid={1}", invitation.Id, id));

                // if this is a group invitation, join the group
                if (invitation.Instance.AccountGroup != null)
                {
                    AccountGroupAccountInvitation groupInvitation = new AccountGroupAccountInvitation();
                    groupInvitation.Account = session.Load<Account>(id);
                    groupInvitation.AccountGroup = invitation.Instance.AccountGroup;
                    groupInvitation.Created = invitation.Instance.Created;
                    groupInvitation.Modified = invitation.Instance.Modified;
                    groupInvitation.Requester = session.Load<Account>(invitation.AccountId);
                    ManagedAccountGroupAccountInvitation mGroupInvitation = new ManagedAccountGroupAccountInvitation(
                        session, groupInvitation);
                    mGroupInvitation.JoinGroup(ManagedAccount.GetAdminSecurityContext(session), string.Empty);
                }

                invitation.Delete(ManagedAccount.GetAdminSecurityContext(session));

                SnCore.Data.Hibernate.Session.Flush();
                return acct.Id;
            }
        }