예제 #1
0
        internal PagerBuilder(HtmlHelper helper, string actionName, string controllerName, int totalPageCount, int pageIndex, PagerOptions options, object values)
        {
            // Set defaults
            if (String.IsNullOrEmpty(actionName))
                actionName = (string)helper.ViewContext.RouteData.Values["action"];
            if (String.IsNullOrEmpty(controllerName))
                controllerName = (string)helper.ViewContext.RouteData.Values["controller"];
            if (options == null)
                options = new PagerOptions();

            // Assign to fields
            _helper = helper;
            _actionName = actionName;
            _controllerName = controllerName;
            _totalPageCount = totalPageCount;
            _pageIndex = pageIndex;
            _options = options;
            _values = values;

            // Calculate start page index
            _startPageIndex = pageIndex - (options.MaximumPageNumbers / 2);
            if (_startPageIndex + options.MaximumPageNumbers > _totalPageCount)
                _startPageIndex = _totalPageCount - options.MaximumPageNumbers;
            if (_startPageIndex < 0)
                _startPageIndex = 0;

            // Calculate end page index
            _endPageIndex = _startPageIndex + _options.MaximumPageNumbers;
            if (_endPageIndex > _totalPageCount)
                _endPageIndex = _totalPageCount;
        }
예제 #2
0
 public static MvcHtmlString AjaxPager(this HtmlHelper html, IPagedList pagedList, PagerOptions pagerOptions, AjaxOptions ajaxOptions, object htmlAttributes)
 {
     if (pagedList == null)
         return AjaxPager(html, pagerOptions, new RouteValueDictionary(htmlAttributes));
     return AjaxPager(html, pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, null, null, null, pagerOptions, null,
                      ajaxOptions, htmlAttributes);
 }
예제 #3
0
 internal PagerBuilder(HtmlHelper html, AjaxHelper ajax, string actionName, string controllerName,
     int totalPageCount, int pageIndex, PagerOptions pagerOptions, string routeName, RouteValueDictionary routeValues,
     MvcAjaxOptions ajaxOptions, IDictionary<string, object> htmlAttributes)
 {
     _ajaxPagingEnabled = (ajax != null);
     if (pagerOptions == null)
         pagerOptions = new PagerOptions();
     _html = html;
     _ajax = ajax;
     _actionName = actionName;
     _controllerName = controllerName;
     if (pagerOptions.MaxPageIndex == 0 || pagerOptions.MaxPageIndex > totalPageCount)
         _totalPageCount = totalPageCount;
     else
         _totalPageCount = pagerOptions.MaxPageIndex;
     _pageIndex = pageIndex;
     _pagerOptions = pagerOptions;
     _routeName = routeName;
     _routeValues = routeValues;
     _ajaxOptions = ajaxOptions;
     _htmlAttributes = htmlAttributes;
     // start page index
     _startPageIndex = pageIndex - (pagerOptions.NumericPagerItemCount / 2);
     if (_startPageIndex + pagerOptions.NumericPagerItemCount > _totalPageCount)
         _startPageIndex = _totalPageCount + 1 - pagerOptions.NumericPagerItemCount;
     if (_startPageIndex < 1)
         _startPageIndex = 1;
     // end page index
     _endPageIndex = _startPageIndex + _pagerOptions.NumericPagerItemCount - 1;
     if (_endPageIndex > _totalPageCount)
         _endPageIndex = _totalPageCount;
 }
예제 #4
0
 public static MvcHtmlString AjaxPager(this HtmlHelper html, IPagedList pagedList, PagerOptions pagerOptions, AjaxOptions ajaxOptions)
 {
     if (pagedList == null)
         return AjaxPager(html, pagerOptions, null);
     return AjaxPager(html, pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, null, null, null, pagerOptions, null, ajaxOptions,
                      null);
 }
예제 #5
0
        //Ajax pager builder
        internal PagerBuilder(AjaxHelper ajaxHelper, int totalPageCount, int pageIndex, PagerOptions pagerOptions,
            MvcAjaxOptions ajaxOptions)
        {
            _ajaxPagingEnabled =true;
            if (ajaxHelper == null)
            {
                throw new ArgumentNullException("ajaxHelper");
            }
            if (pagerOptions == null)
                pagerOptions = new PagerOptions();
            _ajax = ajaxHelper;
            if (pagerOptions.MaximumPageNumber == 0 || pagerOptions.MaximumPageNumber > totalPageCount)
                _totalPageCount = totalPageCount;
            else
                _totalPageCount = pagerOptions.MaximumPageNumber;
            _pageIndex = pageIndex;
            _pagerOptions = pagerOptions;
            _ajaxOptions = ajaxOptions ?? new MvcAjaxOptions();

            // start page index
            _startPageIndex = pageIndex - (pagerOptions.NumericPagerItemCount / 2);
            if (_startPageIndex + pagerOptions.NumericPagerItemCount > _totalPageCount)
                _startPageIndex = _totalPageCount + 1 - pagerOptions.NumericPagerItemCount;
            if (_startPageIndex < 1)
                _startPageIndex = 1;

            // end page index
            _endPageIndex = _startPageIndex + _pagerOptions.NumericPagerItemCount - 1;
            if (_endPageIndex > _totalPageCount)
                _endPageIndex = _totalPageCount;
        }
예제 #6
0
 public static MvcHtmlString AjaxPager(this HtmlHelper html, IPagedList pagedList, PagerOptions pagerOptions, AjaxOptions ajaxOptions, IDictionary<string, object> htmlAttributes)
 {
     if (pagedList == null)
     {
         return AjaxPager(html, pagerOptions, htmlAttributes);
     }
     return html.AjaxPager(pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, null, null, null, pagerOptions, null, ajaxOptions, htmlAttributes);
 }
예제 #7
0
 public static MvcHtmlString AjaxPager(this HtmlHelper html, IPagedList pagedList, string routeName, object routeValues, PagerOptions pagerOptions, AjaxOptions ajaxOptions)
 {
     if (pagedList == null)
     {
         return AjaxPager(html, pagerOptions, null);
     }
     return html.AjaxPager(pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, null, null, routeName, pagerOptions, routeValues, ajaxOptions, null);
 }
예제 #8
0
 public static MvcHtmlString AjaxPager(this HtmlHelper html, IPagedList pagedList, string actionName, string controllerName, PagerOptions pagerOptions, AjaxOptions ajaxOptions)
 {
     if (pagedList == null)
     {
         return AjaxPager(html, pagerOptions, null);
     }
     return html.AjaxPager(pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, actionName, controllerName, null, pagerOptions, ((RouteValueDictionary)null), ajaxOptions, ((IDictionary<string, object>)null));
 }
예제 #9
0
 /// <summary>
 /// Used when PagedList is null
 /// </summary>
 internal PagerBuilder(HtmlHelper html, PagerOptions pagerOptions, IDictionary<string, object> htmlAttributes)
 {
     if (pagerOptions == null)
         pagerOptions = new PagerOptions();
     _html = html;
     _pagerOptions = pagerOptions;
     _htmlAttributes = htmlAttributes;
 }
