Exemple #1
0
        /// <summary>
        /// redirects all article urls that have an article number but no trailing title
        /// </summary>
        /// <param name="articleNumber"></param>
        /// <param name="prefix"></param>
        public void Get(int articleNumber, string prefix)
        {
            string numFormat = $"{prefix}{articleNumber:D6}";

            //find the new article page
            IArticleSearchFilter filter = ArticleSearcher.CreateFilter();

            filter.PageSize       = 1;
            filter.Page           = 1;
            filter.ArticleNumbers = numFormat.SingleToList();

            var results = ArticleSearcher.Search(filter);

            if (!results.Articles.Any())
            {
                return;
            }

            string newPath = ArticleSearch.GetArticleCustomPath(results.Articles.First());

            if (!HttpContext.Current.Response.IsRequestBeingRedirected)
            {
                HttpContext.Current.Response.RedirectPermanent(newPath, true);
            }
        }
Exemple #2
0
        // GET: Articles
        public ActionResult Index([FromQuery] ArticleSearch articleSearch)
        {
            articleSearch.PageNumber = 0;
            var articles = _searchArticlesCommand.Execute(articleSearch);

            return(View(articles.Data));
        }
Exemple #3
0
 public WMSArticleSearch(ArticleSearch wmspro)
     : base(s_metadata)
 {
     SetSqlString(0, wmspro.ArticleNo);
     SetSqlString(1, wmspro.Division);
     SetSqlString(2, wmspro.GPC);
     SetSqlString(3, wmspro.UOM);
 }
Exemple #4
0
        public bool Search(ArticleSearch search)
        {
            if (search.Tags is not null && search.Tags.Count != 0 && Tags.FirstOrDefault(t => search.Tags.Contains(t.ID)) == null)
            {
                return(false);
            }

            return(Search(search.Query));
        }
        public void Test_Find()
        {
            #region Arrange
            //Add code to create required resources
            #endregion Arrange

            var testKeyMark = TestUtils.RandomString();

            IArticleConnector connector = new ArticleConnector();

            var newArticle = new Article
            {
                Description   = testKeyMark,
                Height        = 60,
                Width         = 150,
                Type          = ArticleType.Stock,
                PurchasePrice = 2499.50m,
                FreightCost   = 200,
                OtherCost     = 210,
                Note          = "Definitely not worth the price."
            };

            //Add entries
            for (var i = 0; i < 5; i++)
            {
                connector.Create(newArticle);
            }

            //Apply base test filter
            var searchSettings = new ArticleSearch();
            searchSettings.Description = testKeyMark;
            var fullCollection = connector.Find(searchSettings);

            Assert.AreEqual(5, fullCollection.TotalResources);
            Assert.AreEqual(5, fullCollection.Entities.Count);
            Assert.AreEqual(1, fullCollection.TotalPages);

            //Apply Limit
            searchSettings.Limit = 2;
            var limitedCollection = connector.Find(searchSettings);

            Assert.AreEqual(5, limitedCollection.TotalResources);
            Assert.AreEqual(2, limitedCollection.Entities.Count);
            Assert.AreEqual(3, limitedCollection.TotalPages);

            //Delete entries
            foreach (var entry in fullCollection.Entities)
            {
                connector.Delete(entry.ArticleNumber);
            }

            #region Delete arranged resources

            //Add code to delete temporary resources

            #endregion Delete arranged resources
        }
        public void Process(HttpRequestArgs args)
        {
            Sitecore.Diagnostics.Log.Info("Started ArticleItemResolver", " ArticleItemResolver ");
            Assert.ArgumentNotNull((object)args, "args");
            if (Context.Item != null || Context.Database == null || args.Url.ItemPath.Length == 0)
            {
                return;
            }

            var match = GetArticleNumberFromRequestItemPath(args.Url.ItemPath);

            if (string.IsNullOrEmpty(match.ArticleNumber))
            {
                return;
            }

            //find the new article page
            IArticleSearchFilter filter = ArticleSearcher.CreateFilter();

            filter.PageSize       = 1;
            filter.Page           = 1;
            filter.ArticleNumbers = match.ArticleNumber.SingleToList();

            var results = ArticleSearcher.Search(filter);

            IArticle a = results.Articles.FirstOrDefault();

            if (a == null)
            {
                return;
            }

            string urlTitle = ArticleSearch.GetCleansedArticleTitle(a); // a._Name.ToLower().Replace(" ", "-");

            if (!urlTitle.Equals(match.ArticleTitle, System.StringComparison.InvariantCultureIgnoreCase))
            {
                if (!HttpContext.Current.Response.IsRequestBeingRedirected)
                {
                    HttpContext.Current.Response.RedirectPermanent(ArticleSearch.GetArticleCustomPath(a), true);
                }
            }

            Item i = SitecoreContext.GetItem <Item>(a._Id);

            if (i == null)
            {
                return;
            }

            Context.Item             = i;
            args.Url.ItemPath        = i.Paths.FullPath;
            Context.Request.ItemPath = i.Paths.FullPath;
            Sitecore.Diagnostics.Log.Info("Ended ArticleItemResolver", " ArticleItemResolver");
        }
