public ExtensionEntry Load(ExtensionDescriptor descriptor)
        {
            if (!ExtensionsVirtualPathPrefixes.Contains(descriptor.Location)) {
                return null;
            }

            var plocation = _hostEnvironment.MapPath(descriptor.Location);

            using (_loaderContainer.AddLoader(_extensionAssemblyLoader.WithPath(plocation))) {
                try {
                    var assembly = Assembly.Load(new AssemblyName(descriptor.Id));

                    _logger.LogInformation("Loaded referenced extension \"{0}\": assembly name=\"{1}\"", descriptor.Name, assembly.FullName);

                    return new ExtensionEntry {
                        Descriptor = descriptor,
                        Assembly = assembly,
                        ExportedTypes = assembly.ExportedTypes
                    };
                }
                catch (System.Exception ex) {
                    _logger.LogError(string.Format("Error trying to load extension {0}", descriptor.Id), ex);
                    throw;
                }

            }
        }
        public ExtensionEntry Load(ExtensionDescriptor descriptor)
        {
            if (!descriptor.Location.StartsWith("~/Core/")) {
                return null;
            }

            var plocation = _hostEnvironment.MapPath("~/Core");

            using (_loaderContainer.AddLoader(_extensionAssemblyLoader.WithPath(plocation))) {
                var assembly = Assembly.Load(new AssemblyName(CoreAssemblyName));

                _logger.LogInformation("Loaded referenced extension \"{0}\": assembly name=\"{1}\"", descriptor.Name, assembly.FullName);

                return new ExtensionEntry {
                    Descriptor = descriptor,
                    Assembly = assembly,
                    ExportedTypes = assembly.ExportedTypes.Where(x => IsTypeFromModule(x, descriptor))
                };
            }
        }
 public static string ThemePath(this HtmlHelper helper, ExtensionDescriptor theme, string path)
 {
     return(theme.Location + "/" + theme.Id + path);
 }