예제 #10
0
파일: Pager.cs 프로젝트: edokan/MvcPaging
 public Pager(HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount)
 {
     this.htmlHelper = htmlHelper;
     this.pageSize = pageSize;
     this.currentPage = currentPage;
     this.totalItemCount = totalItemCount;
     this.pagerOptions = new PagerOptions();
 }
예제 #11
0
 public Pager(HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount)
 {
     _htmlHelper = htmlHelper;
     _pageSize = pageSize;
     _currentPage = currentPage;
     _totalItemCount = totalItemCount;
     PagerOptions = new PagerOptions();
 }
예제 #12
0
 ///<include file='MvcPagerDocs.xml' path='MvcPagerDocs/PagerExtensions/Method[@name="HtmlPager4"]/*'/>
 public static HtmlPager Pager(this HtmlHelper helper, IPagedList pagedList, PagerOptions pagerOptions)
 {
     if (pagedList == null)
     {
         throw new ArgumentNullException("pagedList");
     }
     return Pager(helper, pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, pagerOptions);
 }
예제 #13
0
 ///<include file='MvcPagerDocs.xml' path='MvcPagerDocs/HtmlPager/Constructor[@name="HtmlPager1"]/*'/>
 public HtmlPager(HtmlHelper html, int totalItemCount, int pageSize, int pageIndex,PagerOptions pagerOptions)
 {
     _htmlHelper = html;
     _totalItemCount = totalItemCount;
     _pageSize = pageSize;
     _currentPageIndex = pageIndex;
     _pagerOptions = pagerOptions;
 }
예제 #14
0
 ///<include file='MvcPagerDocs.xml' path='MvcPagerDocs/HtmlPager/Method[@name="Options"]/*'/>
 public HtmlPager Options(Action<PagerOptionsBuilder> builder)
 {
     if (_pagerOptions == null)
     {
         _pagerOptions = new PagerOptions();
     }
     builder(new PagerOptionsBuilder(_pagerOptions));
     return this;
 }
예제 #15
0
 ///<include file='MvcPagerDocs.xml' path='MvcPagerDocs/AjaxPager/Constructor[@name="AjaxPager1"]/*'/>
 public AjaxPager(AjaxHelper ajax, int totalItemCount, int pageSize, int pageIndex,PagerOptions pagerOptions, MvcAjaxOptions ajaxOptions)
 {
     _ajaxHelper = ajax;
     _totalItemCount = totalItemCount;
     _pageSize = pageSize;
     _currentPageIndex = pageIndex;
     _pagerOptions = pagerOptions;
     _ajaxOptions = ajaxOptions;
 }
예제 #16
0
파일: PagerBuilder.cs 프로젝트: Godoy/CMS
 /// <summary>
 /// used when PagedList is null
 /// </summary>
 public PagerBuilder(HtmlHelper html, AjaxHelper ajax, PagerOptions pagerOptions, IDictionary<string, object> htmlAttributes)
 {
     if (pagerOptions == null)
         pagerOptions = new PagerOptions();
     _html = html;
     _ajax = ajax;
     _pagerOptions = pagerOptions;
     _htmlAttributes = htmlAttributes;
 }
예제 #17
0
        public static MvcHtmlString AjaxPager(this HtmlHelper html, int totalItemCount, int pageSize, int pageIndex, string actionName, string controllerName,
			string routeName, PagerOptions pagerOptions, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes)
        {
            if (pagerOptions == null)
                pagerOptions = new PagerOptions();

            var totalPageCount = (int)Math.Ceiling(totalItemCount / (double)pageSize);
            var builder = new PagerBuilder(html, actionName, controllerName, totalPageCount, pageIndex, pagerOptions, routeName, routeValues, htmlAttributes);
            return builder.RenderPager();
        }
예제 #18
0
 ///<include file='MvcPagerDocs.xml' path='MvcPagerDocs/PagerExtensions/Method[@name="HtmlPager1"]/*'/>
 public static HtmlPager Pager(this HtmlHelper helper, int totalItemCount, int pageSize, int pageIndex, PagerOptions pagerOptions)
 {
     return new HtmlPager
         (
             helper,
             totalItemCount,pageSize,
             pageIndex,
             pagerOptions
         );
 }
예제 #19
0
        public static MvcHtmlString AjaxPager(this HtmlHelper html, int totalItemCount, int pageSize, int pageIndex, string actionName, string controllerName,
            string routeName, PagerOptions pagerOptions, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes)
        {
            if(pagerOptions == null)
                pagerOptions = new PagerOptions();
            pagerOptions.UseJqueryAjax = true;

            var totalPageCount = (int) Math.Ceiling(totalItemCount/(double) pageSize);
            var builder = new PagerBuilder(html, actionName, controllerName, totalPageCount, pageIndex, totalItemCount, pagerOptions,
                routeName, new RouteValueDictionary(routeValues), ajaxOptions, new RouteValueDictionary(htmlAttributes));
            return builder.RenderPager();
        }
예제 #20
0
파일: PagerBuilder.cs 프로젝트: chunlei/QrF
        internal PagerBuilder(HtmlHelper html, AjaxHelper ajax, string actionName, string controllerName,
            int totalPageCount, int pageIndex, int totalItemCount, PagerOptions pagerOptions, string routeName, RouteValueDictionary routeValues,
            AjaxOptions ajaxOptions, IDictionary<string, object> htmlAttributes)
        {
            _msAjaxPaging = (ajax != null);
            if (String.IsNullOrEmpty(actionName))
            {
                if (ajax != null)
                    actionName = (string)ajax.ViewContext.RouteData.Values["action"];
                else
                    actionName = (string)html.ViewContext.RouteData.Values["action"];
            }
            if (String.IsNullOrEmpty(controllerName))
            {
                if (ajax != null)
                    controllerName = (string)ajax.ViewContext.RouteData.Values["controller"];
                else
                    controllerName = (string)html.ViewContext.RouteData.Values["controller"];
            }
            if (pagerOptions == null)
                pagerOptions = new PagerOptions();

            _html = html;
            _ajax = ajax;
            _actionName = actionName;
            _controllerName = controllerName;
            if (pagerOptions.MaxPageIndex == 0 || pagerOptions.MaxPageIndex > totalPageCount)
                _totalPageCount = totalPageCount;
            else
                _totalPageCount = pagerOptions.MaxPageIndex;
            _pageIndex = pageIndex;
            _totalItemCount = totalItemCount;
            _pagerOptions = pagerOptions;
            _routeName = routeName;
            _routeValues = routeValues;
            _ajaxOptions = ajaxOptions;
            _htmlAttributes = htmlAttributes;

            // start page index
            _startPageIndex = pageIndex - (pagerOptions.NumericPagerItemCount / 2);
            if (_startPageIndex + pagerOptions.NumericPagerItemCount > _totalPageCount)
                _startPageIndex = _totalPageCount + 1 - pagerOptions.NumericPagerItemCount;
            if (_startPageIndex < 1)
                _startPageIndex = 1;

            // end page index
            _endPageIndex = _startPageIndex + _pagerOptions.NumericPagerItemCount - 1;
            if (_endPageIndex > _totalPageCount)
                _endPageIndex = _totalPageCount;
        }
