コード例 #1
0
        public void ExecuteRecipeStepTest()
        {
            _folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
OrchardVersion: 1
Features:
    SuperWiki: 
        Description: My super wiki theme for Orchard.
");
            _packagesInRepository.AddPublishedPackage(new PublishedPackage {
                Id              = "Orchard.Theme.SuperWiki",
                PackageType     = DefaultExtensionTypes.Theme,
                Title           = "SuperWiki",
                Version         = "1.0.3",
                IsLatestVersion = true,
            });

            IShellDescriptorManager shellDescriptorManager = _container.Resolve <IShellDescriptorManager>();

            // No features enabled
            shellDescriptorManager.UpdateShellDescriptor(0,
                                                         Enumerable.Empty <ShellFeature>(),
                                                         Enumerable.Empty <ShellParameter>());

            ThemeRecipeHandler themeRecipeHandler = _container.Resolve <ThemeRecipeHandler>();

            RecipeContext recipeContext = new RecipeContext {
                RecipeStep = new RecipeStep {
                    Name = "Theme", Step = new XElement("SuperWiki")
                }
            };

            recipeContext.RecipeStep.Step.Add(new XAttribute("packageId", "Orchard.Theme.SuperWiki"));
            recipeContext.RecipeStep.Step.Add(new XAttribute("repository", "test"));

            IFeatureManager featureManager = _container.Resolve <IFeatureManager>();
            IEnumerable <FeatureDescriptor> enabledFeatures = featureManager.GetEnabledFeatures();

            Assert.That(enabledFeatures.Count(), Is.EqualTo(0));
            themeRecipeHandler.ExecuteRecipeStep(recipeContext);

            // without setting enable no feature should be activated...
            featureManager.GetEnabledFeatures();
            Assert.That(enabledFeatures.Count(), Is.EqualTo(0));

            // Adding enable the feature should get active
            recipeContext.RecipeStep.Step.Add(new XAttribute("enable", true));
            themeRecipeHandler.ExecuteRecipeStep(recipeContext);

            enabledFeatures = featureManager.GetEnabledFeatures();
            Assert.That(enabledFeatures.FirstOrDefault(feature => feature.Id.Equals("SuperWiki")), Is.Not.Null);
            Assert.That(enabledFeatures.Count(), Is.EqualTo(1));
            Assert.That(recipeContext.Executed, Is.True);
        }
        protected override DriverResult Editor(TwoFactorAuthenticationSettingsPart part, dynamic shapeHelper)
        {
            return(ContentShape("Parts_TwoFactorAuthenticationSettings_Edit",
                                () => {
                part.SMSFeatureEnabled = _featureManager.GetEnabledFeatures().Any(x => x.Id == "EmeraldElements.TwoFactorAuthentication.Sms");
                if (!part.SMSFeatureEnabled)
                {
                    part.EnableBackupSMS = false;
                    part.RequireBackupSMS = false;
                }

                return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: part, Prefix: Prefix);
            })
                   .OnGroup("Two-Factor Authentication"));
        }
コード例 #3
0
        public void EnableFeaturesTest()
        {
            _folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
OrchardVersion: 1
Features:
    SuperWiki: 
        Description: My super wiki module for Orchard.
");

            // Initialize the shell descriptor with 0 features
            IShellDescriptorManager shellDescriptorManager = _container.Resolve <IShellDescriptorManager>();
            IFeatureManager         featureManager         = _container.Resolve <IFeatureManager>();

            shellDescriptorManager.UpdateShellDescriptor(0,
                                                         Enumerable.Empty <ShellFeature>(),
                                                         Enumerable.Empty <ShellParameter>());

            IEnumerable <string> featuresToEnable = new [] { "SuperWiki" };

            // Enable all features
            IEnumerable <string> enabledFeatures = featureManager.EnableFeatures(featuresToEnable);

            Assert.That(enabledFeatures, Is.EqualTo(featuresToEnable));
            Assert.That(featureManager.GetEnabledFeatures().Count(), Is.EqualTo(1));
        }