Exemple #7
0
 public static void ArticleAdd(ArticleSearch a)
 {
     DataFacade.ExecuteNonQuery("ArticleEdit",
                                new ParameterValue("idArticle", 0),
                                new ParameterValue("Title", a.Title),
                                new ParameterValue("ReleaseGroup", a.ReleaseGroup),
                                new ParameterValue("FileName", a.FileName),
                                new ParameterValue("DateArticle", a.DateArticle),
                                new ParameterValue("ReleaseUserID", a.ReleaseUserId),
                                new ParameterValue("idArticleType", a.IDArticleType),
                                new ParameterValue("idArticleCat", a.IDArticleCat));
 }
Exemple #8
0
 public Result <int> Count(ArticleSearch filter)
 {
     try
     {
         var predicate = GetSearchPredicate(filter);
         var result    = _unitOfWork.ArticleRepository.Count(predicate);
         return(new Result <int>(result));
     }
     catch (Exception ex)
     {
         return(new Result <int>(ex));
     }
 }
Exemple #9
0
 public Result <List <Article> > Get(ArticleSearch filter)
 {
     try
     {
         var predicate = GetSearchPredicate(filter);
         var result    = _unitOfWork.ArticleRepository.FindByIncluding(predicate, GetSortedFunction(filter), filter.OrderDirection, filter.Page, filter.Display, p => p.Magazine, p => p.Author);
         return(new Result <List <Article> >(result.Distinct().ToList()));
     }
     catch (Exception ex)
     {
         return(new Result <List <Article> >(ex));
     }
 }
Exemple #10
0
        public PagedResponse <ArticleDto> Execute(ArticleSearch request)
        {
            var query = Context.Articles.AsQueryable();

            if (request.Title != null)
            {
                query = query.Where(a => a.Title.ToLower().Contains(request.Title.ToLower()));
            }

            if (request.Hashtag != null)
            {
                query = query.Where(a => a.ArticleHashtags.Any(ah => ah.Hashtag.Tag.ToLower().Contains(request.Hashtag.ToLower())));
            }

            if (request.CategoryId.HasValue)
            {
                query = query.Where(a => a.ArticleCategories.Any(ac => ac.CategoryId == request.CategoryId));
            }

            if (request.PageNumber != 0)
            {
                query = query.Skip((request.PageNumber - 1) * request.PerPage).Take(request.PerPage);
            }

            var totalCount = query.Count();
            var pagesCount = (int)System.Math.Ceiling((double)totalCount / request.PerPage);

            return(new PagedResponse <ArticleDto>
            {
                TotalCount = totalCount,
                PagesCount = pagesCount,
                CurrentPage = request.PageNumber,
                Data = query.Select(a => new ArticleDto
                {
                    Id = a.Id,
                    Title = a.Title,
                    Content = a.Content,
                    Image = a.ImagePath,
                    CreatedAt = a.CreatedAt,
                    UpdatedAt = a.UpdatedAt,
                    AuthorId = a.UserId,
                    CategoryIds = a.ArticleCategories.Select(ac => ac.CategoryId),
                    HashtagIds = a.ArticleHashtags.Select(ah => ah.HashtagId),
                    Author = a.User.FirstName + " " + a.User.LastName,
                    Comments = a.Comments.Select(c => c.Text),
                    CategoriesForArticle = a.ArticleCategories.Select(ac => ac.Category.Name),
                    HashtagsForArticle = a.ArticleHashtags.Select(ah => ah.Hashtag.Tag)
                })
            });
        }