예제 #21
0
		/// <summary>
		///     Initialize a new instance.
		/// </summary>
		/// <param name="currentPage">The current page number in the pager.</param>
		/// <param name="totalPage">The total page count of the pager.</param>
		/// <param name="options">The options of the pager.</param>
		/// <param name="viewContext">The current view context.</param>
		/// <param name="generationMode">The generation mode.</param>
		public PagerGenerationContext(
			int currentPage,
			int totalPage,
			PagerOptions options,
			ViewContext viewContext,
			PagerGenerationMode generationMode)
		{
			Options = options;
			ViewContext = viewContext;
			GenerationMode = generationMode;
			CurrentPage = currentPage;
			TotalPage = totalPage;
			GenerationMode = generationMode;
		}
예제 #22
0
 // Methods
 internal PagerBuilder(HtmlHelper html, AjaxHelper ajax, PagerOptions pagerOptions, IDictionary<string, object> htmlAttributes)
 {
     this.totalPageCountGang = 1;
     this.startPageIndexGang = 1;
     this.endPageIndex = 1;
     if (pagerOptions == null)
     {
         pagerOptions = new PagerOptions();
     }
     this.htmlGang = html;
     this.ajaxGang = ajax;
     this.pagerOpitonGang = pagerOptions;
     this.htmlAttributesGang = htmlAttributes;
 }
예제 #23
0
 public static MvcHtmlString Pager(this HtmlHelper helper, int TotalCount, int pageSize, int pageIndex, string actionName, string controllerName,
     PagerOptions pagerOptions, string routeName, object routeValues, object htmlAttributes)
 {
     var totalPageCount = (int)Math.Ceiling(TotalCount / (double)pageSize);
     var builder = new PagerBuilder
         (
             helper,
             actionName,
             controllerName,
             totalPageCount,
             pageIndex,
             pagerOptions,
             routeName,
             new RouteValueDictionary(routeValues),
             new RouteValueDictionary(htmlAttributes)
         );
     return builder.RenderPager();
 }
예제 #24
0
		public PagerOptionsBuilder(PagerOptions pagerOptions)
		{
			this.pagerOptions = pagerOptions;
		}
예제 #25
0
 public FarmTypeResolver(IFarmTypeService farmTypeService, IOptions <PagerOptions> pagerOptions)
 {
     _farmTypeService = farmTypeService;
     _pagerOptions    = pagerOptions.Value;
 }
예제 #26
0
 private static MvcHtmlString Pager(AjaxHelper ajax, PagerOptions pagerOptions, IDictionary<string, object> htmlAttributes)
 {
     return new PagerBuilder(null, ajax, pagerOptions, htmlAttributes).RenderPager();
 }
예제 #27
0
        public async Task <IActionResult> Get(LabelIndexOptions opts, PagerOptions pager)
        {
            if (opts == null)
            {
                opts = new LabelIndexOptions();;
            }

            if (pager == null)
            {
                pager = new PagerOptions();
            }

            if (opts.Sort == LabelSortBy.Auto)
            {
                opts.Sort  = LabelSortBy.Entities;
                opts.Order = OrderBy.Desc;
            }

            var labels = await _labelService.GetResultsAsync(opts, pager);

            PagedResults <LabelApiResult> results = null;

            if (labels != null)
            {
                results = new PagedResults <LabelApiResult>
                {
                    Total = labels.Total
                };

                var baseUrl = await _contextFacade.GetBaseUrlAsync();

                foreach (var label in labels.Data)
                {
                    var url = baseUrl + _contextFacade.GetRouteUrl(new RouteValueDictionary()
                    {
                        ["opts.labelId"] = label.Id,
                        ["opts.alias"]   = label.Alias
                    });

                    results.Data.Add(new LabelApiResult()
                    {
                        Id            = label.Id,
                        Name          = label.Name,
                        Description   = label.Description,
                        ForeColor     = label.ForeColor,
                        BackColor     = label.BackColor,
                        Alias         = label.Alias,
                        TotalEntities = new FriendlyNumber()
                        {
                            Text  = label.TotalEntities.ToPrettyInt(),
                            Value = label.TotalEntities
                        },
                        Rank = 0
                    });
                }
            }

            LabelApiResults output = null;

            if (results != null)
            {
                output = new LabelApiResults()
                {
                    Page       = pager.Page,
                    Size       = pager.Size,
                    Total      = results.Total,
                    TotalPages = results.Total.ToSafeCeilingDivision(pager.Size),
                    Data       = results.Data
                };
            }

            return(output != null
                ? base.Result(output)
                : base.NoResults());
        }
예제 #28
0
        // ---------------
        // Settings
        // ---------------

        public async Task <IActionResult> Settings(RoleIndexOptions opts, PagerOptions pager)
        {
            // Ensure we have permission
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageFileSettings))
            {
                return(Unauthorized());
            }

            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Admin", "Plato.Admin")
                            .LocalNav()
                            ).Add(S["Files"], manage => manage
                                  .Action("Index", "Admin", "Plato.Files")
                                  .LocalNav()
                                  ).Add(S["Settings"]);
            });

            // default options
            if (opts == null)
            {
                opts = new RoleIndexOptions();
            }

            // default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get default options
            var defaultViewOptions  = new RoleIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = new FileSettingsViewModel()
            {
                Options = opts,
                Pager   = pager
            };

            // Add view model to context
            this.HttpContext.Items[typeof(FileSettingsViewModel)] = viewModel;

            // Return view
            return(View((LayoutViewModel)await _settingsViewProvider.ProvideIndexAsync(new FileSetting(), this)));
        }
예제 #29
0
        public async Task <IViewComponentResult> InvokeAsync(EntityIndexOptions options, PagerOptions pager)
        {
            // Build default
            if (options == null)
            {
                options = new EntityIndexOptions();
            }

            // Build default
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Review view
            return(View(await GetViewModel(options, pager)));
        }
예제 #30
0
 ///<include file='MvcPagerDocs.xml' path='MvcPagerDocs/HtmlPager/Constructor[@name="HtmlPager3"]/*'/>
 public HtmlPager(HtmlHelper html, IPagedList pagedList,PagerOptions pagerOptions) : this(html, pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex,pagerOptions) { }
예제 #31
0
 public virtual IHtmlString Pager(object model, PagerOptions options)
 {
     return(Pager(model, null, options, null));
 }
