public IEnumerable <Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { var workContext = controllerContext.GetWorkContext(); var filterProviders = workContext.Resolve <IEnumerable <IFilterProvider> >(); return(filterProviders.Select(x => new Filter(x, FilterScope.Action, null))); }
private static Localizer ResolveLocalizer(ControllerContext viewContext, string scope) { var workContext = viewContext.GetWorkContext(); if (workContext == null) { return(NullLocalizer.Instance); } var text = workContext.Resolve <ILifetimeScope>().Resolve <IText>(new NamedParameter("scope", scope)); return(text.Get); }
static TResult Forward <TResult>(ControllerContext controllerContext, Func <IThemeAwareViewEngine, TResult> forwardAction, Func <TResult> defaultAction) { var workContext = controllerContext.GetWorkContext(); if (workContext != null) { var displayViewEngine = workContext.Resolve <IThemeAwareViewEngine>(); if (displayViewEngine != null) { return(forwardAction(displayViewEngine)); } } return(defaultAction()); }
private string ComputeCacheKey(WidgetPart widgetPart, ControllerContext controllerContext) { var sb = new StringBuilder(); var workContext = controllerContext.GetWorkContext(); var theme = _themeManager.GetRequestTheme(controllerContext.RequestContext).Id; var url = GetAbsoluteUrl(controllerContext); var settings = GetCacheSettings(workContext); var varyByHeaders = new HashSet <string>(settings.VaryByRequestHeaders); // Different tenants with the same urls have different entries. varyByHeaders.Add("HOST"); var queryString = controllerContext.RequestContext.HttpContext.Request.QueryString; var requestHeaders = controllerContext.RequestContext.HttpContext.Request.Headers; var parameters = new Dictionary <string, object>(); foreach (var key in queryString.AllKeys.Where(x => x != null)) { parameters[key] = queryString[key]; } foreach (var header in varyByHeaders) { if (requestHeaders.AllKeys.Contains(header)) { parameters["HEADER:" + header] = requestHeaders[header]; } } sb.Append("layer=").Append(widgetPart.LayerId.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)).Append(";"); sb.Append("zone=").Append(widgetPart.Zone).Append(";"); sb.Append("widget=").Append(widgetPart.Id.ToString(CultureInfo.InvariantCulture)).Append(";"); sb.Append("tenant=").Append(_shellSettings.Name).Append(";"); sb.Append("url=").Append(url.ToLowerInvariant()).Append(";"); if (settings.VaryByCulture) { sb.Append("culture=").Append(workContext.CurrentCulture.ToLowerInvariant()).Append(";"); } sb.Append("theme=").Append(theme.ToLowerInvariant()).Append(";"); foreach (var pair in parameters) { sb.AppendFormat("{0}={1};", pair.Key.ToLowerInvariant(), Convert.ToString(pair.Value).ToLowerInvariant()); } return(sb.ToString()); }
public IEnumerable <Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { var workContext = controllerContext.GetWorkContext(); // Map IFilterProvider implementations to MVC Filter objects // Need to provide order values since Filter objects of identical // scope and order would run in undefined order. // We create negative order values to avoid conflicts with other // potential user-provided MVC Filter objects, which hopefully use // positive order values. We do this by reversing the list and // negating the index. var filters = workContext.Resolve <IEnumerable <IFilterProvider> >(); return(filters.Reverse().Select((filter, index) => new Filter(filter, FilterScope.Action, -(index + 1)))); }
private string GetRedirectUrl(string url) { if (url.StartsWith("~/")) { ShellSettings settings; var context = ControllerContext.GetWorkContext(); if (context != null && context.TryResolve <ShellSettings>(out settings) && !string.IsNullOrWhiteSpace(settings.RequestUrlPrefix)) { url = VirtualPathUtility.ToAbsolute(url, Request.ApplicationPath.TrimEnd('/') + "/" + settings.RequestUrlPrefix); } } if (url.StartsWith("~")) { url = url.TrimStart('~'); } return(url); }
public static Localizer Resolve(ControllerContext controllerContext, string scope) { var workContext = controllerContext.GetWorkContext(); return(Resolve(workContext, scope)); }
public override string GenerateControlFormUI(ControllerContext controllerContext) { var viewData = controllerContext.Controller.ViewData; viewData.Model = null; if (FormProvider == null) { FormProvider = ControlFormProvider.DefaultFormProvider(); } var formProvider = FormProvider; var viewContext = new ViewContext { HttpContext = controllerContext.HttpContext, Controller = controllerContext.Controller, RequestContext = controllerContext.RequestContext, ClientValidationEnabled = false, Writer = new FormProviderTextWriter(formProvider), ViewData = viewData }; var htmlHelper = new HtmlHelper <TModel>(viewContext, new ViewDataContainer(viewData)); if (!string.IsNullOrEmpty(GridWrapperStartHtml)) { formProvider.WriteToOutput(string.Format(GridWrapperStartHtml, Title, IconHeader)); } // Start div container formProvider.WriteToOutput(string.Format("<div class=\"control-grid-container\" id=\"{0}_Container\">", ClientId)); using (BeginForm(htmlHelper, UpdateActionName, IsAjaxSupported)) { formProvider.WriteActions(actions); formProvider.WriteToOutput(string.Format("<table class=\"{0}\" id=\"{1}\"></table>", CssClass, ClientId)); formProvider.WriteToOutput(string.Format("<div id=\"{0}_Pager\"></div>", ClientId)); // Hidden values foreach (var hiddenValue in HiddenValues) { formProvider.WriteToOutput(string.Format("<input type=\"hidden\" name=\"{0}\" id=\"{0}\" value=\"{1}\"/>", hiddenValue.Key, HttpUtility.HtmlEncode(hiddenValue.Value))); } #region jqGrid var dataTableOptions = new JObject { { "rowNum", EnablePaginate ? DefaultPageSize : int.MaxValue }, { "autowidth", true }, { "viewrecords", true }, { "loadonce", false }, { "userDataOnFooter", true }, { "hidegrid", EnableShowHideGrid }, { "height", "100%" }, { "recordpos", RecordsInfoPosition }, { "multiselect", EnableCheckboxes }, { "loadComplete", new JRaw(string.Format("function(data){{ if({1} && data.records === 0) {{ $('#{0}_Pager_center').hide(); }} else {{ $('#{0}_Pager_center').show(); }} var width = $('#{0}_Container').width(); $('#{0}').setGridWidth(width); if(data.callback){{ eval(data.callback); }} }}", ClientId, HidePagerWhenEmpty ? "true" : "false")) } }; if (ShowCaption) { dataTableOptions.Add(new JObject { "caption", Title }); } if (EnablePaginate) { dataTableOptions.Add("pager", string.Format("#{0}_Pager", ClientId)); } if (RowsList != null) { dataTableOptions.Add("rowList", RowsList); } if (ShowFooterRow) { dataTableOptions.Add("footerrow", true); } var colNames = new JArray(); var colModel = new JArray(); foreach (var column in columns) { colNames.Add(column.HeaderText); var options = new JObject( new JProperty("name", column.PropertyName), new JProperty("index", column.PropertyName), new JProperty("align", column.Align), new JProperty("sortable", EnableSorting && column.Sortable)); if (column.Width.HasValue) { options.Add(new JProperty("width", column.Width)); options.Add(new JProperty("fixed", true)); } if (!string.IsNullOrEmpty(column.CssClass)) { options.Add(new JProperty("classes", column.CssClass)); } if (column.Filterable) { options.Add(new JProperty("search", true)); var typeCode = Type.GetTypeCode(column.PropertyType); switch (typeCode) { case TypeCode.Boolean: options.Add(new JProperty("stype", "select")); options.Add(new JProperty("editoptions", new JObject(new JProperty("value", ":All;true:Yes;false:No")))); break; case TypeCode.String: options.Add(new JProperty("stype", "text")); options.Add(new JProperty("searchoptions", new JObject(new JProperty("sopt", new JArray("cn"))))); break; default: throw new NotSupportedException(); } } else { options.Add(new JProperty("search", false)); } colModel.Add(options); } if (rowActions.Count > 0) { if (!HideActionsColumn) { colNames.Add(ActionsHeaderText); var options = new JObject( new JProperty("name", "_RowActions"), new JProperty("align", "center"), new JProperty("index", "_RowActions"), new JProperty("cellattr", new JRaw("function(){ return 'title=\"\"'; }")), new JProperty("search", false), new JProperty("sortable", false)); if (ActionsColumnWidth.HasValue) { options.Add(new JProperty("width", ActionsColumnWidth.Value)); options.Add(new JProperty("fixed", true)); } colModel.Add(options); } } dataTableOptions.Add("colNames", colNames); dataTableOptions.Add("colModel", colModel); if (customrVars.Count > 0) { var postData = new JObject(); foreach (var customrVar in customrVars) { postData.Add(customrVar.Key, new JRaw(customrVar.Value)); } dataTableOptions.Add("postData", postData); } dataTableOptions.Add("datatype", "json"); dataTableOptions.Add("jsonReader", new JObject(new JProperty("id", "_id"), new JProperty("subgrid", new JObject(new JProperty("repeatitems", false))))); dataTableOptions.Add("mtype", "POST"); dataTableOptions.Add("url", string.IsNullOrEmpty(GetRecordsUrl) ? controllerContext.HttpContext.Request.RawUrl : GetRecordsUrl); // Sub Grid if (subGridForm != null) { var subGridNames = new JArray(subGridForm.Columns.Select(x => x.HeaderText)); var subGridWidths = new JArray(subGridForm.Columns.Select(x => x.Width.HasValue ? x.Width.Value : 100)); var subGridAligns = new JArray(subGridForm.Columns.Select(x => x.Align)); var subGridMappings = new JArray(subGridForm.Columns.Select(x => x.PropertyName)); var subRowActions = subGridForm.GetRowActions(); if (subRowActions.Count > 0) { subGridNames.Add(subGridForm.ActionsColumnText); subGridWidths.Add(subGridForm.ActionsColumnWidth); subGridAligns.Add("center"); subGridMappings.Add("_RowActions"); } var subGridModel = new JObject { { "name", subGridNames }, { "width", subGridWidths }, { "align", subGridAligns }, { "mapping", subGridMappings } }; var queryString = string.Join(string.Empty, controllerContext.HttpContext.Request.RawUrl.Split('?').Skip(1)); var queryStrings = HttpUtility.ParseQueryString(queryString); queryStrings["subGrid"] = "1"; dataTableOptions.Add("subGrid", true); // ReSharper disable PossibleNullReferenceException dataTableOptions.Add("subGridUrl", controllerContext.HttpContext.Request.Url.GetLeftPart(UriPartial.Path) + "?" + string.Join("&", queryStrings.AllKeys.Select(x => x + "=" + HttpUtility.UrlEncode(queryStrings[x])))); // ReSharper restore PossibleNullReferenceException dataTableOptions.Add("subGridModel", new JArray(subGridModel)); if (subGridForm.Width.HasValue) { dataTableOptions.Add("subGridWidth", subGridForm.Width.Value); } if (subGridForm.AjaxOptions != null) { dataTableOptions.Add("ajaxSubgridOptions", subGridForm.AjaxOptions); } } // Tree grid if (enableTreeGrid) { var treeReader = new JObject { { "level_field", "_level" }, { "parent_id_field", "_parentId" }, { "leaf_field", "_isLeaf" }, { "expanded_field", "_isExpanded" } }; dataTableOptions.Add("treeGrid", true); dataTableOptions.Add("treeGridModel", "adjacency"); dataTableOptions.Add("treeReader", treeReader); } var workContext = controllerContext.GetWorkContext(); var scriptRegister = new ScriptRegister(workContext); scriptRegister.IncludeInline(string.Format("$(document).ready(function(){{ $('#{0}').jqGrid({1}); }});", ClientId, dataTableOptions.ToString(Formatting.None))); if (EnableSearch && columns.Any(x => x.Filterable)) { scriptRegister.IncludeInline(string.Format("$(document).ready(function(){{ $('#{0}').jqGrid('filterToolbar', {{ stringResult: true }}); }});", ClientId)); } if (ReloadEvents.Count > 0) { scriptRegister.IncludeInline(string.Format("$(document).ready(function(){{ $('body').bind('SystemMessageEvent', function(event){{ var events = [{1}]; if(events.indexOf(event.SystemMessage) > -1){{ $('#{0}').jqGrid().trigger('reloadGrid'); }} }}); }});", ClientId, string.Join(", ", ReloadEvents.Select(x => "'" + x + "'")))); } // Resize window event scriptRegister.IncludeInline(string.Format("$(document).ready(function(){{ $(window).resize(function(){{ var width = $('#{0}_Container').width(); $('#{0}').setGridWidth(width); }}); }});", ClientId)); #endregion jqGrid } // End div container formProvider.WriteToOutput("</div>"); if (!string.IsNullOrEmpty(GridWrapperEndHtml)) { formProvider.WriteToOutput(GridWrapperEndHtml); } return(formProvider.GetHtmlString()); }