コード例 #1
0
    protected void Page_Load(object sender, EventArgs e)
    {
        lblAvialable.Text = GetString("conversion.avaiblecampaign");
        conversionID      = QueryHelper.GetInteger("campaignid", 0);

        ConversionInfo ci = ConversionInfoProvider.GetConversionInfo(conversionID);

        if (ci != null)
        {
            int siteID = CMSContext.CurrentSiteID;
            if (ci.ConversionSiteID != siteID)
            {
                if (!CMSContext.CurrentUser.IsInSite(SiteInfoProvider.GetSiteName(ci.ConversionSiteID)))
                {
                    RedirectToAccessDenied(GetString("conversion.currentsite"));
                    return;
                }
            }
        }

        // Get the conversions
        currentValues = GetConversions();

        if (!RequestHelper.IsPostBack())
        {
            usCampaigns.Value = currentValues;
        }

        usCampaigns.WhereCondition      = "CampaignSiteID = " + CMSContext.CurrentSiteID;
        usCampaigns.OnSelectionChanged += usConversions_OnSelectionChanged;
    }
コード例 #2
0
    void EditForm_OnAfterSave(object sender, EventArgs e)
    {
        ConversionInfo ci = EditForm.EditedObject as ConversionInfo;

        // If code name has changed (on existing object) => Rename all analytics statistics data.
        if ((ci != null) && (ci.ConversionName != oldConversionName) && (oldConversionName != String.Empty))
        {
            ConversionInfoProvider.RenameConversionStatistics(oldConversionName, ci.ConversionName, CMSContext.CurrentSiteID);
        }
    }
コード例 #3
0
        private void Conversions(DateTime date, Dictionary <string, int> visitors, Random random)
        {
            var list = ConversionInfoProvider.GetConversions().OnSite(_mSite.SiteID).ToList();
            var num  = visitors.Sum(visitor => visitor.Value) / list.Count;

            foreach (var conversionInfo in list)
            {
                LogHit("conversion", (int)Math.Round(0.75 * (random.NextDouble() / 2.0) * num), 0, date,
                       conversionInfo.ConversionName, null, 0);
            }
        }
コード例 #4
0
    protected void Page_Init(object sender, EventArgs e)
    {
        var ci = EditedObject as ConversionInfo;

        var conversionName = QueryHelper.GetString("conversionName", String.Empty);

        if (conversionName != String.Empty)
        {
            // Try to check dialog mode
            conversionName = conversionName.Trim(';');
            ci             = ConversionInfoProvider.GetConversionInfo(conversionName, SiteContext.CurrentSiteName);
        }

        // Test whether conversion is in current site, if not - test if user is authorized for conversion's site
        if (ci != null)
        {
            if (!ci.CheckPermissions(PermissionsEnum.Read, CurrentSiteName, CurrentUser))
            {
                RedirectToAccessDenied(ci.TypeInfo.ModuleName, "Read");
            }
        }

        if ((conversionName != String.Empty) && (ci == null))
        {
            // Set warning text
            mInfoText = String.Format(GetString("conversion.editedobjectnotexits"), HTMLHelper.HTMLEncode(conversionName));

            // Create new conversion info based on conversion name
            ci = new ConversionInfo();
            ci.ConversionName        = conversionName;
            ci.ConversionDisplayName = conversionName;
        }


        if (mModalDialog)
        {
            if (ci != null)
            {
                PageTitle.TitleText = GetString("analytics.conversion");
            }
            else
            {
                PageTitle.TitleText = GetString("conversion.conversion.new");
            }
        }

        if (ci != null)
        {
            EditedObject = ci;
        }
    }
コード例 #5
0
    /// <summary>
    /// Test if conversion is valid and create new conversion if not exists
    /// </summary>
    public override bool IsValid()
    {
        // Get validated string
        String value = ValidationHelper.GetString(usConversions.Value, String.Empty).Trim();

        if (value != String.Empty)
        {
            String domain = RequestContext.CurrentDomain;
            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, SiteContext.CurrentSiteName);

            // If not exist create new one
            if (ci == null)
            {
                if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.WebAnalytics", "ManageConversions"))
                {
                    ValidationError = GetString("conversion.notallowedcreate");
                    return(false);
                }

                // Create new object
                ci = new ConversionInfo();
                ci.ConversionName        = value;
                ci.ConversionDisplayName = value;
                ci.ConversionSiteID      = SiteContext.CurrentSiteID;

                // Save to database
                ConversionInfoProvider.SetConversionInfo(ci);
            }
        }

        return(true);
    }