Exemple #4
0
 public bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable <ExtensionProbeEntry> references)
 {
     return(true);
 }
 private static bool IsTypeFromModule(Type type, ExtensionDescriptor descriptor)
 {
     return((type.Namespace + ".").StartsWith(CoreAssemblyName + "." + descriptor.Id + "."));
 }
        public void CreateDataMigration(string featureName)
        {
            Context.Output.WriteLine(T("Creating Data Migration for {0}", featureName));
            ExtensionDescriptor extensionDescriptor = _extensionManager.AvailableExtensions().FirstOrDefault(extension => DefaultExtensionTypes.IsModule(extension.ExtensionType) &&
                                                                                                             extension.Features.Any(feature => String.Equals(feature.Id, featureName, StringComparison.OrdinalIgnoreCase)));

            if (extensionDescriptor == null)
            {
                Context.Output.WriteLine(T("Creating data migration failed: target Feature {0} could not be found.", featureName));
                return;
            }

            string dataMigrationFolderPath = HostingEnvironment.MapPath("~/Modules/" + extensionDescriptor.Id + "/");
            string dataMigrationFilePath   = dataMigrationFolderPath + "Migrations.cs";
            string templatesPath           = HostingEnvironment.MapPath("~/Modules/Orchard." + ModuleName + "/CodeGenerationTemplates/");
            string moduleCsProjPath        = HostingEnvironment.MapPath(string.Format("~/Modules/{0}/{0}.csproj", extensionDescriptor.Id));

            if (!Directory.Exists(dataMigrationFolderPath))
            {
                Directory.CreateDirectory(dataMigrationFolderPath);
            }

            if (File.Exists(dataMigrationFilePath))
            {
                Context.Output.WriteLine(T("Data migration already exists in target Module {0}.", extensionDescriptor.Id));
                return;
            }

            List <SchemaCommand> commands = _schemaCommandGenerator.GetCreateFeatureCommands(featureName, false).ToList();
            string dataMigrationText;

            using (var stringWriter = new StringWriter()) {
                var interpreter = new CodeGenerationCommandInterpreter(stringWriter);

                foreach (var command in commands)
                {
                    interpreter.Visit(command);
                    stringWriter.WriteLine();
                }

                dataMigrationText = File.ReadAllText(templatesPath + "DataMigration.txt");
                dataMigrationText = dataMigrationText.Replace("$$FeatureName$$", featureName);
                dataMigrationText = dataMigrationText.Replace("$$Commands$$", stringWriter.ToString());
            }
            File.WriteAllText(dataMigrationFilePath, dataMigrationText);

            string projectFileText = File.ReadAllText(moduleCsProjPath);

            // The string searches in solution/project files can be made aware of comment lines.
            if (projectFileText.Contains("<Compile Include"))
            {
                string compileReference = string.Format("<Compile Include=\"{0}\" />\r\n    ", "Migrations.cs");
                projectFileText = projectFileText.Insert(projectFileText.LastIndexOf("<Compile Include"), compileReference);
            }
            else
            {
                string itemGroupReference = string.Format("</ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"{0}\" />\r\n  ", "Migrations.cs");
                projectFileText = projectFileText.Insert(projectFileText.LastIndexOf("</ItemGroup>"), itemGroupReference);
            }

            File.WriteAllText(moduleCsProjPath, projectFileText);
            TouchSolution(Context.Output);
            Context.Output.WriteLine(T("Data migration created successfully in Module {0}", extensionDescriptor.Id));
        }
 /// <summary>
 /// Checks whether the module is allowed for the current tenant
 /// </summary>
 private bool ExtensionIsAllowed(ExtensionDescriptor extensionDescriptor)
 {
     return(true); //_shellSettings.Modules.Length == 0 || _shellSettings.Modules.Contains(extensionDescriptor.Id);
 }
 private static bool IsTypeFromModule(Type type, ExtensionDescriptor descriptor)
 {
     return (type.Namespace + ".").StartsWith(CoreAssemblyName + "." + descriptor.Id + ".");
 }
 public void Monitor(ExtensionDescriptor extension, Action <IVolatileToken> monitor)
 {
 }
 public bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable<ExtensionProbeEntry> references)
 {
     return true;
 }
 public void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension)
 {
 }
Exemple #12
0
        public static ExtensionDescriptor GetDescriptorForExtension(string locationPath, string extensionId, string extensionType, string manifestText)
        {
            Dictionary<string, string> manifest = ParseManifest(manifestText);
            var extensionDescriptor = new ExtensionDescriptor {
                Location = locationPath,
                Id = extensionId,
                ExtensionType = extensionType,
                Name = GetValue(manifest, NameSection) ?? extensionId,
                Path = GetValue(manifest, PathSection),
                Description = GetValue(manifest, DescriptionSection),
                Version = GetValue(manifest, VersionSection),
                OrchardVersion = GetValue(manifest, OrchardVersionSection),
                Author = GetValue(manifest, AuthorSection),
                WebSite = GetValue(manifest, WebsiteSection),
                Tags = GetValue(manifest, TagsSection),
                AntiForgery = GetValue(manifest, AntiForgerySection),
                Zones = GetValue(manifest, ZonesSection),
                BaseTheme = GetValue(manifest, BaseThemeSection),
                SessionState = GetValue(manifest, SessionStateSection)
            };
            extensionDescriptor.Features = GetFeaturesForExtension(manifest, extensionDescriptor);

            return extensionDescriptor;
        }
