public ActionResult EditNotInstalled(PluginNotInstalledAddress pluginNotInstalledAddress) { string code = pluginNotInstalledAddress.VirtualPath.GetFileText(HttpContext); OxiteViewModelItem <PluginEditInput> model = new OxiteViewModelItem <PluginEditInput>(new PluginEditInput(pluginNotInstalledAddress.VirtualPath, code, false, null)); model.AddModelItem(pluginEngine.GetPlugin(new Plugin(Guid.Empty, Guid.Empty, pluginNotInstalledAddress.VirtualPath, false))); return(View("ItemEdit", model)); }
public static PluginContainer FillContainer(this PluginContainer pluginContainer, IPluginEngine pluginEngine) { Plugin plugin = pluginContainer.Tag as Plugin; if (plugin != null) { plugin.Container = pluginEngine.GetPlugin(plugin); } return(pluginContainer); }
public static IEnumerable <PluginContainer> FillContainer(this IEnumerable <PluginContainer> pluginContainers, IPluginEngine pluginEngine) { foreach (PluginContainer pluginContainer in pluginContainers) { Plugin plugin = pluginContainer.Tag as Plugin; if (plugin != null) { plugin.Container = pluginEngine.GetPlugin(plugin); } } return(pluginContainers); }
public static void LoadFromPlugins(this RouteCollection routes, IPluginService pluginService, IPluginEngine pluginEngine) { foreach (Plugin plugin in pluginService.GetPlugins()) { if (plugin.Enabled) { PluginContainer pluginContainer = pluginEngine.GetPlugin(plugin); if (pluginContainer != null && pluginContainer.IsLoaded) { pluginContainer.RegisterRoutes(routes); } } } }
public void Unload() { IPluginEngine pluginEngine = container.Resolve <IPluginEngine>(); // unload plugins that are installed foreach (Plugin plugin in container.Resolve <IPluginService>().GetPlugins()) { PluginContainer pluginContainer = pluginEngine.GetPlugin(plugin); if (pluginContainer != null) { pluginContainer.Unload(); } } container.RegisterInstance(pluginEngine); }
public void Initialize() { ISiteService siteService = container.Resolve <ISiteService>(); IPluginEngine pluginEngine = container.Resolve <IPluginEngine>(); PluginTemplateRegistry pluginTemplateRegistry = container.Resolve <PluginTemplateRegistry>(); RouteCollection routes = container.Resolve <RouteCollection>(); PluginScriptRegistry pluginScriptRegistry = container.Resolve <PluginScriptRegistry>(); PluginStyleRegistry pluginStyleRegistry = container.Resolve <PluginStyleRegistry>(); pluginEngine.AutoInitializePlugins = false; // load dynamically compiled assemblies pluginEngine.LoadAssembliesFromCodeFiles("~" + siteService.GetSite().PluginsPath); // load plugins that are in assemblies pluginEngine.LoadPlugins(); // initialize plugins that are installed foreach (Plugin plugin in container.Resolve <IPluginService>().GetPlugins()) { PluginContainer pluginContainer = pluginEngine.GetPlugin(plugin); if (pluginContainer != null) { plugin.Container = pluginContainer; pluginContainer.Tag = plugin; if (pluginContainer.IsLoaded) { pluginContainer.ApplyProperties(plugin.ExtendedProperties); pluginContainer.Initialize(); if (plugin.Enabled) { pluginContainer.RegisterTemplates(pluginTemplateRegistry); pluginContainer.RegisterRoutes(routes); pluginContainer.RegisterScripts(pluginScriptRegistry); pluginContainer.RegisterStyles(pluginStyleRegistry); } } } else { if (!string.IsNullOrEmpty(plugin.VirtualPath)) { pluginContainer = new PluginContainer(new PluginAssemblyContainer(plugin.VirtualPath, (Assembly)null), new PluginFileNotFoundException(plugin.VirtualPath)); } if (pluginContainer != null) { plugin.Container = pluginContainer; pluginContainer.Tag = plugin; pluginEngine.AddPlugin(pluginContainer); } } } container.RegisterInstance(pluginStyleRegistry); container.RegisterInstance(pluginScriptRegistry); container.RegisterInstance(pluginTemplateRegistry); container.RegisterInstance(pluginEngine); }
public ModelResult <Plugin> EditPlugin(PluginAddress pluginAddress, PluginEditInput pluginEditInput, bool hasCodeChanges) { Plugin originalPlugin = GetPlugin(pluginAddress); bool enabled = originalPlugin.Enabled; bool newlyEnabled = false; Plugin newPlugin; PluginContainer pluginContainer; ValidationStateDictionary validationState; if (!hasCodeChanges) { validationState = validatePluginPropertyValues(originalPlugin.FillContainer(pluginEngine), pluginEditInput.PropertyValues); pluginContainer = pluginEngine.GetPlugin(originalPlugin); pluginContainer.IsValid = validationState.IsValid; newlyEnabled = !enabled && validationState.IsValid; newPlugin = originalPlugin.Apply(pluginEditInput, newlyEnabled ? (bool?)true : null); if (!validationState.IsValid) { return(new ModelResult <Plugin>(newPlugin, validationState)); } } else { validationState = new ValidationStateDictionary(); originalPlugin.SaveFileText(pluginEditInput.Code); pluginContainer = pluginEngine.ReloadPlugin(p => p.Tag != null && p.Tag is Plugin && ((Plugin)p.Tag).ID == originalPlugin.ID, p => originalPlugin.VirtualPath); if (pluginContainer.IsLoaded) { newPlugin = originalPlugin.ApplyNew(pluginEditInput, pluginContainer.GetProperties()); } else { newPlugin = originalPlugin.Apply(pluginEditInput, null); } } newPlugin = repository.Save(newPlugin); newPlugin.Container = pluginContainer; pluginContainer.Tag = newPlugin; if (!hasCodeChanges) { pluginContainer.ApplyProperties(newPlugin.ExtendedProperties); if (newlyEnabled) { pluginTemplateRegistry.Reload(pluginEngine); context.Routes.Reload(modules, this, pluginEngine); pluginStyleRegistry.Reload(pluginEngine); pluginScriptRegistry.Reload(pluginEngine); } else { pluginTemplateRegistry.UpdatePlugin(newPlugin); pluginStyleRegistry.UpdatePlugin(newPlugin); pluginScriptRegistry.UpdatePlugin(newPlugin); } } else { //TODO: (erikpo) Instead fire off a module event saying a plugin was edited and then Oxite.Blogs, Oxite.CMS and Oxite.Comments can subscribe to those events and invalidate cache by their type on their own. //if (pluginContainer.HasMethod("ProcessDisplayOfPost")) // cache.Invalidate<Post>(); //else if (pluginContainer.HasMethod("ProcessDisplayOfPage")) // cache.Invalidate<Page>(); //else if (pluginContainer.HasMethod("ProcessDisplayOfComment")) // cache.Invalidate<Comment>(); pluginTemplateRegistry.Reload(pluginEngine); context.Routes.Reload(modules, this, pluginEngine); pluginStyleRegistry.Reload(pluginEngine); pluginScriptRegistry.Reload(pluginEngine); } return(new ModelResult <Plugin>(newPlugin, validationState)); }
public static Plugin FillContainer(this Plugin plugin, IPluginEngine pluginEngine) { plugin.Container = pluginEngine.GetPlugin(plugin); return(plugin); }