/// <summary> /// Selects the session source object. /// </summary> /// <param name="url">The URL.</param> /// <param name="referrerUrl">The referrer URL.</param> /// <returns></returns> public static SessionSource Select(string url, string referrerUrl) { var result = new SessionSource(); var repository = new WebCounterServiceRepository(); var sessionSourceRules = repository.SessionSourceRule_SelectAll(); if (!string.IsNullOrEmpty(url)) { url = HttpUtility.UrlDecode(url); } referrerUrl = HttpUtility.UrlDecode(referrerUrl); foreach (var sessionSourceRule in sessionSourceRules) { var regex = new Regex(sessionSourceRule.Pattern); var matches = regex.Matches((SessionRuleType)sessionSourceRule.SessionRuleTypeID == SessionRuleType.SourceUrl && !string.IsNullOrEmpty(url) ? url : referrerUrl); if (matches.Count > 0) { foreach (Match match in matches) { switch ((SessionRuleType)sessionSourceRule.SessionRuleTypeID) { case SessionRuleType.SourceUrl: result.AdvertisingPlatform = match.Groups["source"].Value != string.Empty ? match.Groups["source"].Value : result.AdvertisingPlatform; result.AdvertisingType = match.Groups["medium"].Value != string.Empty ? match.Groups["medium"].Value : result.AdvertisingType; result.AdvertisingCampaign = match.Groups["campaign"].Value != string.Empty ? match.Groups["campaign"].Value : result.AdvertisingCampaign; result.Content = match.Groups["content"].Value != string.Empty ? match.Groups["content"].Value : result.Content; result.Keywords = match.Groups["keywords"].Value != string.Empty ? match.Groups["keywords"].Value : result.Keywords; break; case SessionRuleType.ReferrerUrl: result.Keywords = match.Groups["keywords"].Value != string.Empty ? match.Groups["keywords"].Value : result.Keywords; if (sessionSourceRule.Title == "Google Adwords" || sessionSourceRule.Title == "Yandex Direct") { result.AdvertisingType = sessionSourceRule.Title; } if (sessionSourceRule.Title == "Yandex Services") { result.AdvertisingPlatform = "Yandex"; if (!string.IsNullOrEmpty(referrerUrl)) { if (referrerUrl.ToLower().Contains("images.yandex")) { result.AdvertisingType = "Images"; } else if (referrerUrl.ToLower().Contains("news.yandex")) { result.AdvertisingType = "News"; } else if (referrerUrl.ToLower().Contains("rabota.yandex")) { result.AdvertisingType = "Rabota"; } } } result.CameFromUrl = match.Groups["camefrom"].Value != string.Empty ? match.Groups["camefrom"].Value : result.CameFromUrl; Uri cameFromUrl; if (!string.IsNullOrEmpty(result.CameFromUrl) && string.IsNullOrEmpty(result.AdvertisingPlatform) && Uri.TryCreate(result.CameFromUrl, UriKind.Absolute, out cameFromUrl)) { result.AdvertisingPlatform = cameFromUrl.Host; } break; } } if ((SessionRuleType)sessionSourceRule.SessionRuleTypeID == SessionRuleType.ReferrerUrl) { if (string.IsNullOrEmpty(result.AdvertisingPlatform)) { result.AdvertisingPlatform = sessionSourceRule.Title; } if (string.IsNullOrEmpty(result.AdvertisingType)) { result.AdvertisingType = "search"; } if (string.IsNullOrEmpty(result.CameFromUrl) && !string.IsNullOrEmpty(referrerUrl)) { Uri refferUri; if (Uri.TryCreate(referrerUrl, UriKind.RelativeOrAbsolute, out refferUri) && !string.IsNullOrEmpty(refferUri.Query)) { result.CameFromUrl = refferUri.ToString().Replace(refferUri.Query, string.Empty); } } } break; } } if (result.IsNull()) { result.CameFromUrl = referrerUrl; if (!string.IsNullOrEmpty(referrerUrl)) { result.AdvertisingType = "Сайт"; var host = new Uri(referrerUrl).Host.Replace("www.", string.Empty); if (host.ToLower().Contains("google.")) { result.AdvertisingType = string.Empty; host = "Google"; } result.AdvertisingPlatform = host; } } result.EnterPointURL = url; return(result); }
/// <summary> /// Adds the site user. /// </summary> /// <param name="siteID">The site ID.</param> /// <param name="contactID">The user ID.</param> /// <param name="activityType">Type of the activity.</param> /// <param name="activityCode">The activity code.</param> /// <param name="refferURL">The reffer URL.</param> /// <param name="resolution">The resolution.</param> /// <param name="enterPointUrl">The enter point URL.</param> /// <param name="source">The source.</param> /// <param name="medium">The medium.</param> /// <param name="keywords">The keywords.</param> /// <param name="campaign">The campaign.</param> /// <param name="content">The content.</param> public static void AddContact(Guid siteID, Guid contactID, ActivityType activityType, string activityCode, string refferURL, string resolution, SessionSource sessionSource, Guid?refferID) { /*if (dataManager.SiteUser.GetCount(SiteID, UserID) == 0) * { * var siteUser = new tbl_SiteUser { ID = UserID, SiteID = SiteID, CreatedAt = DateTime.Now, RefferURL = RefferURL, UserIP = GetUserIP(), StatusID = dataManager.Status.SelectDefault(SiteID).ID, ReadyToSellID = dataManager.ReadyToSell.SelectByScore(SiteID, 0).ID, PriorityID = dataManager.Priorities.SelectByScore(SiteID, 0).ID }; * dataManager.SiteUser.Add(siteUser); * }*/ //var siteUser = new tbl_SiteUser { ID = UserID, SiteID = SiteID, CreatedAt = DateTime.Now, RefferURL = RefferURL, UserIP = GetUserIP() }; //repository.SiteUser_Add(siteUser); var userAgent = HttpContext.Current.Request.UserAgent; var browser = GetBrowser(userAgent); var os = GetOperatingSystem(userAgent); var userParams = new AddContactParams { ID = contactID, SiteID = siteID, RefferURL = refferURL, UserIP = GetUserIP(), UserAgent = userAgent, BrowserName = browser.Name, BrowserVersion = browser.Version, OperatingSystemName = os.Name, OperatingSystemVersion = os.Version, Resolution = resolution, MobileDevice = (os.IsMobile) ? GetMobileDevice(userAgent) : null, ActivityTypeID = activityType, ActivityCode = activityCode, SessionSource = sessionSource, RefferID = refferID }; repository.Contact_Add(userParams); //CheckEvent(siteID, contactID); }