Exemplo n.º 1
0
    /// <summary>
    /// Loads summary box in the right upper corner.
    /// </summary>
    private void LoadSummaryBox()
    {
        lnkTest.HRef      = DocumentURLProvider.GetUrl(ABTest.ABTestOriginalPage);
        lnkTest.InnerText = ShortenUrl(ABTest.ABTestOriginalPage, MAX_LINK_LENGTH);
        lnkTest.Target    = "_blank";

        // If Visitors conversion methodology selected, use "Visitors" instead of "Visits"
        if (drpCountingMethodology.SelectedValue == "absessionconversionfirst")
        {
            lblVisits.ResourceString = "abtesting.overview.summary.visitors";
        }

        lblStatus.Text = ABTestStatusEvaluator.GetFormattedStatus(TestStatus).ToString();
        int visits      = VariantsStatisticsData.Sum(d => d.Value.Visits);
        int conversions = VariantsStatisticsData.Sum(d => d.Value.ConversionsCount);

        lblTotalVisitors.Text    = String.Format("{0:N0}", visits);
        lblTotalConversions.Text = String.Format("{0:N0}", conversions);

        if (TestStatus == ABTestStatusEnum.Finished)
        {
            txtDuration.ResourceString = "abtesting.daysrun";
        }

        DateTime start  = ABTest.ABTestOpenFrom;
        DateTime finish = GetFinishDateOrToday();

        lblDuration.Text = (finish - start).Days.ToString();
    }
    /// <summary>
    /// Loads summary box in the right upper corner.
    /// </summary>
    private void LoadSummaryBox()
    {
        var selectionParameters = new NodeSelectionParameters
        {
            AliasPath                 = ABTest.ABTestOriginalPage,
            CultureCode               = ABTest.ABTestCulture,
            SiteName                  = SiteContext.CurrentSiteName,
            SelectOnlyPublished       = true,
            CombineWithDefaultCulture = false
        };

        var node            = new TreeProvider().SelectSingleNode(selectionParameters);
        var shortUrl        = ShortenUrl(ABTest.ABTestOriginalPage);
        var encodedShortUrl = HTMLHelper.HTMLEncode(shortUrl);

        if (node == null)
        {
            lblTest.Text    = encodedShortUrl;
            lblTest.Visible = true;
        }
        else
        {
            lnkTest.HRef      = DocumentURLProvider.GetAbsoluteLiveSiteURL(node);
            lnkTest.InnerText = encodedShortUrl;
            lnkTest.Target    = "_blank";
            lnkTest.Visible   = true;
        }

        // If Visitors conversion methodology selected, use "Visitors" instead of "Visits"
        if (drpCountingMethodology.SelectedValue == ABTestConstants.ABSESSIONCONVERSION_FIRST)
        {
            lblVisits.ResourceString = "abtesting.overview.summary.visitors";
        }

        lblStatus.Text = ABTestStatusEvaluator.GetFormattedStatus(TestStatus).ToString();
        int visits      = VariantsStatisticsData.Sum(d => d.Value.Visits);
        int conversions = VariantsStatisticsData.Sum(d => d.Value.ConversionsCount);

        lblTotalVisitors.Text    = String.Format("{0:N0}", visits);
        lblTotalConversions.Text = String.Format("{0:N0}", conversions);

        if (TestStatus == ABTestStatusEnum.Finished)
        {
            txtDuration.ResourceString = "abtesting.daysrun";
        }

        DateTime start  = ABTest.ABTestOpenFrom;
        DateTime finish = GetFinishDate();

        lblDuration.Text = (finish - start).Days.ToString();
    }
    private void InitializeGridAction(CMSAccessibleButtonBase action, Guid variantGuid)
    {
        if (action == null)
        {
            return;
        }

        var winner = GetTestWinner();

        if (winner == null)
        {
            // Check permissions to select winner
            if (!UserHasPermissions)
            {
                action.Enabled = false;
                action.ToolTip = GetString("abtesting.selectwinner.permission.tooltip");
            }
            else if (!ABTestStatusEvaluator.ABTestIsFinished(ABTest))
            {
                action.Enabled = false;
                action.ToolTip = GetString("abtesting.selectwinner.testnotfinished.tooltip");
            }
            else if (!DocumentManager.AllowSave)
            {
                action.Enabled = false;
                action.ToolTip = GetString("abtesting.selectwinner.underworkflow.tooltip");
            }
        }
        else
        {
            if (variantGuid == winner.ABVariantGUID)
            {
                // Disable action image for the winning variant
                action.Enabled = false;
                action.Text    = ResHelper.GetString("abtesting.winner");
                action.ToolTip = ResHelper.GetString("abtesting.winningvariantselected.tooltip");
            }
            else
            {
                // Hide action image for other variants
                action.Visible = false;
            }
        }
    }
    /// <summary>
    /// Shows warning image on invalid filter combination.
    /// Invalid filter combination is "All conversion goals" and "Conversion rate".
    /// </summary>
    private void ShowInvalidFilterCombinationWarning()
    {
        // Do not show for not started test
        if (ABTestStatusEvaluator.ABTestNotStarted(TestStatus))
        {
            return;
        }

        // Do not show on first load
        if (!RequestHelper.IsPostBack())
        {
            return;
        }

        if ((ValidationHelper.GetString(drpConversions.SelectedValue, "") == "") && (drpSuccessMetric.SelectedValue == METRIC_CONVERSION_RATE))
        {
            ShowWarning(GetString("abtesting.invalidfiltercombination"));
        }
    }