예제 #32
0
        public async Task <IActionResult> Index(TagIndexOptions opts, PagerOptions pager)
        {
            // Default options
            if (opts == null)
            {
                opts = new TagIndexOptions();
            }

            // Default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get default options
            var defaultViewOptions  = new TagIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetIndexViewModelAsync(opts, pager);

            // Add view model to context
            HttpContext.Items[typeof(TagIndexViewModel <Tag>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetTags", viewModel));
                }
            }

            // Return Url for authentication purposes
            ViewData["ReturnUrl"] = _contextFacade.GetRouteUrl(new RouteValueDictionary()
            {
                ["area"]       = "Plato.Ideas.Tags",
                ["controller"] = "Home",
                ["action"]     = "Index"
            });

            // Breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Ideas"], ideas => ideas
                                  .Action("Index", "Home", "Plato.Ideas")
                                  .LocalNav()
                                  ).Add(S["Tags"]);
            });

            // Return view
            return(View((LayoutViewModel)await _tagViewProvider.ProvideIndexAsync(new Tag(), this)));
        }
예제 #33
0
        public async Task <IViewComponentResult> InvokeAsync(LabelIndexOptions options, PagerOptions pager)
        {
            if (options == null)
            {
                options = new LabelIndexOptions();
            }

            if (pager == null)
            {
                pager = new PagerOptions();
            }

            return(View(await GetViewModel(options, pager)));
        }
예제 #34
0
        async Task <EntityIndexViewModel <Idea> > GetDisplayViewModelAsync(EntityIndexOptions options, PagerOptions pager)
        {
            // Get current feature
            var feature = await _featureFacade.GetFeatureByIdAsync("Plato.Ideas");

            // Restrict results to current feature
            if (feature != null)
            {
                options.FeatureId = feature.Id;
            }

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            return(new EntityIndexViewModel <Idea>()
            {
                Options = options,
                Pager = pager
            });
        }
예제 #35
0
        // ---------------

        async Task <TagIndexViewModel <Tag> > GetIndexViewModelAsync(TagIndexOptions options, PagerOptions pager)
        {
            // Get current feature
            var feature = await _featureFacade.GetFeatureByIdAsync("Plato.Ideas");

            // Restrict results to current feature
            if (feature != null)
            {
                options.FeatureId = feature.Id;
            }

            if (options.Sort == TagSortBy.Auto)
            {
                options.Sort  = TagSortBy.Entities;
                options.Order = OrderBy.Desc;
            }

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            return(new TagIndexViewModel <Tag>()
            {
                Options = options,
                Pager = pager
            });
        }
예제 #36
0
        public async Task <IActionResult> Display(EntityIndexOptions opts, PagerOptions pager)
        {
            // Default options
            if (opts == null)
            {
                opts = new EntityIndexOptions();
            }

            // Default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get tag
            var tag = await _tagStore.GetByIdAsync(opts.TagId);

            // Ensure tag exists
            if (tag == null)
            {
                return(NotFound());
            }

            // Get default options
            var defaultViewOptions  = new EntityIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (opts.Filter != defaultViewOptions.Filter)
            {
                this.RouteData.Values.Add("opts.filter", opts.Filter);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetDisplayViewModelAsync(opts, pager);

            // Add view model to context
            HttpContext.Items[typeof(EntityIndexViewModel <Idea>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetIdeas", viewModel));
                }
            }

            // Return Url for authentication purposes
            ViewData["ReturnUrl"] = _contextFacade.GetRouteUrl(new RouteValueDictionary()
            {
                ["area"]       = "Plato.Ideas.Tags",
                ["controller"] = "Home",
                ["action"]     = "Display",
                ["opts.tagId"] = tag != null ? tag.Id.ToString() : "",
                ["opts.alias"] = tag != null ? tag.Alias.ToString() : ""
            });

            // Build page title
            _pageTitleBuilder.AddSegment(S[tag.Name], int.MaxValue);

            // Breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Ideas"], ideas => ideas
                                  .Action("Index", "Home", "Plato.Ideas")
                                  .LocalNav()
                                  ).Add(S["Tags"], tags => tags
                                        .Action("Index", "Home", "Plato.Ideas.Tags")
                                        .LocalNav()
                                        ).Add(S[tag.Name]);
            });

            // Return view
            return(View((LayoutViewModel)await _tagViewProvider.ProvideDisplayAsync(new Tag(tag), this)));
        }
예제 #37
0
        public async Task <IActionResult> Index(EntityIndexOptions opts, PagerOptions pager)
        {
            // Build options
            if (opts == null)
            {
                opts = new EntityIndexOptions();
            }

            // Build pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get category
            var category = await _categoryStore.GetByIdAsync(opts.CategoryId);

            // If supplied ensure category exists
            if (category == null && opts.CategoryId > 0)
            {
                return(NotFound());
            }

            // Get default options
            var defaultViewOptions  = new EntityIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (opts.Filter != defaultViewOptions.Filter)
            {
                this.RouteData.Values.Add("opts.filter", opts.Filter);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetIndexViewModelAsync(category, opts, pager);

            // Add view model to context
            HttpContext.Items[typeof(EntityIndexViewModel <Question>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0 && !pager.Enabled)
                {
                    return(View("GetQuestions", viewModel));
                }
            }

            // Return Url for authentication purposes
            ViewData["ReturnUrl"] = _contextFacade.GetRouteUrl(new RouteValueDictionary()
            {
                ["area"]            = "Plato.Questions.Categories",
                ["controller"]      = "Home",
                ["action"]          = "Index",
                ["opts.categoryId"] = category != null ? category.Id.ToString() : "",
                ["opts.alias"]      = category != null ? category.Alias.ToString() : ""
            });

            // Build page title
            if (category != null)
            {
                _pageTitleBuilder.AddSegment(S[category.Name], int.MaxValue);
            }

            // Build breadcrumb
            _breadCrumbManager.Configure(async builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Questions"], home => home
                                  .Action("Index", "Home", "Plato.Questions")
                                  .LocalNav()
                                  );

                // Build breadcrumb
                var parents = category != null
                    ? await _categoryStore.GetParentsByIdAsync(category.Id)
                    : null;
                if (parents == null)
                {
                    builder.Add(S["Categories"]);
                }
                else
                {
                    builder.Add(S["Categories"], channels => channels
                                .Action("Index", "Home", "Plato.Questions.Categories", new RouteValueDictionary()
                    {
                        ["opts.categoryId"] = null,
                        ["opts.alias"]      = null
                    })
                                .LocalNav()
                                );

                    foreach (var parent in parents)
                    {
                        if (parent.Id != category.Id)
                        {
                            builder.Add(S[parent.Name], channel => channel
                                        .Action("Index", "Home", "Plato.Questions.Categories", new RouteValueDictionary
                            {
                                ["opts.categoryId"] = parent.Id,
                                ["opts.alias"]      = parent.Alias,
                            })
                                        .LocalNav()
                                        );
                        }
                        else
                        {
                            builder.Add(S[parent.Name]);
                        }
                    }
                }
            });

            // Return view
            return(View((LayoutViewModel)await _viewProvider.ProvideIndexAsync(category, this)));
        }
