Пример #1
0
        protected IArticle GetArticle(string articleNumber)
        {
            IArticleSearchFilter filter = ArticleSearch.CreateFilter();

            filter.ArticleNumbers = articleNumber.SingleToList();
            return(ArticleSearch.Search(filter).Articles.FirstOrDefault());
        }
Пример #2
0
        public IArticleSearchResults Search(IArticleSearchFilter filter)
        {
            using (var context = SearchContextFactory.Create())
            {
                var query = context.GetQueryable <ArticleSearchResultItem>()
                            .Filter(i => i.TemplateId == IArticleConstants.TemplateId)
                            .FilterByPublications(filter)
                            .FilterByAuthor(filter)
                            .FilterByCompany(filter)
                            .FilterTaxonomies(filter, ItemReferences, GlobalService)
                            .ExcludeManuallyCurated(filter)
                            .FilteryByArticleNumbers(filter)
                            .FilteryByLegacyArticleNumber(filter)
                            .FilteryByEScenicID(filter)
                            .FilteryByRelatedId(filter)
                            .ApplyDefaultFilters();

                if (filter.PageSize > 0)
                {
                    query = query.Page(filter.Page > 0 ? filter.Page - 1 : 0, filter.PageSize);
                }

                query = query.OrderByDescending(i => i.ActualPublishDate);

                var results = query.GetResults();

                return(new ArticleSearchResults
                {
                    Articles = results.Hits.Select(h => GlobalService.GetItem <IArticle>(h.Document.ItemId.Guid))
                });
            }
        }
Пример #3
0
        private string BuildReplaceRelatedArticles(string articleNumber)
        {
            HtmlString replace = new HtmlString("");

            IArticleSearchFilter filter = _dependencies.ArticleSearch.CreateFilter();

            filter.ArticleNumbers = articleNumber.SingleToList();
            var results = _dependencies.ArticleSearch.Search(filter);

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

            var article = results.Articles.FirstOrDefault();

            if (article == null)
            {
                return(replace.ToHtmlString());
            }

            string src         = _dependencies.GlobalService.GetPublicationName(article._Id);
            string date        = (article.Actual_Publish_Date > DateTime.MinValue ? article.Actual_Publish_Date.ToString("d MMM, yyyy") : "");
            var    articleText = $" <em>(Also see \"{WebUtility.HtmlDecode(article.Title)}\" - {src}, {date}.)</em>";

            replace = new HtmlString(articleText);

            return(replace.ToHtmlString());
        }
Пример #4
0
        private string BuildArticleMatch(string articleNumber)
        {
            try {
                IArticleSearchFilter filter = _.ArticleSearch.CreateFilter();
                if (articleNumber.Length <= 8)
                {
                    filter.ArticleNumbers = articleNumber.SingleToList();
                }
                else
                {
                    filter.LegacyArticleNumber = articleNumber.Trim();
                }
                filter.PageSize = 1;
                var results = _.ArticleSearch.Search(filter);

                if (results.Articles.Any())
                {
                    var article = results.Articles.FirstOrDefault();

                    if (article != null)
                    {
                        return
                            ($" (Also see \"<a href='{article._Url}'>{WebUtility.HtmlDecode(article.Title)}</a>\" - {_.GlobalService?.GetPublicationName(article._Id)}, " +
                             $"{(article.Actual_Publish_Date > DateTime.MinValue ? article.Actual_Publish_Date.ToString("d MMM, yyyy") : "")}.)");
                    }
                }
            } catch (Exception ex) {
                Sitecore.Diagnostics.Log.Error("Error when evaluating company match token", ex, "LogFileAppender");
            }

            return(string.Empty);
        }
