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)); }
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); }
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)); }
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)); }
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)); }
public Task <IViewComponentResult> InvokeAsync(string inlineCodePath, AgilityContentItem module) { return(Task.Run <IViewComponentResult>(() => { return View(inlineCodePath, module); })); }
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)); }
public static string GetBlogRootPath(AgilityContentItem blogConfig) { string rootPage = Data.UrlEval(blogConfig["RootPage"] as string, "url"); if (string.IsNullOrEmpty(rootPage)) { rootPage = DefaultRootPage; } return(rootPage); }
public static AgilityContentItem GetItemByID(string referenceName, int id) { AgilityContentItem item = null; if (id > 0) { item = new AgilityContentRepository <AgilityContentItem>(referenceName).GetByID(id); } return(item); }
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); }
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)); } }
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); }
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); }
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); }
public static string GetAuthorImageAlt(AgilityContentItem blogConfig, AgilityContentItem author) { var att = GetAuthorImage(blogConfig, author); if (att != null) { return(att.Label); } else { return(""); } }
private static string GetBlogPostListingImageUrl(AgilityContentItem contentItem) { var url = string.Empty; var listingImage = GetBlogPostListingImage(contentItem); if (listingImage != null) { url = listingImage.URL; } return(url); }
private static string GetBlogPostListingImageTitle(AgilityContentItem contentItem) { var label = string.Empty; var listingImage = GetBlogPostListingImage(contentItem); if (listingImage != null) { label = listingImage.Label; } return(label); }
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); }
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); }
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); }
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); }
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); }