|
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebPartPages;
using System.Xml;
//using System.Net;
using AjaxControlToolkit;
namespace RSSReaderAjax
{
[DefaultProperty("Text"),
ToolboxData("<{0}:RSSReaderAjax runat=server></{0}:RSSReaderAjax>"),
XmlRoot(Namespace = "RSSReaderAjax")]
public class RSSReaderAjax :WebPart
{
#region Fields
private string []_rssurl=new string[4];
private string[] _rssimgurl = new string[4];
TextBox []txturl=new TextBox[4];
LinkButton[] btnfetchrss = new LinkButton[4];
LinkButton[] btnrefresh = new LinkButton[4];
LinkButton []btnreset=new LinkButton[4];
TabPanel []tabs=new TabPanel[4];
TabContainer tc;
Label[] rsstext = new Label[4];
UpdatePanel rsspanel;
UpdateProgress rssprogress;
Timer ajaxtimer;
// Image[] imgtab = new Image[4];
int _updateinterval=120;
int _imgpanelwidth = 0;
string plusimage;
string minusimage;
const string rssstr="_layouts/listfeed.aspx";
string togglescript = @"function ToggleDescription(currentDiv,parentdiv,plus,minus)
{
if(currentDiv.style.display == 'none')
{
currentDiv.style.display = 'block';
parentdiv.src=minus;
}
else
{
currentDiv.style.display = 'none';
parentdiv.src=plus;
}
currentDiv.style.paddingLeft='25';
}
function ToggleItemDescription(currentDiv,plus,minus)
{
var parentdiv='ctl_'+currentDiv;
ToggleDescription(document.getElementById(currentDiv),document.getElementById(parentdiv),plus,minus);
}";
#endregion
#region customproperties
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("1st RSS Feed URL")]
[Description("Put 1st the RSS Feed URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSUrl")]
public string RSSUrl
{
get
{
return _rssurl[0];
}
set
{
_rssurl[0] = MakeRssUrl(value);
}
}
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("1st Tab Image URL")]
[Description("Put 1st Tab Imag URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSimgUrl")]
public string RSSImgUrl
{
get
{
return _rssimgurl[0];
}
set
{
_rssimgurl[0] = value;
}
}
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("2nd RSS feed URL")]
[Description("Put 2nd the RSS Feed URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSUrl1")]
public string RSSUrl1
{
get
{
return _rssurl[1];
}
set
{
_rssurl[1] = value;
}
}
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("2nd Tab Image URL")]
[Description("Put 2nd Tab Image URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSimgUrl1")]
public string RSSImgUrl1
{
get
{
return _rssimgurl[1];
}
set
{
_rssimgurl[1] = value;
}
}
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("3rd RSS Feed URL")]
[Description("Put 3rd the RSS Feed URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSUrl2")]
public string RSSUrl2
{
get
{
return _rssurl[2];
}
set
{
_rssurl[2] = value;
}
}
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("3rd Tab Image URL")]
[Description("Put 3rd Tab Image URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSimgUrl2")]
public string RSSImgUrl2
{
get
{
return _rssimgurl[2];
}
set
{
_rssimgurl[2] = value;
}
}
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("4th RSS Feed URL")]
[Description("Put the 4th RSS Feed URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSUrl3")]
public string RSSUrl3
{
get
{
return _rssurl[3];
}
set
{
_rssurl[3] = value;
}
}
[DefaultValue("")]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("4th Tab Image URL")]
[Description("Put the 4th Tab Image URL")]
[Browsable(true)]
[XmlElement(ElementName = "RSSimgUrl3")]
public string RSSImgUrl3
{
get
{
return _rssimgurl[3];
}
set
{
_rssimgurl[3] = value;
}
}
[DefaultValue(120)]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("Update Interval")]
[Description("Specify(in secs) how often feed should update")]
[Browsable(true)]
[XmlElement(ElementName = "UpdateInterval")]
public int UpdateInterval
{
get
{
return _updateinterval;;
}
set
{
try
{
_updateinterval =value;
}
catch (Exception)
{
_updateinterval = 120;
}
}
}
[DefaultValue(0)]
[WebPartStorage(Storage.Shared)]
[FriendlyNameAttribute("Image Panel Width(in pixels, Put 0 to autofit image)")]
[Description("Please specify the width of image panel in pixels")]
[Browsable(true)]
[XmlElement(ElementName = "ImagePanel")]
public int ImgPanelWidth
{
get
{
return _imgpanelwidth;
}
set
{
try
{
_imgpanelwidth = value;
}
catch (Exception)
{
_imgpanelwidth = 200;
}
}
}
#endregion
#region functions
protected override void CreateChildControls()
{
base.CreateChildControls();
#region Ajax_start
EnsurePanelFix();
rsspanel = new UpdatePanel();
rsspanel.ID = "rsspanel";
rsspanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
rsspanel.ChildrenAsTriggers = true;
ajaxtimer = new Timer();
ajaxtimer.Enabled = true;
ajaxtimer.ID = "ajaxtimer";
ajaxtimer.Interval = UpdateInterval*1000;
#endregion
string content = "<script language='javascript'> " + togglescript + "</script>";
System.Web.UI.ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "madhur", content, false);
plusimage = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "RSSReaderAjax.plus.gif");
minusimage = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "RSSReaderAjax.minus.gif");
string css = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "RSSReaderAjax.StyleSheet.css");
string link = "<link rel='stylesheet' type='text/css' href='" + css + "'/>";
Page.Header.Controls.Add(new LiteralControl(link));
rsspanel.ContentTemplateContainer.Controls.Add(tc);
rsspanel.ContentTemplateContainer.Controls.Add(ajaxtimer);
for (int i = 0; i < 4; ++i)
{
if (GetRSSUrl(i) == null)
{
tc.Tabs[i].Enabled = false;
txturl[i] = new TextBox();
txturl[i].ID = "txturl" + i.ToString();
txturl[i].Visible = true;
btnfetchrss[i] = new LinkButton();
btnfetchrss[i].ID = "btnfetchrss" + i.ToString();
btnfetchrss[i].Text = "Set RSS Url";
btnfetchrss[i].Click += new EventHandler(btnfetchrss_Click);
tabs[i].Controls.Add(new LiteralControl("Please specify the URL of the RSS feed in webpart properties.<br>"));
// tabs[i].Controls.Add(txturl[i]);
// tabs[i].Controls.Add(btnfetchrss[i]);
// this.Controls.Add(btnfetchrss[i]);
}
else
{
rsstext[i] = new Label();
rsstext[i].ID = "rsstext" + i.ToString();
btnreset[i] = new LinkButton();
btnreset[i].Text = "Reset URL";
btnreset[i].ID = "btnreset" + i.ToString();
btnreset[i].Click += new EventHandler(btnreset_Click);
btnrefresh[i] = new LinkButton();
btnrefresh[i].Text = "Refresh";
btnrefresh[i].ID = "btnrefresh" + i.ToString();
btnrefresh[i].Click += new EventHandler(btnrefresh_Click);
rsstext[i].Text = RSSBind(GetRSSUrl(i),i);
tabs[i].Controls.Add(rsstext[i]);
}
}
this.Controls.Add(rsspanel);
AjaxControlToolkit.UpdatePanelAnimationExtender anim = new UpdatePanelAnimationExtender();
anim.ID = "anim";
anim.TargetControlID = rsspanel.ID;
//AjaxControlToolkit.Animation.ScriptAction d=new AjaxControlToolkit.Animation.ScriptAction();
//anim.OnUpdating=AjaxControlToolkit.Animation.
}
public string RSSBind(string url,int index)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.Data.DataSet ds = RSSRead.GetFeeds(url);
if (ds.Tables.Count == 1)
{
sb.Append("Error occured: " + ds.Tables[0].Rows[0][0].ToString());
return sb.ToString();
}
System.Data.DataTable dtFeeds = ds.Tables[0];
System.Data.DataTable info = ds.Tables[1];
int count = 1;
string divnonestyle = "style=display:none";
string divid = string.Empty;
string parentdivid = string.Empty;
string funccall = string.Empty;
sb.Append("<table>");
sb.Append("<tr>");
string s = GetRSSImage(index);
if (!string.IsNullOrEmpty(s))
{
sb.Append("<td width='"+ImgPanelWidth+"' valign='top'>");
sb.Append("<img src='" + GetRSSImage(index) + "' valign='top'/>");
sb.Append("</td>");
}
sb.Append("<td>");
foreach (System.Data.DataRowView drv in dtFeeds.DefaultView)
{
divid = this.ID+index.ToString()+ count.ToString();
parentdivid = "ctl_" + divid;
funccall = "javascript:ToggleItemDescription('" + divid + "','" + plusimage + "','" +minusimage + "')";
sb.Append("<table>");
sb.Append("<tr>");
sb.Append("<td>");
sb.Append("<img onclick=" + funccall + " valign=bottom border=0 style='cursor:hand;'id=\"" + parentdivid + "\" src=\"" + plusimage + "\"/>");
sb.Append("</td>");
sb.Append("<td>");
sb.Append("<a href=\"" + funccall+"\">" + drv["Title"].ToString() + "</a>");
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("<div id=\"" + divid + "\"" + divnonestyle + ">");
drv["Content"] = drv["Content"].ToString().Replace("<b>Body:</b>", string.Empty);
drv["Content"] = drv["Content"].ToString().Replace('�', ' ');
sb.Append(drv["Content"].ToString());
sb.Append("Published on: " + drv["PublishDate"].ToString());
sb.Append("</div>");
count++;
}
sb.Append("<a href=\"" + info.Rows[1][0].ToString() + "\"><br>Click here to View all items</a><br>");
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</table>");
int j=info.Rows[0][0].ToString().IndexOf(':');
if (j != -1)
tc.Tabs[index].HeaderText = info.Rows[0][0].ToString().Substring(j + 2);
else
tc.Tabs[index].HeaderText = info.Rows[0][0].ToString();
return sb.ToString();
}
private string writeRSSLink(SPList list, SPView view)
{
string _rssUrl = list.ParentWebUrl.ToString() + "/_layouts/listfeed.aspx?";
_rssUrl += "List=" + list.ID.ToString();
_rssUrl += "&View=" + view.ID.ToString();
return "<A HREF='" + _rssUrl + "'>View RSS Feed <IMG SRC='/_layouts/images/rss.gif' BORDER=0></A>";
}
protected override void OnInit(EventArgs e)
{
// Let's find if the ScriptManager exists and add it if not
ScriptManager scriptManager = ScriptManager.GetCurrent(Page);
if (scriptManager == null)
{
scriptManager = new ScriptManager();
scriptManager.EnablePartialRendering = true;
scriptManager.ID = "sm";
if (Page.Form != null)
{
// Insert script manager after the web part manager
for (int controlIndex = 0; controlIndex < Page.Form.Controls.Count; controlIndex++)
{
if (Page.Form.Controls[controlIndex].GetType() == WebPartManager.GetType())
{
Page.Form.Controls.AddAt(controlIndex + 1, scriptManager);
}
}
}
}
tc = new TabContainer();
tc.ID = "tc";
tc.CssClass = "ajax__tab_yuitabview-theme";
tc.BorderWidth = Unit.Pixel(0);
for (int i = 0; i < 4; ++i)
{
tabs[i] = new TabPanel();
tabs[i].HeaderText = "Tab "+i.ToString();
tabs[i].ID = "tabs" + i.ToString();
tabs[i].BorderWidth = Unit.Pixel(0);
tc.Tabs.Add(tabs[i]);
}
rssprogress = new UpdateProgress();
rssprogress.ID = "rssprogress";
rssprogress.ProgressTemplate = new MyTemplate(this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "RSSReaderAjax.activityanimation.gif"));
this.Controls.Add(rssprogress);
this.ChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.None;
base.OnInit(e);
}
void btnreset_Click(object sender, EventArgs e)
{
if (sender == btnreset[0])
RSSUrl = null;
else if (sender == btnreset[1])
RSSUrl1 = null;
else if (sender == btnreset[2])
RSSUrl2 = null;
else
RSSUrl3 = null;
this.SetPersonalizationDirty();
rsspanel.Update();
}
void btnfetchrss_Click(object sender, EventArgs e)
{
// WebPartManager.DisplayMode=Microsoft.SharePoint.WebPartPages.
SPWebPartManager wp = (SPWebPartManager)this.Parent;
wp.DisplayMode = SPWebPartManager.EditDisplayMode;
wp.BeginWebPartEditing(this);
//WebPartManager.DisplayMode = System.Web.UI.WebControls.WebParts.WebPartManager.EditDisplayMode;
//WebPartManager.BeginWebPartEditing(this);
/*if(sender==btnfetchrss[0])
RSSUrl = txturl[0].Text;
else if(sender==btnfetchrss[1])
RSSUrl1 = txturl[1].Text;
else if (sender == btnfetchrss[2])
RSSUrl2 = txturl[2].Text;
else
RSSUrl3 = txturl[3].Text;
this.SaveProperties = true;
rsspanel.Update();*/
}
void btnrefresh_Click(object sender, EventArgs e)
{
//System.Threading.Thread.Sleep(2000);
if (sender == btnrefresh[0])
rsstext[0].Text = RSSBind(GetRSSUrl(0),0);
else if(sender == btnrefresh[1])
rsstext[1].Text = RSSBind(GetRSSUrl(1),1);
else if (sender == btnrefresh[2])
rsstext[2].Text = RSSBind(GetRSSUrl(2),2);
else
rsstext[3].Text = RSSBind(GetRSSUrl(3),3);
}
private string GetRSSUrl(int index)
{
try
{
if (index == 0)
return RSSUrl;
else if (index == 1)
return RSSUrl1;
else if (index == 2)
return RSSUrl2;
else if (index == 3)
return RSSUrl3;
}
catch (NullReferenceException)
{
}
return string.Empty;
}
private string GetRSSImage(int index)
{
try
{
if (index == 0)
return RSSImgUrl;
else if (index == 1)
return RSSImgUrl1;
else if (index == 2)
return RSSImgUrl2;
else if (index == 3)
return RSSImgUrl3;
}
catch (NullReferenceException)
{
}
return string.Empty;
}
private void SaveWebpart()
{
SPWeb web = Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(this.Context);
SPFile file = web.GetFile(this.Context.Request.Path);
SPWebPartCollection webPartCollection = file.GetWebPartCollection(Storage.Shared);
this.SaveProperties = true;
file.CheckOut();
webPartCollection.SaveChanges(this.StorageKey);
file.CheckIn("Checked in by ajax");
web.Dispose();
}
private string GetListURL()
{
return string.Empty;
}
private string CheckURL()
{
if (!SPSite.Exists(new Uri(RSSUrl, UriKind.Absolute)))
return "RSS Feed is not a valid RSS URL";
else
return string.Empty;
}
private string MakeRssUrl(string rawurl)
{
try
{
Uri url = new Uri(rawurl, UriKind.Absolute);
if (url.GetLeftPart(UriPartial.Path).Contains(rssstr))
{
//_rssurl[0] = rawurl;
return rawurl;
}
else
{
string rssurl;
using (SPWeb web = new SPSite(rawurl).OpenWeb())
{
SPList list = web.GetListFromUrl(rawurl);
rssurl = web.Url + "/_layouts/listfeed.aspx?list=" + list.ID;
//list.uni
return rssurl;
}
}
}
catch (UriFormatException e)
{
return string.Empty;
}
}
private void EnsurePanelFix()
{
if (this.Page.Form != null)
{
String fixupScript = @"
_spBodyOnLoadFunctionNames.push(""_initFormActionAjax"");
function _initFormActionAjax()
{
if (_spEscapedFormAction == document.forms[0].action)
{
document.forms[0]._initialAction =
document.forms[0].action;
}
}
var RestoreToOriginalFormActionCore =
RestoreToOriginalFormAction;
RestoreToOriginalFormAction = function()
{
if (_spOriginalFormAction != null)
{
RestoreToOriginalFormActionCore();
document.forms[0]._initialAction =
document.forms[0].action;
}
}";
ScriptManager.RegisterStartupScript(this,
typeof(RSSReaderAjax), "UpdatePanelFixup",
fixupScript, true);
}
}
#endregion
}
class MyTemplate : ITemplate
{
string imgpath;
public MyTemplate(string path){
imgpath = path;
}
public void InstantiateIn(Control container)
{
LiteralControl l1 = new LiteralControl("<img src="+imgpath+"/>");
container.Controls.Add(l1);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I am working in Wipro Technologies as a developer with expertises in Microsoft Office SharePoint products. My interests include working on ASP.NET, AJAX, Javascript Object Notation (JSON), XML web services, Algorithm Optimization, Design Patterns.