public ActionResult BlogHistory(AgilityContentItem module)
        {
            #region --- Get Blog Config and Repos ---
            var blogConfigRef             = module["BlogConfiguration"] as string;
            AgilityContentItem blogConfig = null;
            IAgilityContentRepository <AgilityContentItem> blogPosts      = null;
            IAgilityContentRepository <AgilityContentItem> blogCategories = null;
            IAgilityContentRepository <AgilityContentItem> blogTags       = null;
            IAgilityContentRepository <AgilityContentItem> blogAuthors    = null;
            BlogUtils.GetBlogConfig(blogConfigRef, out blogConfig, out blogPosts, out blogCategories, out blogTags, out blogAuthors);
            #endregion

            int numMonthsToDisplay;
            int.TryParse(string.Format("{0}", blogConfig["BlogHistoryMonthsMax"]), out numMonthsToDisplay);

            if (numMonthsToDisplay < 1)
            {
                numMonthsToDisplay = 12;
            }

            var months = new List <DateTime>();
            for (var i = 0; i < numMonthsToDisplay; i++)
            {
                var month = DateTime.Now.AddMonths(-i);
                months.Add(month);
            }

            var model = new BlogLinkViewModel();
            model.ShowCount     = model.ShowCount = BlogUtils.GetBool(blogConfig["ShowPostCounts"]);
            model.Items         = BlogUtils.GetBlogLinksWithPostCounts(blogConfig, blogPosts, months, model.ShowCount);
            model.SkipZeroPosts = true;
            model.Configuration = blogConfig;

            return(PartialView(AgilityComponents.TemplatePath("Blog-HistoryModule"), model));
        }
Пример #2
0
        public static Attachment GetPostImage(AgilityContentItem blogConfig, AgilityContentItem post, PostImageType type)
        {
            string     listingFieldName = "ListingImageOverride";
            string     detailsFieldName = "PostImage";
            string     defaultFieldName = "DefaultPostImage";
            Attachment att = null;

            if (type.Equals(PostImageType.Listing))
            {
                att = post.GetAttachment(listingFieldName);

                if (att == null)
                {
                    att = post.GetAttachment(detailsFieldName);
                }
            }

            if (type.Equals(PostImageType.Details))
            {
                att = post.GetAttachment(detailsFieldName);
            }


            if (att == null)
            {
                //try to get attachment from default image
                att = blogConfig.GetAttachment(defaultFieldName);
            }

            return(att);
        }
Пример #3
0
        public static string GetPostDescription(AgilityContentItem post, string excerptFieldName, object obj_autoExcerptLength)
        {
            int trimLength;

            int.TryParse(obj_autoExcerptLength as string, out trimLength);
            return(GetPostDescription(post, excerptFieldName, trimLength));
        }
Пример #4
0
        public static string CommentsRecordTypeName(this AgilityContentItem item, string referenceName)
        {
            Agility.Web.Objects.AgilityContent content = Data.GetContent(referenceName);
            var dt = content.ContentItems;

            return(dt != null && dt.ExtendedProperties.ContainsKey("CommentsRecordTypeName") ? dt.ExtendedProperties["CommentsRecordTypeName"].ToString() : "");
        }
        public ActionResult FeaturedBlogPost(AgilityContentItem module)
        {
            #region --- Get Blog Config and Repos ---
            var blogConfigRef             = module["BlogConfiguration"] as string;
            AgilityContentItem blogConfig = null;
            IAgilityContentRepository <AgilityContentItem> blogPosts      = null;
            IAgilityContentRepository <AgilityContentItem> blogCategories = null;
            IAgilityContentRepository <AgilityContentItem> blogTags       = null;
            IAgilityContentRepository <AgilityContentItem> blogAuthors    = null;
            BlogUtils.GetBlogConfig(blogConfigRef, out blogConfig, out blogPosts, out blogCategories, out blogTags, out blogAuthors);
            #endregion

            string postIDs = module["PostIDs"] as string;
            var    post    = BlogUtils.GetItemsByIDs(blogPosts.ContentReferenceName, postIDs).FirstOrDefault();

            if (post == null)
            {
                return(null);
            }

            var model = new PostViewModel();
            model.Configuration = blogConfig;
            model.Post          = post;

            return(PartialView(AgilityComponents.TemplatePath("Blog-FeaturedPostModule"), model));
        }
