Пример #1
0
        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)));
        }
Пример #2
0
        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());
        }
Пример #4
0
        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))));
        }
Пример #6
0
        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());
        }