Exemple #13
0
        private static IEnumerable<FeatureDescriptor> GetFeaturesForExtension(IDictionary<string, string> manifest, ExtensionDescriptor extensionDescriptor)
        {
            var featureDescriptors = new List<FeatureDescriptor>();

            // Default feature
            FeatureDescriptor defaultFeature = new FeatureDescriptor {
                Id = extensionDescriptor.Id,
                Name = GetValue(manifest, FeatureNameSection) ?? extensionDescriptor.Name,
                Priority = GetValue(manifest, PrioritySection) != null ? int.Parse(GetValue(manifest, PrioritySection)) : 0,
                Description = GetValue(manifest, FeatureDescriptionSection) ?? GetValue(manifest, DescriptionSection) ?? string.Empty,
                Dependencies = ParseFeatureDependenciesEntry(GetValue(manifest, DependenciesSection)),
                Extension = extensionDescriptor,
                Category = GetValue(manifest, CategorySection)
            };

            featureDescriptors.Add(defaultFeature);

            // Remaining features
            string featuresText = GetValue(manifest, FeaturesSection);
            if (featuresText != null) {
                FeatureDescriptor featureDescriptor = null;
                using (StringReader reader = new StringReader(featuresText)) {
                    string line;
                    while ((line = reader.ReadLine()) != null) {
                        if (IsFeatureDeclaration(line)) {
                            if (featureDescriptor != null) {
                                if (!featureDescriptor.Equals(defaultFeature)) {
                                    featureDescriptors.Add(featureDescriptor);
                                }

                                featureDescriptor = null;
                            }

                            string[] featureDeclaration = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                            string featureDescriptorId = featureDeclaration[0].Trim();
                            if (String.Equals(featureDescriptorId, extensionDescriptor.Id, StringComparison.OrdinalIgnoreCase)) {
                                featureDescriptor = defaultFeature;
                                featureDescriptor.Name = extensionDescriptor.Name;
                            }
                            else {
                                featureDescriptor = new FeatureDescriptor {
                                    Id = featureDescriptorId,
                                    Extension = extensionDescriptor
                                };
                            }
                        }
                        else if (IsFeatureFieldDeclaration(line)) {
                            if (featureDescriptor != null) {
                                string[] featureField = line.Split(new[] { ":" }, 2, StringSplitOptions.None);
                                int featureFieldLength = featureField.Length;
                                if (featureFieldLength != 2)
                                    continue;
                                for (int i = 0; i < featureFieldLength; i++) {
                                    featureField[i] = featureField[i].Trim();
                                }

                                switch (featureField[0].ToLowerInvariant()) {
                                    case NameSection:
                                        featureDescriptor.Name = featureField[1];
                                        break;
                                    case DescriptionSection:
                                        featureDescriptor.Description = featureField[1];
                                        break;
                                    case CategorySection:
                                        featureDescriptor.Category = featureField[1];
                                        break;
                                    case PrioritySection:
                                        featureDescriptor.Priority = int.Parse(featureField[1]);
                                        break;
                                    case DependenciesSection:
                                        featureDescriptor.Dependencies = ParseFeatureDependenciesEntry(featureField[1]);
                                        break;
                                }
                            }
                            else {
                                string message = string.Format("The line {0} in manifest for extension {1} was ignored", line, extensionDescriptor.Id);
                                throw new ArgumentException(message);
                            }
                        }
                        else {
                            string message = string.Format("The line {0} in manifest for extension {1} was ignored", line, extensionDescriptor.Id);
                            throw new ArgumentException(message);
                        }
                    }

                    if (featureDescriptor != null && !featureDescriptor.Equals(defaultFeature))
                        featureDescriptors.Add(featureDescriptor);
                }
            }

            return featureDescriptors;
        }
Exemple #14
0
        private ExtensionEntry BuildEntry(ExtensionDescriptor descriptor)
        {
            foreach (var loader in _loaders) {
                ExtensionEntry entry = loader.Load(descriptor);
                if (entry != null)
                    return entry;
            }

            _logger.LogWarning("No suitable loader found for extension \"{0}\"", descriptor.Id);
            return null;
        }
 public override void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension)
 {
 }
 public ExtensionEntry Load(ExtensionDescriptor descriptor)
 {
     return(new ExtensionEntry {
         Descriptor = descriptor, ExportedTypes = new[] { typeof(Alpha), typeof(Beta), typeof(Phi) }
     });
 }
 public ExtensionProbeEntry Probe(ExtensionDescriptor descriptor)
 {
     return null;
 }
 public ExtensionProbeEntry Probe(ExtensionDescriptor descriptor)
 {
     return(new ExtensionProbeEntry {
         Descriptor = descriptor, Loader = this
     });
 }