Пример #6
0
        public static void GetBlogConfig(
            string blogConfigReferenceName,
            out AgilityContentItem blogConfig,
            out IAgilityContentRepository <AgilityContentItem> blogPosts,
            out IAgilityContentRepository <AgilityContentItem> blogCategories,
            out IAgilityContentRepository <AgilityContentItem> blogTags,
            out IAgilityContentRepository <AgilityContentItem> blogAuthors)
        {
            blogConfig = new AgilityContentRepository <AgilityContentItem>(blogConfigReferenceName).Item("");

            string blogPostsRef = blogConfig["BlogPosts"] as string;

            blogPosts = new AgilityContentRepository <AgilityContentItem>(blogPostsRef);

            string blogCategoriesRef = blogConfig["BlogCategories"] as string;

            blogCategories = new AgilityContentRepository <AgilityContentItem>(blogCategoriesRef);

            string blogTagsRef = blogConfig["BlogTags"] as string;

            blogTags = new AgilityContentRepository <AgilityContentItem>(blogTagsRef);

            string blogAuthorsRef = blogConfig["BlogAuthors"] as string;

            blogAuthors = new AgilityContentRepository <AgilityContentItem>(blogAuthorsRef);
        }
        public ActionResult BlogRecent(AgilityContentItem module)
        {
            #region --- Get Blog Config and Repos ---
            var blogConfigRef             = module["BlogConfiguration"] as string;
            AgilityContentItem blogConfig = null;
            IAgilityContentRepository <AgilityContentItem> blogPosts      = null;
            IAgilityContentRepository <AgilityContentItem> blogCategories = null;
            IAgilityContentRepository <AgilityContentItem> blogTags       = null;
            IAgilityContentRepository <AgilityContentItem> blogAuthors    = null;
            BlogUtils.GetBlogConfig(blogConfigRef, out blogConfig, out blogPosts, out blogCategories, out blogTags, out blogAuthors);
            #endregion

            int recentPostsLimit;
            int.TryParse(string.Format("{0}", blogConfig["RecentPostsMax"]), out recentPostsLimit);

            if (recentPostsLimit < 1)
            {
                recentPostsLimit = 12;
            }

            var posts = BlogUtils.GetPosts(blogPosts, "", "Date Desc", recentPostsLimit, 0);

            var model = new BlogLinkViewModel();
            model.ShowCount = false;
            model.Items     = posts.Select(i => new BlogLinkItem()
            {
                Title   = i["Title"] as string,
                Url     = i.BlogDynamicUrl(blogConfig, null),
                Excerpt = BlogUtils.GetPostDescription(i, "Excerpt", blogConfig["AutoExcerptLength"])
            }).ToList();
            model.Configuration = blogConfig;

            return(PartialView(AgilityComponents.TemplatePath("Blog-RecentPostsModule"), model));
        }
Пример #8
0
 public Task <IViewComponentResult> InvokeAsync(string inlineCodePath, AgilityContentItem module)
 {
     return(Task.Run <IViewComponentResult>(() =>
     {
         return View(inlineCodePath, module);
     }));
 }
Пример #9
0
        public async Task <HtmlString> InvokeAsync(AgilityContentItem item)
        {
            AgilityContext.HttpContext = HttpContext;

            string value = item["TextBlob"] as string;

            return(new HtmlString(value));
        }
        public ActionResult BlogAuthorDetails(AgilityContentItem module)
        {
            HttpContext.Response.Cache.VaryByParams[BlogContext.PagingQueryStringKey] = true;

            #region --- Get Blog Config and Repos ---
            var blogConfigRef             = module["BlogConfiguration"] as string;
            AgilityContentItem blogConfig = null;
            IAgilityContentRepository <AgilityContentItem> blogPosts      = null;
            IAgilityContentRepository <AgilityContentItem> blogCategories = null;
            IAgilityContentRepository <AgilityContentItem> blogTags       = null;
            IAgilityContentRepository <AgilityContentItem> blogAuthors    = null;
            BlogUtils.GetBlogConfig(blogConfigRef, out blogConfig, out blogPosts, out blogCategories, out blogTags, out blogAuthors);
            #endregion

            var author = AgilityContext.GetDynamicPageItem <AgilityContentItem>();
            if (!author.IsBlogAuthor())
            {
                return(null);
            }


            #region --- Get Posts and set Pagination ---
            List <AgilityContentItem> posts      = null;
            BlogPaginationViewModel   pagination = null;

            if (BlogUtils.GetBool(module["DisplayRecentBlogPosts"]))
            {
                int pageSize = 10;
                int.TryParse(string.Format("{0}", module["PageSize"]), out pageSize);
                if (pageSize < 1)
                {
                    pageSize = 10;
                }
                int pageNumber = 1;
                int.TryParse(Request.QueryString[BlogContext.PagingQueryStringKey] as string, out pageNumber);
                if (pageNumber < 1)
                {
                    pageNumber = 1;
                }
                int skip       = (pageNumber * pageSize) - pageSize;
                int totalCount = 0;

                //get the posts
                posts      = BlogUtils.GetPosts(blogPosts, author.ContentID, "", "", "", "", "Date Desc", pageSize, skip, out totalCount);
                pagination = new BlogPaginationViewModel(pageNumber, pageSize, totalCount, true, 5, BlogContext.PagingQueryStringKey, "agility-active", "agility-disabled");
            }
            #endregion

            var model = new BlogAuthorViewModel();
            model.Author        = author;
            model.Posts         = posts;
            model.Module        = module;
            model.Configuration = blogConfig;
            model.Pagination    = pagination;

            return(PartialView(AgilityComponents.TemplatePath("Blog-AuthorDetailsModule"), model));
        }
