public AdminController( IEnumerable<IExtensionDisplayEventHandler> extensionDisplayEventHandlers, IOrchardServices services, IModuleService moduleService, IDataMigrationManager dataMigrationManager, IReportsCoordinator reportsCoordinator, IExtensionManager extensionManager, IFeatureManager featureManager, IRecipeHarvester recipeHarvester, IRecipeManager recipeManager, ShellDescriptor shellDescriptor, ShellSettings shellSettings, IShapeFactory shapeFactory) { Services = services; _extensionDisplayEventHandler = extensionDisplayEventHandlers.FirstOrDefault(); _moduleService = moduleService; _dataMigrationManager = dataMigrationManager; _reportsCoordinator = reportsCoordinator; _extensionManager = extensionManager; _featureManager = featureManager; _recipeHarvester = recipeHarvester; _recipeManager = recipeManager; _shellDescriptor = shellDescriptor; _shellSettings = shellSettings; Shape = shapeFactory; T = NullLocalizer.Instance; Logger = NullLogger.Instance; }
void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor, string tenant) { // deduce and apply state changes involved var shellState = _stateManager.GetShellState(); foreach (var feature in descriptor.Features) { var featureName = feature.Name; var featureState = shellState.Features.SingleOrDefault(f => f.Name == featureName); if (featureState == null) { featureState = new ShellFeatureState { Name = featureName }; shellState.Features = shellState.Features.Concat(new[] { featureState }); } if (!featureState.IsInstalled) { _stateManager.UpdateInstalledState(featureState, ShellFeatureState.State.Rising); } if (!featureState.IsEnabled) { _stateManager.UpdateEnabledState(featureState, ShellFeatureState.State.Rising); } } foreach (var featureState in shellState.Features) { var featureName = featureState.Name; if (descriptor.Features.Any(f => f.Name == featureName)) { continue; } if (!featureState.IsDisabled) { _stateManager.UpdateEnabledState(featureState, ShellFeatureState.State.Falling); } } FireApplyChangesIfNeeded(); }
public void Store(string name, ShellDescriptor descriptor) { if (Disabled) { return; } lock (_synLock) { VerifyCacheFile(); var text = _appDataFolder.ReadFile(DescriptorCacheFileName); bool tenantCacheUpdated = false; var saveWriter = new StringWriter(); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(text); XmlNode rootNode = xmlDocument.DocumentElement; if (rootNode != null) { foreach (XmlNode tenantNode in rootNode.ChildNodes) { if (String.Equals(tenantNode.Name, name, StringComparison.OrdinalIgnoreCase)) { tenantNode.InnerText = GetCacheTextForShellDescriptor(descriptor); tenantCacheUpdated = true; break; } } if (!tenantCacheUpdated) { XmlElement newTenant = xmlDocument.CreateElement(name); newTenant.InnerText = GetCacheTextForShellDescriptor(descriptor); rootNode.AppendChild(newTenant); } } xmlDocument.Save(saveWriter); _appDataFolder.CreateFile(DescriptorCacheFileName, saveWriter.ToString()); } }
public FeatureCommands(IModuleService moduleService, INotifier notifier, IFeatureManager featureManager, ShellDescriptor shellDescriptor) { _moduleService = moduleService; _notifier = notifier; _featureManager = featureManager; _shellDescriptor = shellDescriptor; }
public AdminController( IEnumerable<IExtensionDisplayEventHandler> extensionDisplayEventHandlers, IOrchardServices services, IDataMigrationManager dataMigraitonManager, IFeatureManager featureManager, ISiteThemeService siteThemeService, IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IPreviewTheme previewTheme, IThemeService themeService, IReportsCoordinator reportsCoordinator) { Services = services; _extensionDisplayEventHandler = extensionDisplayEventHandlers.FirstOrDefault(); _dataMigrationManager = dataMigraitonManager; _siteThemeService = siteThemeService; _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; _featureManager = featureManager; _previewTheme = previewTheme; _themeService = themeService; _reportsCoordinator = reportsCoordinator; T = NullLocalizer.Instance; Logger = NullLogger.Instance; }
public ShapePlacementParsingStrategy( IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IPlacementFileParser placementFileParser) { _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; _placementFileParser = placementFileParser; }
public ThemeCommands(IDataMigrationManager dataMigrationManager, ISiteThemeService siteThemeService, IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IThemeService themeService) { _dataMigrationManager = dataMigrationManager; _siteThemeService = siteThemeService; _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; _themeService = themeService; }
public ShapePlacementParsingStrategy( IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IPlacementFileParser placementFileParser, IEnumerable<IPlacementPredicateProvider> predicateBuilders, IPlacementAlterationProvider alterationBuilder) { _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; _placementFileParser = placementFileParser; _predicateBuilders = predicateBuilders; _alterationBuilder = alterationBuilder; }
string IProcessingEngine.AddTask(ShellSettings shellSettings, ShellDescriptor shellDescriptor, string messageName, Dictionary<string, object> parameters) { _addedTasks.Add(new ProcessingEngineTask { ShellSettings = shellSettings, ShellDescriptor = shellDescriptor, MessageName = messageName, Parameters = parameters }); // As in DefaultProcessingEngine. return Guid.NewGuid().ToString("n"); }
public ThemeAwareViewEngine( WorkContext workContext, IEnumerable<IViewEngineProvider> viewEngineProviders, IConfiguredEnginesCache configuredEnginesCache, IExtensionManager extensionManager, ShellDescriptor shellDescriptor) { _workContext = workContext; _viewEngineProviders = viewEngineProviders; _configuredEnginesCache = configuredEnginesCache; _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; Logger = NullLogger.Instance; }
public AdminController( IOrchardServices orchardServices, ISettingsService settingsService, IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IEnumerable<IThemeSelectionRule> rules) { Services = orchardServices; _settingsService = settingsService; _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; _rules = rules; T = NullLocalizer.Instance; }
public AdminController( IEnumerable<Orchard.Modules.Events.IExtensionDisplayEventHandler> extensionDisplayEventHandlers, IOrchardServices services, IModuleService moduleService, IDataMigrationManager dataMigrationManager, IReportsCoordinator reportsCoordinator, IExtensionManager extensionManager, IFeatureManager featureManager, IRecipeHarvester recipeHarvester, IRecipeManager recipeManager, ShellDescriptor shellDescriptor, ShellSettings shellSettings, IShapeFactory shapeFactory, IPackageService packageService, IMimeTypeProvider mimeTypeProvider, ISiteThemeService siteThemeService, IThemeService themeService) { Services = services; _extensionDisplayEventHandler = extensionDisplayEventHandlers.FirstOrDefault(); _moduleService = moduleService; _dataMigrationManager = dataMigrationManager; _reportsCoordinator = reportsCoordinator; _extensionManager = extensionManager; _featureManager = featureManager; _recipeHarvester = recipeHarvester; _recipeManager = recipeManager; _shellDescriptor = shellDescriptor; _shellSettings = shellSettings; Shape = shapeFactory; _packageService = packageService; _mimeTypeProvider = mimeTypeProvider; _siteThemeService = siteThemeService; _themeService = themeService; T = NullLocalizer.Instance; Logger = NullLogger.Instance; _tempPackageStoragePath = new Lazy<string>(() => { var path = HostingEnvironment.MapPath("~/App_Data/Packages"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } return path; }); }
public ShellDescriptor GetShellDescriptor() { var shellDescriptor = ShellDescriptor; if (shellDescriptor == null) { var defaultShellDescriptor = _defaultTransientShellDescriptorProvider.GetDefaultShellDescriptor(); if (defaultShellDescriptor != null) { shellDescriptor = ShellDescriptor = defaultShellDescriptor; } } return shellDescriptor; }
public ShellContext CreateDescribedContext(ShellSettings settings, ShellDescriptor shellDescriptor) { Logger.Debug("Creating described context for tenant {0}", settings.Name); var blueprint = _compositionStrategy.Compose(settings, shellDescriptor); var shellScope = _shellContainerFactory.CreateContainer(settings, blueprint); return new ShellContext { Settings = settings, Descriptor = shellDescriptor, Blueprint = blueprint, LifetimeScope = shellScope, Shell = shellScope.Resolve<IOrchardShell>() }; }
public string AddTask(ShellSettings shellSettings, ShellDescriptor shellDescriptor, string eventName, Dictionary<string, object> parameters) { var entry = new Entry { ShellSettings = shellSettings, ShellDescriptor = shellDescriptor, MessageName = eventName, EventData = parameters, TaskId = Guid.NewGuid().ToString("n"), ProcessId = Guid.NewGuid().ToString("n"), }; Logger.Information("Adding event {0} to process {1} for shell {2}", eventName, entry.ProcessId, shellSettings.Name); _entries.GetState().Add(entry); return entry.ProcessId; }
public void NormalExecutionReturnsExpectedObjects() { var settings = new ShellSettings { Name = ShellSettings.DefaultName }; var descriptor = new ShellDescriptor { SerialNumber = 6655321 }; var blueprint = new ShellBlueprint(); var shellLifetimeScope = _container.BeginLifetimeScope("shell"); var httpContext = new StubHttpContext(); _container.Mock<IShellDescriptorCache>() .Setup(x => x.Fetch(ShellSettings.DefaultName)) .Returns(descriptor); _container.Mock<ICompositionStrategy>() .Setup(x => x.Compose(settings, descriptor)) .Returns(blueprint); _container.Mock<IShellContainerFactory>() .Setup(x => x.CreateContainer(settings, blueprint)) .Returns(shellLifetimeScope); _container.Mock<IShellDescriptorManager>() .Setup(x => x.GetShellDescriptor()) .Returns(descriptor); _container.Mock<IWorkContextEvents>() .Setup(x => x.Started()); _container.Mock<IHttpContextAccessor>() .Setup(x => x.Current()) .Returns(httpContext); _container.Mock<IHttpContextAccessor>() .Setup(x => x.CreateContext(It.IsAny<ILifetimeScope>())) .Returns(httpContext); var factory = _container.Resolve<IShellContextFactory>(); var context = factory.CreateShellContext(settings); Assert.That(context.Settings, Is.SameAs(settings)); Assert.That(context.Descriptor, Is.SameAs(descriptor)); Assert.That(context.Blueprint, Is.SameAs(blueprint)); Assert.That(context.LifetimeScope, Is.SameAs(shellLifetimeScope)); Assert.That(context.Shell, Is.SameAs(shellLifetimeScope.Resolve<IOrchardShell>())); }
public DeviceGroupService( IContentManager contentManager, ISignals signals, ICacheManager cacheManager, IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IRuleManager ruleManager, INotifier notifier ) { _contentManager = contentManager; _signals = signals; _cacheManager = cacheManager; _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; _ruleManager = ruleManager; _notifier = notifier; T = NullLocalizer.Instance; }
private void FireApplyChangesIfNeeded() { var shellState = _stateManager.GetShellState(); if (shellState.Features.Any(FeatureIsChanging)) { var descriptor = new ShellDescriptor { Features = shellState.Features .Where(FeatureShouldBeLoadedForStateChangeNotifications) .Select(x => new ShellFeature { Name = x.Name }) .ToArray() }; Logger.Information("Adding pending task 'ApplyChanges' for shell '{0}'", _settings.Name); _processingEngine.AddTask( _settings, descriptor, "IShellStateManagerEventHandler.ApplyChanges", new Dictionary<string, object>()); } }
public ShapeTemplateBindingStrategy( IEnumerable<IShapeTemplateHarvester> harvesters, ShellDescriptor shellDescriptor, IExtensionManager extensionManager, ICacheManager cacheManager, IVirtualPathMonitor virtualPathMonitor, IVirtualPathProvider virtualPathProvider, IEnumerable<IShapeTemplateViewEngine> shapeTemplateViewEngines, IParallelCacheContext parallelCacheContext) { _harvesters = harvesters; _shellDescriptor = shellDescriptor; _extensionManager = extensionManager; _cacheManager = cacheManager; _virtualPathMonitor = virtualPathMonitor; _virtualPathProvider = virtualPathProvider; _shapeTemplateViewEngines = shapeTemplateViewEngines; _parallelCacheContext = parallelCacheContext; Logger = NullLogger.Instance; }
private static ShellDescriptor GetShellDescriptorFromRecord(ShellDescriptorRecord shellDescriptorRecord) { ShellDescriptor descriptor = new ShellDescriptor { SerialNumber = shellDescriptorRecord.SerialNumber }; var descriptorFeatures = new List<ShellFeature>(); foreach (var descriptorFeatureRecord in shellDescriptorRecord.Features) { descriptorFeatures.Add(new ShellFeature { Name = descriptorFeatureRecord.Name }); } descriptor.Features = descriptorFeatures; var descriptorParameters = new List<ShellParameter>(); foreach (var descriptorParameterRecord in shellDescriptorRecord.Parameters) { descriptorParameters.Add( new ShellParameter { Component = descriptorParameterRecord.Component, Name = descriptorParameterRecord.Name, Value = descriptorParameterRecord.Value }); } descriptor.Parameters = descriptorParameters; return descriptor; }
public AdminController( IOrchardServices services, IModuleService moduleService, IDataMigrationManager dataMigrationManager, IReportsCoordinator reportsCoordinator, IExtensionManager extensionManager, IFeatureManager featureManager, ShellDescriptor shellDescriptor, IShapeFactory shapeFactory) { Services = services; _moduleService = moduleService; _dataMigrationManager = dataMigrationManager; _reportsCoordinator = reportsCoordinator; _extensionManager = extensionManager; _featureManager = featureManager; _shellDescriptor = shellDescriptor; Shape = shapeFactory; T = NullLocalizer.Instance; Logger = NullLogger.Instance; }
public AdminController( IEnumerable<IExtensionDisplayEventHandler> extensionDisplayEventHandlers, IOrchardServices services, IModuleService moduleService, ISiteService siteService, IDataMigrationManager dataMigrationManager, IExtensionManager extensionManager, IFeatureManager featureManager, ShellDescriptor shellDescriptor, ShellSettings shellSettings ) { Services = services; _extensionDisplayEventHandler = extensionDisplayEventHandlers.FirstOrDefault(); _moduleService = moduleService; _dataMigrationManager = dataMigrationManager; _extensionManager = extensionManager; _featureManager = featureManager; _shellDescriptor = shellDescriptor; _shellSettings = shellSettings; _siteService = siteService; ; Logger = NullLogger.Instance; }
protected StaticFileBindingStrategy(IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IVirtualPathProvider virtualPathProvider) { _extensionManager = extensionManager; _shellDescriptor = shellDescriptor; _virtualPathProvider = virtualPathProvider; }
public StylesheetBindingStrategy(IExtensionManager extensionManager, ShellDescriptor shellDescriptor, IVirtualPathProvider virtualPathProvider) : base(extensionManager, shellDescriptor, virtualPathProvider) { }
public string Setup(SetupContext context) { string executionId; // The vanilla Orchard distibution has the following features enabled. string[] hardcoded = { // Framework "Orchard.Framework", // Core "Common", "Containers", "Contents", "Dashboard", "Feeds", "Navigation", "Reports", "Scheduling", "Settings", "Shapes", "Title", // Modules "Orchard.Pages", "Orchard.Themes", "Orchard.Users", "Orchard.Roles", "Orchard.Modules", "PackagingServices", "Orchard.Packaging", "Gallery", "Orchard.Recipes" }; context.EnabledFeatures = hardcoded.Union(context.EnabledFeatures ?? Enumerable.Empty<string>()).Distinct().ToList(); var shellSettings = new ShellSettings(_shellSettings); if (string.IsNullOrEmpty(shellSettings.DataProvider)) { shellSettings.DataProvider = context.DatabaseProvider; shellSettings.DataConnectionString = context.DatabaseConnectionString; shellSettings.DataTablePrefix = context.DatabaseTablePrefix; } #region Encryption Settings shellSettings.EncryptionAlgorithm = "AES"; // randomly generated key shellSettings.EncryptionKey = SymmetricAlgorithm.Create(shellSettings.EncryptionAlgorithm).Key.ToHexString(); shellSettings.HashAlgorithm = "HMACSHA256"; // randomly generated key shellSettings.HashKey = HMAC.Create(shellSettings.HashAlgorithm).Key.ToHexString(); #endregion var shellDescriptor = new ShellDescriptor { Features = context.EnabledFeatures.Select(name => new ShellFeature { Name = name }) }; var shellBlueprint = _compositionStrategy.Compose(shellSettings, shellDescriptor); // initialize database explicitly, and store shell descriptor using (var bootstrapLifetimeScope = _shellContainerFactory.CreateContainer(shellSettings, shellBlueprint)) { using (var environment = bootstrapLifetimeScope.CreateWorkContextScope()) { // check if the database is already created (in case an exception occured in the second phase) var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>()); try { var tablePrefix = String.IsNullOrEmpty(_shellSettings.DataTablePrefix) ? "" : _shellSettings.DataTablePrefix + "_"; schemaBuilder.ExecuteSql("SELECT * FROM " + tablePrefix + "Settings_ShellDescriptorRecord"); } catch { var reportsCoordinator = environment.Resolve<IReportsCoordinator>(); reportsCoordinator.Register("Data Migration", "Setup", "Orchard installation"); schemaBuilder.CreateTable("Orchard_Framework_DataMigrationRecord", table => table .Column<int>("Id", column => column.PrimaryKey().Identity()) .Column<string>("DataMigrationClass") .Column<int>("Version")); var dataMigrationManager = environment.Resolve<IDataMigrationManager>(); dataMigrationManager.Update("Settings"); foreach (var feature in context.EnabledFeatures) { dataMigrationManager.Update(feature); } environment.Resolve<IShellDescriptorManager>().UpdateShellDescriptor( 0, shellDescriptor.Features, shellDescriptor.Parameters); } } } // in effect "pump messages" see PostMessage circa 1980 while ( _processingEngine.AreTasksPending() ) _processingEngine.ExecuteNextTask(); // creating a standalone environment. // in theory this environment can be used to resolve any normal components by interface, and those // components will exist entirely in isolation - no crossover between the safemode container currently in effect // must mark state as Running - otherwise standalone enviro is created "for setup" shellSettings.State = new TenantState("Running"); using (var environment = _orchardHost.CreateStandaloneEnvironment(shellSettings)) { try { executionId = CreateTenantData(context, environment); } catch { environment.Resolve<ITransactionManager>().Cancel(); throw; } } _shellSettingsManager.SaveSettings(shellSettings); return executionId; }
private static ShellDescriptor GetShellDecriptorForCacheText(string p) { string[] fields = p.Trim().Split(new[] { "|" }, StringSplitOptions.None); var shellDescriptor = new ShellDescriptor {SerialNumber = Convert.ToInt32(fields[0])}; string[] features = fields[1].Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries); shellDescriptor.Features = features.Select(feature => new ShellFeature { Name = feature }).ToList(); string[] parameters = fields[2].Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries); shellDescriptor.Parameters = parameters.Select(parameter => parameter.Split(new[] { "," }, StringSplitOptions.None)).Select(parameterFields => new ShellParameter { Component = parameterFields[0], Name = parameterFields[1], Value = parameterFields[2] }).ToList(); return shellDescriptor; }
private static string GetCacheTextForShellDescriptor(ShellDescriptor descriptor) { var sb = new StringBuilder(); sb.Append(descriptor.SerialNumber + "|"); foreach (var feature in descriptor.Features) { sb.Append(feature.Name + ";"); } sb.Append("|"); foreach (var parameter in descriptor.Parameters) { sb.Append(parameter.Component + "," + parameter.Name + "," + parameter.Value); sb.Append(";"); } return sb.ToString(); }
void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor, string tenant) { TouchFile(); }
/// <summary> /// A feature is enabled/disabled, the tenant needs to be restarted /// </summary> void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor, string tenant) { if (_shellContexts == null) { return; } Logger.Debug("Shell changed: " + tenant); var context = _shellContexts.FirstOrDefault(x => x.Settings.Name == tenant); if (context == null) { return; } // don't restart when tenant is in setup if (context.Settings.State != TenantState.Running) { return; } // don't flag the tenant if already listed if (_tenantsToRestart.GetState().Any(x => x.Name == tenant)) { return; } Logger.Debug("Adding tenant to restart: " + tenant); _tenantsToRestart.GetState().Add(context.Settings); }
public ShellContext CreateSetupContext(ShellSettings settings) { Logger.Debug("No shell settings available. Creating shell context for setup"); var descriptor = new ShellDescriptor { SerialNumber = -1, Features = new[] { new ShellFeature { Name = "Orchard.Setup" }, new ShellFeature { Name = "Shapes" }, new ShellFeature { Name = "Orchard.jQuery" }, }, }; var blueprint = _compositionStrategy.Compose(settings, descriptor); var shellScope = _shellContainerFactory.CreateContainer(settings, blueprint); return new ShellContext { Settings = settings, Descriptor = descriptor, Blueprint = blueprint, LifetimeScope = shellScope, Shell = shellScope.Resolve<IOrchardShell>(), }; }