Ejemplo n.º 1
0
        public void UninstallPlugin(PluginAddress pluginAddress)
        {
            Plugin plugin = GetPlugin(pluginAddress);

            if (plugin != null)
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    repository.Remove(context.Site.ID, plugin.ID);

                    PluginContainer pluginContainer = pluginEngine.GetPlugins(p => p.Tag != null && p.Tag is Plugin && ((Plugin)p.Tag).ID == plugin.ID).FirstOrDefault();

                    if (!System.IO.File.Exists(context.HttpContext.Server.MapPath(pluginContainer.VirtualPath)))
                    {
                        pluginEngine.RemovePlugin(pluginContainer);
                    }

                    plugin.Container    = null;
                    pluginContainer.Tag = null;

                    pluginTemplateRegistry.Reload(pluginEngine);
                    context.Routes.Reload(modules, this, pluginEngine);
                    pluginStyleRegistry.Reload(pluginEngine);
                    pluginScriptRegistry.Reload(pluginEngine);

                    transaction.Complete();
                }
            }
        }
Ejemplo n.º 2
0
        public object ItemEditSave(PluginAddress pluginAddress, PluginEditInput pluginEditInput, bool isEditingCode)
        {
            if (isEditingCode && !string.IsNullOrEmpty(pluginEditInput.VirtualPath))
            {
                pluginEditInput.VirtualPath.SaveFileText(pluginEditInput.Code, HttpContext);

                pluginEngine.ReloadPlugin(p => p.Tag == null && !(p.Tag is Plugin) && string.Compare(p.VirtualPath, pluginEditInput.VirtualPath, true) == 0, p => pluginEditInput.VirtualPath);

                return(EditNotInstalled(new PluginNotInstalledAddress(pluginEditInput.VirtualPath)));
            }

            ModelResult <Plugin> results = null;
            Plugin plugin = pluginService.GetPlugin(pluginAddress);

            if (isEditingCode && !string.IsNullOrEmpty(pluginEditInput.Code) && pluginEditInput.Code != plugin.GetFileText())
            {
                results = pluginService.EditPlugin(pluginAddress, pluginEditInput, true);
            }
            else if (!isEditingCode)
            {
                results = pluginService.EditPlugin(pluginAddress, pluginEditInput, false);
            }

            if (results != null && !results.IsValid)
            {
                ViewData["ValidationState"] = results.ValidationState;
            }

            if (isEditingCode || ViewData.ContainsKey("ValidationState"))
            {
                return(ItemEdit(pluginAddress, pluginEditInput));
            }

            return(Redirect(Url.Plugin(plugin)));
        }
Ejemplo n.º 3
0
        public void SetPluginEnabled(PluginAddress pluginAddress, bool enabled)
        {
            Plugin plugin = GetPlugin(pluginAddress);

            if (plugin != null && plugin.Enabled != enabled)
            {
                using (TransactionScope transaction = new TransactionScope())
                {
                    repository.SetEnabled(context.Site.ID, plugin.ID, enabled);

                    plugin = GetPlugin(pluginAddress);

                    PluginContainer pluginContainer = pluginEngine.GetPlugins(p => p.Tag != null && p.Tag is Plugin && ((Plugin)p.Tag).ID == plugin.ID).FirstOrDefault();

                    plugin.Container    = pluginContainer;
                    pluginContainer.Tag = plugin;

                    pluginTemplateRegistry.Reload(pluginEngine);
                    context.Routes.Reload(modules, this, pluginEngine);
                    pluginStyleRegistry.Reload(pluginEngine);
                    pluginScriptRegistry.Reload(pluginEngine);

                    transaction.Complete();
                }
            }
        }
Ejemplo n.º 4
0
        public ActionResult Reload(PluginAddress pluginAddress)
        {
            Plugin plugin = pluginService.GetPlugin(pluginAddress);

            if (plugin == null)
            {
                return(null);
            }

            pluginService.ReloadPlugin(pluginAddress);

            return(Redirect(Url.Plugin(plugin)));
        }