コード例 #4
0
        public void Exporting(ExportContext context)
        {
            if (!context.ExportOptions.CustomSteps.Contains("FeatureSync"))
            {
                return;
            }

            var xmlElement = new XElement("FeatureSync");

            foreach (var feature in _featureManager.GetEnabledFeatures())
            {
                xmlElement.Add(new XElement("Feature", new XAttribute("Id", feature.Id)));
            }

            var rootElement = context.Document.Descendants("Orchard").FirstOrDefault();

            if (rootElement == null)
            {
                var ex = new OrchardException(T("Could not export this site's Enabled Features because the document passed via the Export Context did not contain a node called 'Orchard'. The document was malformed."));
                Logger.Error(ex, ex.Message);
                throw ex;
            }

            rootElement.AddFirst(xmlElement);
        }
コード例 #5
0
        public void Activated()
        {
            // Let's make sure that the basic set of features is enabled.  If there are any that are not enabled, then let's enable them first.
            var theseFeaturesShouldAlwaysBeActive = new[] {
                "Common", "Containers", "Contents", "Dashboard", "Feeds", "Navigation", "Reports", "Scheduling", "Settings", "Shapes", "Title"
            };

            var enabledFeatures  = _featureManager.GetEnabledFeatures().Select(f => f.Id).ToList();
            var featuresToEnable = theseFeaturesShouldAlwaysBeActive.Where(shouldBeActive => !enabledFeatures.Contains(shouldBeActive)).ToList();

            if (featuresToEnable.Any())
            {
                _featureManager.EnableFeatures(featuresToEnable, true);
            }

            foreach (var feature in _dataMigrationManager.GetFeaturesThatNeedUpdate())
            {
                try {
                    _dataMigrationManager.Update(feature);
                }
                catch (Exception ex) {
                    if (ex.IsFatal())
                    {
                        throw;
                    }
                    Logger.Error("Could not run migrations automatically on " + feature, ex);
                }
            }
        }
コード例 #6
0
        public void Activated()
        {
            // Let's make sure that the basic set of features is enabled.  If there are any that are not enabled, then let's enable them first.
            var theseFeaturesShouldAlwaysBeActive = new[] {
                "Settings"
            };

            theseFeaturesShouldAlwaysBeActive = theseFeaturesShouldAlwaysBeActive.Concat(
                _featureManager.GetAvailableFeatures().Where(f => f.Id != "Coevery.Setup").Select(f => f.Id)).ToArray();

            var enabledFeatures  = _featureManager.GetEnabledFeatures().Select(f => f.Id).ToList();
            var featuresToEnable = theseFeaturesShouldAlwaysBeActive.Where(shouldBeActive => !enabledFeatures.Contains(shouldBeActive)).ToList();

            if (featuresToEnable.Any())
            {
                _featureManager.EnableFeatures(featuresToEnable, true);
            }

            foreach (var feature in _dataMigrationManager.GetFeaturesThatNeedUpdate())
            {
                try {
                    _dataMigrationManager.Update(feature);
                }
                catch (Exception e) {
                    Logger.Error("Could not run migrations automatically on " + feature, e);
                }
            }
        }
