示例#1
0
        public virtual ActionResult Feed()
        {
            IList<BlogItem> posts;

            using (var api = ApiFactory.Create())
            {
                var request = new GetBlogPostsModel { Take = 10, IncludeTags = true };

                var orFilter = new DataFilter(FilterConnector.Or);
                orFilter.Add("ExpirationDate", null);
                orFilter.Add("ExpirationDate", DateTime.Today, FilterOperation.GreaterOrEqual);

                request.Order.By.Add(new OrderItem("ActivationDate", OrderDirection.Desc));
                request.Order.By.Add(new OrderItem("Id"));
                request.Filter.Add("ActivationDate", DateTime.Today, FilterOperation.LessOrEqual);

                var pages = api.Blog.BlogPosts.Get(new GetBlogPostsRequest { Data = request });

                posts = pages.Data.Items.Select(
                        x => new BlogItem
                        {
                            IntroText = x.IntroText,
                            PublishedOn = x.ActivationDate,
                            Title = x.Title,
                            Url = x.BlogPostUrl,
                            Author = x.AuthorName,
                            ImageUrl = x.MainImageUrl,
                            Tags = x.Tags
                        }).ToList();
            }

            return View(posts);
        }
示例#2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DataOptions" /> class.
        /// </summary>
        /// <param name="take">Items count to retrieve.</param>
        /// <param name="skip">Items count to skip.</param>
        public DataOptions(int? take, int skip = 0)
        {
            Filter = new DataFilter();
            Order = new DataOrder();

            Skip = skip;
            Take = take;
        }
        public virtual ActionResult SubMenu(string parentUrl)
        {
            var menuItems = new List<MenuItemViewModel>();

            using (var api = ApiFactory.Create())
            {
                var pageRequest = new PageExistsRequest { PageUrl = parentUrl };
                var pageResponse = api.Pages.Page.Exists(pageRequest);

                var sitemapId = GetSitemapId(api);
                if (sitemapId.HasValue)
                {
                    var parentRequest = new GetSitemapNodesRequest();
                    parentRequest.SitemapId = sitemapId.Value;
                    parentRequest.Data.Take = 1;
                    parentRequest.Data.Filter.Add("ParentId", null);

                    var filter = new DataFilter(FilterConnector.Or);
                    parentRequest.Data.Filter.Inner.Add(filter);
                    filter.Add("Url", parentUrl);
                    if (pageResponse.Data.Exists)
                    {
                        filter.Add("PageId", pageResponse.Data.PageId.Value);
                    }
                    parentRequest.Data.Order.Add("DisplayOrder");

                    var parentResponse = api.Pages.Sitemap.Nodes.Get(parentRequest);
                    if (parentResponse.Data.Items.Count == 1)
                    {
                        var request = new GetSitemapTreeRequest { SitemapId = sitemapId.Value };
                        request.Data.NodeId = parentResponse.Data.Items[0].Id;
                        var response = api.Pages.Sitemap.Tree.Get(request);
                        if (response.Data.Count > 0)
                        {
                            menuItems = response.Data.Select(mi => new MenuItemViewModel { Caption = mi.Title, Url = mi.Url }).ToList();
                            menuItems.Insert(0, new MenuItemViewModel { Caption = "Main", Url = parentUrl });
                        }
                    }
                }
            }

            return View(menuItems);
        }
示例#4
0
        public virtual ActionResult Index(Guid? categoryId, string tagName)
        {
            IList<BlogItem> posts;
            
            using (var api = ApiFactory.Create())
            {
                var request = new GetBlogPostsModel { Take = 10, IncludeTags = true };

                var orFilter = new DataFilter(FilterConnector.Or);
                orFilter.Add("ExpirationDate", null);
                orFilter.Add("ExpirationDate", DateTime.Today, FilterOperation.GreaterOrEqual);

                request.Order.By.Add(new OrderItem("ActivationDate", OrderDirection.Desc));
                request.Order.By.Add(new OrderItem("Id"));
                request.Filter.Add("ActivationDate", DateTime.Today, FilterOperation.LessOrEqual);
                request.Filter.Inner.Add(orFilter);
                if (categoryId.HasValue)
                {
                    request.Filter.Add("CategoryId", categoryId.Value);
                }

                if (!string.IsNullOrEmpty(tagName))
                {
                    request.FilterByTags.Add(tagName);
                }

                var pages = api.Blog.BlogPosts.Get(new GetBlogPostsRequest { Data = request });

                posts = pages.Data.Items.Select(
                        x => new BlogItem
                        {
                            IntroText = x.IntroText, 
                            PublishedOn = x.ActivationDate, 
                            Title = x.Title, 
                            Url = x.BlogPostUrl,
                            Author = x.AuthorName,
                            Tags = x.Tags
                        }).ToList();
            }
            
            return View(posts);
        }
