Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
                    }
                }
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
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));
        }
        public static Plugin FillContainer(this Plugin plugin, IPluginEngine pluginEngine)
        {
            plugin.Container = pluginEngine.GetPlugin(plugin);

            return(plugin);
        }