コード例 #7
0
        /*
         * <EnabledFeatures>
         *  <Feature Id="Orchard.ImportExport" />
         */
        //Enable any features that are in the list, disable features that aren't in the list
        public void ExecuteRecipeStep(RecipeContext recipeContext)
        {
            if (!String.Equals(recipeContext.RecipeStep.Name, "FeatureSync", StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            var features   = recipeContext.RecipeStep.Step.Descendants();
            var featureIds = features.Where(f => f.Name == "Feature").Select(f => f.Attribute("Id").Value).ToList();

            //we now have the list of features that are enabled on the remote site
            //next thing to do is add and remove features to and from this list based on our feature redactions
            var featureRedactions = _featureRedactionService.GetRedactions().ToList();

            featureIds.AddRange(featureRedactions.Where(r => r.Enabled).Select(r => r.FeatureId));                    //adding features that need to be enabled
            featureIds.RemoveAll(f => featureRedactions.Where(r => !r.Enabled).Select(r => r.FeatureId).Contains(f)); //removing features that need to be disabled

            //adding redactions may have caused duplicity
            featureIds = featureIds.Distinct().ToList();

            var availableFeatures = _featureManager.GetAvailableFeatures();
            var enabledFeatures   = _featureManager.GetEnabledFeatures().ToList();

            var featuresToDisable = enabledFeatures.Where(f => !featureIds.Contains(f.Id)).Select(f => f.Id).ToList();
            var featuresToEnable  = availableFeatures
                                    .Where(f => featureIds.Contains(f.Id))                           //available features that are in the list of features that need to be enabled
                                    .Where(f => !enabledFeatures.Select(ef => ef.Id).Contains(f.Id)) //remove features that are already enabled
                                    .Select(f => f.Id)
                                    .ToList();

            _featureManager.DisableFeatures(featuresToDisable, true);
            _featureManager.EnableFeatures(featuresToEnable, true);

            recipeContext.Executed = true;
        }
コード例 #8
0
        public ActionResult Index()
        {
            var viewModel = new MigrateViewModel {
                ContentTypes = new List <ContentTypeEntry>()
            };

            foreach (var contentType in _contentDefinitionManager.ListTypeDefinitions().OrderBy(c => c.Name))
            {
                // only display parts with fields
                if (contentType.Parts.Any(x => x.PartDefinition.Fields.Any()))
                {
                    viewModel.ContentTypes.Add(new ContentTypeEntry {
                        ContentTypeName = contentType.Name
                    });
                }
            }

            if (!viewModel.ContentTypes.Any())
            {
                _orchardServices.Notifier.Warning(T("There are no content types with custom fields"));
            }

            if (!_featureManager.GetEnabledFeatures().Any(x => x.Id == "Orchard.Fields"))
            {
                _orchardServices.Notifier.Warning(T("You need to enable Orchard.Fields in order to migrate current fields."));
            }

            return(View(viewModel));
        }
コード例 #9
0
        public void DisableFeaturesTest()
        {
            _folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
CoeveryVersion: 1
Features:
    SuperWiki: 
        Description: My super wiki module for Coevery.
");

            // Initialize the shell descriptor with 0 features
            IShellDescriptorManager shellDescriptorManager = _container.Resolve <IShellDescriptorManager>();
            IFeatureManager         featureManager         = _container.Resolve <IFeatureManager>();

            shellDescriptorManager.UpdateShellDescriptor(0,
                                                         new [] { new ShellFeature {
                                                                      Name = "SuperWiki"
                                                                  } },
                                                         Enumerable.Empty <ShellParameter>());

            IEnumerable <string> featuresToDisable = new [] { "SuperWiki" };

            // Disable the feature
            featureManager.DisableFeatures(featuresToDisable);
            Assert.That(featureManager.GetEnabledFeatures().Count(), Is.EqualTo(0));
        }
コード例 #10
0
        public void ExecuteRecipeStepTest() {
            _folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
OrchardVersion: 1
Features:
    SuperWiki: 
        Description: My super wiki module for Orchard.
");

            IShellDescriptorManager shellDescriptorManager = _container.Resolve<IShellDescriptorManager>();
            // No features enabled
            shellDescriptorManager.UpdateShellDescriptor(0,
                Enumerable.Empty<ShellFeature>(),
                Enumerable.Empty<ShellParameter>());

            ModuleRecipeHandler moduleRecipeHandler = _container.Resolve<ModuleRecipeHandler>();

            RecipeContext recipeContext = new RecipeContext { RecipeStep = new RecipeStep { Name = "Module", Step = new XElement("SuperWiki") } };
            recipeContext.RecipeStep.Step.Add(new XAttribute("packageId", "Orchard.Module.SuperWiki"));
            recipeContext.RecipeStep.Step.Add(new XAttribute("repository", "test"));

            IFeatureManager featureManager = _container.Resolve<IFeatureManager>();
            IEnumerable<FeatureDescriptor> enabledFeatures = featureManager.GetEnabledFeatures();
            Assert.That(enabledFeatures.Count(), Is.EqualTo(0));
            moduleRecipeHandler.ExecuteRecipeStep(recipeContext);


            var availableFeatures = featureManager.GetAvailableFeatures().Where(x => x.Id == "SuperWiki").FirstOrDefault();
            Assert.That(availableFeatures.Id, Is.EqualTo("SuperWiki"));
            Assert.That(recipeContext.Executed, Is.True);
        }
コード例 #11
0
        public ActionResult Index()
        {
            ViewBag.CanMigrate = false;

            if (_featureManager.GetEnabledFeatures().All(x => x.Id != "Orchard.Taxonomies"))
            {
                _orchardServices.Notifier.Warning(T("You need to enable Orchard.Taxonomies in order to migrate Contrib.Taxonomies to Orchard.Taxonomies."));
            }
            else
            {
                var flag = false;
                _upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Taxonomies_TermContentItem"), (reader, conn) => {
                    flag = true;
                });

                if (flag)
                {
                    _orchardServices.Notifier.Warning(T("This migration step might have been done already."));
                }

                ViewBag.CanMigrate = true;
            }

            return(View());
        }