示例#5
0
        public void ComplexFilterWithInnerFilters()
        {
            var dataOptions = new DataOptions();
            dataOptions.Filter.Connector = FilterConnector.And;
            dataOptions.Filter.Add("Title", "Test1", FilterOperation.NotContains);
            dataOptions.Filter.Add("Title", "Test2", FilterOperation.NotContains);

            var innerFilter1 = new DataFilter(FilterConnector.Or);
            innerFilter1.Add("CreatedOn", TestValueDate, FilterOperation.Greater);
            innerFilter1.Add("CreatedOn", TestValueDate, FilterOperation.Less);
            innerFilter1.Add("CreatedOn", TestValueDate);

            var innerFilter2 = new DataFilter(FilterConnector.Or);
            innerFilter2.Add("ModifiedOn", TestValueDate, FilterOperation.Greater);
            innerFilter2.Add("ModifiedOn", TestValueDate, FilterOperation.Less);
            innerFilter2.Add("ModifiedOn", TestValueDate);

            dataOptions.Filter.Inner.Add(innerFilter1);
            dataOptions.Filter.Inner.Add(innerFilter2);

            var queryCreator = new DataOptionsQueryCreator<PageProperties>(dataOptions);
            var orderQuery = queryCreator.GetOrderQuery();
            var filterQuery = queryCreator.GetFilterQuery();
            var filterParameters = queryCreator.GetFilterParameters();

            Assert.AreEqual(orderQuery, string.Empty);

            var result = "(!Title.Contains(@0) or Title == null) and (!Title.Contains(@1) or Title == null) and (CreatedOn > @2 or CreatedOn < @3 or CreatedOn == @4) and (ModifiedOn > @5 or ModifiedOn < @6 or ModifiedOn == @7)";

            Assert.AreEqual(filterQuery, result);
            Assert.IsNotNull(filterParameters);
            Assert.AreEqual(filterParameters.Length, 8);
            Assert.AreEqual(filterParameters[0], "Test1");
            Assert.AreEqual(filterParameters[1], "Test2");
            Assert.AreEqual(filterParameters[2], Convert.ToDateTime(TestValueDate));
            Assert.AreEqual(filterParameters[3], Convert.ToDateTime(TestValueDate));
            Assert.AreEqual(filterParameters[4], Convert.ToDateTime(TestValueDate));
            Assert.AreEqual(filterParameters[5], Convert.ToDateTime(TestValueDate));
            Assert.AreEqual(filterParameters[6], Convert.ToDateTime(TestValueDate));
            Assert.AreEqual(filterParameters[7], Convert.ToDateTime(TestValueDate));
        }
        private static bool HasColumnInWhereSection(DataFilter filter, string column)
        {
            if (filter.Where != null && filter.Where.Count > 0)
            {
                if (filter.Where.Count(f => f.Field != null && f.Field.ToLowerInvariant() == column.ToLowerInvariant()) > 0)
                {
                    return true;
                }
            }

            if (filter.Inner != null && filter.Inner.Count > 0)
            {
                foreach (var innerFilter in filter.Inner)
                {
                    if (HasColumnInWhereSection(innerFilter, column))
                    {
                        return true;
                    }
                }
            }

            return false;
        }
