示例#1
0
        public Task <ThemeSelectorResult> GetThemeAsync()
        {
            var currentThemeName = shellSettings.Configuration["CurrentTheme"];

            var result = new ThemeSelectorResult
            {
                Priority  = 0,
                ThemeName = currentThemeName
            };

            return(Task.FromResult(result));
        }
        public ThemeSelectorResult GetTheme(RequestContext context)
        {
            if (AdminFilter.IsApplied(context))
            {
                return(null);
            }

            if (_result != null)
            {
                return(_result);
            }

            try
            {
                var workContext = _workContextAccessor.GetContext();
                var session     = workContext.HttpContext.Session;
                if (session != null)
                {
                    string groupName = session[workContext.CurrentSite.SiteName + "MobileContrib.ThemeSwitcher.DeviceGroup"] as string;
                    if (groupName != null)
                    {
                        var devicegroup = _deviceGroupService.GetGroup(groupName);

                        _result = new ThemeSelectorResult
                        {
                            Priority  = 50,
                            ThemeName = devicegroup.Theme
                        };
                        return(_result);
                    }
                }

                var part = _deviceGroupService.GetCurrentGroup();
                if (part != null)
                {
                    _result = new ThemeSelectorResult
                    {
                        Priority  = 50,
                        ThemeName = part.Theme
                    };
                    return(_result);
                }
            }
            catch (Exception)
            {
                // HACK (jamesr): The theme selector seems to be getting called before the DeviceGroupRecord database table is created. Need to find a proper fix.
            }

            return(null);
        }
        public ThemeSelectorResult GetTheme(RequestContext context)
        {
            if (AdminFilter.IsApplied(context))
            {
                return(null);
            }
            if (_result != null)
            {
                return(_result);
            }
            // If the user reverted to the default, short-circuit this
            var workContext = _workContextAccessor.GetContext();
            var session     = workContext.HttpContext.Session;

            if (session != null &&
                (bool)(session[workContext.CurrentSite.SiteName + "Vandelay.ThemePicker.UseDefault"] ?? false))
            {
                return(null);
            }
            var settings = _cacheManager.Get(
                "Vandelay.ThemePicker",
                ctx => {
                ctx.Monitor(_signals.When("Vandelay.ThemePicker.SettingsChanged"));
                return(_settingsService.Get());
            });
            var selectedThemeRule =
                (from settingsRecord in settings
                 let rule = _rules.Where(r =>
                                         r.GetType().Name.Equals(settingsRecord.RuleType, StringComparison.OrdinalIgnoreCase)).FirstOrDefault()
                            where rule != null && rule.Matches(settingsRecord.Name, settingsRecord.Criterion)
                            select settingsRecord).FirstOrDefault();

            if (selectedThemeRule == default(ThemePickerSettingsRecord))
            {
                return(null);
            }
            if (!String.IsNullOrWhiteSpace(selectedThemeRule.Zone))
            {
                dynamic linkShape = _shapeFactory.Create("Vandelay_ThemePicker_LinkToDefault");
                var     zone      = workContext.Layout.Zones[selectedThemeRule.Zone];
                zone.Add(linkShape, selectedThemeRule.Position);
            }
            _result = new ThemeSelectorResult {
                Priority  = selectedThemeRule.Priority,
                ThemeName = selectedThemeRule.Theme
            };
            return(_result);
        }