Exemple #19
0
        internal void LoadPrecompiledModule(ExtensionDescriptor descriptor)
        {
            var fileInfo           = _hostingEnvironment.GetExtensionFileInfo(descriptor);
            var assemblyFolderPath = Path.Combine(fileInfo.PhysicalPath, Constants.BinDirectoryName);
            var assemblyPath       = Path.Combine(assemblyFolderPath, CompilerUtility.GetAssemblyFileName(descriptor.Id));

            // default runtime assemblies: "bin/{assembly}.dll"
            var runtimeAssemblies = Directory.GetFiles(assemblyFolderPath,
                                                       "*" + FileNameSuffixes.DotNet.DynamicLib, SearchOption.TopDirectoryOnly);

            foreach (var asset in runtimeAssemblies)
            {
                var assetName = Path.GetFileNameWithoutExtension(asset);

                if (!IsAmbientAssembly(assetName))
                {
                    var assetFileName     = Path.GetFileName(asset);
                    var assetResolvedPath = ResolveAssemblyPath(assemblyFolderPath, assetFileName);
                    LoadFromAssemblyPath(assetResolvedPath);

                    PopulateBinaryFolder(assemblyFolderPath, assetResolvedPath);
                    PopulateProbingFolder(assetResolvedPath);
                }
            }

            // compile only assemblies: "bin/refs/{assembly}.dll"
            if (Directory.Exists(Path.Combine(assemblyFolderPath, CompilerUtility.RefsDirectoryName)))
            {
                var compilationAssemblies = Directory.GetFiles(
                    Path.Combine(assemblyFolderPath, CompilerUtility.RefsDirectoryName),
                    "*" + FileNameSuffixes.DotNet.DynamicLib, SearchOption.TopDirectoryOnly);

                foreach (var asset in compilationAssemblies)
                {
                    var assetFileName     = Path.GetFileName(asset);
                    var assetResolvedPath = ResolveAssemblyPath(assemblyFolderPath, assetFileName, CompilerUtility.RefsDirectoryName);

                    _compileOnlyAssemblies[assetFileName] = assetResolvedPath;
                    PopulateBinaryFolder(assemblyFolderPath, assetResolvedPath, CompilerUtility.RefsDirectoryName);
                    PopulateProbingFolder(assetResolvedPath, CompilerUtility.RefsDirectoryName);
                }
            }

            // specific runtime assemblies: "bin/runtimes/{rid}/lib/{tfm}/{assembly}.dll"
            if (Directory.Exists(Path.Combine(assemblyFolderPath, PackagingConstants.Folders.Runtimes)))
            {
                var runtimeIds = GetRuntimeIdentifiers();

                var runtimeTargets = Directory.GetFiles(
                    Path.Combine(assemblyFolderPath, PackagingConstants.Folders.Runtimes),
                    "*" + FileNameSuffixes.DotNet.DynamicLib, SearchOption.AllDirectories);

                foreach (var asset in runtimeTargets)
                {
                    var assetName = Path.GetFileNameWithoutExtension(asset);

                    if (!IsAmbientAssembly(assetName))
                    {
                        var tfmPath = Paths.GetParentFolderPath(asset);
                        var libPath = Paths.GetParentFolderPath(tfmPath);
                        var lib     = Paths.GetFolderName(libPath);

                        if (String.Equals(lib, PackagingConstants.Folders.Lib, StringComparison.OrdinalIgnoreCase))
                        {
                            var tfm     = Paths.GetFolderName(tfmPath);
                            var runtime = Paths.GetParentFolderName(libPath);

                            var relativeFolderPath = Path.Combine(PackagingConstants.Folders.Runtimes, runtime, lib, tfm);

                            if (runtimeIds.Contains(runtime))
                            {
                                LoadFromAssemblyPath(asset);
                            }

                            PopulateProbingFolder(asset, relativeFolderPath);
                        }
                    }
                }
            }

            // resource assemblies: "bin/{locale?}/{assembly}.resources.dll"
            var resourceAssemblies = Directory.GetFiles(assemblyFolderPath, "*.resources"
                                                        + FileNameSuffixes.DotNet.DynamicLib, SearchOption.AllDirectories);

            var assemblyFolderName = Paths.GetFolderName(assemblyFolderPath);

            foreach (var asset in resourceAssemblies)
            {
                var assetFileName     = Path.GetFileName(asset);
                var locale            = Paths.GetParentFolderName(asset).Replace(assemblyFolderName, String.Empty);
                var assetResolvedPath = ResolveAssemblyPath(assemblyFolderPath, assetFileName, locale);

                PopulateBinaryFolder(assemblyFolderPath, assetResolvedPath, locale);
                PopulateProbingFolder(assetResolvedPath, locale);
                PopulateRuntimeFolder(assetResolvedPath, locale);
            }
        }
 public abstract bool LoaderIsSuitable(ExtensionDescriptor descriptor);
