Beispiel #1
0
        public static UserEmail Create(Core core, User owner, string email, EmailAddressTypes type, bool isRegistration)
        {
            if (core == null)
            {
                throw new NullCoreException();
            }

            if (!User.CheckEmailValid(email))
            {
                throw new EmailInvalidException();
            }

            if (!User.CheckEmailUnique(core, email))
            {
                throw new EmailAlreadyRegisteredException();
            }

            string activateKey = User.GenerateActivationSecurityToken();

            InsertQuery iquery = new InsertQuery(UserEmail.GetTable(typeof(UserEmail)));
            iquery.AddField("email_user_id", owner.Id);
            iquery.AddField("email_email", email);
            iquery.AddField("email_type", (byte)type);
            if (!isRegistration)
            {
                iquery.AddField("email_verified", false);
            }
            else
            {
                iquery.AddField("email_verified", true);
            }
            iquery.AddField("email_time_ut", UnixTime.UnixTimeStamp());
            iquery.AddField("email_activate_code", activateKey);
            iquery.AddField("email_simple_permissions", true);

            long emailId = core.Db.Query(iquery);

            if (!isRegistration)
            {
                string activateUri = string.Format(core.Hyperlink.Uri + "register/?mode=activate-email&id={0}&key={1}",
                    emailId, activateKey);

                Template emailTemplate = new Template(core.Http.TemplateEmailPath, "email_activation.html");

                emailTemplate.Parse("TO_NAME", owner.DisplayName);
                emailTemplate.Parse("U_ACTIVATE", activateUri);
                emailTemplate.Parse("USERNAME", owner.UserName);

                core.Email.SendEmail(email, core.Settings.SiteTitle + " email activation", emailTemplate);
            }

            UserEmail newEmail = new UserEmail(core, emailId);

            Access.CreateGrantForPrimitive(core, newEmail, User.GetCreatorKey(core), "VIEW");
            if (!isRegistration)
            {
                Access.CreateGrantForPrimitive(core, newEmail, Friend.GetFriendsGroupKey(core), "VIEW");
            }
            Access.CreateGrantForPrimitive(core, newEmail, User.GetEveryoneGroupKey(core), "RECIEVE_FROM");

            return newEmail;
        }
Beispiel #2
0
 public static UserEmail Create(Core core, string email, EmailAddressTypes type)
 {
     return Create(core, core.Session.LoggedInMember, email, type, false);
 }