Beispiel #1
0
        /// <summary>
        /// Proceeds the form codes.
        /// </summary>
        /// <param name="formCodes">The form codes.</param>
        /// <param name="siteDomain">The site domain.</param>
        private void ProceedFormCodes(List <string> formCodes, tbl_SiteDomain siteDomain)
        {
            var dataManager = new DataManager();
            var wizardForms = new List <tbl_SiteActivityRules>();
            var otherForms  = new List <tbl_SiteActivityRules>();

            var inviteFriendCount = 0;

            dataManager.StatisticData.SiteId = HttpContext.Current != null
                                                   ? CurrentUser.Instance.SiteID
                                                   : siteDomain.SiteID;

            foreach (var formCode in formCodes)
            {
                var siteActivityRule = dataManager.SiteActivityRules.SelectFormByCode(siteDomain.SiteID, formCode);
                if (siteActivityRule == null)
                {
                    continue;
                }

                if (siteActivityRule.tbl_SiteActivityRuleLayout.Any(o => o.LayoutType == (int)LayoutType.InviteFriend))
                {
                    inviteFriendCount++;
                }

                if (siteActivityRule.TemplateID.HasValue)
                {
                    wizardForms.Add(siteActivityRule);
                }
                else
                {
                    otherForms.Add(siteActivityRule);
                }
            }

            var groupedForms = wizardForms.GroupBy(o => o.TemplateID).Select(o => new { ID = o.Key, Count = o.Count() });

            foreach (var groupedForm in groupedForms)
            {
                var templateForm       = dataManager.SiteActivityRules.SelectById(groupedForm.ID.Value);
                var statisticDataValue = dataManager.StatisticData.GetStatisticDataValueByCode(string.Format("ClientBaseGrowthTemplateForm_{0}", templateForm.ID));
                statisticDataValue.DbValue = groupedForm.Count;
                statisticDataValue.Update(siteDomain.SiteID);
            }

            dataManager.StatisticData.ClientBaseOtherFormsCount.DbValue = otherForms.Count;
            dataManager.StatisticData.ClientBaseOtherFormsCount.Update(siteDomain.SiteID);

            dataManager.StatisticData.LoyaltyManagementInviteFriendFormCount.DbValue = inviteFriendCount;
            dataManager.StatisticData.LoyaltyManagementInviteFriendFormCount.Update(siteDomain.SiteID);
        }
Beispiel #2
0
        /// <summary>
        /// Adds the specified site domain.
        /// </summary>
        /// <param name="siteDomain">The site domain.</param>
        /// <returns></returns>
        public tbl_SiteDomain Add(tbl_SiteDomain siteDomain)
        {
            siteDomain.ID = Guid.NewGuid();

            if (string.IsNullOrEmpty(siteDomain.Note))
            {
                siteDomain.Note = string.Empty;
            }

            _dataContext.tbl_SiteDomain.AddObject(siteDomain);
            _dataContext.SaveChanges();

            return(siteDomain);
        }
