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 }