Files
Disco/Disco.Web/Areas/Config/Controllers/PluginsController.cs
T
Gary Sharp 8f769809c2 Update: Plugin Updating
Updating plugins from the plugin catalogue, and automatic updating of
plugins after a newer version of Disco is installed.
2013-02-14 19:00:01 +11:00

95 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Disco.Models.BI.Interop.Community;
using Disco.Services.Plugins;
using Disco.Services.Tasks;
using Disco.Web.Areas.Config.Models.Plugins;
namespace Disco.Web.Areas.Config.Controllers
{
public partial class PluginsController : dbAdminController
{
[HttpGet]
public virtual ActionResult Index()
{
Models.Plugins.IndexViewModel vm = new Models.Plugins.IndexViewModel()
{
PluginManifests = Plugins.GetPlugins(),
Catalogue = Plugins.LoadCatalogue(dbContext)
};
return View(vm);
}
#region Plugin Configuration
[HttpPost]
public virtual ActionResult Configure(string PluginId, FormCollection form)
{
if (string.IsNullOrEmpty(PluginId))
return RedirectToAction(MVC.Config.Plugins.Index());
PluginManifest manifest = Plugins.GetPlugin(PluginId);
using (PluginConfigurationHandler configHandler = manifest.CreateConfigurationHandler())
{
if (configHandler.Post(dbContext, form, this))
{
dbContext.SaveChanges();
PluginsLog.LogPluginConfigurationSaved(manifest.Id, DiscoApplication.CurrentUser.Id);
return RedirectToAction(MVC.Config.Plugins.Index());
}
else
{
// Config Errors
PluginConfigurationViewModel vm = new PluginConfigurationViewModel(configHandler.Get(dbContext, this));
return View(Views.Configure, vm);
}
}
}
[HttpGet]
public virtual ActionResult Configure(string PluginId)
{
if (string.IsNullOrEmpty(PluginId))
return RedirectToAction(MVC.Config.Plugins.Index());
PluginManifest manifest = Plugins.GetPlugin(PluginId);
using (PluginConfigurationHandler configHandler = manifest.CreateConfigurationHandler())
{
PluginConfigurationViewModel vm = new PluginConfigurationViewModel(configHandler.Get(dbContext, this));
PluginsLog.LogPluginConfigurationLoaded(manifest.Id, DiscoApplication.CurrentUser.Id);
return View(Views.Configure, vm);
}
}
#endregion
public virtual ActionResult Install()
{
// Check for recent catalogue
var catalogue = Plugins.LoadCatalogue(dbContext);
if (catalogue == null || catalogue.ResponseTimestamp < DateTime.Now.AddHours(-1))
{
// Need to Update Catalogue (over 1 hour old)
return RedirectToAction(MVC.API.Plugin.UpdateLibraryCatalogue());
}
else
{
var model = new Models.Plugins.InstallModel()
{
Catalogue = catalogue
};
return View(model);
}
}
}
}