using System; using System.Data; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; using CMS.WebAnalytics; public partial class CMSModules_WebAnalytics_Tools_Analytics_Statistics : CMSWebAnalyticsPage { #region "Variables" /// /// List of special conversions not displayed either in custom node list or in ui list. /// private const string additionalConversions = "'visitfirst';'visitreturn';'referringsite_direct';'referringsite_search';'referringsite_referring';'referringsite_local';'avgtimeonpage'"; /// /// Where condition used for select custom conversions. /// private string customWhereCondition = String.Empty; #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { treeElem.OnNodeCreated += new CMSAdminControls_UI_UIProfiles_UIMenu.NodeCreatedEventHandler(menuElem_OnNodeCreated); // Get NOT custom conversions from UI elements UIElementInfo root = UIElementInfoProvider.GetRootUIElementInfo("CMS.WebAnalytics"); if (root != null) { // Get all UI elements to filter custom reports DataSet dsElems = UIElementInfoProvider.GetUIElements("ElementIDPath LIKE '" + DataHelper.EscapeLikeQueryPatterns(root.ElementIDPath, true, true, true) + "/%'", String.Empty, 0, "ElementName,ElementTargetUrl"); if (!DataHelper.DataSourceIsEmpty(dsElems) && (dsElems.Tables.Count > 0)) { // Condition for custom reports customWhereCondition = "StatisticsCode NOT IN ("; foreach (DataRow dr in dsElems.Tables[0].Rows) { string codeName = ValidationHelper.GetString(dr["ElementName"], String.Empty); customWhereCondition += "N'" + SqlHelperClass.GetSafeQueryString(codeName, false) + "',"; } // Add special cases - dont want to show them in UI or Custom report section customWhereCondition += additionalConversions.Replace(';', ','); customWhereCondition = customWhereCondition.TrimEnd(new char[] { ',' }); customWhereCondition += ")"; // Filter AB Testing customWhereCondition += " AND (StatisticsCode NOT LIKE 'abconversion;%') AND (StatisticsCode NOT LIKE 'mvtconversion;%') AND (StatisticsCode NOT LIKE 'campconversion;%') "; } } } private TreeNode menuElem_OnNodeCreated(UIElementInfo uiElement, TreeNode defaultNode) { String elementName = uiElement.ElementName.ToLowerCSafe(); // Remove Optimalization node when module OnlineMarketing not present if (elementName == "optimalization") { if (!ModuleEntry.IsModuleLoaded(ModuleEntry.ONLINEMARKETING)) { return null; } } String imagesUrl = "CMSModules/CMS_WebAnalytics/"; if (uiElement != null) { if (!IsToolsUIElementAvailable(uiElement)) { return null; } } // Add all custom reports if (elementName == "custom") { customWhereCondition = SqlHelperClass.AddWhereCondition(customWhereCondition, " StatisticsSiteID = " + CMSContext.CurrentSiteID); DataSet ds = StatisticsInfoProvider.GetCodeNames(customWhereCondition, "StatisticsCode ASC", 0, "StatisticsCode"); // If no custom reports found - hide Custom Reports node if (DataHelper.DataSourceIsEmpty(ds)) { return null; } foreach (DataRow dr in ds.Tables[0].Rows) { TreeNode childNode = new TreeNode(); string codeName = ValidationHelper.GetString(dr["StatisticsCode"], String.Empty).ToLowerCSafe(); string name = GetString("analytics_codename." + codeName); string dataCodeName = GetDataCodeName(codeName); string reportCodeName = GetReportCodeNames(codeName); childNode.Text = "" + name + ""; childNode.NavigateUrl = "~/CMSModules/WebAnalytics/Tools/Analytics_Report.aspx?statCodeName=" + codeName + "&dataCodeName=" + dataCodeName + "&reportCodeName=" + reportCodeName + "&isCustom=1"; childNode.Target = treeElem.TargetFrame; // Icon String iconPath = imagesUrl + codeName.Replace(".", "_") + ".png"; String corePath = URLHelper.ResolveUrl(UIHelper.GetImagePath(Page, iconPath, false, false)); if (FileHelper.FileExists(corePath)) { childNode.ImageUrl = GetImageUrl(iconPath); } else { childNode.ImageUrl = GetImageUrl(imagesUrl + "statistics.png"); } defaultNode.ChildNodes.Add(childNode); } } return defaultNode; } /// /// Returns generic report code names (based on analytics code name). /// /// Analytics code name (pageviews, pageviews.multilingual...) private static string GetReportCodeNames(string statCodeName) { string result = ""; result += statCodeName + ".yearreport"; result += ";" + statCodeName + ".monthreport"; result += ";" + statCodeName + ".weekreport"; result += ";" + statCodeName + ".dayreport"; result += ";" + statCodeName + ".hourreport"; return result; } /// /// Returns data code name from analytics code name. /// /// Analytics code name (pageviews, pageviews.multilingual...) private static string GetDataCodeName(string statCodeName) { int pos = statCodeName.IndexOfCSafe('.'); if (pos > 0) { return statCodeName.Substring(0, pos); } return statCodeName; } #endregion }