示例#7
0
        public virtual ActionResult Last()
        {
            BlogItem post = null;

            using (var api = ApiFactory.Create())
            {
                var requestLatestNewsModel = new GetBlogPostsModel { Take = 1, IncludeTags = true };

                var orFilter = new DataFilter(FilterConnector.Or);

                orFilter.Add("ExpirationDate", null);
                orFilter.Add("ExpirationDate", DateTime.Today, FilterOperation.GreaterOrEqual);

                requestLatestNewsModel.Order.By.Add(new OrderItem("ActivationDate", OrderDirection.Desc));
                requestLatestNewsModel.Order.By.Add(new OrderItem("Id"));
                requestLatestNewsModel.Filter.Add("ActivationDate", DateTime.Today, FilterOperation.LessOrEqual);

                requestLatestNewsModel.Filter.Inner.Add(orFilter);

                var request = new GetBlogPostsRequest { Data = requestLatestNewsModel };

                var pages = api.Blog.BlogPosts.Get(request);

                post = pages.Data.Items.Select(
                        x => new BlogItem
                        {
                            IntroText = x.IntroText,
                            PublishedOn = x.ActivationDate,
                            Title = x.Title,
                            Url = x.BlogPostUrl,
                            Author = x.AuthorName,
                            Tags = x.Tags
                        }).SingleOrDefault();
            }

            return View(post);            
        }
示例#8
0
        public virtual ActionResult Feed(Guid? categoryId, string tagName, string year, string month)
        {
            IList<BlogItem> posts;

            using (var api = ApiFactory.Create())
            {
                var request = new GetBlogPostsModel { Take = 10, IncludeTags = true };

                var orFilter = new DataFilter(FilterConnector.Or);
                orFilter.Add("ExpirationDate", null);
                orFilter.Add("ExpirationDate", DateTime.Today, FilterOperation.GreaterOrEqual);

                request.Order.By.Add(new OrderItem("ActivationDate", OrderDirection.Desc));
                request.Order.By.Add(new OrderItem("Id"));
                request.Filter.Add("ActivationDate", DateTime.Today, FilterOperation.LessOrEqual);

                if (categoryId.HasValue)
                {
                    request.FilterByCategories = new List<Guid> { categoryId.Value };
                }

                if (!string.IsNullOrEmpty(tagName))
                {
                    request.FilterByTags.Add(tagName);
                }

                var pages = api.Blog.BlogPosts.Get(new GetBlogPostsRequest { Data = request });

                posts = pages.Data.Items.Select(
                        x => new BlogItem
                        {
                            IntroText = x.IntroText,
                            PublishedOn = x.ActivationDate,
                            Title = x.Title,
                            Url = x.BlogPostUrl,
                            Author = x.AuthorName,
                            ImageUrl = x.MainImageUrl,
                            Tags = x.Tags
                        }).ToList();
            }

            //search by year
            if (!string.IsNullOrEmpty(year) && string.IsNullOrEmpty(month))
            {

                var p = new List<BlogItem>();

                foreach (var x in posts)
                {
                    if (x.PublishedOn.Year.ToString() == year)
                    {
                        p.Add(x);
                    }

                }

                return View(p);

            }

            //search by month
            if (!string.IsNullOrEmpty(year) && !string.IsNullOrEmpty(month))
            {

                var m = new List<BlogItem>();
                var y = new List<BlogItem>();

                foreach (var x in posts)
                {
                    if (x.PublishedOn.Year.ToString() == year)
                    {
                        y.Add(x);
                    }

                }

                foreach (var x in y)
                {
                    if (x.PublishedOn.Month.ToString() == month)
                    {
                        m.Add(x);
                    }

                }

                return View(m);

            }
            return View(posts);
        }
