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 void OnResultExecuting(ResultExecutingContext filterContext) { var viewResult = filterContext.Result as ViewResult; if (viewResult == null) { return; } var workContext = _workContextAccessor.GetContext(filterContext); if (workContext == null || workContext.Layout == null || workContext.CurrentSite == null || AdminFilter.IsApplied(filterContext.RequestContext)) { return; } var group = _deviceGroupService.GetCurrentGroup(); if (group == null) { return; } if (group.Record.SwitcherEnabled && !string.IsNullOrWhiteSpace(group.Record.SwitcherText)) { if (!string.IsNullOrWhiteSpace(group.Record.SwitcherZone)) { dynamic switcherShape = Shape.ThemeSwitcher_Links(SwitcherText: group.Record.SwitcherText); var zone = workContext.Layout.Zones[group.Record.SwitcherZone]; zone.Add(switcherShape, group.Record.SwitcherPosition); } } }