예제 #38
0
        // ------------
        // Index
        // ------------

        public async Task <IActionResult> Index(LabelIndexOptions opts, PagerOptions pager)
        {
            //if (!await _authorizationService.AuthorizeAsync(User, PermissionsProvider.ManageRoles))
            //{
            //    return Unauthorized();
            //}

            if (opts == null)
            {
                opts = new LabelIndexOptions();
            }

            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get default options
            var defaultViewOptions  = new LabelIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetIndexViewModelAsync(opts, pager);

            // Add view model to context
            HttpContext.Items[typeof(LabelIndexViewModel <Label>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetLabels", viewModel));
                }
            }

            // Breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder
                .Add(S["Home"], home => home
                     .Action("Index", "Admin", "Plato.Admin")
                     .LocalNav())
                .Add(S["Questions"], questions => questions
                     .Action("Index", "Admin", "Plato.Questions")
                     .LocalNav())
                .Add(S["Labels"]);
            });

            // Return view
            return(View((LayoutViewModel)await _viewProvider.ProvideIndexAsync(new Label(), this)));
        }
예제 #39
0
        // --------------
        // Manage Users
        // --------------

        public async Task <IActionResult> Index(int offset, UserIndexOptions opts, PagerOptions pager)
        {
            // Ensure we have permission
            if (!await _authorizationService.AuthorizeAsync(HttpContext.User,
                                                            Permissions.ManageUsers))
            {
                return(Unauthorized());
            }

            // default options
            if (opts == null)
            {
                opts = new UserIndexOptions();
            }

            // default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            // Get default options
            var defaultViewOptions  = new UserIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                RouteData.Values.Add("pager.size", pager.Size);
            }

            // Enable edit options for admin view
            opts.EnableEdit = true;

            var viewModel = new UserIndexViewModel()
            {
                Options = opts,
                Pager   = pager
            };

            // Add view options to context for use within view adapters
            HttpContext.Items[typeof(UserIndexViewModel)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetUsers", viewModel));
                }
            }

            // Build breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Admin", "Plato.Admin")
                            .LocalNav()
                            ).Add(S["Users"]);
            });

            // Return view
            return(View((LayoutViewModel)await _viewProvider.ProvideIndexAsync(new User(), this)));
        }
예제 #40
0
        async Task <EntityIndexViewModel <Doc> > GetIndexViewModelAsync(EntityIndexOptions options, PagerOptions pager)
        {
            // Get current feature
            var feature = await _featureFacade.GetFeatureByIdAsync(RouteData.Values["area"].ToString());

            // Restrict results to current feature
            if (feature != null)
            {
                options.FeatureId = feature.Id;
            }

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            // Return updated model
            return(new EntityIndexViewModel <Doc>()
            {
                Options = options,
                Pager = pager
            });
        }
예제 #41
0
        public async Task <IPagedResults <TModel> > GetResultsAsync(EntityIndexOptions options, PagerOptions pager)
        {
            if (options == null)
            {
                options = new EntityIndexOptions();
            }

            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Special edge case for popular entities
            if (options.Sort == SortBy.Popular)
            {
                options.AddSortColumn(SortBy.Participants.ToString(), options.Order);
                options.AddSortColumn(SortBy.Replies.ToString(), options.Order);
                options.AddSortColumn(SortBy.Views.ToString(), options.Order);
                options.AddSortColumn(SortBy.LastReply.ToString(), options.Order);
            }
            else
            {
                options.AddSortColumn(options.Sort.ToString(), options.Order);
            }

            // Get authenticated user
            var user = await _contextFacade.GetAuthenticatedUserAsync();

            // Return tailored results
            return(await _entityStore.QueryAsync()
                   .Take(pager.Page, pager.Size, pager.CountTotal)
                   .Configure(_configureDb)
                   .Select <SimpleEntityQueryParams>(q =>
            {
                // ----------------
                // Set current authenticated user id
                // This is required for various security checks
                // i.e. Role based security & displaying private entities
                // ----------------

                q.UserId.Equals(user?.Id ?? 0);

                // ----------------
                // Basic parameters
                // ----------------

                if (options.FeatureId != null && options.FeatureId.Value > 0)
                {
                    q.FeatureId.Equals(options.FeatureId.Value);
                }

                if (!string.IsNullOrEmpty(options.Search))
                {
                    q.Keywords.Like(options.Search);
                }

                // Multiple categories
                if (options.CategoryIds != null)
                {
                    q.CategoryId.IsIn(options.CategoryIds);
                }
                else
                {
                    // A single category
                    if (options.CategoryId >= 0)
                    {
                        q.CategoryId.Equals(options.CategoryId);
                    }
                }

                if (options.LabelId > 0)
                {
                    q.LabelId.Equals(options.LabelId);
                }

                if (options.TagId > 0)
                {
                    q.TagId.Equals(options.TagId);
                }

                if (options.CreatedByUserId > 0)
                {
                    q.CreatedUserId.Equals(options.CreatedByUserId);
                }

                // ----------------
                // Filters
                // ----------------

                switch (options.Filter)
                {
                case FilterBy.Started:
                    if (user != null)
                    {
                        q.CreatedUserId.Equals(user.Id);
                    }
                    break;

                case FilterBy.Participated:
                    if (user != null)
                    {
                        q.ParticipatedUserId.Equals(user.Id);
                    }
                    break;

                case FilterBy.Following:
                    if (user != null)
                    {
                        q.FollowUserId.Equals(user.Id);
                    }
                    break;

                case FilterBy.Starred:
                    if (user != null)
                    {
                        q.StarUserId.Equals(user.Id);
                    }
                    break;

                case FilterBy.NoReplies:
                    q.TotalReplies.Equals(0);
                    break;
                }

                // ----------------
                // Additional parameter configuration
                // ----------------

                _configureParams?.Invoke(q);
            })
                   .OrderBy(options.SortColumns)
                   .ToList());
        }
예제 #42
0
        async Task <EntityIndexViewModel <Article> > GetDisplayViewModelAsync(EntityIndexOptions options, PagerOptions pager)
        {
            // Get articles feature
            options.FeatureId = await GetFeatureIdAsync();

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            // Return updated model
            return(new EntityIndexViewModel <Article>()
            {
                Options = options,
                Pager = pager
            });
        }
예제 #43
0
        // -----------------
        // User List
        // -----------------

        public async Task <IActionResult> Index(UserIndexOptions opts, PagerOptions pager)
        {
            // Ensure we have permission
            if (!await _authorizationService.AuthorizeAsync(User,
                                                            Permissions.ViewUsers))
            {
                return(Unauthorized());
            }

            // default options
            if (opts == null)
            {
                opts = new UserIndexOptions();
            }

            // default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            // Get default options
            var defaultViewOptions  = new UserIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = new UserIndexViewModel()
            {
                Options = opts,
                Pager   = pager
            };

            // Add view model to context
            HttpContext.Items[typeof(UserIndexViewModel)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetUsers", viewModel));
                }
            }

            // Return Url for authentication & canonical url purposes
            ViewData["ReturnUrl"] = _contextFacade.GetRouteUrl(new RouteValueDictionary()
            {
                ["area"]       = "Plato.Users",
                ["controller"] = "Home",
                ["action"]     = "Index"
            });

            // Breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Users"]);
            });

            // Return view
            return(View((LayoutViewModel)await _viewProvider.ProvideIndexAsync(new ProfilePage(), this)));
        }
