using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using CMS.PortalControls;
using CMS.GlobalHelper;
using CMS.CMSHelper;
using CMS.SettingsProvider;
public partial class CMSWebParts_CommunityServices_Twitter_TwitterTweetButton : CMSAbstractWebPart
{
#region "Public properties"
///
/// Type of the button.
///
public string Type
{
get
{
return ValidationHelper.GetString(GetValue("Type"), string.Empty);
}
set
{
SetValue("Type", value);
}
}
///
/// Url to share - for share type.
///
public string UrlToShare
{
get
{
return ValidationHelper.GetString(GetValue("UrlToShare"), string.Empty);
}
set
{
SetValue("UrlToShare", value);
}
}
///
/// Default tweet text.
///
public string TweetText
{
get
{
return ValidationHelper.GetString(GetValue("TweetText"), string.Empty);
}
set
{
SetValue("TweetText", value);
}
}
///
/// The language for the button.
///
public string Language
{
get
{
return ValidationHelper.GetString(GetValue("Language"), string.Empty);
}
set
{
SetValue("Language", value);
}
}
///
/// Count URL - for share type.
///
public string CountUrl
{
get
{
return ValidationHelper.GetString(GetValue("CountUrl"), string.Empty);
}
set
{
SetValue("CountUrl", value);
}
}
///
/// Screen name of the user to attribute the Tweet to.
///
public string Via
{
get
{
return ValidationHelper.GetString(GetValue("Via"), string.Empty);
}
set
{
SetValue("Via", value);
}
}
///
/// Related accounts.
///
public string RelatedAccounts
{
get
{
return ValidationHelper.GetString(GetValue("RelatedAccounts"), string.Empty);
}
set
{
SetValue("RelatedAccounts", value);
}
}
///
/// Whether to show count - for share type.
///
public bool ShowCount
{
get
{
return ValidationHelper.GetBoolean(GetValue("ShowCount"), false);
}
set
{
SetValue("ShowCount", value);
}
}
///
/// User to mention - for mention type.
///
public string UserToMention
{
get
{
return ValidationHelper.GetString(GetValue("UserToMention"), string.Empty);
}
set
{
SetValue("UserToMention", value);
}
}
///
/// Button hashtag - for hashtag type.
///
public string ButtonHashtag
{
get
{
return ValidationHelper.GetString(GetValue("ButtonHashtag"), string.Empty);
}
set
{
SetValue("ButtonHashtag", value);
}
}
///
/// Hashtags.
///
public string Hashtags
{
get
{
return ValidationHelper.GetString(GetValue("Hashtags"), string.Empty);
}
set
{
SetValue("Hashtags", value);
}
}
///
/// Size for the button.
///
public string Size
{
get
{
return ValidationHelper.GetString(GetValue("Size"), string.Empty);
}
set
{
SetValue("Size", value);
}
}
///
/// Width of the web part in pixels.
///
public int Width
{
get
{
return ValidationHelper.GetInteger(GetValue("Width"), 110);
}
set
{
SetValue("Width", value);
}
}
///
/// Indicates if HTML 5 output should be generated.
///
public bool UseHTML5
{
get
{
return ValidationHelper.GetBoolean(GetValue("UseHTML5"), false);
}
set
{
SetValue("UseHTML5", value);
}
}
#endregion
#region "Methods"
///
/// Content loaded event handler.
///
public override void OnContentLoaded()
{
base.OnContentLoaded();
SetupControl();
}
///
/// Initializes the control properties.
///
protected void SetupControl()
{
if (StopProcessing)
{
// Do not process
return;
}
if (string.IsNullOrEmpty(Language))
{
Language = CMSContext.CurrentDocumentCulture.CultureCode;
}
if (UseHTML5)
{
RenderPluginHTML5();
}
else
{
RenderPlugin();
}
}
///
/// Reloads the control data.
///
public override void ReloadData()
{
base.ReloadData();
SetupControl();
}
#endregion
#region "Private methods"
///
/// Renders HTML5 version of Twitter plugin on the page.
///
private void RenderPluginHTML5()
{
string serviceUrl = null;
string url = UrlToShare;
url = string.IsNullOrEmpty(url) ? URLHelper.CurrentURL : URLHelper.GetAbsoluteUrl(ResolveUrl(url));
url = URLHelper.EncodeQueryString(url);
StringBuilder sb = new StringBuilder();
switch (Type.ToLowerCSafe())
{
case "share":
serviceUrl = "https://twitter.com/share";
sb.Append("");
// Register Twitter widget API
ltlTweetButtonCode.Text = sb.ToString();
ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "TwitterWidgetsAPI", "");
}
///
/// Renders Twitter plugin on the page.
///
private void RenderPlugin()
{
// Build plugin code
string query = null;
string src = "http://platform.twitter.com/widgets/tweet_button.html";
int height = (Size.EqualsCSafe("m")) ? 20 : 28;
// Check optional parameters
if (!string.IsNullOrEmpty(TweetText))
{
query = URLHelper.AddUrlParameter(query, "text", TweetText);
}
if (!string.IsNullOrEmpty(Via))
{
query = URLHelper.AddUrlParameter(query, "via", Via);
}
if (!string.IsNullOrEmpty(RelatedAccounts))
{
query = URLHelper.AddUrlParameter(query, "related", RelatedAccounts);
}
if (!string.IsNullOrEmpty(Hashtags))
{
query = URLHelper.AddUrlParameter(query, "hashtags", Hashtags);
}
query = URLHelper.AddUrlParameter(query, "lang", Language);
query = URLHelper.AddUrlParameter(query, "size", Size);
// If type is share
if (Type.EqualsCSafe("share"))
{
query = URLHelper.AddUrlParameter(query, "count", ShowCount ? "horizontal" : "none");
string url = UrlToShare;
url = URLHelper.GetAbsoluteUrl(string.IsNullOrEmpty(url) ? URLHelper.CurrentURL : ResolveUrl(url));
query = URLHelper.AddUrlParameter(query, "url", url);
if (!string.IsNullOrEmpty(CountUrl))
{
query = URLHelper.AddUrlParameter(query, "counturl", CountUrl);
}
}
// If type is hashtag
if (Type.EqualsCSafe("hashtag"))
{
query = URLHelper.AddUrlParameter(query, "type", Type);
query = URLHelper.AddUrlParameter(query, "button_hashtag", ButtonHashtag);
}
// If type is mention
if (Type.EqualsCSafe("mention"))
{
query = URLHelper.AddUrlParameter(query, "type", Type);
query = URLHelper.AddUrlParameter(query, "screen_name", UserToMention);
}
src = URLHelper.EncodeQueryString(URLHelper.AppendQuery(src, query));
// Output HTML code
string output = "";
ltlTweetButtonCode.Text = String.Format(output, src, Width, height);
}
#endregion
}