public Plugin InstallPlugin(PluginInstallInput pluginInstallInput, bool?overrideEnabled) { PluginContainer pluginContainer = null; if (!string.IsNullOrEmpty(pluginInstallInput.VirtualPath)) { pluginContainer = pluginEngine.GetPlugins(p => (p.Tag == null || !(p.Tag is Plugin)) && p.CompilationAssembly != null && string.Compare(p.VirtualPath, pluginInstallInput.VirtualPath, true) == 0).FirstOrDefault(); } if (pluginContainer == null) { throw new InvalidOperationException("Could not find plugin to install"); } ValidationStateDictionary validationState = ValidatePlugin(pluginContainer); Plugin plugin = repository.Save(new Plugin(context.Site.ID, pluginInstallInput.VirtualPath, validationState.IsValid && overrideEnabled.HasValue ? overrideEnabled.Value : validationState.IsValid, pluginContainer.GetPropertiesUsingDefaultValues())); plugin.Container = pluginContainer; pluginContainer.Tag = plugin; pluginContainer.IsValid = validationState.IsValid; pluginTemplateRegistry.Reload(pluginEngine); context.Routes.Reload(modules, this, pluginEngine); pluginStyleRegistry.Reload(pluginEngine); pluginScriptRegistry.Reload(pluginEngine); return(plugin); }
public ActionResult Install(PluginInstallInput pluginInstallInput, DialogSelection dialogSelection) { if (dialogSelection != null && dialogSelection.Equals(DialogButton.Cancel)) { return(new DialogSelectionResult(dialogSelection.ReturnUrl, true)); } PluginContainer pluginContainer = pluginEngine.LoadPlugin(pluginInstallInput.VirtualPath); if (pluginContainer == null) { return(null); } ValidationStateDictionary validationState = pluginService.ValidatePlugin(pluginContainer); if (dialogSelection == null) { if (validationState.IsValid) { return(this.Dialog("What would you like to do next?", DialogFormat.Question, new DialogButton("no", "Enable this plugin", true), new DialogButton("yes", "Edit plugin settings", true), new DialogButton("cancel", "Cancel install", false))); } return(this.Dialog("This plugin requires you to fill in some required settings before it can be enabled. Would you like to do that now?", DialogFormat.Question, DialogButton.Yes, new DialogButton("no", "No", true), DialogButton.Cancel)); } bool?overrideEnabled = validationState.IsValid ? (bool?)(dialogSelection.Equals(DialogButton.No) /* to editing settings */ ? true : false) : null; Plugin plugin = pluginService.InstallPlugin(pluginInstallInput, overrideEnabled); if (dialogSelection.Equals(DialogButton.Yes)) /* to editing settings */ { return new DialogSelectionResult(Url.PluginEdit(plugin)) { IsClientRedirect = true } } ; return(Redirect(dialogSelection.ReturnUrl)); }