Exemple #21
0
 private bool IsAmbientExtension(ExtensionDescriptor descriptor)
 {
     return(IsAmbientAssembly(descriptor.Id));
 }
 public override void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension)
 {
     DeleteAssembly(ctx, extension.Id);
 }
Exemple #23
0
 protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor)
 {
     return(null);
 }
Exemple #24
0
 private IViewEngine ShallowEngines(ExtensionDescriptor theme)
 {
     //return _configuredEnginesCache.BindShallowEngines(theme.ThemeName, () => new ViewEngineCollectionWrapper(_viewEngineProviders.Select(vep => vep.CreateBareViewEngine())));
     return(DeepEngines(theme));
 }
Exemple #25
0
        public ActionResult Index(int?layerId, string culture)
        {
            ExtensionDescriptor currentTheme = _siteThemeService.GetSiteTheme();

            if (currentTheme == null)
            {
                Services.Notifier.Error(T("To manage widgets you must have a theme enabled."));
                return(RedirectToAction("Index", "Admin", new { area = "Dashboard" }));
            }

            IEnumerable <LayerPart> layers = _widgetsService.GetLayers().OrderBy(x => x.Name).ToList();

            if (!layers.Any())
            {
                Services.Notifier.Error(T("There are no widget layers defined. A layer will need to be added in order to add widgets to any part of the site."));
                return(RedirectToAction("AddLayer"));
            }

            LayerPart currentLayer = layerId == null
                ? layers.FirstOrDefault(layer => layer.Name == "Default") ?? layers.FirstOrDefault()
                : layers.FirstOrDefault(layer => layer.Id == layerId);

            if (currentLayer == null && layerId != null)   // Incorrect layer id passed
            {
                Services.Notifier.Error(T("Layer not found: {0}", layerId));
                return(RedirectToAction("Index"));
            }

            IEnumerable <string> allZones           = _widgetsService.GetZones();
            IEnumerable <string> currentThemesZones = _widgetsService.GetZones(currentTheme);

            string zonePreviewImagePath = string.Format("{0}/{1}/ThemeZonePreview.png", currentTheme.Location, currentTheme.Id);
            string zonePreviewImage     = _virtualPathProvider.FileExists(zonePreviewImagePath) ? zonePreviewImagePath : null;

            var widgets = _widgetsService.GetWidgets();

            if (!String.IsNullOrWhiteSpace(culture))
            {
                widgets = widgets.Where(x => {
                    if (x.Has <ILocalizableAspect>())
                    {
                        return(String.Equals(x.As <ILocalizableAspect>().Culture, culture, StringComparison.InvariantCultureIgnoreCase));
                    }

                    return(false);
                }).ToList();
            }

            var viewModel = Shape.ViewModel()
                            .CurrentTheme(currentTheme)
                            .CurrentLayer(currentLayer)
                            .CurrentCulture(culture)
                            .Layers(layers)
                            .Widgets(widgets)
                            .Zones(currentThemesZones)
                            .Cultures(_cultureManager.ListCultures())
                            .OrphanZones(allZones.Except(currentThemesZones))
                            .OrphanWidgets(_widgetsService.GetOrphanedWidgets())
                            .ZonePreviewImage(zonePreviewImage);

            return(View(viewModel));
        }
