// Do Not Cache this RH request.element.isStatic = 0; csAuthMode = false; if ( StructKeyExists(request,"renderstate") AND StructKeyExists(request.renderstate,"rendermode") AND ListFindNoCase("author,edit",request.renderstate.rendermode) ) csAuthMode = true; blogDataArray = attributes.elementInfo.elementData.propertyValues; itmCntr = 0; // Get the CFML engine Type cfmlEngineType = server.coldfusion.productname; // Config Values // - Set the Link, Page and Subsite Defualts baseLinkURL = ""; // Link to the Display page for the RSS feed Data rootSiteURL = "http://" & CGI.HTTP_HOST; // Get the feed Page ID from the current page feedPageID = request.page.ID; feedPageURL = Application.PTBlog2.csData.getCSPageURL(feedPageID); // Set the base Page and Subsite defaults... to handle it if nothing is passed in basePageURL = ""; baseSubsiteID = request.subsite.id; baseSubsiteURL = request.subsiteCache[request.subsite.id].url; // Build the site URL is the server is secure if ( CGI.SERVER_PORT IS "443" ) rootSiteURL = "https://" & CGI.HTTP_HOST; if ( structKeyExists(request.params,"pgid") AND IsNumeric(request.params.pgid) ) { basePageURL = Application.Blog2.csData.getCSPageURL(request.params.pgid); } else if ( structKeyExists(request.params,"ssid") AND IsNumeric(request.params.ssid) ) { // If a pageID is not passed in, use the index page of the current subsite (set above) or a subsite ID that is passed in // If a Subsite ID is passed in, use this for the subsite id baseSubsiteID = request.params.ssid; baseSubsiteURL = request.subsiteCache[baseSubsiteID].url; } // TODO: Add this to the CS Filter recentPostDaysFilter = 90; if (structKeyExists(request.params,"days") AND IsNumeric(request.params.days) AND request.params.days NEQ 0 ) recentPostDaysFilter = request.params.days; recentPostDescriptionWordsLimit = 25; if (structKeyExists(request.params,"words") AND IsNumeric(request.params.words) AND request.params.words NEQ 0 ) recentPostDescriptionWordsLimit = request.params.words; showElementData = false; if (structKeyExists(request.params,"elementdata") AND IsBoolean(request.params.elementdata) ) showElementData = request.params.elementdata; showRSSdata = false; if (structKeyExists(request.params,"rssdata") AND IsBoolean(request.params.rssdata) ) showRSSdata = request.params.rssdata; outputRSS = false; if ( !showRSSdata AND !showElementData AND StructKeyExists(request.params,"rss") AND IsBoolean(request.params.rss) AND request.params.rss EQ 1 ) outputRSS = true; if ( !outputRSS ) { application.ADF.scripts.loadFontAwesome(); } if ( showElementData ) Application.ptBlog2.utils.doDump(blogDataArray,"blogDataArray",0); // Create the LinkURL fromt the basePageURL if ( LEN(TRIM(basePageURL)) ) baseLinkURL = rootSiteURL & basePageURL; else baseLinkURL = rootSiteURL & baseSubsiteURL; // use the index page as the URL the base subsite // Build the RSS feed struct rssStruct = StructNew(); // The "link" is URL page the RSS feed references, not the URL of the FEED itself // - This URL was built from location of the CS Page using this RH or from the subsite or pageID that was passed in rssStruct.link = baseLinkURL; rssStruct.title = "Recent Blog Posts"; // TODO: Add to configuration render handler Meta data rssStruct.description = "RSS Feed for Recent Blog Posts"; // TODO: Add to configuration render handler Meta data rssStruct.pubDate = Now(); rssStruct.version = "rss_2.0"; rssStruct.item = ArrayNew(1); // Loop of Posts2 element data for (itm=1;itm LTE ArrayLen(blogDataArray); itm=itm+1) { //Application.ptBlog2.utils.doDump(blogDataArray[itm].values.blogID,"blogID",0); // Get the meta data about the BLOG that this Blog Post is coming from blogData = Application.ptBlog2.blogDAO.getBlog(blogDataArray[itm].values.blogID); //Application.ptBlog2.utils.doDump(blogData,"blogData",0); // Make sure the Blog is ACTIVE if ( IsStruct(blogData) AND StructKeyExists(blogData,"active") AND blogData.active EQ true ) { // Set 'baseLinkURL' adn the Default URL for each item FormattedPostURL = baseLinkURL; // Set the PageID for the Blog Post postPageID = blogDataArray[itm].values.postPageID; // If a PostPageID is available for the Post, get the Page URL from the pageid if ( LEN(TRIM(postPageID)) AND IsNumeric(postPageID) ) FormattedPostURL = rootSiteURL & application.ptBlog2.CSData.getCSPageURL(pageID=blogDataArray[itm].values.postPageID); // Formatted RSS Post Date FormattedDatePosted = createDate(year(blogDataArray[itm].values.datePosted), month(blogDataArray[itm].values.datePosted), day(blogDataArray[itm].values.datePosted)); // Filter By Recent Posts if ( DateCompare(FormattedDatePosted,DateAdd("d",-(recentPostDaysFilter),Now())) EQ 1) { itmCntr = itmCntr + 1; // Formatted RSS Title FormattedTitle = application.ptBlog2.data.EscapeExtendedChars(Trim(blogDataArray[itm].values.title)); // Format RSS Description FormattedDesciption = blogDataArray[itm].values.slug; if ( LEN(TRIM(FormattedDesciption)) EQ 0 ) FormattedDesciption = blogDataArray[itm].values.content; // Strip out Images from inside the blog post content block FormattedDesciption = REReplace(FormattedDesciption,"]*>","","All"); // Escape Extended Characters FormattedDesciption = application.ptBlog2.data.EscapeExtendedChars(FormattedDesciption); //FormattedDesciption = Server.CommonSpot.UDF.data.ToHTML(FormattedDesciption); //FormattedDesciption = Server.CommonSpot.UDF.data.FromHTML(FormattedDesciption); // Strip HTML FormattedDesciption = ReReplace(FormattedDesciption, "<[^>]*>", "", "all"); // Trim the number of words FormattedDesciption = application.ptBlog2.data.trimStringByWordCount(FormattedDesciption,recentPostDescriptionWordsLimit,0); // Make XML Safe (converts some characters to HTML entities ) // TODO: DO NOT USE... this logic needs some work before using this function // FormattedDesciption = xmlFormat(FormattedDesciption); // Build Feed ITEM substruct rssStruct.item[itmCntr] = StructNew(); rssStruct.item[itmCntr].title = xmlFormat(FormattedTitle); // "2" rssStruct.item[itmCntr].pubDate = FormattedDatePosted; rssStruct.item[itmCntr].description = StructNew(); rssStruct.item[itmCntr].description.value = FormattedDesciption; rssStruct.item[itmCntr].guid.isPermaLink = "YES"; rssStruct.item[itmCntr].guid.value = TRIM(FormattedPostURL); rssStruct.item[itmCntr].link = TRIM(FormattedPostURL); rssStruct.item[itmCntr].category = ArrayNew(1); // extract the tags from the a comma-delimited list and assign to RSS categories if ( structKeyExists(blogDataArray[itm].values, "tags") ) { tagNameList = blogDataArray[itm].values.tags; for (c=1;c LTE ListLen(tagNameList,","); c=c+1) { rssStruct.item[itmCntr].category[c] = StructNew(); rssStruct.item[itmCntr].category[c].value = Trim(ListGetAt(tagNameList,c,",")); } } // retrieve the tag names for the tags // IMPORTANT: This Requires ptTags App /* if (structKeyExists(blogDataArray[itm].values, "tags") and LEN(TRIM(blogDataArray[itm].values.tags)) ) { tagNameList = application.ptTags.tagsService.tagNameListByIDs(blogDataArray[itm].values.tags); //Build Category Sub-Substruct for TAGS for (cat=1;cat LTE ListLen(tagNameList,"^"); cat=cat+1) { rssStruct.item[itmCntr].category[cat] = StructNew(); rssStruct.item[itmCntr].category[cat].value = ListGetAt(tagNameList,cat,"^"); } } */ } } } if ( showRSSdata ) Application.ptBlog2.utils.doDump(rssStruct,"rssStruct",0);

#rssStruct.Title#

#itm.title#

#DateFormat(itm.PUBDATE,"DDDD, MMMM D, YYYY")# #TimeFormat(itm.PUBDATE,"h:mm tt")#