using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using CMS.CMSHelper; using CMS.FormControls; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.UIControls; using CMS.WebAnalytics; using CMS.LicenseProvider; public partial class CMSModules_WebAnalytics_FormControls_SelectConversion : FormEngineUserControl { #region "Variables" private bool wasInit = false; private string mWhereCondition = String.Empty; private string mABTestName = String.Empty; private string mMVTestName = String.Empty; #endregion #region "Properties" /// /// All record value for UniSelector /// public string AllRecordValue { get { return usConversions.AllRecordValue; } set { usConversions.AllRecordValue = value; } } /// /// Selection mode of control (dropdown,multiselect...). /// public SelectionModeEnum SelectionMode { get { return usConversions.SelectionMode; } set { usConversions.SelectionMode = value; } } /// /// If true change of dropdown raises PostBack. /// public bool PostbackOnDropDownChange { get { return ddlConversions.AutoPostBack; } set { ddlConversions.AutoPostBack = value; } } /// /// Enables or disables UniSelector /// public override bool Enabled { get { return usConversions.Enabled; } set { usConversions.Enabled = value; } } /// /// Value representing the control. /// public override object Value { get { return usConversions.Value; } set { usConversions.Value = value; } } /// /// Where condition for selector. /// public string WhereCondition { get { return mWhereCondition; } set { mWhereCondition = value; } } /// /// If true (all) is added to conversion selector. /// public bool AllowAll { get { return usConversions.AllowAll; } set { usConversions.AllowAll = value; } } /// /// For drop down mode - we select only conversions for one test. /// public string ABTestName { get { return mABTestName; } set { mABTestName = value; } } /// /// For drop down mode - we select only conversions for one test. /// public string MVTestName { get { return mMVTestName; } set { mMVTestName = value; } } /// /// Uniselector controls /// public UniSelector UniSelector { get { return usConversions; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { usConversions.IsLiveSite = IsLiveSite; usConversions.TextBoxSelect.MaxLength = 200; // Check user authorization if (CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.WebAnalytics", "ManageConversions") && (SelectionMode == SelectionModeEnum.SingleTextBox)) { string url = "~/CMSModules/WebAnalytics/Pages/Tools/Conversion/edit.aspx?conversionName=##ITEMID##&modaldialog=true"; usConversions.EditItemPageUrl = url; url = "~/CMSModules/WebAnalytics/Pages/Tools/Conversion/edit.aspx?modaldialog=true"; usConversions.NewItemPageUrl = url; usConversions.EditDialogWindowWidth = 610; usConversions.EditDialogWindowHeight = 400; } // PostBack action if (PostbackOnDropDownChange) { usConversions.DropDownSingleSelect.AutoPostBack = true; ScriptManager scr = ScriptManager.GetCurrent(Page); scr.RegisterPostBackControl(usConversions); } // Create where condition usConversions.WhereCondition = SqlHelperClass.AddWhereCondition(usConversions.WhereCondition, "ConversionSiteID = " + CMSContext.CurrentSiteID); } protected override void OnPreRender(EventArgs e) { if (!URLHelper.IsPostback()) { // Reload data ReloadData(false); } base.OnPreRender(e); } /// /// Reloads data /// /// Indicates whether apply force load public void ReloadData(bool forceReload) { if (forceReload || !wasInit) { // Reload data CreateWhereCondition(); usConversions.Reload(forceReload); wasInit = true; } } /// /// Creates where condition /// private void CreateWhereCondition() { usConversions.WhereCondition = SqlHelperClass.AddWhereCondition(usConversions.WhereCondition, WhereCondition); // Where condition for A/B testing if (ABTestName != String.Empty) { usConversions.WhereCondition = SqlHelperClass.AddWhereCondition(usConversions.WhereCondition, "ConversionName IN (SELECT StatisticsObjectName FROM Analytics_Statistics WHERE StatisticsSiteID = " + CMSContext.CurrentSiteID + " AND StatisticsCode LIKE (N'abconversion;" + SqlHelperClass.GetSafeQueryString(ABTestName, false) + ";%'))"); } // Where condition for MVT testing if (MVTestName != String.Empty) { usConversions.WhereCondition = SqlHelperClass.AddWhereCondition(usConversions.WhereCondition, "ConversionName IN (SELECT StatisticsObjectName FROM Analytics_Statistics WHERE StatisticsSiteID = " + CMSContext.CurrentSiteID + " AND StatisticsCode LIKE (N'mvtconversion;" + SqlHelperClass.GetSafeQueryString(MVTestName, false) + ";%'))"); } } /// /// Test if conversion is valid and create new conversion if not exists /// public override bool IsValid() { // Get validated string String value = ValidationHelper.GetString(usConversions.Value, String.Empty).Trim(); if (value != String.Empty) { String domain = URLHelper.GetCurrentDomain(); if (DataHelper.GetNotEmpty(domain, "") != "") { string parsedDomain = LicenseKeyInfoProvider.ParseDomainName(domain); if (!LicenseKeyInfoProvider.IsFeatureAvailable(parsedDomain, FeatureEnum.CampaignAndConversions)) { ValidationError = GetString("conversionselector.nolicence"); return false; } } // Validate for code name if (!ValidationHelper.IsCodeName(value)) { ValidationError = GetString("conversion.validcodename"); return false; } // Test if selected name exists ConversionInfo ci = ConversionInfoProvider.GetConversionInfo(value, CMSContext.CurrentSiteName); // If not exist create new one if (ci == null) { if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.WebAnalytics", "ManageConversions")) { ValidationError = GetString("conversion.notallowedcreate"); return false; } // Create new object ci = new ConversionInfo(); ci.ConversionName = value; ci.ConversionDisplayName = value; ci.ConversionSiteID = CMSContext.CurrentSiteID; // Save to database ConversionInfoProvider.SetConversionInfo(ci); } } return true; } #endregion }