Exemple #11
0
        private Expression <Func <Article, bool> > GetSearchPredicate(ArticleSearch filter)
        {
            var predicate = PredicateBuilder.New <Article>(true);

            if (filter.Keyword != null)
            {
                var dictionary = _generalService.GetAllSynonymsByName(filter.Keyword);
                predicate = predicate.And(p => p.Content.ToLower().Contains(filter.Keyword) || p.Title.ToLower().Contains(filter.Keyword));

                if (dictionary.Count > 0)
                {
                    foreach (var item in dictionary)
                    {
                        predicate = predicate.Or(p => p.Content.ToLower().Contains(item.Name) || p.Title.ToLower().Contains(item.Name));
                    }
                }
            }

            if (filter.Author != null)
            {
                predicate = predicate.And(p => p.Author.Name.ToLower().Contains(filter.Author));
            }

            predicate = predicate.And(p => p.Magazine != null);
            if (filter.RangeTypeYear)
            {
                predicate = predicate.And(p => p.Magazine.PublishYear >= Convert.ToInt32(filter.PublishYearRange.FirstOrDefault()));
            }
            else
            {
                if (filter.PublishYearRange.Count > 0)
                {
                    predicate = filter.PublishYearRange.Aggregate(predicate, (current, item) => current.And(p => p.Magazine.PublishYear == Convert.ToInt32(item)));
                }
            }

            if (filter.RangeTypeSection)
            {
                predicate = predicate.And(p => p.Magazine.PublishSection.Contains(filter.PublishSectionRange.FirstOrDefault()));
            }
            else
            {
                if (filter.PublishSectionRange.Count > 0)
                {
                    predicate = filter.PublishSectionRange.Aggregate(predicate, (current, item) => current.And(p => p.Magazine.PublishSection.Contains(item)));
                }
            }
            return(predicate);
        }
Exemple #12
0
        private static Func <Article, object> GetSortedFunction(ArticleSearch filter)
        {
            if (filter == null)
            {
                return(q => q.DateCreated);
            }
            switch (filter.Order)
            {
            case 1:
                return(c => c.Title);

            default:
                return(q => q.DateCreated);
            }
        }
        public PagedResponse <ArticlesDto> Execute(ArticleSearch search)
        {
            var query = _context.Articles.AsQueryable();

            if (!string.IsNullOrEmpty(search.Subject) || !string.IsNullOrWhiteSpace(search.Subject))
            {
                query = query.Where(x => x.Subject.ToLower().Contains(search.Subject.ToLower()));
            }

            var sb = query.Select(x => x.Id);

            var categories = _context.ArticleCategories.Where(x => sb.Contains(x.ArticlesId));

            var skipCount = search.PerPage * (search.Page - 1);

            var response = new PagedResponse <ArticlesDto>
            {
                CurrentPage  = search.Page,
                ItemsPerPage = search.PerPage,
                TotalCount   = query.Count(),
                Items        = query.Skip(skipCount).Take(search.PerPage).Select(x => new ArticlesDto
                {
                    Id         = x.Id,
                    Subject    = x.Subject,
                    Text       = x.Text,
                    PicturesId = x.PicturesId,
                    UserId     = x.UserId,
                    User       = new UserDto {
                        FirstName = x.User.FirstName,
                        LastName  = x.User.LastName,
                        Username  = x.User.Username
                    },

                    Pictures = new PicturesDto
                    {
                        src = x.Pictures.src
                              //  alt = x.Pictures.alt
                    },
                    Categories = categories.Where(d => d.ArticlesId == x.Id).Select(c => new CategoryDto
                    {
                        Id   = c.CategoryId,
                        Name = c.Categories.Name
                    }).ToList()
                })
            };

            return(response);
        }