Пример #5
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);
            }
        }
        protected List <IArticle> GetFreeTrialArticles(Item rootItem)
        {
            IArticleSearch searcher = DependencyResolver.Current.GetService <IArticleSearch>();

            if (searcher == null)
            {
                return(new List <IArticle>());
            }

            IArticleSearchFilter filter = searcher.CreateFilter();

            var    results       = searcher.FreeWithRegistrationArticles(currentDB.Name);
            string resultsFormat = "There were {0} articles marked 'Free with Registration'";
            string resultFormat  = "There was {0} article marked 'Free with Registration'";

            if (results.Articles.Any())
            {
                try
                {
                    var filteredResults = results.Articles.Where(a => (a._Path != null && a._Path.StartsWith(rootItem.Paths.FullPath))).ToList();
                    ltlResultCount.Text = string.Format((filteredResults.Count > 1) ? resultsFormat : resultFormat, filteredResults.Count);
                    return(filteredResults);
                }
                catch (Exception ex)
                {
                    _logger.Error("Error in GetFreeTrialArticles tab", ex);
                    return(new List <IArticle>());
                }
            }
            else
            {
                ltlResultCount.Text = string.Format(resultsFormat, 0);
                return(new List <IArticle>());
            }
        }
        public IListableViewModel Create(string articleNumber)
        {
            IArticleSearchFilter filter = ArticleSearch.CreateFilter();

            filter.ArticleNumbers = articleNumber.SingleToList();
            filter.PageSize       = 1;
            var results = ArticleSearch.Search(filter);

            return(Create(results.Articles.FirstOrDefault()));
        }
Пример #8
0
        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");
        }
Пример #9
0
        public string GetLastArticleNumber(Guid publicationGuid)
        {
            IArticleSearchFilter filter = _articleSearcher.CreateFilter();
            var results = _articleSearcher.Search(filter);

            if (!results.Articles.Any())
            {
                return(0.ToString(Constants.ArticleNumberLength));
            }
            IEnumerable <string> articles = results.Articles.Select(a => a.Article_Number).OrderByDescending(b => b);
            string num = articles.First().Replace(SitecoreUtil.GetPublicationPrefix(publicationGuid), "");
            int    n   = int.Parse(num);

            return((n + 1).ToString(Constants.ArticleNumberLength));
        }
Пример #10
0
        public static List <IArticle> SearchArticlesByArticleNumbers(List <string> articleNumbers)
        {
            using (var scope = AutofacConfig.ServiceLocator.BeginLifetimeScope())
            {
                using (new DatabaseSwitcher(Sitecore.Data.Database.GetDatabase("master")))
                {
                    IArticleSearch       articleSearch = scope.Resolve <IArticleSearch>();
                    IArticleSearchFilter filter        = articleSearch.CreateFilter();
                    filter.ArticleNumbers = articleNumbers;
                    var results = articleSearch.Search(filter);
                    var articlesByArticleNumber = results.Articles.ToList();

                    return(articlesByArticleNumber);
                }
            }
        }
Пример #11
0
        private string BuildReplaceSidebarArticles(string articleNumber)
        {
            IArticleSearchFilter filter = _dependencies.ArticleSearch.CreateFilter();

            filter.ArticleNumbers = articleNumber.SingleToList();
            var results = _dependencies.ArticleSearch.Search(filter);
            var replace = new HtmlString("");

            var article = results.Articles?.FirstOrDefault();

            if (article != null)
            {
                replace = BuildSideArticleHtml(article);
            }

            return(replace.ToHtmlString());
        }
Пример #12
0
        public ArticleItem GetArticleByNumber(string articleNumber, string databaseName)
        {
            IArticleSearchFilter filter = _articleSearcher.CreateFilter();

            filter.ArticleNumbers = articleNumber.SingleToList();
            var results = _articleSearcher.SearchCustomDatabase(filter, databaseName);

            if (results.Articles.Any())
            {
                var foundArticle = results.Articles.FirstOrDefault();
                var service      = SitecoreFactory(databaseName);
                if (foundArticle != null)
                {
                    return(service.GetItem <ArticleItem>(foundArticle._Id));
                }
            }
            return(null);
        }