コード例 #6
0
    /// <summary>
    /// Displays the given report
    /// </summary>
    private void DisplayReport()
    {
        // If report was already displayed .. return
        if (reportDisplayed)
        {
            return;
        }

        ucGraphType.ProcessChartSelectors(false);

        // Prepare report parameters
        DataTable reportParameters = new DataTable();

        // In case of hidden datetime -> for save purpose pass from (to) as now to query parameter
        DateTime from = ((ucGraphType.From == DateTimeHelper.ZERO_TIME) && !pnlHeader.Visible) ? DateTime.Now : ucGraphType.From;
        DateTime to   = ((ucGraphType.To == DateTimeHelper.ZERO_TIME) && !pnlHeader.Visible) ? DateTime.Now : ucGraphType.To;

        reportParameters.Columns.Add("FromDate", typeof(DateTime));
        reportParameters.Columns.Add("ToDate", typeof(DateTime));
        reportParameters.Columns.Add("CodeName", typeof(string));
        reportParameters.Columns.Add("CampaignName", typeof(string));
        reportParameters.Columns.Add("ConversionName", typeof(string));
        reportParameters.Columns.Add("Goal", typeof(string));
        reportParameters.Columns.Add("SiteID", typeof(int));

        object[] parameters = new object[7];

        parameters[0] = (mAllowNoTimeSelection && from == DateTimeHelper.ZERO_TIME) ? (DateTime?)null : from;
        parameters[1] = (mAllowNoTimeSelection && to == DateTimeHelper.ZERO_TIME) ? (DateTime?)null : to;
        parameters[2] = dataCodeName;
        parameters[3] = String.Empty;
        parameters[4] = String.Empty;
        parameters[5] = ucReportHeader.SelectedGoal;
        parameters[6] = ucReportHeader.SelectedSiteID;


        // Get report name from query
        String reportName = ucGraphType.GetReportName(reportCodeNames);

        // Filter campaign if any campaign selected
        string campaignName = ValidationHelper.GetString(ucReportHeader.SelectedCampaign, String.Empty);

        if ((campaignName != ucReportHeader.AllRecordValue) && (!String.IsNullOrEmpty(campaignName)))
        {
            parameters[3] = campaignName;
        }

        if (conversionID == 0)
        {
            // Filter conversion
            String conversionName = ValidationHelper.GetString(ucReportHeader.SelectedConversion, String.Empty);
            if ((conversionName != ucReportHeader.AllRecordValue) && (!String.IsNullOrEmpty(conversionName)))
            {
                parameters[4] = conversionName;
            }
        }
        else
        {
            ConversionInfo ci = ConversionInfoProvider.GetConversionInfo(conversionID);
            if (ci != null)
            {
                parameters[4] = ci.ConversionName;
                mDeleteParam  = "singleconversion;" + ci.ConversionName;
            }
        }

        reportParameters.Rows.Add(parameters);
        reportParameters.AcceptChanges();

        mUcDisplayReport.ReportName = reportName;

        // Set display report
        if (!mUcDisplayReport.IsReportLoaded())
        {
            ShowError(String.Format(GetString("Analytics_Report.ReportDoesnotExist"), HTMLHelper.HTMLEncode(reportName)));
        }
        else
        {
            mUcDisplayReport.LoadFormParameters   = false;
            mUcDisplayReport.DisplayFilter        = false;
            mUcDisplayReport.ReportParameters     = reportParameters.Rows[0];
            mUcDisplayReport.GraphImageWidth      = 100;
            mUcDisplayReport.IgnoreWasInit        = true;
            mUcDisplayReport.UseExternalReload    = true;
            mUcDisplayReport.UseProgressIndicator = true;
            mUcDisplayReport.SelectedInterval     = HitsIntervalEnumFunctions.HitsConversionToString(ucGraphType.SelectedInterval);
            mUcDisplayReport.ReloadData(true);
        }

        // Mark as report displayed
        reportDisplayed = true;
    }