예제 #44
0
 public static MvcHtmlString Pager(this AjaxHelper ajax, IPagedList pagedList, string routeName, RouteValueDictionary routeValues,
     PagerOptions pagerOptions, AjaxOptions ajaxOptions, IDictionary<string, object> htmlAttributes)
 {
     if (pagedList == null)
         return Pager(ajax, pagerOptions, htmlAttributes);
     return Pager(ajax, pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex, null, null, routeName, pagerOptions, routeValues, ajaxOptions, htmlAttributes);
 }
예제 #45
0
        public async Task <IActionResult> Index(EntityIndexOptions opts, PagerOptions pager)
        {
            // Default options
            if (opts == null)
            {
                opts = new EntityIndexOptions();
            }

            // Default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get user
            var user = await _platoUserStore.GetByIdAsync(opts.CreatedByUserId);

            // Ensure user exists
            if (user == null)
            {
                return(NotFound());
            }

            // Get default options
            var defaultViewOptions  = new EntityIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (opts.Filter != defaultViewOptions.Filter)
            {
                this.RouteData.Values.Add("opts.filter", opts.Filter);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetIndexViewModelAsync(opts, pager);

            // Add view model to context
            this.HttpContext.Items[typeof(EntityIndexViewModel <Doc>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetDocs", viewModel));
                }
            }

            // Build page title
            _pageTitleBuilder
            .AddSegment(S["Users"])
            .AddSegment(S[user.DisplayName])
            .AddSegment(S["Docs"]);

            // Build breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Users"], users => users
                                  .Action("Index", "Home", "Plato.Users")
                                  .LocalNav()
                                  ).Add(S[user.DisplayName], name => name
                                        .Action("Display", "Home", "Plato.Users", new RouteValueDictionary()
                {
                    ["opts.id"]    = user.Id,
                    ["opts.alias"] = user.Alias
                })
                                        .LocalNav()
                                        ).Add(S["Docs"]);
            });


            //// Return view
            return(View((LayoutViewModel)await _userViewProvider.ProvideDisplayAsync(new UserIndex()
            {
                Id = user.Id
            }, this)));
        }
        async Task <EntityViewModel <Idea, IdeaComment> > GetViewModel(EntityOptions options, PagerOptions pager)
        {
            var topic = await _entityStore.GetByIdAsync(options.Id);

            if (topic == null)
            {
                throw new ArgumentNullException();
            }

            var results = await _replyService
                          .ConfigureQuery(async q =>
            {
                // Hide private?
                if (!await _authorizationService.AuthorizeAsync(HttpContext.User,
                                                                Permissions.ViewHiddenIdeaComments))
                {
                    q.HideHidden.True();
                }

                // Hide spam?
                if (!await _authorizationService.AuthorizeAsync(HttpContext.User,
                                                                Permissions.ViewSpamIdeaComments))
                {
                    q.HideSpam.True();
                }

                // Hide deleted?
                if (!await _authorizationService.AuthorizeAsync(HttpContext.User,
                                                                Permissions.ViewDeletedIdeaComments))
                {
                    q.HideDeleted.True();
                }
            })
                          .GetResultsAsync(options, pager);

            // Set total on pager
            pager.SetTotal(results?.Total ?? 0);

            // Return view model
            return(new EntityViewModel <Idea, IdeaComment>
            {
                Options = options,
                Pager = pager,
                Entity = topic,
                Replies = results
            });
        }
예제 #47
0
 public static MvcHtmlString Pager(this AjaxHelper ajax, IPagedList pagedList, PagerOptions pagerOptions, AjaxOptions ajaxOptions)
 {
     return pagedList == null ? Pager(ajax, pagerOptions, null) : Pager(ajax, pagedList.TotalItemCount, pagedList.PageSize, pagedList.CurrentPageIndex,
         null, null, null, pagerOptions, null, ajaxOptions, null);
 }
예제 #48
0
파일: PagerBuilder.cs 프로젝트: chunlei/QrF
 //non Ajax pager builder
 internal PagerBuilder(HtmlHelper helper, string actionName, string controllerName, int totalPageCount,
     int pageIndex, int totalItemCount, PagerOptions pagerOptions, string routeName, RouteValueDictionary routeValues,
     IDictionary<string, object> htmlAttributes)
     : this(helper, null, actionName, controllerName,
         totalPageCount, pageIndex, totalItemCount, pagerOptions, routeName, routeValues, null, htmlAttributes) { }
예제 #49
0
 private static MvcHtmlString Pager(HtmlHelper helper, PagerOptions pagerOptions, IDictionary<string, object> htmlAttributes)
 {
     return new PagerBuilder(helper, null, pagerOptions, htmlAttributes).RenderPager();
 }
예제 #50
0
        // ---------------

        async Task <LabelIndexViewModel <Label> > GetIndexViewModelAsync(LabelIndexOptions options, PagerOptions pager)
        {
            // Get articles feature
            options.FeatureId = await GetFeatureIdAsync();

            if (options.Sort == LabelSortBy.Auto)
            {
                options.Sort  = LabelSortBy.Entities;
                options.Order = OrderBy.Desc;
            }

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            return(new LabelIndexViewModel <Label>()
            {
                Options = options,
                Pager = pager
            });
        }
예제 #51
0
        public async Task <IActionResult> Index(ReportOptions opts, PagerOptions pager)
        {
            // Default options
            if (opts == null)
            {
                opts = new ReportOptions();
            }

            // Default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get default options
            var defaultViewOptions  = new ReportOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Start != defaultViewOptions.Start)
            {
                this.RouteData.Values.Add("opts.start", opts.Start);
            }
            if (opts.End != defaultViewOptions.End)
            {
                this.RouteData.Values.Add("opts.end", opts.End);
            }
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetIndexViewModelAsync(opts, pager);

            // Add view model to context
            HttpContext.Items[typeof(ReportIndexViewModel <Metric>)] = viewModel;

            // If we have a pager.page querystring value return paged view
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetMetrics", viewModel));
                }
            }

            // Build breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder
                .Add(S["Home"], home => home
                     .Action("Index", "Admin", "Plato.Admin")
                     .LocalNav())
                .Add(S["Reports"], home => home
                     .Action("Index", "Admin", "Plato.Reports")
                     .LocalNav())
                .Add(S["Page Views"], reports => reports
                     .LocalNav());
            });

            // Return view
            return(View((LayoutViewModel)await _pageViewsViewProvider.ProvideIndexAsync(new PageViewIndex(), this)));
        }
예제 #52
0
 public ProductFarmController(IFarmService farmService, IHttpContextAccessor httpContextAccessor, IOptions <PagerOptions> pagerOptions)
     : base(httpContextAccessor)
 {
     _farmService  = farmService;
     _pagerOptions = pagerOptions.Value;
 }
