public ActionResult ExecuteUpdate() { if (User.Identity.IsAuthenticated && User.HasAccess("ADMIN")) { // Execute all incremental updates in a transaction. using (IDbTransaction tx = Database.OpenTransaction()) { for (int n = Data.Database.InstalledVersion + 1; n <= Data.Database.CurrentVersion; n++) { // Read embedded create script Stream str = Assembly.GetExecutingAssembly().GetManifestResourceStream(Database.ScriptRoot + ".Updates." + n.ToString() + ".sql"); String sql = new StreamReader(str).ReadToEnd(); str.Close(); // Split statements and execute string[] stmts = sql.Split(new char[] { ';' }); foreach (string stmt in stmts) { if (!String.IsNullOrEmpty(stmt.Trim())) { SysUser.Execute(stmt.Trim(), tx); } } // Check for update class var utype = Type.GetType("Piranha.Data.Updates.Update" + n.ToString()); if (utype != null) { IUpdate update = (IUpdate)Activator.CreateInstance(utype); update.Execute(tx); } } // Now lets update the database version. SysUser.Execute("UPDATE sysparam SET sysparam_value = @0 WHERE sysparam_name = 'SITE_VERSION'", tx, Data.Database.CurrentVersion); SysParam.InvalidateParam("SITE_VERSION"); tx.Commit(); } return(RedirectToAction("index", "account")); } else { return(RedirectToAction("update")); } }
public ActionResult Create(InstallModel m) { if (m.InstallType == "SCHEMA" || ModelState.IsValid) { // Read embedded create script Stream str = Assembly.GetExecutingAssembly().GetManifestResourceStream(Database.ScriptRoot + ".Create.sql"); String sql = new StreamReader(str).ReadToEnd(); str.Close(); // Read embedded data script str = Assembly.GetExecutingAssembly().GetManifestResourceStream(Database.ScriptRoot + ".Data.sql"); String data = new StreamReader(str).ReadToEnd(); str.Close(); // Split statements and execute string[] stmts = sql.Split(new char[] { ';' }); using (IDbTransaction tx = Database.OpenTransaction()) { // Create database from script foreach (string stmt in stmts) { if (!String.IsNullOrEmpty(stmt.Trim())) { SysUser.Execute(stmt, tx); } } tx.Commit(); } if (m.InstallType.ToUpper() == "FULL") { // Split statements and execute stmts = data.Split(new char[] { ';' }); using (IDbTransaction tx = Database.OpenTransaction()) { // Create user SysUser usr = new SysUser() { Login = m.UserLogin, Email = m.UserEmail, GroupId = new Guid("7c536b66-d292-4369-8f37-948b32229b83"), CreatedBy = new Guid("ca19d4e7-92f0-42f6-926a-68413bbdafbc"), UpdatedBy = new Guid("ca19d4e7-92f0-42f6-926a-68413bbdafbc"), Created = DateTime.Now, Updated = DateTime.Now }; usr.Save(tx); // Create user password SysUserPassword pwd = new SysUserPassword() { Id = usr.Id, Password = m.Password, IsNew = false }; pwd.Save(tx); // Create default data foreach (string stmt in stmts) { if (!String.IsNullOrEmpty(stmt.Trim())) { SysUser.Execute(stmt, tx); } } tx.Commit(); } } return(RedirectToAction("index", "account")); } return(Index()); }