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")); } }
/// <summary> /// Updates the global last modified date for the site. /// </summary> /// <param name="tx">Optional transaction</param> public static void SetSiteLastModified(IDbTransaction tx = null) { SysParam.Execute("UPDATE sysparam SET sysparam_value = @0 WHERE sysparam_name = @1", tx, DateTime.Now, "SITE_LAST_MODIFIED"); SysParam.InvalidateParam("SITE_LAST_MODIFIED"); }