コード例 #12
0
        public void OnResultExecuting(ResultExecutingContext filterContext)
        {
            if (filterContext.Result as ViewResult == null)
            {
                return;
            }

            var previewThemeName = _previewTheme.GetPreviewTheme();

            if (string.IsNullOrEmpty(previewThemeName))
            {
                return;
            }

            var installedThemes = _featureManager.GetEnabledFeatures()
                                  .Select(x => x.Extension)
                                  .Where(x => DefaultExtensionTypes.IsTheme(x.ExtensionType))
                                  .Distinct();

            var themeListItems = installedThemes
                                 .Select(theme => new SelectListItem {
                Text     = theme.Name,
                Value    = theme.Id,
                Selected = theme.Id == previewThemeName
            })
                                 .ToList();

            _workContextAccessor.GetContext(filterContext).Layout.Zones["Body"].Add(_shapeFactory.ThemePreview(Themes: themeListItems), ":before");
        }
コード例 #13
0
        public void Describe(DescribeContext context)
        {
            Func <IShapeFactory, dynamic> formFactory =
                shape => {
                var jobsQueueEnabled = _featureManager.GetEnabledFeatures().Any(x => x.Id == "Orchard.JobsQueue");

                var form = New.Form(
                    Id: "EmailActivity",
                    _Type: New.FieldSet(
                        Title: T("Send to"),
                        _Recipients: New.Textbox(
                            Id: "recipients",
                            Name: "Recipients",
                            Title: T("Email Addresses"),
                            Description: T("Specify a comma-separated list of recipient email addresses. To include a display name, use the following format: John Doe &lt;[email protected]&gt;"),
                            Classes: new[] { "large", "text", "tokenized" }),
                        _Subject: New.Textbox(
                            Id: "Subject", Name: "Subject",
                            Title: T("Subject"),
                            Description: T("The subject of the email message."),
                            Classes: new[] { "large", "text", "tokenized" }),
                        _Message: New.Textarea(
                            Id: "Body", Name: "Body",
                            Title: T("Body"),
                            Description: T("The body of the email message."),
                            Classes: new[] { "tokenized" })
                        ));

                if (jobsQueueEnabled)
                {
                    form._Type._Queued(New.Checkbox(
                                           Id: "Queued", Name: "Queued",
                                           Title: T("Queued"),
                                           Checked: false, Value: "true",
                                           Description: T("Check send it as a queued job.")));

                    form._Type._Priority(New.SelectList(
                                             Id: "priority",
                                             Name: "Priority",
                                             Title: T("Priority"),
                                             Description: ("The priority of this message.")
                                             ));

                    form._Type._Priority.Add(new SelectListItem {
                        Value = "-50", Text = T("Low").Text
                    });
                    form._Type._Priority.Add(new SelectListItem {
                        Value = "0", Text = T("Normal").Text
                    });
                    form._Type._Priority.Add(new SelectListItem {
                        Value = "50", Text = T("High").Text
                    });
                }

                return(form);
            };

            context.Form("EmailActivity", formFactory);
        }
