public partial class FeedPage : System.Web.UI.Page
{
/// <summary>
/// write the RSS content to the page output stream.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
// get the RSS data
Microsoft.SharePoint.
SPSite SiteCollection = SPContext.Current.Site;
DataTable tbl = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
string WebPath, PageID, WebPartID;
WebPath = Request.QueryString[WebPartResources.web];
PageID = Request.QueryString[WebPartResources.page];
WebPartID = Request.QueryString[WebPartResources.wp];
// intialize the site with a token
SPWeb web = SiteCollection.OpenWeb(WebPath);
SPFile page = web.GetFile(new Guid(PageID));
ContentByQueryWebPart part = (ContentByQueryWebPart)page.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.User).WebParts[new Guid(WebPartID)];
CbqQueryVersionInfo query = part.BuildCbqQueryVersionInfo();
SPSiteDataQuery sQuery = new SPSiteDataQuery();
sQuery.Lists = query.VersionCrossListQueryInfo.Lists;
sQuery.Query = query.VersionCrossListQueryInfo.Query;
sQuery.RowLimit = query.VersionCrossListQueryInfo.RowLimit;
sQuery.ViewFields = query.VersionCrossListQueryInfo.ViewFields;
sQuery.Webs = query.VersionCrossListQueryInfo.Webs;
web = SiteCollection.OpenWeb(part.WebUrl);
tbl = web.GetSiteData(sQuery);
});
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8);
WriteRSSPrologue(writer);
bool BodyExists=false;
//DateTime ArticleDate="";
for (int counter=0; counter<tbl.Columns.Count;counter++)
{
if (tbl.Columns[counter].ColumnName.ToLower() == WebPartResources.PublishingPageContent.ToLower())
BodyExists=
true;
}
for (int itemsCounter = 0; itemsCounter < tbl.Rows.Count; itemsCounter++)
{
if (!BodyExists)
AddRSSItem(writer, tbl.Rows[itemsCounter][
WebPartResources.ItemTitle].ToString(),
tbl.Rows[itemsCounter][
WebPartResources.ItemLink].ToString().Split('#')[1],
string.Empty, tbl.Rows[itemsCounter][WebPartResources.ArtilceDate].ToString());
else
AddRSSItem(writer, tbl.Rows[itemsCounter][
WebPartResources.ItemTitle].ToString(),
tbl.Rows[itemsCounter][
WebPartResources.ItemLink].ToString().Split('#')[1],
tbl.Rows[itemsCounter][
WebPartResources.PublishingPageContent].ToString(),
tbl.Rows[itemsCounter][
WebPartResources.ArticleStartDate].ToString());
}
WriteRSSClosing(writer);
writer.Flush();
writer.Close();
Response.ContentEncoding = System.Text.
Encoding.UTF8;
Response.ContentType =
WebPartResources.textxml;
Response.Cache.SetCacheability(
HttpCacheability.Public);
Response.End();
}
/// <summary>
/// Write RSS
/// </summary>
/// <param name="writer"></param>
/// <returns></returns>
public XmlTextWriter WriteRSSPrologue(XmlTextWriter writer)
{
writer.WriteStartDocument();
writer.WriteStartElement(
WebPartResources.rss);
writer.WriteAttributeString(
WebPartResources.version,WebPartResources.two);
writer.WriteStartElement(
WebPartResources.channel);
writer.WriteElementString(
WebPartResources.Title.ToLower(),WebPartResources.RSSTitle);
writer.WriteElementString(
WebPartResources.link, Request.Url.AbsoluteUri);
writer.WriteElementString(
WebPartResources.RSSDescription.ToLower(), string.Empty);
writer.WriteElementString(
WebPartResources.ttl.ToLower(), (60).ToString());
//writer.WriteElementString("copyright", "Copyright 2002-2003 Dan Bright");
// writer.WriteElementString("generator", "RSSviaXmlTextWriter v1.0");
return writer;
}
/// <summary>
/// Add RSS item
/// </summary>
/// <param name="writer"></param>
/// <param name="sItemTitle"></param>
/// <param name="sItemLink"></param>
/// <param name="sItemDescription"></param>
/// <returns></returns>
public XmlTextWriter AddRSSItem(XmlTextWriter writer,
string sItemTitle, string sItemLink,
string sItemDescription, string dItemArticleDate)
{
writer.WriteStartElement(
WebPartResources.item);
writer.WriteElementString(
WebPartResources.Title.ToLower(), sItemTitle);
writer.WriteElementString(
WebPartResources.link,ConfigurationManager.AppSettings[WebPartResources.AppPath] + WebPartResources.slash + sItemLink);
writer.WriteElementString(
WebPartResources.RSSDescription.ToLower(), sItemDescription);
//if (Request.QueryString[WebPartResources.web].ToLower().Contains(WebPartResources.arabicURL))
// writer.WriteElementString(WebPartResources.pubDate, dItemArticleDate.ToString(WebPartResources.PrintDateFormatArabic));
//else
writer.WriteElementString(
WebPartResources.pubDate, dItemArticleDate);
writer.WriteEndElement();
return writer;
}
/// <summary>
/// Write RSS closing
/// </summary>
/// <param name="writer"></param>
/// <returns></returns>
public XmlTextWriter WriteRSSClosing(XmlTextWriter writer)
{
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
return writer;
}
}