Пример #11
0
        public static string GetBlogRootPath(AgilityContentItem blogConfig)
        {
            string rootPage = Data.UrlEval(blogConfig["RootPage"] as string, "url");

            if (string.IsNullOrEmpty(rootPage))
            {
                rootPage = DefaultRootPage;
            }
            return(rootPage);
        }
Пример #12
0
        public static AgilityContentItem GetItemByID(string referenceName, int id)
        {
            AgilityContentItem item = null;

            if (id > 0)
            {
                item = new AgilityContentRepository <AgilityContentItem>(referenceName).GetByID(id);
            }

            return(item);
        }
Пример #13
0
        public static AgilityContentItem GetBlogConfig(string blogConfigReferenceName)
        {
            AgilityContentItem blogConfig = null;
            IAgilityContentRepository <AgilityContentItem> blogPosts      = null;
            IAgilityContentRepository <AgilityContentItem> blogCategories = null;
            IAgilityContentRepository <AgilityContentItem> blogTags       = null;
            IAgilityContentRepository <AgilityContentItem> blogAuthors    = null;

            GetBlogConfig(blogConfigReferenceName, out blogConfig, out blogPosts, out blogCategories, out blogTags, out blogAuthors);
            return(blogConfig);
        }
Пример #14
0
 public static string GetPostDescription(AgilityContentItem post, string excerptFieldName, object obj_autoExcerptLength, int overrideExcerptLength)
 {
     if (overrideExcerptLength > 0)
     {
         return(GetPostDescription(post, excerptFieldName, overrideExcerptLength, true));
     }
     else
     {
         return(GetPostDescription(post, excerptFieldName, obj_autoExcerptLength));
     }
 }
Пример #15
0
        public static string GetPostImageAlt(AgilityContentItem blogConfig, AgilityContentItem post, PostImageType type)
        {
            string altText = "";
            var    att     = GetPostImage(blogConfig, post, type);

            if (att != null)
            {
                altText = att.Label;
            }

            return(altText);
        }
Пример #16
0
        public static string GetPostImageUrl(AgilityContentItem blogConfig, AgilityContentItem post, PostImageType type, int width = 0, int height = 0)
        {
            string url = "";
            var    att = GetPostImage(blogConfig, post, type);

            if (att != null)
            {
                url = GetTranscodedUrl(att, width, height);
            }

            return(url);
        }
Пример #17
0
        public static string GetAuthorImageUrl(AgilityContentItem blogConfig, AgilityContentItem author, int width = 0, int height = 0)
        {
            var att = GetAuthorImage(blogConfig, author);

            if (att != null)
            {
                return(GetTranscodedUrl(att, width, height));
            }
            else
            {
                return("");
            }
        }
        /// <summary>
        /// Converts AgilityContentItem into a dynamic ExpandoObject so additional properties can be added easily. Sets a "Key" field use in the frontend. Defaults to "ContentID".
        /// </summary>
        /// <param name="o"></param>
        /// <returns></returns>
        public static dynamic ToFrontendProps(this AgilityContentItem ci, string keyField = "ContentID")
        {
            //convert to expando object
            var o = ci.ToDynamic(removeHrefTilde: true) as IDictionary <string, Object>;

            //set a key if we can
            SetKey(o, keyField);

            //remove unwanted props
            IgnoreProps(o);

            return(o);
        }