コード例 #14
0
        public ExtensionDescriptor GetTheme(string themeId)
        {
            var query = from x in _featureManager.GetEnabledFeatures()
                        where DefaultExtensionTypes.IsTheme(x.Extension.ExtensionType) && x.Id == themeId
                        select x.Extension;

            return(query.Distinct().SingleOrDefault());
        }
コード例 #15
0
        public ActionResult Index(ModulesIndexOptions options, PagerParameters pagerParameters)
        {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not allowed to manage modules")))
            {
                return(new HttpUnauthorizedResult());
            }

            Pager pager = new Pager(Services.WorkContext.CurrentSite, pagerParameters);

            IEnumerable <ModuleEntry> modules = _extensionManager.AvailableExtensions()
                                                .Where(extensionDescriptor => DefaultExtensionTypes.IsModule(extensionDescriptor.ExtensionType) &&
                                                       (string.IsNullOrEmpty(options.SearchText) || extensionDescriptor.Name.ToLowerInvariant().Contains(options.SearchText.ToLowerInvariant())))
                                                .OrderBy(extensionDescriptor => extensionDescriptor.Name)
                                                .Select(extensionDescriptor => new ModuleEntry {
                Descriptor = extensionDescriptor
            });

            int totalItemCount = modules.Count();

            if (pager.PageSize != 0)
            {
                modules = modules.Skip((pager.Page - 1) * pager.PageSize).Take(pager.PageSize);
            }

            modules = modules.ToList();
            foreach (ModuleEntry moduleEntry in modules)
            {
                moduleEntry.IsRecentlyInstalled = _moduleService.IsRecentlyInstalled(moduleEntry.Descriptor);

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

            return(View(new ModulesIndexViewModel
            {
                Modules = modules,
                InstallModules = _featureManager.GetEnabledFeatures().FirstOrDefault(f => f.Id == "PackagingServices") != null,
                Options = options,
                Pager = Shape.Pager(pager).TotalItemCount(totalItemCount)
            }));
        }
コード例 #16
0
        public ActionResult Index()
        {
            if (_featureManager.GetEnabledFeatures().All(x => x.Id != "Orchard.ContentPicker"))
            {
                _orchardServices.Notifier.Warning(T("You need to enable Orchard.ContentPicker in order to migrate Content Picker items to Orchard.ContentPicker."));
            }

            return(View());
        }
コード例 #17
0
        public ActionResult Index(LocationsCountriesIndexViewModel model, PagerParameters pagerParameters)
        {
            if (!Services.Authorizer.Authorize(Permissions.OShopPermissions.ManageShopSettings, T("Not allowed to manage Countries")))
            {
                return(new HttpUnauthorizedResult());
            }

            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);

            var countries = _locationService.GetCountries();

            if (model.ZoneId > 0)
            {
                countries = countries.Where(c => c.ShippingZoneRecord != null && c.ShippingZoneRecord.Id == model.ZoneId);
            }

            switch (model.Filter)
            {
            case LocationsFilter.Disabled:
                countries = countries.Where(c => !c.Enabled);
                break;

            case LocationsFilter.Enabled:
                countries = countries.Where(c => c.Enabled);
                break;
            }

            var pagerShape = Shape.Pager(pager).TotalItemCount(countries.Count());

            var viewModel = new LocationsCountriesIndexViewModel()
            {
                DefaultCountryId                        = _locationService.GetDefaultCountryId(),
                Countries                               = countries.Skip(pager.GetStartIndex()).Take(pager.PageSize),
                Pager                                   = pagerShape,
                BulkAction                              = LocationsBulkAction.None,
                Filter                                  = model.Filter,
                ShippingZones                           = _shippingService != null?_shippingService.GetZones() : new List <ShippingZoneRecord>(),
                                                 ZoneId = model.ZoneId,
                                                 // Optional features
                                                 ShippingEnabled = _featureManager.GetEnabledFeatures().Where(f => f.Id == "OShop.Shipping").Any()
            };

            return(View(viewModel));
        }