Beispiel #3
0
        /// <summary>
        /// Checks the specified site domain.
        /// </summary>
        /// <param name="siteDomain">The site domain.</param>
        public void Check(tbl_SiteDomain siteDomain)
        {
            if (siteDomain == null)
            {
                return;
            }

            lvResult.DataSource = DataManager.SiteDomain.CheckAll(siteDomain);
            lvResult.DataBind();

            if (DomainChecked != null)
            {
                DomainChecked(this);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Handles the OnClick event of the lbtnRegisterDomainsByActionLog control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        protected void lbtnRegisterDomainsByActionLog_OnClick(object sender, EventArgs e)
        {
            var dataManager = new DataManager();
            var domains     = dataManager.SiteDomain.SelectDomainFromContactActivity(SiteId);

            var site         = dataManager.Sites.SelectById(SiteId);
            int?domainsCount = null;

            if (site.AccessProfileID.HasValue)
            {
                tbl_AccessProfile accessProfile = dataManager.AccessProfile.SelectById(site.AccessProfileID.Value);
                if (accessProfile != null)
                {
                    domainsCount = accessProfile.DomainsCount;
                }
            }


            foreach (var domain in domains)
            {
                if (string.IsNullOrEmpty(domain))
                {
                    continue;
                }

                var siteDomain = new tbl_SiteDomain {
                    Domain = domain, SiteID = SiteId, Aliases = string.Empty
                };
                if (dataManager.SiteDomain.SelectByDomain(siteDomain.Domain).ID == Guid.Empty &&
                    (!domainsCount.HasValue ||
                     dataManager.SiteDomain.SelectDomainsBySiteId(site.ID).Count() < domainsCount))
                {
                    dataManager.SiteDomain.Add(siteDomain);
                }
            }

            gridSiteDomains.Rebind();
        }
Beispiel #5
0
        /// <summary>
        /// Generates the counter result.
        /// </summary>
        /// <param name="counter">The counter.</param>
        /// <param name="siteDomain">The site domain.</param>
        private void GenerateCounterResult(ref CheckSiteStatus counter, tbl_SiteDomain siteDomain, bool isNotFound = false)
        {
            if (!counter.ErrorLinks.Any())
            {
                counter.Score          = 50;
                counter.ErrorTypeClass = "success";

                try
                {
                    Uri siteUrl = GetDomainUrl(siteDomain.Domain);
                    if (IsLeadForceDomain(siteUrl))
                    {
                        siteDomain.StatusID = (int)SiteDomainStatus.LeadForceDomain;
                        if (isNotFound)
                        {
                            counter.Message = "Домен найден, но не привязан к мини сайту";
                        }
                        else
                        {
                            counter.Message = string.Format("Счетчик найден. Проверено {0} страниц сайта.", counter.SuccessLinks.Count);
                        }
                    }
                    else
                    {
                        siteDomain.StatusID = (int)SiteDomainStatus.Checking;
                        counter.Message     = string.Format("Счетчик найден. Проверено {0} страниц сайта.", counter.SuccessLinks.Count);
                    }
                }
                catch (Exception ex)
                {
                    Log.Error("Ошибка проверки домена LeadForce", ex);
                    siteDomain.StatusID = (int)SiteDomainStatus.Checking;
                }

                Update(siteDomain);
            }
            else
            {
                siteDomain.StatusID = (int)SiteDomainStatus.CheckingFailed;
                Update(siteDomain);

                counter.ErrorTypeClass = "error";
                counter.Message        =
                    string.Format(
                        @"Счетчик не найден на {0} страницах из {1} проверенных. <a href=""javascript:;"" onclick=""$('.checkedLinks').show();"">Подробнее...</a><div style=""display:none"" class=""checkedLinks""><br/>{2}<br/></div><br/>Для установки счетчика Вам необходимо подключить к Вашему сайту код:
<div class=""row"">
    <label>Код счетчика (часть 1):</label><br />
    <span class=""note"">(размещать в &lt;head&gt; или в начале документа)</span>
    <table class=""tbl-counter-code"">
        <tr>
            <td><pre><code>{3}</code></pre></td>
        </tr>
    </table>
</div>
<div class=""row"">
    <label>Код счетчика (часть 2):</label><br />
    <span class=""note"">(размещать в конце файла перед &lt;/body&gt;)</span>
    <table class=""tbl-counter-code"">
        <tr>
            <td><pre><code>{4}</code></pre></td>
        </tr>
    </table>
</div>",
                        counter.ErrorLinks.Count,
                        counter.ErrorLinks.Count + counter.SuccessLinks.Count,
                        string.Join("<br/> ", counter.ErrorLinks.Select(o => string.Format("<a href=\"{0}\" target=\"_blank\">{0}</a>", o))),
                        HttpUtility.HtmlEncode(ScriptTemplates.Counter(siteDomain.SiteID)),
                        HttpUtility.HtmlEncode(ScriptTemplates.Script(true)));
            }
        }
Beispiel #6
0
        /// <summary>
        /// Checks all.
        /// </summary>
        /// <param name="siteDomain">The site domain.</param>
        /// <returns></returns>
        public List <CheckSiteStatus> CheckAll(tbl_SiteDomain siteDomain)
        {
            Uri siteUrl = GetDomainUrl(siteDomain.Domain);

            try
            {
                if (IsLeadForceDomain(siteUrl))
                {
                    using (var mgr = new ServerManager())
                    {
                        var isChanged = false;
                        var site      = mgr.Sites.FirstOrDefault(o => o.Name == Settings.CMSSiteHost);
                        if (site != null && !site.Bindings.Any(o => o.Host == siteUrl.Host))
                        {
                            var host = siteUrl.Host.Replace("www.", string.Empty);
                            if (!host.ToLower().StartsWith("xn--"))
                            {
                                Binding binding = site.Bindings.CreateElement();
                                binding.Protocol           = "http";
                                binding.BindingInformation = "*:80:" + host;
                                site.Bindings.Add(binding);

                                binding                    = site.Bindings.CreateElement();
                                binding.Protocol           = "http";
                                binding.BindingInformation = "*:80:www." + host;
                                site.Bindings.Add(binding);

                                isChanged = true;
                            }
                        }

                        if (site != null && !string.IsNullOrEmpty(siteDomain.Aliases))
                        {
                            foreach (string alias in siteDomain.Aliases.Split(';'))
                            {
                                var aliasUrl = GetDomainUrl(alias.Trim());
                                if (!site.Bindings.Any(o => o.Host == aliasUrl.Host))
                                {
                                    var host = aliasUrl.Host.Replace("www.", string.Empty);
                                    if (!host.ToLower().StartsWith("xn--"))
                                    {
                                        Binding binding = site.Bindings.CreateElement();
                                        binding.Protocol           = "http";
                                        binding.BindingInformation = "*:80:" + host;
                                        site.Bindings.Add(binding);

                                        binding                    = site.Bindings.CreateElement();
                                        binding.Protocol           = "http";
                                        binding.BindingInformation = "*:80:www." + host;
                                        site.Bindings.Add(binding);
                                        isChanged = true;
                                    }
                                }
                            }
                        }

                        if (isChanged)
                        {
                            mgr.CommitChanges();
                            Thread.Sleep(2000);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("Ошибка операции bindings", ex);
            }

            var result = new List <CheckSiteStatus>();

            var counter = new CheckSiteStatus()
            {
                SuccessLinks = new List <string>(), ErrorLinks = new List <string>()
            };
            var aliases = new CheckSiteStatus()
            {
                SuccessLinks = new List <string>(), ErrorLinks = new List <string>()
            };
            var formsExceptCallOnClosing = new CheckSiteStatus()
            {
                SuccessLinks = new List <string>(), ErrorLinks = new List <string>()
            };
            var formsCallOnClosing = new CheckSiteStatus()
            {
                SuccessLinks = new List <string>(), ErrorLinks = new List <string>()
            };
            var formCodes = new List <string>();

            var htmlPage = GetPageFromUrl(siteUrl.ToString());

            if (htmlPage.Contains("#LFSiteNotFound#"))
            {
                GenerateCounterResult(ref counter, siteDomain, true);
                result.Add(counter);
                return(result);
            }

            ProceedPage(siteDomain.SiteID, siteUrl.ToString(), htmlPage, ref counter, ref formsExceptCallOnClosing, ref formsCallOnClosing, ref formCodes);

            if (!string.IsNullOrEmpty(siteDomain.Aliases))
            {
                foreach (string alias in siteDomain.Aliases.Split(';'))
                {
                    try
                    {
                        var aliasPage = GetPageFromUrl(alias.StartsWith("http") ? alias : "http://" + alias);
                        if (aliasPage.Replace(alias, string.Empty) != htmlPage.Replace(siteDomain.Domain, string.Empty))
                        {
                            aliases.ErrorLinks.Add(alias);
                        }
                        else
                        {
                            aliases.SuccessLinks.Add(alias);
                        }
                    }
                    catch
                    {
                        aliases.ErrorLinks.Add(alias);
                    }
                }
            }

            var links = DocumentLinks(htmlPage);

            foreach (string link in links)
            {
                var tmpLink = link;

                if (!tmpLink.StartsWith("http"))
                {
                    tmpLink = siteUrl.AbsoluteUri + link;
                }

                tmpLink = HttpUtility.HtmlDecode(tmpLink);

                while (tmpLink.IndexOf("//") != -1)
                {
                    tmpLink = tmpLink.Replace("//", "/");
                }

                tmpLink = tmpLink.Replace(":/", "://");

                if (tmpLink.StartsWith("http") && tmpLink.ToLower().Contains(siteUrl.Host) && !tmpLink.ToLower().Contains("javascript") &&
                    !tmpLink.ToLower().Contains("mailto:"))
                {
                    try
                    {
                        htmlPage = GetPageFromUrl(tmpLink);
                    }
                    catch (Exception ex)
                    {
                        Log.Error(string.Format("Ошибка обработки ссылки {0}", tmpLink), ex);
                        htmlPage = string.Empty;
                    }

                    ProceedPage(siteDomain.SiteID, tmpLink, htmlPage, ref counter, ref formsExceptCallOnClosing, ref formsCallOnClosing, ref formCodes);
                }
            }

            GenerateCounterResult(ref counter, siteDomain);
            result.Add(counter);

            if (!string.IsNullOrEmpty(siteDomain.Aliases))
            {
                GenerateAliasesResult(ref aliases);
                result.Add(aliases);

                siteDomain.Aliases = string.Join(";", aliases.SuccessLinks);
            }

            GenerateFormsExceptCallOnClosingResult(ref formsExceptCallOnClosing);
            result.Add(formsExceptCallOnClosing);
            GenerateFormsCallOnClosingResult(ref formsCallOnClosing);
            result.Add(formsCallOnClosing);

            siteDomain.TotalPageCount              = counter.SuccessLinks.Count + counter.ErrorLinks.Count;
            siteDomain.PageCountWithCounter        = counter.SuccessLinks.Count;
            siteDomain.PageCountWithForms          = formsExceptCallOnClosing.SuccessLinks.Count;
            siteDomain.PageCountWithOnClosingForms = formsCallOnClosing.SuccessLinks.Count;

            ProceedFormCodes(formCodes, siteDomain);

            if (result.Sum(o => o.Score) == 100)
            {
                siteDomain.Note = "Подключение домена выполнено полностью";
            }
            else
            {
                siteDomain.Note = string.Format("Статус подключения домена: {0} из 100%", result.Sum(o => o.Score));
            }

            Update(siteDomain);

            return(result);
        }
Beispiel #7
0
 /// <summary>
 /// Deletes the specified site domain.
 /// </summary>
 /// <param name="siteDomain">The site domain.</param>
 public void Delete(tbl_SiteDomain siteDomain)
 {
     _dataContext.tbl_SiteDomain.DeleteObject(siteDomain);
     _dataContext.SaveChanges();
 }
Beispiel #8
0
 /// <summary>
 /// Updates the specified site domain.
 /// </summary>
 /// <param name="siteDomain">The site domain.</param>
 public void Update(tbl_SiteDomain siteDomain)
 {
     _dataContext.SaveChanges();
 }
Beispiel #9
0
        /// <summary>
        /// Saves the specified site id.
        /// </summary>
        /// <param name="siteId">The site id.</param>
        /// <param name="domain">The domain.</param>
        /// <param name="aliases">The aliases.</param>
        /// <param name="isSimple">if set to <c>true</c> [is simple].</param>
        /// <param name="siteDomainId">The site domain id.</param>
        /// <returns></returns>
        public string Save(Guid?siteId, string domain, string aliases, bool isSimple, ref Guid siteDomainId)
        {
            tbl_SiteDomain siteDomain = null;

            if (isSimple && siteId.HasValue)
            {
                siteDomain = SelectBySiteId(siteId.Value) ?? new tbl_SiteDomain();
            }
            else
            {
                if (CurrentUser.Instance.AccessLevel == AccessLevel.SystemAdministrator)
                {
                    siteDomain = SelectById(siteDomainId) ?? new tbl_SiteDomain();
                }
                else if (siteId.HasValue)
                {
                    siteDomain = SelectById(siteId.Value, siteDomainId) ?? new tbl_SiteDomain();
                }
            }

            if (siteDomain == null)
            {
                return("Ошибка изменения домена. Обратитесь к системному администратору.");
            }

            siteDomain.Domain = domain.Trim();

            if (!Regex.IsMatch(siteDomain.Domain, @"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$"))
            {
                siteDomain.Domain = string.Format("http://{0}", siteDomain.Domain);
            }

            if (!string.IsNullOrEmpty(aliases.Trim()))
            {
                var aliasesList = new List <string>();

                foreach (string alias in aliases.Split(';'))
                {
                    aliasesList.Add(alias.Trim());
                }

                siteDomain.Aliases = string.Join(";", aliasesList);
            }
            else
            {
                siteDomain.Aliases = string.Empty;
            }

            if (SelectByDomain(siteDomain.Domain).ID != Guid.Empty && SelectByDomain(siteDomain.Domain).ID != siteDomain.ID)
            {
                return("Такой домен уже зарегистрирован в системе.");
            }

            if (siteDomain.ID == Guid.Empty)
            {
                siteDomain.StatusID = (int)SiteDomainStatus.Added;

                if (CurrentUser.Instance.AccessLevel == AccessLevel.SystemAdministrator && siteId.HasValue)
                {
                    siteDomain.SiteID = siteId.Value;
                }
                else
                {
                    siteDomain.SiteID = CurrentUser.Instance.SiteID;
                }

                siteDomain.Note = string.Empty;

                var site = _dataContext.tbl_Sites.SingleOrDefault(o => o.ID == siteDomain.SiteID);
                if (site != null && site.AccessProfileID.HasValue)
                {
                    var accessProfile = _dataContext.tbl_AccessProfile.SingleOrDefault(o => o.ID == site.AccessProfileID);
                    if (accessProfile != null && accessProfile.DomainsCount.HasValue)
                    {
                        if (site.tbl_SiteDomain.Count + 1 > accessProfile.DomainsCount)
                        {
                            return("У вас исчерпан лимит добавления доменов.");
                        }
                    }
                }

                Add(siteDomain);
            }
            else
            {
                siteDomain.StatusID = (int)SiteDomainStatus.Added;

                Update(siteDomain);
            }

            siteDomainId = siteDomain.ID;

            return(string.Empty);
        }