HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSWebParts/SocialMedia/Twitter/TwitterTweetButton.ascx.cs
using System;
using System.Linq;
using System.Text;

using CMS.Helpers;
using CMS.Base;
using CMS.DocumentEngine;
using CMS.SocialMedia;


public partial class CMSWebParts_SocialMedia_Twitter_TwitterTweetButton : SocialMediaAbstractWebPart
{
    #region "Private fiels"

    private bool mHide;

    #endregion


    #region "Public properties"

    /// <summary>
    /// Indicates whether to hide content of the WebPart
    /// </summary>
    public override bool HideContent
    {
        get
        {
            return mHide;
        }
        set
        {
            mHide = value;
            ltlTweetButtonCode.Visible = !value;
        }
    }



    /// <summary>
    /// Type of the button.
    /// </summary>
    public string Type
    {
        get
        {
            return ValidationHelper.GetString(GetValue("Type"), string.Empty);
        }
        set
        {
            SetValue("Type", value);
        }
    }


    /// <summary>
    /// Url to share - for share type.
    /// </summary>
    public string UrlToShare
    {
        get
        {
            return ValidationHelper.GetString(GetValue("UrlToShare"), string.Empty);
        }
        set
        {
            SetValue("UrlToShare", value);
        }
    }


    /// <summary>
    /// Default tweet text.
    /// </summary>
    public string TweetText
    {
        get
        {
            return ValidationHelper.GetString(GetValue("TweetText"), string.Empty);
        }
        set
        {
            SetValue("TweetText", value);
        }
    }


    /// <summary>
    /// The language for the button.
    /// </summary>
    public string Language
    {
        get
        {
            return ValidationHelper.GetString(GetValue("Language"), string.Empty);
        }
        set
        {
            SetValue("Language", value);
        }
    }


    /// <summary>
    /// Count URL - for share type.
    /// </summary>
    public string CountUrl
    {
        get
        {
            return ValidationHelper.GetString(GetValue("CountUrl"), string.Empty);
        }
        set
        {
            SetValue("CountUrl", value);
        }
    }



    /// <summary>
    /// Screen name of the user to attribute the Tweet to.
    /// </summary>
    public string Via
    {
        get
        {
            return ValidationHelper.GetString(GetValue("Via"), string.Empty);
        }
        set
        {
            SetValue("Via", value);
        }
    }


    /// <summary>
    /// Related accounts.
    /// </summary>
    public string RelatedAccounts
    {
        get
        {
            return ValidationHelper.GetString(GetValue("RelatedAccounts"), string.Empty);
        }
        set
        {
            SetValue("RelatedAccounts", value);
        }
    }


    /// <summary>
    /// Whether to show count - for share type.
    /// </summary>
    public bool ShowCount
    {
        get
        {
            return ValidationHelper.GetBoolean(GetValue("ShowCount"), false);
        }
        set
        {
            SetValue("ShowCount", value);
        }
    }


    /// <summary>
    /// User to mention - for mention type.
    /// </summary>
    public string UserToMention
    {
        get
        {
            return ValidationHelper.GetString(GetValue("UserToMention"), string.Empty);
        }
        set
        {
            SetValue("UserToMention", value);
        }
    }


    /// <summary>
    /// Button hashtag - for hashtag type.
    /// </summary>
    public string ButtonHashtag
    {
        get
        {
            return ValidationHelper.GetString(GetValue("ButtonHashtag"), string.Empty);
        }
        set
        {
            SetValue("ButtonHashtag", value);
        }
    }


    /// <summary>
    /// Hashtags.
    /// </summary>
    public string Hashtags
    {
        get
        {
            return ValidationHelper.GetString(GetValue("Hashtags"), string.Empty);
        }
        set
        {
            SetValue("Hashtags", value);
        }
    }


    /// <summary>
    /// Size for the button.
    /// </summary>
    public string Size
    {
        get
        {
            return ValidationHelper.GetString(GetValue("Size"), string.Empty);
        }
        set
        {
            SetValue("Size", value);
        }
    }


    /// <summary>
    /// Width of the web part in pixels.
    /// </summary>
    public int Width
    {
        get
        {
            return ValidationHelper.GetInteger(GetValue("Width"), 110);
        }
        set
        {
            SetValue("Width", value);
        }
    }


    /// <summary>
    /// Indicates if HTML 5 output should be generated.
    /// </summary>
    public bool UseHTML5
    {
        get
        {
            return ValidationHelper.GetBoolean(GetValue("UseHTML5"), false);
        }
        set
        {
            SetValue("UseHTML5", value);
        }
    }

    #endregion


    #region "Methods"

    /// <summary>
    /// Content loaded event handler.
    /// </summary>
    public override void OnContentLoaded()
    {
        base.OnContentLoaded();
        SetupControl();
    }


    /// <summary>
    /// Initializes the control properties.
    /// </summary>
    protected override void SetupControl()
    {
        if (StopProcessing)
        {
            // Do not process
            return;
        }
        
        if (string.IsNullOrEmpty(Language))
        {
            Language = DocumentContext.CurrentDocumentCulture.CultureCode;
        }

        if (UseHTML5)
        {
            RenderPluginHTML5();
        }
        else
        {
            RenderPlugin();
        }
    }


    /// <summary>
    /// Reloads the control data.
    /// </summary>
    public override void ReloadData()
    {
        base.ReloadData();

        SetupControl();
    }

    #endregion


