protected override void Seed(Rock.Data.RockContext context) { // Previous to Rock v4.0 the saved routing|account numbers in the PersonBankAccount table may have included // leading or trailing spaces for the routing number and/or account number. v4.0 trims these leading/trailing // spaces before looking for and saving the routing|account numbers. Because of this, any existing saved // values need to be updated so they don't include any spaces. This can probably be removed in a future update // after v4.0 -DT var txnService = new Rock.Model.FinancialTransactionService(context); var personBankAcctService = new Rock.Model.FinancialPersonBankAccountService(context); foreach (string encryptedMicr in txnService .Queryable() .Where(t => t.CheckMicrParts != null && t.CheckMicrParts != "") .Select(t => t.CheckMicrParts) .Distinct()) { if (!string.IsNullOrWhiteSpace(encryptedMicr)) { string clearMicr = Rock.Security.Encryption.DecryptString(encryptedMicr) ?? string.Empty; var parts = clearMicr.Split('_'); if (parts.Length >= 2 && (parts[0] != parts[0].Trim() || parts[1] != parts[1].Trim())) { string oldHash = Rock.Security.Encryption.GetSHA1Hash(string.Format("{0}|{1}", parts[0], parts[1])); string newHash = Rock.Security.Encryption.GetSHA1Hash(string.Format("{0}|{1}", parts[0].Trim(), parts[1].Trim())); foreach (var match in personBankAcctService.Queryable().Where(a => a.AccountNumberSecured == oldHash)) { match.AccountNumberSecured = newHash; } context.SaveChanges(); } } } // Previous to Rock v4.0 the PageViews didn't store Browser or OS info. This can probably be removed in a future update // after v4.0 -DT var pageViewRockContext = new Rock.Data.RockContext(); var pageViewUserAgentService = new Rock.Model.PageViewUserAgentService(pageViewRockContext); var qryPageViewUserAgent = pageViewUserAgentService.Queryable().Where(a => a.Browser == null || a.OperatingSystem == null || a.ClientType == null); foreach (var pageViewUserAgent in qryPageViewUserAgent.Where(a => a.UserAgent != null)) { try { UAParser.Parser uaParser = UAParser.Parser.GetDefault(); UAParser.ClientInfo client = uaParser.Parse(pageViewUserAgent.UserAgent); pageViewUserAgent.ClientType = Rock.Model.PageViewUserAgent.GetClientType(pageViewUserAgent.UserAgent); pageViewUserAgent.OperatingSystem = client.OS.ToString(); pageViewUserAgent.Browser = client.UserAgent.ToString(); } catch { // shouldn't happen, but skip if unable to parse } } pageViewRockContext.SaveChanges(true); }