Exemple #26
0
 public void ExtensionActivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension)
 {
 }
        private void ProcessExtension(ExtensionLoadingContext context, ExtensionDescriptor extension)
        {
            var extensionProbes = context.AvailableExtensionsProbes.ContainsKey(extension.Id) ?
                                  context.AvailableExtensionsProbes[extension.Id] :
                                  Enumerable.Empty <ExtensionProbeEntry>();

            // materializes the list
            extensionProbes = extensionProbes.ToArray();

            if (Logger.IsEnabled(LogLevel.Debug))
            {
                Logger.Debug("Loaders for extension \"{0}\": ", extension.Id);
                foreach (var probe in extensionProbes)
                {
                    Logger.Debug("  Loader: {0}", probe.Loader.Name);
                    Logger.Debug("    VirtualPath: {0}", probe.VirtualPath);
                    Logger.Debug("    VirtualPathDependencies: {0}", string.Join(", ", probe.VirtualPathDependencies));
                }
            }

            var moduleReferences =
                context.AvailableExtensions
                .Where(e =>
                       context.ReferencesByModule.ContainsKey(extension.Id) &&
                       context.ReferencesByModule[extension.Id].Any(r => StringComparer.OrdinalIgnoreCase.Equals(e.Id, r.Name)))
                .ToList();

            var processedModuleReferences =
                moduleReferences
                .Where(e => context.ProcessedExtensions.ContainsKey(e.Id))
                .Select(e => context.ProcessedExtensions[e.Id])
                .ToList();

            var activatedExtension = extensionProbes.FirstOrDefault(
                e => e.Loader.IsCompatibleWithModuleReferences(extension, processedModuleReferences)
                );

            var previousDependency = context.PreviousDependencies.FirstOrDefault(
                d => StringComparer.OrdinalIgnoreCase.Equals(d.Name, extension.Id)
                );

            if (activatedExtension == null)
            {
                Logger.Warning("No loader found for extension \"{0}\"!", extension.Id);
            }

            var references = ProcessExtensionReferences(context, activatedExtension);

            foreach (var loader in _loaders)
            {
                if (activatedExtension != null && activatedExtension.Loader.Name == loader.Name)
                {
                    Logger.Information("Activating extension \"{0}\" with loader \"{1}\"", activatedExtension.Descriptor.Id, loader.Name);
                    loader.ExtensionActivated(context, extension);
                }
                else if (previousDependency != null && previousDependency.LoaderName == loader.Name)
                {
                    Logger.Information("Deactivating extension \"{0}\" from loader \"{1}\"", previousDependency.Name, loader.Name);
                    loader.ExtensionDeactivated(context, extension);
                }
            }

            if (activatedExtension != null)
            {
                context.NewDependencies.Add(new DependencyDescriptor
                {
                    Name        = extension.Id,
                    LoaderName  = activatedExtension.Loader.Name,
                    VirtualPath = activatedExtension.VirtualPath,
                    References  = references
                });
            }

            // Keep track of which loader we use for every extension
            // This will be needed for processing references from other dependent extensions
            context.ProcessedExtensions.Add(extension.Id, activatedExtension);
        }
Exemple #28
0
 public ExtensionProbeEntry Probe(ExtensionDescriptor descriptor)
 {
     return(null);
 }
 public MockThemeManager(ExtensionDescriptor des)
 {
     _dec = des;
 }