예제 #53
0
        public async Task <IActionResult> Display(EntityIndexOptions opts, PagerOptions pager)
        {
            // Default options
            if (opts == null)
            {
                opts = new EntityIndexOptions();
            }

            // Default pager
            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get tag
            var tag = await _tagStore.GetByIdAsync(opts.TagId);

            // Ensure tag exists
            if (tag == null)
            {
                return(NotFound());
            }

            // Get default options
            var defaultViewOptions  = new EntityIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search)
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort)
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order)
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (opts.Filter != defaultViewOptions.Filter)
            {
                this.RouteData.Values.Add("opts.filter", opts.Filter);
            }
            if (pager.Page != defaultPagerOptions.Page)
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size)
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetDisplayViewModelAsync(opts, pager);

            // Add view model to context
            HttpContext.Items[typeof(EntityIndexViewModel <Topic>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetTopics", viewModel));
                }
            }

            // Build page title
            _pageTitleBuilder.AddSegment(S[tag.Name], int.MaxValue);

            // Breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Discuss"], discuss => discuss
                                  .Action("Index", "Home", "Plato.Discuss")
                                  .LocalNav()
                                  ).Add(S["Tags"], labels => labels
                                        .Action("Index", "Home", "Plato.Discuss.Tags")
                                        .LocalNav()
                                        ).Add(S[tag.Name]);
            });

            // Return view
            return(View((LayoutViewModel)await _tagViewProvider.ProvideDisplayAsync(new Tag(tag), this)));
        }
예제 #54
0
        public async Task <IActionResult> Index(LabelIndexOptions opts, PagerOptions pager)
        {
            if (opts == null)
            {
                opts = new LabelIndexOptions();
            }

            if (pager == null)
            {
                pager = new PagerOptions();
            }

            // Get default options
            var defaultViewOptions  = new LabelIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search && !this.RouteData.Values.ContainsKey("opts.search"))
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort && !this.RouteData.Values.ContainsKey("opts.sort"))
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order && !this.RouteData.Values.ContainsKey("opts.order"))
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page && !this.RouteData.Values.ContainsKey("pager.page"))
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size && !this.RouteData.Values.ContainsKey("pager.size"))
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetIndexViewModelAsync(opts, pager);

            // Add view options to context
            HttpContext.Items[typeof(LabelIndexViewModel <Label>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0)
                {
                    return(View("GetLabels", viewModel));
                }
            }

            // Breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Docs"], docs => docs
                                  .Action("Index", "Home", "Plato.Docs")
                                  .LocalNav()
                                  ).Add(S["Labels"]);
            });

            // Return view
            return(View((LayoutViewModel)await _labelViewProvider.ProvideIndexAsync(new Label(), this)));
        }
예제 #55
0
        public async Task <IPagedResults <TModel> > GetResultsAsync(EntityOptions options, PagerOptions pager)
        {
            // Build sort columns from model
            var sortColumns = new Dictionary <string, OrderBy>();

            if (options.SortColumns != null)
            {
                foreach (var column in options.SortColumns)
                {
                    sortColumns.Add(column.Key, column.Value);
                }
            }
            else
            {
                sortColumns.Add(options.Sort, options.Order);
            }

            return(await _entityReplyStore.QueryAsync()
                   .Take(pager.Page, pager.Size)
                   .Configure(_configureDb)
                   .Select <EntityReplyQueryParams>(q =>
            {
                q.EntityId.Equals(options.Id);

                // Additional parameter configuration
                _configureParams?.Invoke(q);
            })
                   .OrderBy(sortColumns)
                   .ToList());
        }
예제 #56
0
        async Task <EntityIndexViewModel <Question> > GetIndexViewModelAsync(Category category, EntityIndexOptions options, PagerOptions pager)
        {
            // Get current feature
            var feature = await _featureFacade.GetFeatureByIdAsync("Plato.Questions");

            // Restrict results to current feature
            if (feature != null)
            {
                options.FeatureId = feature.Id;
            }

            // Include child channels
            if (category != null)
            {
                if (category.Children.Any())
                {
                    // Convert child ids to list and add current id
                    var ids = category
                              .Children
                              .Select(c => c.Id).ToList();
                    ids.Add(category.Id);
                    options.CategoryIds = ids.ToArray();
                }
                else
                {
                    options.CategoryId = category.Id;
                }
            }

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            // Ensure pinned entities appear first
            if (options.Sort == SortBy.LastReply)
            {
                options.SortColumns.Add(SortBy.IsPinned.ToString(), OrderBy.Desc);
            }

            // Return updated model
            return(new EntityIndexViewModel <Question>()
            {
                Options = options,
                Pager = pager
            });
        }
예제 #57
0
        async Task <LabelIndexViewModel <Label> > GetViewModel(LabelIndexOptions options, PagerOptions pager)
        {
            var results = await _labelService
                          .GetResultsAsync(options, pager);

            // Set total on pager
            pager.SetTotal(results?.Total ?? 0);

            // Return view model
            return(new LabelIndexViewModel <Label>
            {
                SortColumns = _defaultSortColumns,
                SortOrder = _defaultSortOrder,
                Results = results,
                Options = options,
                Pager = pager
            });
        }
예제 #58
0
        public async Task <IActionResult> Display(EntityIndexOptions opts, PagerOptions pager)
        {
            // Get label
            var label = await _labelStore.GetByIdAsync(opts.LabelId);

            // Ensure label exists
            if (label == null)
            {
                return(NotFound());
            }

            // Get default options
            var defaultViewOptions  = new EntityIndexOptions();
            var defaultPagerOptions = new PagerOptions();

            // Add non default route data for pagination purposes
            if (opts.Search != defaultViewOptions.Search && !this.RouteData.Values.ContainsKey("opts.search"))
            {
                this.RouteData.Values.Add("opts.search", opts.Search);
            }
            if (opts.Sort != defaultViewOptions.Sort && !this.RouteData.Values.ContainsKey("opts.sort"))
            {
                this.RouteData.Values.Add("opts.sort", opts.Sort);
            }
            if (opts.Order != defaultViewOptions.Order && !this.RouteData.Values.ContainsKey("opts.order"))
            {
                this.RouteData.Values.Add("opts.order", opts.Order);
            }
            if (pager.Page != defaultPagerOptions.Page && !this.RouteData.Values.ContainsKey("pager.page"))
            {
                this.RouteData.Values.Add("pager.page", pager.Page);
            }
            if (pager.Size != defaultPagerOptions.Size && !this.RouteData.Values.ContainsKey("pager.size"))
            {
                this.RouteData.Values.Add("pager.size", pager.Size);
            }

            // Build view model
            var viewModel = await GetDisplayViewModelAsync(opts, pager);

            // Add view model to context
            this.HttpContext.Items[typeof(EntityIndexViewModel <Article>)] = viewModel;

            // If we have a pager.page querystring value return paged results
            if (int.TryParse(HttpContext.Request.Query["pager.page"], out var page))
            {
                if (page > 0 && !pager.Enabled)
                {
                    return(View("GetArticles", viewModel));
                }
            }

            // Return Url for authentication purposes
            ViewData["ReturnUrl"] = _contextFacade.GetRouteUrl(new RouteValueDictionary()
            {
                ["area"]         = "Plato.Articles.Labels",
                ["controller"]   = "Home",
                ["action"]       = "Display",
                ["opts.labelId"] = label != null ? label.Id.ToString() : "",
                ["opts.alias"]   = label != null ? label.Alias.ToString() : ""
            });

            // Build page title
            _pageTitleBuilder.AddSegment(S[label.Name], int.MaxValue);

            // Build breadcrumb
            _breadCrumbManager.Configure(builder =>
            {
                builder.Add(S["Home"], home => home
                            .Action("Index", "Home", "Plato.Core")
                            .LocalNav()
                            ).Add(S["Articles"], discuss => discuss
                                  .Action("Index", "Home", "Plato.Articles")
                                  .LocalNav()
                                  ).Add(S["Labels"], labels => labels
                                        .Action("Index", "Home", "Plato.Articles.Labels")
                                        .LocalNav()
                                        ).Add(S[label.Name]);
            });

            // Return view
            return(View((LayoutViewModel)await _labelViewProvider.ProvideDisplayAsync(label, this)));
        }