Пример #19
0
        public static string GetAuthorImageAlt(AgilityContentItem blogConfig, AgilityContentItem author)
        {
            var att = GetAuthorImage(blogConfig, author);

            if (att != null)
            {
                return(att.Label);
            }
            else
            {
                return("");
            }
        }
Пример #20
0
        private static string GetBlogPostListingImageUrl(AgilityContentItem contentItem)
        {
            var url = string.Empty;

            var listingImage = GetBlogPostListingImage(contentItem);

            if (listingImage != null)
            {
                url = listingImage.URL;
            }

            return(url);
        }
Пример #21
0
        private static string GetBlogPostListingImageTitle(AgilityContentItem contentItem)
        {
            var label = string.Empty;

            var listingImage = GetBlogPostListingImage(contentItem);

            if (listingImage != null)
            {
                label = listingImage.Label;
            }

            return(label);
        }
Пример #22
0
        public static Attachment GetAuthorImage(AgilityContentItem blogConfig, AgilityContentItem author)
        {
            string     authorFieldName  = "Image";
            string     defaultFieldName = "DefaultAuthorImage";
            Attachment att = null;

            att = author.GetAttachment(authorFieldName);
            if (att == null)
            {
                att = blogConfig.GetAttachment(defaultFieldName);
            }

            return(att);
        }
Пример #23
0
        private static Attachment GetBlogPostListingImage(AgilityContentItem contentItem)
        {
            Attachment resultListingImage = null;

            if (contentItem != null)
            {
                var postImage = contentItem.GetAttachment("PostImage");

                var listingImage = contentItem.GetAttachment("ListingImageOverride");

                resultListingImage = postImage ?? resultListingImage;
            }

            return(resultListingImage);
        }
Пример #24
0
        public static AgilityContentItem GetItemByID(object obj_referenceName, object obj_id)
        {
            int id = 0;

            int.TryParse(obj_id.ToString(), out id);
            AgilityContentItem item          = null;
            string             referenceName = obj_referenceName as string;

            if (id > 0)
            {
                item = GetItemByID(referenceName, id);
            }

            return(item);
        }