    #region "Private methods"
    
    /// <summary>
    /// Renders HTML5 version of Twitter plugin on the page.
    /// </summary>
    private void RenderPluginHTML5()
    {
        string serviceUrl = null;

        string url = UrlToShare;
        url = URLHelper.GetAbsoluteUrl(String.IsNullOrEmpty(url) ? RequestContext.CurrentURL : ResolveUrl(url));
        url = HTMLHelper.EncodeForHtmlAttribute(url);

        StringBuilder sb = new StringBuilder();
        switch (Type.ToLowerCSafe())
        {
            case "share":
                serviceUrl = "https://twitter.com/share";
                sb.Append("<a href=\"", serviceUrl, "\" class=\"twitter-share-button\" data-count=\"", ShowCount ? "horizontal" : "none", "\"");
                if (!string.IsNullOrEmpty(CountUrl))
                {
                    sb.Append(" data-counturl=\"", HTMLHelper.EncodeForHtmlAttribute(CountUrl), "\"");
                }

                sb.Append(" data-url=\"", url, "\"");
                break;

            // If type is hashtag
            case "hashtag":
                serviceUrl = "https://twitter.com/intent/tweet";
                serviceUrl = URLHelper.AddUrlParameter(serviceUrl, "button_hashtag", ButtonHashtag);
                serviceUrl = HTMLHelper.EncodeForHtmlAttribute(serviceUrl);
                sb.Append("<a href=\"", serviceUrl, "\" class=\"twitter-hashtag-button\"");
                break;

            // If type is mention
            case "mention":
                serviceUrl = "https://twitter.com/intent/tweet";
                serviceUrl = URLHelper.AddUrlParameter(serviceUrl, "screen_name", URLHelper.URLEncode(UserToMention));
                serviceUrl = HTMLHelper.EncodeForHtmlAttribute(serviceUrl);
                sb.Append("<a href=\"", serviceUrl, "\" class=\"twitter-mention-button\"");
                break;
        }

        if (!string.IsNullOrEmpty(TweetText))
        {
            sb.Append(" data-text=\"", HTMLHelper.EncodeForHtmlAttribute(TweetText), "\"");
        }

        sb.Append(" data-lang=\"", HTMLHelper.EncodeForHtmlAttribute(Language), "\" data-width=\"", Width, "px\" data-size=\"", (Size.EqualsCSafe("m") ? "medium" : "large"), "\"");

        if (!string.IsNullOrEmpty(Via))
        {
            sb.Append(" data-via=\"", HTMLHelper.EncodeForHtmlAttribute(Via), "\"");
        }

        if (!string.IsNullOrEmpty(RelatedAccounts))
        {
            sb.Append(" data-related=\"", HTMLHelper.EncodeForHtmlAttribute(RelatedAccounts), "\"");
        }

        if (!string.IsNullOrEmpty(Hashtags))
        {
            sb.Append(" data-hashtags=\"", HTMLHelper.EncodeForHtmlAttribute(Hashtags), "\"");
        }
        sb.Append("></a>");

        // Register Twitter widget API
        ltlTweetButtonCode.Text = sb.ToString();
        ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "TwitterWidgetsAPI", "<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=\"https://platform.twitter.com/widgets.js\";fjs.parentNode.insertBefore(js,fjs);}}(document,\"script\",\"twitter-wjs\");</script>");
    }


    /// <summary>
    /// Renders Twitter plugin on the page.
    /// </summary>
    private void RenderPlugin()
    {
        // Build plugin code
        string query = null;
        string src = "https://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", URLHelper.URLEncode(TweetText));
        }

        if (!string.IsNullOrEmpty(Via))
        {
            query = URLHelper.AddUrlParameter(query, "via", URLHelper.URLEncode(Via));
        }

        if (!string.IsNullOrEmpty(RelatedAccounts))
        {
            query = URLHelper.AddUrlParameter(query, "related", URLHelper.URLEncode(RelatedAccounts));
        }

        if (!string.IsNullOrEmpty(Hashtags))
        {
            query = URLHelper.AddUrlParameter(query, "hashtags", URLHelper.URLEncode(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) ? RequestContext.CurrentURL : ResolveUrl(url));
            query = URLHelper.AddUrlParameter(query, "url", url);

            if (!string.IsNullOrEmpty(CountUrl))
            {
                query = URLHelper.AddUrlParameter(query, "counturl", URLHelper.URLEncode(CountUrl));
            }
        }

        // If type is hashtag
        if (Type.EqualsCSafe("hashtag"))
        {
            query = URLHelper.AddUrlParameter(query, "type", Type);
            query = URLHelper.AddUrlParameter(query, "button_hashtag", URLHelper.URLEncode(ButtonHashtag));
        }

        // If type is mention
        if (Type.EqualsCSafe("mention"))
        {
            query = URLHelper.AddUrlParameter(query, "type", Type);
            query = URLHelper.AddUrlParameter(query, "screen_name", URLHelper.URLEncode(UserToMention));
        }

        src = HTMLHelper.EncodeForHtmlAttribute(URLHelper.AppendQuery(src, query));

        // Output HTML code
        string output = "<iframe src=\"{0}\" scrolling=\"no\" frameborder=\"0\" allowtransparency=\"true\" style=\"width: {1}px; height: {2}px;\"></iframe>";
        ltlTweetButtonCode.Text = String.Format(output, src, Width, height);
    }

    #endregion
}