Exemple #30
0
        private static IEnumerable <FeatureDescriptor> GetFeaturesForExtension(IDictionary <string, string> manifest, ExtensionDescriptor extensionDescriptor)
        {
            var featureDescriptors = new List <FeatureDescriptor>();

            // Default feature
            FeatureDescriptor defaultFeature = new FeatureDescriptor {
                Id       = extensionDescriptor.Id,
                Name     = GetValue(manifest, FeatureNameSection) ?? extensionDescriptor.Name,
                Priority = GetValue(manifest, PrioritySection) != null?int.Parse(GetValue(manifest, PrioritySection)) : 0,
                               Description  = GetValue(manifest, FeatureDescriptionSection) ?? GetValue(manifest, DescriptionSection) ?? string.Empty,
                               Dependencies = ParseFeatureDependenciesEntry(GetValue(manifest, DependenciesSection)),
                               Extension    = extensionDescriptor,
                               Category     = GetValue(manifest, CategorySection)
            };

            featureDescriptors.Add(defaultFeature);

            // Remaining features
            string featuresText = GetValue(manifest, FeaturesSection);

            if (featuresText != null)
            {
                FeatureDescriptor featureDescriptor = null;
                using (StringReader reader = new StringReader(featuresText)) {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (IsFeatureDeclaration(line))
                        {
                            if (featureDescriptor != null)
                            {
                                if (!featureDescriptor.Equals(defaultFeature))
                                {
                                    featureDescriptors.Add(featureDescriptor);
                                }

                                featureDescriptor = null;
                            }

                            string[] featureDeclaration  = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                            string   featureDescriptorId = featureDeclaration[0].Trim();
                            if (String.Equals(featureDescriptorId, extensionDescriptor.Id, StringComparison.OrdinalIgnoreCase))
                            {
                                featureDescriptor      = defaultFeature;
                                featureDescriptor.Name = extensionDescriptor.Name;
                            }
                            else
                            {
                                featureDescriptor = new FeatureDescriptor {
                                    Id        = featureDescriptorId,
                                    Extension = extensionDescriptor
                                };
                            }
                        }
                        else if (IsFeatureFieldDeclaration(line))
                        {
                            if (featureDescriptor != null)
                            {
                                string[] featureField       = line.Split(new[] { ":" }, 2, StringSplitOptions.None);
                                int      featureFieldLength = featureField.Length;
                                if (featureFieldLength != 2)
                                {
                                    continue;
                                }
                                for (int i = 0; i < featureFieldLength; i++)
                                {
                                    featureField[i] = featureField[i].Trim();
                                }

                                switch (featureField[0].ToLowerInvariant())
                                {
                                case NameSection:
                                    featureDescriptor.Name = featureField[1];
                                    break;

                                case DescriptionSection:
                                    featureDescriptor.Description = featureField[1];
                                    break;

                                case CategorySection:
                                    featureDescriptor.Category = featureField[1];
                                    break;

                                case PrioritySection:
                                    featureDescriptor.Priority = int.Parse(featureField[1]);
                                    break;

                                case DependenciesSection:
                                    featureDescriptor.Dependencies = ParseFeatureDependenciesEntry(featureField[1]);
                                    break;
                                }
                            }
                            else
                            {
                                string message = string.Format("The line {0} in manifest for extension {1} was ignored", line, extensionDescriptor.Id);
                                throw new ArgumentException(message);
                            }
                        }
                        else
                        {
                            string message = string.Format("The line {0} in manifest for extension {1} was ignored", line, extensionDescriptor.Id);
                            throw new ArgumentException(message);
                        }
                    }

                    if (featureDescriptor != null && !featureDescriptor.Equals(defaultFeature))
                    {
                        featureDescriptors.Add(featureDescriptor);
                    }
                }
            }

            return(featureDescriptors);
        }