Ejemplo n.º 5
0
        public OxiteViewModelItem <PluginEditInput> ItemEdit(PluginAddress pluginAddress, PluginEditInput pluginEditInput)
        {
            Plugin plugin = pluginService.GetPlugin(pluginAddress);

            if (plugin == null)
            {
                return(null);
            }

            OxiteViewModelItem <PluginEditInput> model = new OxiteViewModelItem <PluginEditInput>(pluginEditInput == null ? new PluginEditInput(plugin.GetFileText(), plugin.Enabled, plugin.ExtendedProperties) : new PluginEditInput(null, pluginEditInput.Code ?? plugin.GetFileText(), pluginEditInput.Enabled, pluginEditInput.PropertyValues));

            model.AddModelItem(pluginEngine.GetPlugin(plugin));

            return(model);
        }
Ejemplo n.º 6
0
        public ActionResult Uninstall(PluginAddress pluginAddress, DialogSelection dialogSelection)
        {
            if (dialogSelection != null && dialogSelection.Equals(DialogButton.Cancel))
            {
                return(new DialogSelectionResult(dialogSelection.ReturnUrl, true));
            }

            if (dialogSelection == null)
            {
                return(this.Dialog("Are you sure you want to uninstall this plugin?", DialogFormat.Question, DialogButton.Yes, new DialogButton("cancel", "No", true)));
            }

            pluginService.UninstallPlugin(pluginAddress);

            return(Redirect(dialogSelection.ReturnUrl));
        }
Ejemplo n.º 7
0
        public ActionResult SetEnabled(PluginAddress pluginAddress, bool enabled, string returnUrl, DialogSelection dialogSelection)
        {
            if (dialogSelection != null && dialogSelection.Equals(DialogButton.Cancel))
            {
                return(new DialogSelectionResult(dialogSelection.ReturnUrl, true));
            }

            Plugin plugin = pluginService.GetPlugin(pluginAddress);

            if (plugin == null)
            {
                return(null);
            }

            plugin.FillContainer(pluginEngine);

            if (dialogSelection == null && !plugin.Enabled && !plugin.Container.IsValid)
            {
                return(this.Dialog("You can not enable a plugin that does not have all its required settings filled in. What would you like to do next?", DialogFormat.Info, new DialogButton("yes", "Edit settings", true), new DialogButton("cancel", "Cancel", false)));
            }

            if (dialogSelection != null)
            {
                return new DialogSelectionResult(Url.PluginEdit(plugin))
                       {
                           IsClientRedirect = true
                       }
            }
            ;

            if (plugin.Container.IsValid || (!plugin.Container.IsValid && !enabled))
            {
                pluginService.SetPluginEnabled(pluginAddress, enabled);
            }

            return(Redirect(returnUrl));
        }
Ejemplo n.º 8
0
        public void ReloadPlugin(PluginAddress pluginAddress)
        {
            Plugin plugin = GetPlugin(pluginAddress);

            if (plugin != null)
            {
                PluginContainer pluginContainer = pluginEngine.ReloadPlugin(p => p.Tag != null && p.Tag is Plugin && ((Plugin)p.Tag).ID == plugin.ID, p => plugin.VirtualPath);

                if (pluginContainer.IsLoaded)
                {
                    plugin = repository.Save(plugin.ApplyProperties(pluginContainer.GetPropertiesUsingDefaultValues()));

                    pluginContainer.ApplyProperties(plugin.ExtendedProperties);
                }

                plugin.Container    = pluginContainer;
                pluginContainer.Tag = plugin;

                pluginTemplateRegistry.Reload(pluginEngine);
                context.Routes.Reload(modules, this, pluginEngine);
                pluginStyleRegistry.Reload(pluginEngine);
                pluginScriptRegistry.Reload(pluginEngine);
            }
        }
Ejemplo n.º 9
0
 public Plugin GetPlugin(PluginAddress pluginAddress)
 {
     return(repository.GetPlugin(context.Site.ID, pluginAddress.PluginID));
 }
Ejemplo n.º 10
0
        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));
        }