Exemplo n.º 5
0
    /// <summary>
    /// Loads data into Unigrid.
    /// </summary>
    private void LoadData()
    {
        var whereCondition = new WhereCondition();

        if (!String.IsNullOrEmpty(AliasPath))
        {
            whereCondition.WhereEquals("ABTestOriginalPage", AliasPath);
        }

        DataSet abTests = ABTestInfoProvider.GetABTests().OnSite(SiteContext.CurrentSiteID).Where(whereCondition);

        abTests.Tables[0].Columns.Add("ABTestStatus", typeof(int));

        foreach (DataRow abTestDataRow in abTests.Tables[0].Rows)
        {
            abTestDataRow["ABTestStatus"] = (int)ABTestStatusEvaluator.GetStatus(new ABTestInfo(abTestDataRow));
        }

        gridElem.DataSource = abTests;
    }
Exemplo n.º 6
0
    /// <summary>
    /// Handles Unigrid's OnExternalDataBound event.
    /// </summary>
    protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        string param = parameter.ToString();

        switch (sourceName.ToLowerCSafe())
        {
        case "status":
        {
            ABTestStatusEnum status;
            if (Enum.TryParse(param, out status))
            {
                return(ABTestStatusEvaluator.GetFormattedStatus(status));
            }
            break;
        }

        case "page":
            return(new HyperLink
            {
                NavigateUrl = DocumentURLProvider.GetUrl(param),
                Text = HTMLHelper.HTMLEncode(param),
                Target = "_blank"
            });

        case "visitors":
        case "conversions":
        {
            string statisticsCodeName = (sourceName.ToLowerCSafe() == "visitors" ? "abvisitfirst" : "absessionconversionfirst");

            ABTestInfo abTestInfo = ABTestInfoProvider.GetABTestInfo(param, SiteContext.CurrentSiteName);
            if (abTestInfo != null)
            {
                return(ValidationHelper.GetInteger(HitsInfoProvider.GetAllHitsInfo(SiteContext.CurrentSiteID, HitsIntervalEnum.Year, statisticsCodeName + ";" + abTestInfo.ABTestName + ";%", "SUM(HitsCount)", abTestInfo.ABTestCulture).Tables[0].Rows[0][0], 0));
            }

            return(0);
        }
        }

        return(null);
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        Controls.Add(DocumentManager as CMSDocumentManager);

        MessagesWriter.ShowABTestScheduleInformation(ABTest, TestStatus);
        MessagesWriter.ShowMissingVariantsTranslationsWarning(ABTest);

        RegisterScripts();
        InitializeSelectors();
        SetSelectorValues();
        EnsureVariantsStatisticsData();

        // Display test winner if there is one
        var winner = GetTestWinner();

        if (winner != null)
        {
            DisplayWinnerInformation(winner);
        }
        else
        {
            ShowPromoteWinnerInfoMessage();
        }

        // Hide summary and table if the test has not been started yet
        if (ABTestStatusEvaluator.ABTestNotStarted(TestStatus))
        {
            Filter.Visible  = false;
            Report.Visible  = false;
            Summary.Visible = false;
        }
        else if (DataAvailable(VariantsStatisticsData.Values, drpSuccessMetric.SelectedValue))
        {
            // Show all information after graph do postback
            if (RequestHelper.IsPostBack())
            {
                Summary.Visible = true;
                Report.Visible  = true;

                // Hide NoDataFound panel
                pnlNoData.Visible = false;
            }
        }
        else
        {
            // -> Test is executed, but no results are present

            // Hide summary
            Summary.Visible = false;

            // Show report and NoDataFound panel
            Report.Visible    = true;
            pnlNoData.Visible = true;
        }

        LoadSummaryBox();
        InitializeGraph();
        InitializeGrid();
        SetImprovementColumnCaption();
        ShowInvalidFilterCombinationWarning();
    }
    /// <summary>
    /// Handles Unigrid's OnExternalDataBound event.
    /// </summary>
    protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        switch (sourceName.ToLowerInvariant())
        {
        case "status":
        {
            if (Enum.TryParse(parameter.ToString(), out ABTestStatusEnum status))
            {
                return(ABTestStatusEvaluator.GetFormattedStatus(status));
            }
            break;
        }

        case "page":
        {
            var dataRowView = parameter as DataRowView;
            if (dataRowView == null)
            {
                return(String.Empty);
            }

            var abTestInfo = new ABTestInfo(dataRowView.Row);

            var selectionParameters = new NodeSelectionParameters
            {
                AliasPath                 = abTestInfo.ABTestOriginalPage,
                CultureCode               = abTestInfo.ABTestCulture,
                SiteName                  = SiteContext.CurrentSiteName,
                SelectOnlyPublished       = true,
                CombineWithDefaultCulture = !SiteContext.CurrentSite.SiteIsContentOnly
            };

            var node            = new TreeProvider().SelectSingleNode(selectionParameters);
            var encodedTestPage = HTMLHelper.HTMLEncode(abTestInfo.ABTestOriginalPage);

            return(node == null
                        ? (object)encodedTestPage
                        : new HyperLink
                {
                    NavigateUrl = DocumentURLProvider.GetAbsoluteLiveSiteURL(node),
                    Text = encodedTestPage,
                    Target = "_blank"
                });
        }

        case "visitors":
        case "conversions":
        {
            string statisticsCodeName = (sourceName.ToLowerInvariant() == "visitors" ? "abvisitfirst" : "absessionconversionfirst");

            var dataRowView = parameter as DataRowView;
            if (dataRowView == null)
            {
                return(0);
            }

            var abTestInfo = new ABTestInfo(dataRowView.Row);

            return(ValidationHelper.GetInteger(HitsInfoProvider.GetAllHitsInfo(SiteContext.CurrentSiteID, HitsIntervalEnum.Year, statisticsCodeName + ";" + abTestInfo.ABTestName + ";%", "SUM(HitsCount)", abTestInfo.ABTestCulture).Tables[0].Rows[0][0], 0));
        }

        case "delete":
            CMSGridActionButton btn = (CMSGridActionButton)sender;
            btn.Enabled = IsAuthorizedToManage;
            if (!IsAuthorizedToManage)
            {
                btn.ToolTip = permissionsRequiredTooltip;
            }
            break;
        }

        return(null);
    }