Пример #25
0
        public static List <BlogLinkItem> GetBlogLinksWithPostCounts(AgilityContentItem blogConfig, IAgilityContentRepository <AgilityContentItem> postsRepo, IAgilityContentRepository <AgilityContentItem> blogLinksRepo, List <DateTime> blogLinksDates, bool getCounts)
        {
            //blog links can be either Categories or Tags
            var cacheKey = string.Format("Agility.Components.Blog.GetBlogLinksWithPostCounts_{0}_{1}_{2}_{3}", blogConfig.ContentID, postsRepo.ContentReferenceName, (blogLinksRepo != null ? blogLinksRepo.ContentReferenceName : ""), (blogLinksDates != null ? blogLinksDates.Count : 0));
            List <BlogLinkItem> links = HttpContext.Current.Cache[cacheKey] as List <BlogLinkItem>;

            if (links != null)
            {
                return(links);
            }

            lock (_getBlogLinksCountsCacheLock)
            {
                if (links != null)
                {
                    return(links);
                }



                if (blogLinksDates != null && blogLinksDates.Any())
                {
                    links = blogLinksDates.Select(i => new BlogLinkItem()
                    {
                        Title     = i.ToString("MMMM yyyy"),
                        Url       = string.Format("{0}?month={1}", BlogContext.GetBlogRootPath(blogConfig), i.ToString("MM-yyyy")),
                        PostCount = (getCounts ? BlogUtils.GetPostCountByDate(postsRepo, i) : 0),
                    }).ToList();
                }
                else if (blogLinksRepo != null)
                {
                    var items = blogLinksRepo.Items();
                    links = items.Select(i => new BlogLinkItem()
                    {
                        Title      = i["Title"] as string,
                        Url        = i.BlogDynamicUrl(blogConfig, null),
                        PostCount  = (getCounts ? BlogUtils.GetPostCount(postsRepo, i) : 0),
                        ImageUrl   = GetBlogPostListingImageUrl(i),
                        ImageLabel = GetBlogPostListingImageTitle(i),
                        Excerpt    = ""
                    }).ToList();
                }

                HttpContext.Current.Cache.Add(cacheKey, links, null, DateTime.Now.AddHours(2), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null);

                return(links);
            }
        }
        public ActionResult FrontendComponent(AgilityContentItem module)
        {
            string componentName = null;

            try
            {
                componentName = module["ComponentName"] as string;
            } catch
            {
                throw new ApplicationException("Module does not implement a field called 'ComponentName', cannot execute React component.");
            }

            //convert the module data to a dynamic object, then convert to front-end props
            var viewModel = module.ToFrontendProps();

            return(new ReactActionResult($"Components.{componentName}", viewModel));
        }
        public ActionResult BlogTags(AgilityContentItem module)
        {
            #region --- Get Blog Config and Repos ---
            var blogConfigRef             = module["BlogConfiguration"] as string;
            AgilityContentItem blogConfig = null;
            IAgilityContentRepository <AgilityContentItem> blogPosts      = null;
            IAgilityContentRepository <AgilityContentItem> blogCategories = null;
            IAgilityContentRepository <AgilityContentItem> blogTags       = null;
            IAgilityContentRepository <AgilityContentItem> blogAuthors    = null;
            BlogUtils.GetBlogConfig(blogConfigRef, out blogConfig, out blogPosts, out blogCategories, out blogTags, out blogAuthors);
            #endregion

            var model = new BlogLinkViewModel();
            model.ShowCount     = BlogUtils.GetBool(blogConfig["ShowPostCounts"]);
            model.Items         = BlogUtils.GetBlogLinksWithPostCounts(blogConfig, blogPosts, blogTags, model.ShowCount);
            model.Configuration = blogConfig;

            return(PartialView(AgilityComponents.TemplatePath("Blog-TagsModule"), model));
        }
        public static dynamic ToDynamic(this AgilityContentItem ci, bool removeHrefTilde = false)
        {
            var dynamicObj = new ExpandoObject() as IDictionary <string, Object>;
            DataColumnCollection columns = ci.Row.Table.Columns;

            //write each column into our dynamic obj
            foreach (var col in columns)
            {
                string colName  = col.ToString();
                var    objValue = ci[colName];

                //specific cases with a string
                if (objValue is string)
                {
                    //have to test whether this is an attachment
                    //TODO: need a more performant way to do this
                    var attachment = ci.GetAttachment(colName);

                    if (attachment != null)
                    {
                        objValue = attachment;
                    }
                    //test whether this is a UrlField
                    else if (IsAnchorTag(objValue as string))
                    {
                        if (removeHrefTilde)
                        {
                            objValue = ci.ParseUrl(colName).RemoveTilde();
                        }
                        else
                        {
                            objValue = ci.ParseUrl(colName);
                        }
                    }
                }

                dynamicObj.Add(colName, objValue);
            }

            return(dynamicObj);
        }
        public static string ArticleDetailsURL(this AgilityContentItem contentItem)
        {
            string detailsUrl = string.Empty;
            string itemUrl    = contentItem["URL"] as string;

            switch (contentItem.ReferenceName)
            {
            case "Articles":
                detailsUrl = string.Format("~/articles/{0}", itemUrl);
                break;

            case "Factoids":
                detailsUrl = string.Format("~/factoids/{0}", itemUrl);
                break;

            case "GuestBlog":
                detailsUrl = string.Format("~/guest-blogs/{0}", itemUrl);
                break;

            case "Listicles":
                detailsUrl = string.Format("~/listicles/{0}", itemUrl);
                break;

            case "PhotoEditorials":
                detailsUrl = string.Format("~/photo-editorials/{0}", itemUrl);
                break;

            case "ProductSpotlights":
                detailsUrl = string.Format("~/product-spotlights/{0}", itemUrl);
                break;

            case "Videos":
                detailsUrl = string.Format("~/videos/{0}", itemUrl);
                break;

            default:
                break;
            }

            return(detailsUrl);
        }
Пример #30
0
        public static string GetDynamicCategoryBlogPostPath(AgilityContentItem blogConfig, AgilityContentItem category, bool includeDynamicCategoryNameInPath = false)
        {
            string url          = "";
            string categoryPath = GetDynamicBlogCategoryPath(blogConfig);

            if (includeDynamicCategoryNameInPath)
            {
                var d = Data.GetDynamicPageItem(GetDynamicBlogCategoryPath(blogConfig), category.ReferenceName, category.Row);

                if (d != null)
                {
                    categoryPath = string.Format(
                        "{0}/{1}",
                        categoryPath.Substring(0, categoryPath.LastIndexOf('/')), d.Name).ToLowerInvariant();
                }
            }

            url = string.Format("{0}/post-details", categoryPath);

            return(url);
        }