Пример #13
0
 public static List <IArticle> SearchArticlesByAuthorName(string authorName)
 {
     using (var scope = AutofacConfig.ServiceLocator.BeginLifetimeScope())
     {
         using (new DatabaseSwitcher(Sitecore.Data.Database.GetDatabase("master")))
         {
             IArticleSearch       articleSearch = scope.Resolve <IArticleSearch>();
             IArticleSearchFilter filter        = articleSearch.CreateFilter();
             filter.AuthorGuids.Add(authorName);
             var results = articleSearch.SearchArticleByAuthorName(filter);
             if (results != null)
             {
                 var articlesByAuthorName = results.Articles.ToList();
                 return(articlesByAuthorName);
             }
             return(null);
         }
     }
 }
Пример #14
0
        private string BuildReplaceSidebarArticles(string articleNumber, string partialName)
        {
            HtmlString replace = new HtmlString("");

            IArticleSearchFilter filter = _.ArticleSearch.CreateFilter();

            filter.ArticleNumbers = articleNumber.SingleToList();
            var results = _.ArticleSearch.Search(filter);

            if (results.Articles.Any())
            {
                var article = results.Articles.FirstOrDefault();
                if (article != null)
                {
                    replace = HtmlHelper.Partial(partialName, _.ArticleListableFactory.Create(article));
                }
            }

            return(replace.ToHtmlString());
        }
Пример #15
0
        public string BuildReplaceRelatedArticles(string articleNumber)
        {
            HtmlString replace = new HtmlString("");

            IArticleSearchFilter filter = _.ArticleSearch.CreateFilter();

            filter.ArticleNumbers = articleNumber.SingleToList();
            var results = _.ArticleSearch.Search(filter);

            if (results.Articles.Any())
            {
                var article = results.Articles.FirstOrDefault();
                if (article != null)
                {
                    var articleText = $" (Also see \"<a href='{article._Url}'>{WebUtility.HtmlDecode(article.Title)}</a>\" - {_.GlobalService.GetPublicationName(article._Id)}, {(article.Actual_Publish_Date > DateTime.MinValue ? article.Actual_Publish_Date.ToString("d MMM, yyyy") : "")}.)";
                    replace = new HtmlString(articleText);
                }
            }

            return(replace.ToHtmlString());
        }
Пример #16
0
        public IArticleSearchResults SearchArticleByAuthorName(IArticleSearchFilter filter)
        {
            using (var context = SearchContextFactory.Create())
            {
                var query = context.GetQueryable <ArticleSearchResultItem>()
                            .Filter(i => i.TemplateId == IArticleConstants.TemplateId)
                            .FilterByAuthor(filter)
                            .ApplyDefaultFilters();
                if (filter.PageSize > 0)
                {
                    query = query.Page(filter.Page > 0 ? filter.Page - 1 : 0, filter.PageSize);
                }

                query = query.OrderByDescending(i => i.ActualPublishDate);

                var results = query.GetResults();

                return(new ArticleSearchResults
                {
                    Articles = results.Hits.Select(h => GlobalService.GetItem <IArticle>(h.Document.ItemId.Guid))
                });
            }
        }
Пример #17
0
        public ArticleItem GetArticleByNumber(string number)
        {
            using (var serviceScope = _.ServiceFactory(Constants.MasterDb))
            {
                using (var searchScope = _.SearchFactory())
                {
                    var service = serviceScope.Value;
                    var search  = searchScope.Value;

                    IArticleSearchFilter filter = search.CreateFilter();
                    filter.ArticleNumbers = number.SingleToList();
                    var results = search.SearchCustomDatabase(filter, Constants.MasterDb);
                    if (results.Articles.Any())
                    {
                        var foundArticle = results.Articles.FirstOrDefault();
                        if (foundArticle != null)
                        {
                            return(service.GetItem <ArticleItem>(foundArticle._Id));
                        }
                    }
                    return(null);
                }
            }
        }