Exemple #14
0
        public IActionResult List(ArticleSearch search)
        {
            if (search.Query is null)
            {
                search.Query = "";
            }

            ViewBag.Search = search;

            if (search.Query == "" && search.Tags.Count == 0)
            {
                return(View(_ArticleRepo.GetAll()));
            }

            return(View(_ArticleRepo.GetAll().Where(p => p.Search(search)).ToList()));
        }
        public IActionResult Index([FromQuery] ArticleSearch articleSearch, CategorySearch categorySearch)
        {
            articleSearch.PageNumber = 0;
            var articles = _searchArticlesCommand.Execute(articleSearch);

            categorySearch.PageNumber = 0;
            var categories = _searchCategoriesCommand.Execute(categorySearch);

            var viewModel = new HomeViewModel
            {
                Articles   = articles.Data,
                Categories = categories.Data
            };

            return(View(viewModel));
        }
Exemple #16
0
        /// <summary>
        /// redirects all article urls starting with /article
        /// </summary>
        /// <param name="path"></param>
        public void Get(string year, string month, string day, string title)
        {
            IArticle a = SitecoreContext.GetCurrentItem <IArticle>();

            if (a == null)
            {
                return;
            }

            string newPath = ArticleSearch.GetArticleCustomPath(a);

            if (!HttpContext.Current.Response.IsRequestBeingRedirected)
            {
                HttpContext.Current.Response.RedirectPermanent(newPath, true);
            }
        }
Exemple #17
0
        private void SearchCommandAction()
        {
            if (!ContainErrors())
            {
                ArticleSearch articleSearch = new ArticleSearch();

                articleSearch.Keyword = keyword;
                if (IsMenChecked)
                {
                    articleSearch.Gender = Gender.Male;
                }
                else
                {
                    articleSearch.Gender = Gender.Female;
                }

                //Messenger.Default.Send(articleSearch);
                _navigationService.NavigateTo("ArticleResultPage", articleSearch);
            }
        }
Exemple #18
0
        public IActionResult Search(ArticleSearch filter)
        {
            var res = _articleService.Get(filter);

            if (!res.IsOk())
            {
                return(StatusCode((int)res.Status, res.Message));
            }
            List <ArticleSerchItemVM> vmList = Mapper.Map <List <Article>, List <ArticleSerchItemVM> >(res.Data);
            var searchResult = new ArticleSerchResultVM {
                Result = vmList
            };
            //Get result count
            var count = _articleService.Count(filter);

            if (count.IsOk())
            {
                searchResult.FoundItem = count.Data;
            }
            return(PartialView("Partials/_SearchResult", searchResult));
        }
Exemple #19
0
        public static List <Article> ArticleInbox(ArticleSearch article)
        {
            var paramList = new List <ParameterValue>
            {
                new ParameterValue("UserID", article.UserID),
            };

            var dataTable = DataFacade.GetDataTable("ArticleInbox",
                                                    paramList.ToArray());

            var returnList = (from DataRow r in dataTable.Rows
                              select new Article
            {
                IdArticle = r["IdArticle"].ToString(), Title = r["Title"].ToString(), DateArticle = Convert.ToDateTime(r["DateArticle"].ToString()), FileName = r["FileName"].ToString(),
            }).ToList();


            if (returnList.Count != 0)
            {
                return(returnList);
            }
            return(null);
        }
Exemple #20
0
        /// <summary>
        /// 文章列表
        /// </summary>
        /// <returns></returns>
        public IPagedList <ArticleListDto> GetArticleList(ArticleSearch search)
        {
            var query = _unitOfWork.GetRepository <CmsArticle>().Table;

            if (search.IsSetTop.HasValue)
            {
                query = query.Where(s => (s.IsSetTop ?? false) == search.IsSetTop);
            }
            if (search.IsRelease.HasValue)
            {
                query = query.Where(s => s.IsRelease == search.IsRelease);
            }
            if (!string.IsNullOrEmpty(search.Keyword))
            {
                query = query.Where(s => s.ArtTitle.Contains(search.Keyword) || s.ArtContent.Contains(search.Keyword));
            }
            var result = query
                         .OrderByDescending(s => s.IsSetTop)
                         .ThenByDescending(s => s.CreatedAt)
                         .ProjectTo <ArticleListDto>().ToPagedList(search);

            return(result);
        }