예제 #59
0
        // ------------

        async Task <LabelIndexViewModel <Label> > GetIndexViewModelAsync(LabelIndexOptions options, PagerOptions pager)
        {
            // Get questions feature
            options.FeatureId = await GetFeatureIdAsync();

            if (options.Sort == LabelSortBy.Auto)
            {
                options.Sort  = LabelSortBy.Modified;
                options.Order = OrderBy.Desc;
            }

            // Indicate administrator view
            options.EnableEdit = true;

            // Set pager call back Url
            pager.Url = _contextFacade.GetRouteUrl(pager.Route(RouteData));

            return(new LabelIndexViewModel <Label>()
            {
                Options = options,
                Pager = pager
            });
        }
예제 #60
0
        /// <summary>
        /// Generates a page link item for the pager with filter and order information
        /// </summary>
        /// <typeparam name="TModel">The type of the object that will be used to generate a url querystring</typeparam>
        /// <typeparam name="TList">The type of the object the PagedList collection should contain</typeparam>
        /// <param name="pagedList">The PagedList object instance</param>
        /// <param name="filterModel">The object instance that will be used to generate a url querystring</param>
        /// <param name="page">The page number of the pager item</param>
        /// <param name="pageType">The type of the pager item</param>
        /// <param name="urlFunction">A function that takes the page number and returns the page url</param>
        /// <param name="pagerOptions">Formating options</param>
        /// <returns>Page link item HTML string for the pager with filter and order information</returns>
        private static string GeneratePageLink <TModel, TList>(PagedList <TList> pagedList, TModel filterModel, int page, PageType pageType, Func <int, string> urlFunction, PagerOptions pagerOptions)
        {
            TagBuilder li = new TagBuilder("li");
            TagBuilder a  = new TagBuilder("a");

            a.AddCssClass("pager-action");

            if (filterModel == null)
            {
                a.Attributes.Add("href", urlFunction(page));
            }
            else
            {
                a.Attributes.Add("href", "javascript:GetSignals(" + page + ")");
            }

            if (pageType == PageType.First)
            {
                if (pagedList.ActualPage == 1)
                {
                    if (!string.IsNullOrWhiteSpace(pagerOptions.NoPreviousPageContainerCssClass))
                    {
                        li.AddCssClass(pagerOptions.NoPreviousPageContainerCssClass);
                    }
                    else
                    {
                        li.AddCssClass("disabled");
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.NoPreviousPageLinkCssClass))
                    {
                        a.AddCssClass(pagerOptions.NoPreviousPageLinkCssClass);
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.NoPreviousPageContent))
                    {
                        a.InnerHtml = pagerOptions.NoPreviousPageContent;
                    }
                    else
                    {
                        a.InnerHtml = "&lt;&lt;";
                    }
                }
                else
                {
                    if (!string.IsNullOrWhiteSpace(pagerOptions.PreviousPageContainerCssClass))
                    {
                        li.AddCssClass(pagerOptions.PreviousPageContainerCssClass);
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.PreviousPageLinkCssClass))
                    {
                        a.AddCssClass(pagerOptions.PreviousPageLinkCssClass);
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.PreviousPageContent))
                    {
                        a.InnerHtml = pagerOptions.PreviousPageContent;
                    }
                    else
                    {
                        a.InnerHtml = "&lt;&lt;";
                    }
                }
            }
            else if (pageType == PageType.Last)
            {
                if (pagedList.ActualPage == pagedList.PageCount || pagedList.PageCount == 1)
                {
                    if (!string.IsNullOrWhiteSpace(pagerOptions.NextPageContainerCssClass))
                    {
                        li.AddCssClass(pagerOptions.NextPageContainerCssClass);
                    }
                    else
                    {
                        li.AddCssClass("disabled");
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.NoNextPageLinkCssClass))
                    {
                        a.AddCssClass(pagerOptions.NoNextPageLinkCssClass);
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.NoNextPageContent))
                    {
                        a.InnerHtml = pagerOptions.NoNextPageContent;
                    }
                    else
                    {
                        a.InnerHtml = "&gt;&gt;";
                    }
                }
                else
                {
                    if (!string.IsNullOrWhiteSpace(pagerOptions.NextPageContainerCssClass))
                    {
                        li.AddCssClass(pagerOptions.NextPageContainerCssClass);
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.NextPageLinkCssClass))
                    {
                        a.AddCssClass(pagerOptions.NextPageLinkCssClass);
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.NextPageContent))
                    {
                        a.InnerHtml = pagerOptions.NextPageContent;
                    }
                    else
                    {
                        a.InnerHtml = "&gt;&gt;";
                    }
                }
            }
            else
            {
                if (page == pagedList.ActualPage)
                {
                    if (!string.IsNullOrWhiteSpace(pagerOptions.ActualPageContainerCssClass))
                    {
                        li.AddCssClass(pagerOptions.ActualPageContainerCssClass);
                    }
                    else
                    {
                        li.AddCssClass("active");
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.ActualPageLinkCssClass))
                    {
                        a.AddCssClass(pagerOptions.ActualPageLinkCssClass);
                    }
                }
                else
                {
                    if (!string.IsNullOrWhiteSpace(pagerOptions.PageContainerCssClass))
                    {
                        li.AddCssClass(pagerOptions.PageContainerCssClass);
                    }

                    if (!string.IsNullOrWhiteSpace(pagerOptions.PageLinkCssClass))
                    {
                        a.AddCssClass(pagerOptions.PageLinkCssClass);
                    }
                }

                a.SetInnerText(page.ToString());
            }

            li.InnerHtml = a.ToString();

            return(li.ToString());
        }