コード例 #18
0
 public IEnumerable <string> GetZones()
 {
     return(_featureManager.GetEnabledFeatures()
            .Select(x => x.Extension)
            .Where(x => DefaultExtensionTypes.IsTheme(x.ExtensionType) && x.Zones != null)
            .SelectMany(x => x.Zones.Split(','))
            .Distinct()
            .Select(x => x.Trim())
            .ToArray());
 }
コード例 #19
0
 public IEnumerable <string> GetZones()
 {
     return(_featureManager.GetEnabledFeatures()
            .Select(x => x.Extension)
            .Where(x => DefaultExtensionTypes.IsTheme(x.ExtensionType) && x.Zones != null)
            .SelectMany(x => x.Zones.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries))
            .Select(x => x.Trim())
            .Distinct()
            .ToArray());
 }
コード例 #20
0
        public void DisableFeaturesWithDependenciesTest()
        {
            _folders.Manifests.Add("SuperWiki", @"
Name: SuperWiki
Version: 1.0.3
OrchardVersion: 1
Features:
    SuperWiki: 
        Description: My super wiki module for Orchard.
        Dependencies: SuperWikiDep
    SuperWikiDep:
        Description: My super wiki module for Orchard dependency.
");

            // Initialize the shell descriptor with 0 features
            IShellDescriptorManager shellDescriptorManager = _container.Resolve <IShellDescriptorManager>();
            IFeatureManager         featureManager         = _container.Resolve <IFeatureManager>();

            shellDescriptorManager.UpdateShellDescriptor(0,
                                                         Enumerable.Empty <ShellFeature>(),
                                                         Enumerable.Empty <ShellParameter>());

            // Enable both features by relying on the dependency
            Assert.That(featureManager.EnableFeatures(new [] { "SuperWiki" }, true).Count(), Is.EqualTo(2));

            IEnumerable <string> featuresToDisable = new[] { "SuperWikiDep" };

            // Try to enable without forcing dependencies should fail
            IEnumerable <string> disabledFeatures = featureManager.DisableFeatures(featuresToDisable, false);

            Assert.That(disabledFeatures.Count(), Is.EqualTo(0));
            Assert.That(featureManager.GetEnabledFeatures().Count(), Is.EqualTo(2));

            // Enabling while forcing dependencies should succeed.
            disabledFeatures = featureManager.DisableFeatures(featuresToDisable, true);
            Assert.That(disabledFeatures.Contains("SuperWiki"), Is.True);
            Assert.That(disabledFeatures.Contains("SuperWikiDep"), Is.True);
            Assert.That(featureManager.GetEnabledFeatures().Count(), Is.EqualTo(0));
        }
コード例 #21
0
        private string CreateDefaultRobotsContent()
        {
            const string template =
                @"# robots.txt generated at {0}
User-agent: *
Disallow: 
{1}";
            var absoluteUrl      = _orchardServices.WorkContext.CurrentSite.BaseUrl;
            var isSitemapEnabled = _featureManager.GetEnabledFeatures().Any(x => x.Id == "IDeliverable.Seo.Sitemap");
            var sitemapEntry     = isSitemapEnabled
                ? $"Sitemap: {_urlHelper.AbsoluteAction("Index", "Sitemap", new { Area = "IDeliverable.Seo" })}"
                : default(string);

            return(String.Format(template, absoluteUrl, sitemapEntry));
        }
コード例 #22
0
        /// <summary>
        /// 参见 <see cref="ICompositionStrategy.Compose(string, ShellDescriptor)"/> 方法。
        /// </summary>
        public ShellBlueprint Compose(string applicationName, ShellDescriptor descriptor)
        {
            Guard.ArgumentNotNull(descriptor, nameof(descriptor));
            _logger.WriteDebug("应用组合策略。");
            IEnumerable <Feature> features = _featureManager.GetEnabledFeatures().ToArray();

            _logger.WriteDebug($"应用组合策略, Feature 数量 {features.Count()}");

            //为什么不用 Union? Union 对于引用类型来说和 Concat 无差别,性能反而更差。
            features = features.Concat(BuiltinFeatures()).Distinct(f => f.Descriptor.Name);

            var excludedTypes = GetExcludedTypes(features);

            return(BuildBlueprint(descriptor, features, excludedTypes));
        }
コード例 #23
0
        public void OnResultExecuted(ResultExecutedContext filterContext)
        {
            var enabledFeatures = _featureManager.GetEnabledFeatures();

            foreach (var feature in enabledFeatures)
            {
                _performanceMonitor.PublishMessage(new EnabledFeatureMessage {
                    Category    = feature.Category,
                    Description = feature.Description,
                    Extension   = feature.Extension,
                    FeatureId   = feature.Id,
                    Name        = feature.Name,
                    Priority    = feature.Priority
                });
            }
        }
コード例 #24
0
        public ActionResult Index(ModulesIndexOptions options, PagerParameters pagerParameters)
        {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, "Not allowed to manage modules"))
            {
                return(new HttpUnauthorizedResult());
            }

            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);

            IEnumerable <ModuleEntry> modules = _extensionManager.AvailableExtensions()
                                                .Where(extensionDescriptor => DefaultExtensionTypes.IsModule(extensionDescriptor.ExtensionType) &&

                                                       (string.IsNullOrEmpty(options.SearchText) || extensionDescriptor.Name.ToLowerInvariant().Contains(options.SearchText.ToLowerInvariant())))
                                                .OrderBy(extensionDescriptor => extensionDescriptor.Name)
                                                .Select(extensionDescriptor => new ModuleEntry {
                Descriptor = extensionDescriptor
            });

            pager.Total = modules.Count();


            // This way we can more or less reliably handle this implicit dependency.
            var installModules = _featureManager.GetEnabledFeatures().FirstOrDefault(f => f.Id == "PackagingServices") != null;

            modules = modules.ToList();
            foreach (ModuleEntry moduleEntry in modules)
            {
                moduleEntry.IsRecentlyInstalled = _moduleService.IsRecentlyInstalled(moduleEntry.Descriptor);
                moduleEntry.CanUninstall        = installModules;

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

            return(View(new ModulesIndexViewModel
            {
                Modules = modules,
                InstallModules = installModules,
                Options = options,
                Pager = pager
            }));
        }