Exemple #21
0
        // GET: Home
        public ActionResult Index(ArticleSearch search)
        {
            var x = _userInfoRepository.GetUserInfos();


            ViewBag.users = x.First().UserName;
            var result = _articleRepository.GetArticles();

            result = result.Where(i => i.IsShow);
            if (!string.IsNullOrWhiteSpace(search.KeyWord))
            {
                result = result.Where(i => i.Title.Contains(search.KeyWord));
            }

            if (!string.IsNullOrWhiteSpace(search.TagName))
            {
                result = result.Where(i => i.Tags.Any(a => a.CatName == search.TagName));
            }
            var pageData = result.OrderByDescending(a => a.Id).Select(i => new ArticleListDto()
            {
                Id          = i.Id,
                Img         = i.Img,
                CollectTime = i.CollectTime,
                CollectUser = i.CollectUser,
                CategoryId  = i.CategoryId,
                //Pviews = i.Pviews,
                Title   = i.Title,
                Summary = i.Summary,
                Tags    = i.Tags,
            }).ToPagedList(search.Page, search.Rows);

            if (Request.IsAjaxRequest())
            {
                return(PartialView("_ArticleList", pageData));
            }
            return(View(pageData));
        }
Exemple #22
0
    public async Task Test_Uri_Escaping_Special_Characters()
    {
        var article = await FortnoxClient.ArticleConnector.CreateAsync(new Article()
        {
            ArticleNumber = "TestArticle_+-",
            Description   = "X + Y != Z && X - Y == Z"
        });

        var retrievedArticle = await FortnoxClient.ArticleConnector.GetAsync(article.ArticleNumber);

        Assert.AreEqual("TestArticle_+-", retrievedArticle.ArticleNumber);


        var query = new ArticleSearch()
        {
            Description = "X + Y != Z && X - Y == Z" // some characters like '<' or '>' in query are not accepted by the server even if escaped
        };
        var matches = await FortnoxClient.ArticleConnector.FindAsync(query);

        Assert.AreEqual(1, matches.Entities.Count);
        Assert.AreEqual(article.ArticleNumber, matches.Entities.First().ArticleNumber);

        await FortnoxClient.ArticleConnector.DeleteAsync(article.ArticleNumber);
    }
Exemple #23
0
        public async Task <IActionResult> GetList(int page, int rows, ArticleSearch where)
        {
            var data = await _service.GetListAsync(page, rows, where, null);

            return(PagerData(data.items, page, rows, data.count));
        }
Exemple #24
0
 public IEnumerable <Article> Search(ArticleSearch param)
 {
     return(ArticleDao.Search(param));
 }
Exemple #25
0
 public List <Article> ArticleInbox(ArticleSearch param)
 {
     return(ArticleDao.ArticleInbox(param));
 }
Exemple #26
0
 public void ArticleAdd(ArticleSearch articles)
 {
     ArticleDao.ArticleAdd(articles);
 }
Exemple #27
0
        public static IEnumerable <Article> Search(ArticleSearch article)
        {
            if ((article.StartYear == article.EndYear) && (article.StartMonth == article.EndMonth))
            {
                if (article.EndMonth == 12)
                {
                    article.EndYear++;
                    article.EndMonth = 1;
                }
                else
                {
                    article.EndMonth++;
                }
            }

            var paramList = new List <ParameterValue>
            {
                new ParameterValue("UserID", article.UserID),
                new ParameterValue("Archive", article.Archive ? 1 : 0),
                new ParameterValue("DeAct", article.DeAct ? 1 : 0)
            };

            if (article.IDArticleCat != null)
            {
                paramList.Add(new ParameterValue("idArticleCat", article.IDArticleCat));
            }
            if (article.IDArticleType != null)
            {
                paramList.Add(new ParameterValue("idArticleType", article.IDArticleType));
            }
            if (article.StartYear != null)
            {
                paramList.Add(new ParameterValue("StartYear", article.StartYear));
            }
            if (article.StartMonth != null)
            {
                paramList.Add(new ParameterValue("StartMonth", article.StartMonth));
            }
            if (article.EndYear != null)
            {
                paramList.Add(new ParameterValue("EndYear", article.EndYear));
            }
            if (article.EndMonth != null)
            {
                paramList.Add(new ParameterValue("EndMonth", article.EndMonth));
            }
            if (!String.IsNullOrEmpty(article.Title))
            {
                paramList.Add(new ParameterValue("Title", article.Title));
            }

            var dataTable = DataFacade.GetDataTable("ArticleSearch",
                                                    paramList.ToArray());


            return((from DataRow r in dataTable.Rows
                    select new Article
            {
                IdArticle = r["IdArticle"].ToString(), Archive = Convert.ToBoolean(r["Archive"].ToString()), Active = Convert.ToBoolean(r["Active"].ToString()), Title = r["Title"].ToString(), DateArticle = Convert.ToDateTime(r["DateArticle"].ToString()), FileName = r["FileName"].ToString(), IdArticleCat = r["IdArticleCat"].ToString(), ReleaseUserId = r["ReleaseUserId"].ToString()
            }).ToList());
        }
