Update: Plugin Updating
Updating plugins from the plugin catalogue, and automatic updating of plugins after a newer version of Disco is installed.
This commit is contained in:
@@ -1,89 +1,106 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Disco.Data.Repository;
|
||||
|
||||
namespace Disco.Web
|
||||
{
|
||||
public static class AppConfig
|
||||
{
|
||||
public static bool InitializeDatabase()
|
||||
{
|
||||
// Modified Connection Factory
|
||||
System.Data.Entity.Database.DefaultConnectionFactory = new DiscoDatabaseConnectionFactory(System.Data.Entity.Database.DefaultConnectionFactory);
|
||||
|
||||
if (Disco.Data.Repository.DiscoDatabaseConnectionFactory.DiscoDataContextConnectionString == null)
|
||||
{
|
||||
// Database Connection String not configured - Trigger 'Install'
|
||||
return false;
|
||||
}
|
||||
|
||||
// Migrate Database
|
||||
Disco.Data.Migrations.DiscoDataMigrator.MigrateLatest(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void InitalizeEnvironment()
|
||||
{
|
||||
using (var dbContext = new DiscoDataContext())
|
||||
{
|
||||
// Initialize Logging
|
||||
Disco.Services.Logging.LogContext.Initalize(dbContext, DiscoApplication.SchedulerFactory);
|
||||
|
||||
// Load Organisation Name
|
||||
DiscoApplication.OrganisationName = dbContext.DiscoConfiguration.OrganisationName;
|
||||
DiscoApplication.MultiSiteMode = dbContext.DiscoConfiguration.MultiSiteMode;
|
||||
|
||||
// Setup Global Proxy
|
||||
DiscoApplication.SetGlobalProxy(dbContext.DiscoConfiguration.ProxyAddress,
|
||||
dbContext.DiscoConfiguration.ProxyPort,
|
||||
dbContext.DiscoConfiguration.ProxyUsername,
|
||||
dbContext.DiscoConfiguration.ProxyPassword);
|
||||
|
||||
// Initialize Expressions
|
||||
BI.Expressions.Expression.InitializeExpressions();
|
||||
|
||||
// Initialize Warranty Providers Plugins
|
||||
Disco.Services.Plugins.Plugins.InitalizePlugins(dbContext);
|
||||
|
||||
// Initialize Scheduled Tasks
|
||||
Disco.Services.Tasks.ScheduledTasks.InitalizeScheduledTasks(dbContext, DiscoApplication.SchedulerFactory);
|
||||
|
||||
// Schedule Immediate Check for Update (if a new version was installed, never updated, last updated over 2 days ago)
|
||||
var currentVersion = Disco.BI.Interop.Community.UpdateCheck.CurrentDiscoVersion();
|
||||
if (dbContext.DiscoConfiguration.InstalledDatabaseVersion == null ||
|
||||
dbContext.DiscoConfiguration.InstalledDatabaseVersion != currentVersion ||
|
||||
dbContext.DiscoConfiguration.UpdateLastCheck == null ||
|
||||
dbContext.DiscoConfiguration.UpdateLastCheck.ResponseTimestamp < DateTime.Now.AddDays(-2))
|
||||
{
|
||||
Disco.BI.Interop.Community.UpdateCheckTask.ScheduleNow();
|
||||
dbContext.DiscoConfiguration.InstalledDatabaseVersion = currentVersion;
|
||||
dbContext.SaveChanges();
|
||||
}
|
||||
|
||||
// Setup Attachment Monitor
|
||||
DiscoApplication.DocumentDropBoxMonitor = new BI.DocumentTemplateBI.Importer.DocumentDropBoxMonitor(dbContext, DiscoApplication.SchedulerFactory, HttpContext.Current.Cache);
|
||||
}
|
||||
DiscoApplication.DocumentDropBoxMonitor.StartWatching();
|
||||
DiscoApplication.DocumentDropBoxMonitor.ScheduleCurrentFiles(10);
|
||||
}
|
||||
|
||||
public static void DisposeEnvironment()
|
||||
{
|
||||
if (DiscoApplication.DocumentDropBoxMonitor != null)
|
||||
DiscoApplication.DocumentDropBoxMonitor.Dispose();
|
||||
|
||||
if (DiscoApplication.SchedulerFactory != null)
|
||||
{
|
||||
foreach (var item in DiscoApplication.SchedulerFactory.AllSchedulers.ToArray())
|
||||
{
|
||||
item.Shutdown(false);
|
||||
}
|
||||
}
|
||||
|
||||
Disco.Services.Logging.SystemLog.LogUninitialized();
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Disco.Data.Repository;
|
||||
|
||||
namespace Disco.Web
|
||||
{
|
||||
public static class AppConfig
|
||||
{
|
||||
public static bool InitializeDatabase()
|
||||
{
|
||||
// Modified Connection Factory
|
||||
System.Data.Entity.Database.DefaultConnectionFactory = new DiscoDatabaseConnectionFactory(System.Data.Entity.Database.DefaultConnectionFactory);
|
||||
|
||||
if (Disco.Data.Repository.DiscoDatabaseConnectionFactory.DiscoDataContextConnectionString == null)
|
||||
{
|
||||
// Database Connection String not configured - Trigger 'Install'
|
||||
return false;
|
||||
}
|
||||
|
||||
// Migrate Database
|
||||
Disco.Data.Migrations.DiscoDataMigrator.MigrateLatest(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void InitalizeEnvironment()
|
||||
{
|
||||
using (var dbContext = new DiscoDataContext())
|
||||
{
|
||||
// Initialize Logging
|
||||
Disco.Services.Logging.LogContext.Initalize(dbContext, DiscoApplication.SchedulerFactory);
|
||||
|
||||
// Load Organisation Name
|
||||
DiscoApplication.OrganisationName = dbContext.DiscoConfiguration.OrganisationName;
|
||||
DiscoApplication.MultiSiteMode = dbContext.DiscoConfiguration.MultiSiteMode;
|
||||
|
||||
// Setup Global Proxy
|
||||
DiscoApplication.SetGlobalProxy(dbContext.DiscoConfiguration.ProxyAddress,
|
||||
dbContext.DiscoConfiguration.ProxyPort,
|
||||
dbContext.DiscoConfiguration.ProxyUsername,
|
||||
dbContext.DiscoConfiguration.ProxyPassword);
|
||||
|
||||
// Initialize Expressions
|
||||
BI.Expressions.Expression.InitializeExpressions();
|
||||
|
||||
// Initialize Warranty Providers Plugins
|
||||
Disco.Services.Plugins.Plugins.InitalizePlugins(dbContext);
|
||||
|
||||
// Initialize Scheduled Tasks
|
||||
Disco.Services.Tasks.ScheduledTasks.InitalizeScheduledTasks(dbContext, DiscoApplication.SchedulerFactory, true);
|
||||
|
||||
// Schedule Immediate Check for Update (if never updated, or last updated over 2 days ago)
|
||||
if (dbContext.DiscoConfiguration.UpdateLastCheck == null ||
|
||||
dbContext.DiscoConfiguration.UpdateLastCheck.ResponseTimestamp < DateTime.Now.AddDays(-2))
|
||||
{
|
||||
Disco.BI.Interop.Community.UpdateCheckTask.ScheduleNow();
|
||||
}
|
||||
|
||||
// Setup Attachment Monitor
|
||||
DiscoApplication.DocumentDropBoxMonitor = new BI.DocumentTemplateBI.Importer.DocumentDropBoxMonitor(dbContext, DiscoApplication.SchedulerFactory, HttpContext.Current.Cache);
|
||||
}
|
||||
DiscoApplication.DocumentDropBoxMonitor.StartWatching();
|
||||
DiscoApplication.DocumentDropBoxMonitor.ScheduleCurrentFiles(10);
|
||||
}
|
||||
|
||||
public static void InitializeUpdateEnvironment()
|
||||
{
|
||||
using (var dbContext = new DiscoDataContext())
|
||||
{
|
||||
// Initialize Logging
|
||||
Disco.Services.Logging.LogContext.Initalize(dbContext, DiscoApplication.SchedulerFactory);
|
||||
|
||||
// Load Organisation Name
|
||||
DiscoApplication.OrganisationName = dbContext.DiscoConfiguration.OrganisationName;
|
||||
DiscoApplication.MultiSiteMode = dbContext.DiscoConfiguration.MultiSiteMode;
|
||||
|
||||
// Setup Global Proxy
|
||||
DiscoApplication.SetGlobalProxy(dbContext.DiscoConfiguration.ProxyAddress,
|
||||
dbContext.DiscoConfiguration.ProxyPort,
|
||||
dbContext.DiscoConfiguration.ProxyUsername,
|
||||
dbContext.DiscoConfiguration.ProxyPassword);
|
||||
|
||||
// Initialize Scheduled Tasks
|
||||
Disco.Services.Tasks.ScheduledTasks.InitalizeScheduledTasks(dbContext, DiscoApplication.SchedulerFactory, true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void DisposeEnvironment()
|
||||
{
|
||||
if (DiscoApplication.DocumentDropBoxMonitor != null)
|
||||
DiscoApplication.DocumentDropBoxMonitor.Dispose();
|
||||
|
||||
if (DiscoApplication.SchedulerFactory != null)
|
||||
{
|
||||
foreach (var item in DiscoApplication.SchedulerFactory.AllSchedulers.ToArray())
|
||||
{
|
||||
item.Shutdown(false);
|
||||
}
|
||||
}
|
||||
|
||||
Disco.Services.Logging.SystemLog.LogUninitialized();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,72 +1,83 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
|
||||
namespace Disco.Web
|
||||
{
|
||||
public class RouteConfig
|
||||
{
|
||||
public static void RegisterInstallRoutes(RouteCollection routes)
|
||||
{
|
||||
// Install Route
|
||||
routes.MapRoute(
|
||||
name: "InitialConfig", // Route name
|
||||
url: "{controller}/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "InitialConfig", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
}
|
||||
|
||||
public static void RegisterRoutes(RouteCollection routes)
|
||||
{
|
||||
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
|
||||
|
||||
// Device Route
|
||||
routes.MapRoute(
|
||||
name: "Device", // Route name
|
||||
url: "Device/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "Device", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
// Search Route
|
||||
routes.MapRoute(
|
||||
name: "SearchQuery",
|
||||
url: "Search/Query/{SearchQuery}",
|
||||
defaults: new { controller = "Search", action = "Query", SearchQuery = UrlParameter.Optional }
|
||||
);
|
||||
// User Route
|
||||
routes.MapRoute(
|
||||
name: "User", // Route name
|
||||
url: "User/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "User", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
|
||||
// Plugin Resources Route
|
||||
routes.MapRoute(
|
||||
name: "Plugin_Resources", // Route name
|
||||
url: "Plugin/{PluginId}/Resources/{*res}", // URL with parameters
|
||||
defaults: new { controller = "PluginWebHandler", action = "Resource" }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
// Plugin Route
|
||||
routes.MapRoute(
|
||||
name: "Plugin", // Route name
|
||||
url: "Plugin/{PluginId}/{PluginAction}", // URL with parameters
|
||||
defaults: new { controller = "PluginWebHandler", action = "Index" }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
|
||||
// Job Route
|
||||
routes.MapRoute(
|
||||
name: "Job", // Route name
|
||||
url: "{controller}/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "Job", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
|
||||
namespace Disco.Web
|
||||
{
|
||||
public class RouteConfig
|
||||
{
|
||||
public static void RegisterInstallRoutes(RouteCollection routes)
|
||||
{
|
||||
// Install Route
|
||||
routes.MapRoute(
|
||||
name: "InitialConfig", // Route name
|
||||
url: "{controller}/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "InitialConfig", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
}
|
||||
|
||||
public static void RegisterRoutes(RouteCollection routes)
|
||||
{
|
||||
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
|
||||
|
||||
// Device Route
|
||||
routes.MapRoute(
|
||||
name: "Device", // Route name
|
||||
url: "Device/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "Device", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
// Search Route
|
||||
routes.MapRoute(
|
||||
name: "SearchQuery",
|
||||
url: "Search/Query/{SearchQuery}",
|
||||
defaults: new { controller = "Search", action = "Query", SearchQuery = UrlParameter.Optional }
|
||||
);
|
||||
// User Route
|
||||
routes.MapRoute(
|
||||
name: "User", // Route name
|
||||
url: "User/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "User", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
|
||||
// Plugin Resources Route
|
||||
routes.MapRoute(
|
||||
name: "Plugin_Resources", // Route name
|
||||
url: "Plugin/{PluginId}/Resources/{*res}", // URL with parameters
|
||||
defaults: new { controller = "PluginWebHandler", action = "Resource" }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
// Plugin Route
|
||||
routes.MapRoute(
|
||||
name: "Plugin", // Route name
|
||||
url: "Plugin/{PluginId}/{PluginAction}", // URL with parameters
|
||||
defaults: new { controller = "PluginWebHandler", action = "Index" }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
|
||||
// Job Route
|
||||
routes.MapRoute(
|
||||
name: "Job", // Route name
|
||||
url: "{controller}/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "Job", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
}
|
||||
|
||||
public static void RegisterUpdateRoutes(RouteCollection routes)
|
||||
{
|
||||
// Update Route
|
||||
routes.MapRoute(
|
||||
name: "Update", // Route name
|
||||
url: "{controller}/{action}/{id}", // URL with parameters
|
||||
defaults: new { controller = "Update", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
|
||||
namespaces: new string[] { "Disco.Web.Controllers" } // Controllers Namespace Only
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user