コード例 #25
0
        public int Create()
        {
            //check to see if the content already exists

            if (_featureManager.GetEnabledFeatures().Any(x => x.Id == "Orchard.Layouts"))
            {
                upgrade = false;
            }


            if (upgrade == false)
            {
                templateTypeName    = "OSTemplate";
                layoutTypeName      = "OSLayout";
                templateDisplayName = "Onestop Template";
                layoutDisplayName   = "Onestop Layout";
            }

            ContentDefinitionManager.AlterTypeDefinition(
                layoutTypeName, cfg => cfg
                .DisplayedAs(layoutDisplayName)
                .RemovePart("LayoutPart")
                .WithPart("LayoutTemplatePart")
                .WithPart("CommonPart")
                .WithPart("IdentityPart")
                .WithPart("TitlePart"));

            ContentDefinitionManager.AlterTypeDefinition(
                templateTypeName, cfg => cfg
                .DisplayedAs(templateDisplayName)
                .RemovePart("LayoutPart")
                .WithPart("LayoutTemplatePart", builder => builder
                          .WithSetting("isTemplate", "true"))
                .WithPart("CommonPart")
                .WithPart("IdentityPart")
                .WithPart("TitlePart"));

            ContentDefinitionManager.AlterPartDefinition("TemplatedItemPart", cfg => cfg
                                                         .WithDescription("Enables your content type to use a layout template.")
                                                         .Attachable());

            return(1);
        }
コード例 #26
0
        private IEnumerable <string> GetAvailableRecipeFiles()
        {
            //go through each enabled feature- any xml files inside a folder called ContentMigrations will be discovered
            var features = _featureManager.GetEnabledFeatures();

            foreach (var feature in features)
            {
                var migrationPath = _virtualPathProvider.Combine(feature.Extension.Location, feature.Extension.Id, "ContentMigrations", feature.Id);
                var mappedPath    = _virtualPathProvider.MapPath(migrationPath);

                if (!Directory.Exists(mappedPath))
                {
                    continue;
                }

                foreach (var recipeFile in Directory.EnumerateFiles(mappedPath, "*.Recipe.xml"))
                {
                    yield return(_virtualPathProvider.Combine(migrationPath, Path.GetFileName(recipeFile)));
                }
            }
        }