コード例 #7
0
    protected override void OnPreInit(EventArgs e)
    {
        // Checks all permissions for web analytics
        CMSWebAnalyticsPage.CheckAllPermissions();

        string         conversionName = QueryHelper.GetString("conversionName", String.Empty);
        int            conversionID   = QueryHelper.GetInteger("conversionID", 0);
        ConversionInfo ci             = null;

        if (conversionName != String.Empty)
        {
            // Try to check dialog mode
            conversionName = conversionName.Trim(';');
            ci             = ConversionInfoProvider.GetConversionInfo(conversionName, CMSContext.CurrentSiteName);
        }

        if (conversionID != 0)
        {
            ci = ConversionInfoProvider.GetConversionInfo(conversionID);
        }

        // Test whether conversion is in current site, if not - test if user is authorized for conversion's site
        if (ci != null)
        {
            int siteID = CMSContext.CurrentSiteID;
            if (ci.ConversionSiteID != siteID)
            {
                if (!CMSContext.CurrentUser.IsInSite(SiteInfoProvider.GetSiteName(ci.ConversionSiteID)))
                {
                    RedirectToAccessDenied(GetString("conversion.currentsite"));
                    return;
                }
            }
        }

        if ((conversionName != String.Empty) && (ci == null))
        {
            // Set warning text
            infoText = String.Format(GetString("conversion.editedobjectnotexits"), conversionName);

            // Create new conversion info based on conversion name
            ci = new ConversionInfo();
            ci.ConversionName        = conversionName;
            ci.ConversionDisplayName = conversionName;
        }

        modalDialog = QueryHelper.GetBoolean("modalDialog", false);
        if (modalDialog)
        {
            MasterPageFile = "~/CMSMasterPages/UI/Dialogs/ModalDialogPage.master";
            if (ci != null)
            {
                this.CurrentMaster.Title.TitleText  = GetString("analytics.conversion");
                this.CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Analytics_Conversion/object.png");
            }
            else
            {
                this.CurrentMaster.Title.TitleText  = GetString("conversion.conversion.new");
                this.CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Analytics_Conversion/new.png");
            }
            SetDialogButtons();
        }

        if (ci != null)
        {
            EditedObject = ci;
        }

        base.OnPreInit(e);
    }
コード例 #8
0
    /// <summary>
    /// Creates the channel conversions table and conversion funnel.
    /// </summary>
    private void InitializeControls()
    {
        // Get raw data from database
        var conversionSources = ConversionCampaignSourceInfoProvider.GetConversionCampaignSources(mCampaignInfo.CampaignID).ToList();

        if (!conversionSources.Any())
        {
            pnlCampaignColumnChart.Visible = false;
            gridChannels.Visible           = false;
            lblNoData.Visible = true;
            return;
        }

        // Process data into more suitable format
        var conversionSourcesById = conversionSources
                                    .GroupBy(key => key.ConversionID, (key, group) =>
        {
            var groupList = group.ToList();
            return(new
            {
                Name = ConversionInfoProvider.GetConversionInfo(key).ConversionDisplayName,
                Items = groupList,
                Sum = groupList.Sum(x => x.ConversionHits)
            });
        })
                                    .OrderByDescending(x => x.Sum);

        // Initialize chart
        double onePercentOfFirstItemSum = conversionSourcesById.First().Sum / 100.0;
        var    chartData = conversionSourcesById.Select(x => new
        {
            title          = x.Name,
            value          = x.Sum,
            percent        = onePercentOfFirstItemSum > 0 ? Decimal.Round(x.Sum / (decimal)onePercentOfFirstItemSum) : 0,
            formattedValue = x.Sum.ToString("N0"),
        });

        ScriptHelper.RegisterModule(pnlCampaignColumnChart, "CMS.Charts/CampaignColumnChart", new
        {
            chartDiv  = pnlCampaignColumnChart.ClientID,
            legendDiv = "legend",
            data      = chartData,
            maxValue  = conversionSourcesById.First().Sum,
        });

        // Create data table
        var table = new DataTable();

        table.Columns.Add("Channel", typeof(string));
        table.Columns.Add("EmailReports", typeof(string));

        // Define first header column
        AddColumnToGridView(gridChannels, "Channel", String.Empty);

        // Define column for email report links
        AddColumnToGridView(gridChannels, "EmailReports", GetString("campaign.report.emailreports"));

        // Get channels
        var channels = conversionSources.GroupBy(x => x.SourceName).OrderBy(x => x.Key);

        // Create table header
        foreach (var conversion in conversionSourcesById)
        {
            AddColumnToGridView(gridChannels, conversion.Name, conversion.Name);
            table.Columns.Add(conversion.Name, typeof(string));
        }

        // Create table rows
        foreach (var channel in channels)
        {
            var dr = table.NewRow();
            dr["Channel"] = channel.Key;

            if (ModuleEntryManager.IsModuleLoaded(ModuleName.NEWSLETTER))
            {
                var issues =
                    new ObjectQuery(PredefinedObjectType.NEWSLETTERISSUE).WhereEquals("IssueUTMCampaign",
                                                                                      mCampaignInfo.CampaignUTMCode).WhereEquals("IssueUTMSource", channel.Key);
                dr["EmailReports"] = GetEmailReportLinks(issues.ToList()).Join("</br></br>");
            }

            // Create other cells with conversion values
            foreach (var item in conversionSourcesById)
            {
                var conversion = item.Items.Where(x => x.SourceName == channel.Key).ToList();
                dr[item.Name] = conversion.Any() ? conversion.First().ConversionHits.ToString("N0") : "0";
            }

            table.Rows.Add(dr);
        }

        gridChannels.DataSource = table;
        gridChannels.DataBind();
    }