Exemple #31
0
 /// <summary>
 /// Instantiates a theme based on an extension descriptor.
 /// </summary>
 /// <param name="extensionDescriptor">The extension descriptor.</param>
 public ThemeEntry(ExtensionDescriptor extensionDescriptor)
 {
     Descriptor = extensionDescriptor;
 }
 public IEnumerable <ExtensionReferenceProbeEntry> ProbeReferences(ExtensionDescriptor extensionDescriptor)
 {
     throw new NotImplementedException();
 }
 public ExtensionEntry Load(ExtensionDescriptor descriptor)
 {
     return(new ExtensionEntry {
         Descriptor = descriptor, ExportedTypes = new[] { typeof(BlogRecord), typeof(BodyRecord), typeof(BlogArchiveRecord) }
     });
 }
 public void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension)
 {
     throw new NotImplementedException();
 }
 public virtual IEnumerable <ExtensionReferenceProbeEntry> ProbeReferences(ExtensionDescriptor descriptor)
 {
     return(Enumerable.Empty <ExtensionReferenceProbeEntry>());
 }
 public bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable <ExtensionProbeEntry> references)
 {
     throw new NotImplementedException();
 }
 public abstract ExtensionProbeEntry Probe(ExtensionDescriptor descriptor);
Exemple #38
0
        public ActionResult Index()
        {
            bool installThemes =
                _featureManager.GetEnabledFeatures().FirstOrDefault(f => f.Id == "PackagingServices") != null &&
                Services.Authorizer.Authorize(StandardPermissions.SiteOwner) && // only site owners
                _shellSettings.Name == ShellSettings.DefaultName;    // of the default tenant

            var featuresThatNeedUpdate = _dataMigrationManager.GetFeaturesThatNeedUpdate();

            ThemeEntry          currentTheme           = null;
            ExtensionDescriptor currentThemeDescriptor = _siteThemeService.GetSiteTheme();

            if (currentThemeDescriptor != null)
            {
                currentTheme = new ThemeEntry(currentThemeDescriptor);
            }

            IEnumerable <ThemeEntry> themes = _extensionManager.AvailableExtensions()
                                              .Where(extensionDescriptor => {
                bool hidden = false;
                string tags = extensionDescriptor.Tags;
                if (tags != null)
                {
                    hidden = tags.Split(',').Any(t => t.Trim().Equals("hidden", StringComparison.OrdinalIgnoreCase));
                }

                // is the theme allowed for this tenant ?
                bool allowed = _shellSettings.Themes.Length == 0 || _shellSettings.Themes.Contains(extensionDescriptor.Id);

                return(!hidden && allowed &&
                       DefaultExtensionTypes.IsTheme(extensionDescriptor.ExtensionType) &&
                       (currentTheme == null ||
                        !currentTheme.Descriptor.Id.Equals(extensionDescriptor.Id)));
            })
                                              .Select(extensionDescriptor => {
                ThemeEntry themeEntry = new ThemeEntry(extensionDescriptor)
                {
                    NeedsUpdate         = featuresThatNeedUpdate.Contains(extensionDescriptor.Id),
                    IsRecentlyInstalled = _themeService.IsRecentlyInstalled(extensionDescriptor),
                    Enabled             = _shellDescriptor.Features.Any(sf => sf.Name == extensionDescriptor.Id),
                    CanUninstall        = installThemes
                };

                if (_extensionDisplayEventHandler != null)
                {
                    foreach (string notification in _extensionDisplayEventHandler.Displaying(themeEntry.Descriptor, ControllerContext.RequestContext))
                    {
                        themeEntry.Notifications.Add(notification);
                    }
                }

                return(themeEntry);
            })
                                              .ToArray();

            return(View(new ThemesIndexViewModel {
                CurrentTheme = currentTheme,
                InstallThemes = installThemes,
                Themes = themes
            }));
        }
 protected abstract ExtensionEntry LoadWorker(ExtensionDescriptor descriptor);