コード例 #27
0
        public void Activated()
        {
            EnsureDistributedLockSchemaExists();

            IDistributedLock @lock;

            if (_distributedLockService.TryAcquireLock(GetType().FullName, TimeSpan.FromMinutes(30), TimeSpan.FromMilliseconds(250), out @lock))
            {
                using (@lock)
                {
                    // Let's make sure that the basic set of features is enabled.  If there are any that are not enabled, then let's enable them first.
                    var theseFeaturesShouldAlwaysBeActive = new[] {
                        "Settings", "Shapes",
                    };

                    var enabledFeatures  = _featureManager.GetEnabledFeatures().Select(f => f.Id).ToList();
                    var featuresToEnable = theseFeaturesShouldAlwaysBeActive.Where(shouldBeActive => !enabledFeatures.Contains(shouldBeActive)).ToList();
                    if (featuresToEnable.Any())
                    {
                        _featureManager.EnableFeatures(featuresToEnable, true);
                    }

                    foreach (var feature in _dataMigrationManager.GetFeaturesThatNeedUpdate())
                    {
                        try
                        {
                            _dataMigrationManager.Update(feature);
                        }
                        catch (Exception ex)
                        {
                            if (ex.IsFatal())
                            {
                                throw;
                            }
                            Logger.Error("Could not run migrations automatically on " + feature, ex);
                        }
                    }
                }
            }
        }
コード例 #28
0
        public ActionResult Configurations(int id)
        {
            if (!User.Identity.IsAuthenticated)
            {
                System.Web.Security.FormsAuthentication.RedirectToLoginPage(Request.RawUrl);
            }

            var inputFileId  = Convert.ToInt32(Request.QueryString["InputFile"] ?? "0");
            var outputFileId = Convert.ToInt32(Request.QueryString["OutputFile"] ?? "0");
            var mode         = Request.QueryString["mode"] ?? string.Empty;

            var viewModel = new Configurations(_fileService)
            {
                ConfigurationParts = _transformalize.GetAuthorizedConfigurations(),
                InputFileId        = inputFileId,
                OutputFileId       = outputFileId,
                CurrentId          = id,
                Mode    = mode,
                Edit    = _orchardServices.Authorizer.Authorize(global::Orchard.Security.StandardPermissions.SiteOwner),
                Enqueue = _featureManager.GetEnabledFeatures().Any(f => f.Id == "Orchard.JobsQueue")
            };

            return(View(viewModel));
        }
コード例 #29
0
        public override void Build(BuildContext context)
        {
            if (!ExportEnabledFeatures && !ExportDisabledFeatures)
            {
                return;
            }

            var enabledFeatures  = _featureManager.GetEnabledFeatures();
            var disabledFeatures = _featureManager.GetDisabledFeatures();
            var tomeltElement    = context.RecipeDocument.Element("Tomelt");
            var root             = new XElement("Feature");

            if (ExportEnabledFeatures)
            {
                root.Add(new XAttribute("enable", String.Join(", ", enabledFeatures.Select(x => x.Id).OrderBy(x => x))));
            }

            if (ExportDisabledFeatures)
            {
                root.Add(new XAttribute("disable", String.Join(", ", disabledFeatures.Select(x => x.Id).OrderBy(x => x))));
            }

            tomeltElement.Add(root);
        }
コード例 #30
0
 public LessCompilerService(IFeatureManager features) {
     _features = features;
     ThemeFolders = new List<string>();
     ThemeFolders.AddRange(_features.GetEnabledFeatures().Select(x => x.Extension.Location + "/" + x.Extension.Id + "/Styles").ToList());
 }
コード例 #31
0
 public NotificatorService(IFeatureManager fmanager)
 {
     this.features = fmanager.GetEnabledFeatures();
 }