Exemple #28
0
        public void Process(HttpRequestArgs args)
        {
            Sitecore.Diagnostics.Log.Info("Started LegacyRedirectResolver", " LegacyRedirectResolver ");
            Models.Informa.Models.sitecore.templates.User_Defined.Configuration.ISite_Root siteRoot = null;
            Logger.SitecoreDebug($"LegacyRedirectResolver started");
            Assert.ArgumentNotNull(args, "args");

            if ((Context.Item != null) ||
                Context.Site.Name != "LegacyRedirect" ||
                excludePaths.Any(x => args.LocalPath.StartsWith(x)))
            {
                return;
            }

            try
            {
                var resultsPmbi = GetResultsByPath(args.Url.FilePath);
                var article     = resultsPmbi?.Articles?.FirstOrDefault();

                if (article == null)
                {
                    // Does the url end in a 3-8 digit number?
                    var r     = new Regex(@"^.*-(\d{3,8})$");
                    var match = r.Match(args.Url.ItemPath);

                    if (match.Success && match.Groups.Count >= 2)
                    {
                        var resultseScenic = GetResultsByLegacyID(match.Groups[1].Value);
                        article = resultseScenic?.Articles?.FirstOrDefault();
                    }
                }

                if (article == null)
                {
                    Logger.SitecoreDebug("LegacyRedirectResolver article not found");
                    return;
                }
                else
                {
                    Logger.SitecoreDebug($"LegacyRedirectResolver article found: {article._Path}");
                }

                var newPath = ArticleSearch.GetArticleCustomPath(article);
                Logger.SitecoreDebug($"LegacyRedirectResolver article path: {newPath}");

                siteRoot = GlobalService.GetSiteRootAncestor(article._Id);

                if (siteRoot == null)
                {
                    Logger.SitecoreDebug($"LegacyRedirectResolver didn't find site root for: {article._Path}");
                    return;
                }
                else
                {
                    Logger.SitecoreDebug($"LegacyRedirectResolver did find site root for: {article._Path}");
                }

                var siteInfo = Factory.GetSiteInfoList().FirstOrDefault(a => a.RootPath.Equals(siteRoot._Path));
                if (siteInfo == null)
                {
                    Logger.SitecoreDebug($"LegacyRedirectResolver couldn't find site info match for: {siteRoot._Path}");
                    return;
                }
                else
                {
                    Logger.SitecoreDebug($"LegacyRedirectResolver found site info match: {siteInfo.Name}");
                }

                var host     = siteInfo.HostName;
                var protocol = Settings.GetSetting("Site.Protocol", "https");

                Logger.SitecoreDebug($"LegacyRedirectResolver article url: {protocol}://{host}{newPath}");

                args.Context.Response.Status = "301 Moved Permanently";
                args.Context.Response.AddHeader("Location", $"{protocol}://{host}{newPath}");
                args.Context.Response.End();
            }
            catch (ThreadAbortException)
            {
                //This is a valid error resulting from an aborted redirect.
                //No need to log.
            }
            catch (Exception ex)
            {
                Logger.SitecoreError("Could not get site configuration to serve a 404 page for the request " + args.LocalPath, ex,
                                     this);
            }
            Sitecore.Diagnostics.Log.Info("Ended LegacyRedirectResolver", " LegacyRedirectResolver");
        }
Exemple #29
0
        public IViewComponentResult Invoke(ArticleSearch search)
        {
            ViewBag.Tags = _TagRepo.GetAll();

            return(View(search));
        }
Exemple #30
0
 public IActionResult Get(
     [FromQuery] ArticleSearch search,
     [FromServices] IGetAllArticlesQuery query)
 {
     return(Ok(_executor.ExecuteQuery(query, search)));
 }