示例#9
0
        public virtual ActionResult Feed(string keywordsForSearch)
        {
            IList<BlogItem> posts;

            using (var api = ApiFactory.Create())
            {
                var request = new GetBlogPostsModel { Take = 10, IncludeTags = true };

                var orFilter = new DataFilter(FilterConnector.Or);
                orFilter.Add("ExpirationDate", null);
                orFilter.Add("ExpirationDate", DateTime.Today, FilterOperation.GreaterOrEqual);

                request.Order.By.Add(new OrderItem("ActivationDate", OrderDirection.Desc));
                request.Order.By.Add(new OrderItem("Id"));
                request.Filter.Add("ActivationDate", DateTime.Today, FilterOperation.LessOrEqual);

                var pages = api.Blog.BlogPosts.Get(new GetBlogPostsRequest { Data = request });

                posts = pages.Data.Items.Select(
                        x => new BlogItem
                        {
                            IntroText = x.IntroText,
                            PublishedOn = x.ActivationDate,
                            Title = x.Title,
                            Url = x.BlogPostUrl,
                            Author = x.AuthorName,
                            ImageUrl = x.MainImageUrl,
                            Tags = x.Tags

                        }).ToList();
            }

            if (!string.IsNullOrEmpty(keywordsForSearch))
            {
                List<BlogItem> searchlist = new List<BlogItem>();

                //search in title
                var v = posts.Where(r => r.Title.Contains(keywordsForSearch)).ToList();
                if (v.Count > 0)
                {
                    foreach (var x in v)
                    {
                        searchlist.Add(x);

                    }
                }

                //search by introtext
                var v1 = posts.Where(r => r.IntroText.Contains(keywordsForSearch)).ToList();
                if (v1.Count > 0)
                {
                    foreach (var x1 in v1)
                    {
                        searchlist.Add(x1);

                    }
                }

                //var v2 = posts.Where(r => r.Url.Contains(keywordsForSearch)).ToList();

                //if(v2.Count >0 ){

                //    foreach (var x2 in v2)
                //    {

                //        searchlist.Add(x2);
                //    }
                //}

                //creating distinct list
                List<string> Distinct_searchlist = new List<string>();
                List<BlogItem> new_distinct_blogitems = new List<BlogItem>();

                foreach (var s in searchlist)
                {
                    if (!Distinct_searchlist.Contains(s.Title))
                    {
                        Distinct_searchlist.Add(s.Title);
                        new_distinct_blogitems.Add(s);

                    }

                }

                return View(new_distinct_blogitems);

            }

            return View(posts);
        }
示例#10
0
        private void SortAndFilterRequest(GetBlogPostsModel request)
        {
            var tagName = Request.QueryString["blogtag"];
            var categoryName = Request.QueryString["blogcategory"];

            var orFilter = new DataFilter(FilterConnector.Or);
            orFilter.Add("ExpirationDate", null);
            orFilter.Add("ExpirationDate", DateTime.Today, FilterOperation.GreaterOrEqual);

            request.Order.By.Add(new OrderItem("ActivationDate", OrderDirection.Desc));
            request.Order.By.Add(new OrderItem("Id"));
            request.Filter.Add("ActivationDate", DateTime.Today, FilterOperation.LessOrEqual);
            request.Filter.Inner.Add(orFilter);

            if (!string.IsNullOrEmpty(categoryName))
            {
                request.FilterByCategoriesNames.Add(categoryName);
            }

            if (!string.IsNullOrEmpty(tagName))
            {
                request.FilterByTags.Add(tagName);
            }
        }
示例#11
0
        private DataOptions CreateTestDataOptions()
        {
            var options = new DataOptions(5, 3);
            options.Filter.Add("CreatedOn", new DateTime(2013, 06, 01), FilterOperation.Greater);
            options.Filter.Add("Title", "Africa", FilterOperation.NotEqual);

            var subFilter = new DataFilter(FilterConnector.Or);
            subFilter.Add("Title", "It", FilterOperation.StartsWith);
            subFilter.Add("Title", "Af", FilterOperation.StartsWith);
            subFilter.Add("Title", "na", FilterOperation.EndsWith);
            subFilter.Add("Title", "Spain");

            options.Filter.Inner.Add(subFilter);

            options.Order.Add("CreatedOn");
            options.Order.Add("Title", OrderDirection.Desc);

            return options;
        }
示例#12
0
        private void AreFiltersEqual(DataFilter filter1, DataFilter filter2)
        {
            Assert.AreEqual(filter1.Connector, filter2.Connector);

            Assert.AreEqual(filter1.Where.Count, filter2.Where.Count);
            Assert.AreEqual(filter1.Inner.Count, filter2.Inner.Count);

            for (var i = 0; i < filter1.Where.Count; i++)
            {
                var item1 = filter1.Where[i];
                var item2 = filter1.Where[i];

                Assert.AreEqual(item1.Field, item2.Field);
                Assert.AreEqual(item1.Operation, item2.Operation);
                Assert.AreEqual(item1.Value, item2.Value);
            }

            for (var i = 0; i < filter1.Inner.Count; i++)
            {
                AreFiltersEqual(filter1.Inner[i], filter2.Inner[i]);
            }
        }