diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 89d4b28f..aff39efa 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -6254,6 +6254,13 @@ BEGIN END GO +IF NOT EXISTS(SELECT * FROM sys.columns + WHERE [name] = N'LastUpdateDate' AND [object_id] = OBJECT_ID(N'Domains')) +BEGIN + ALTER TABLE [dbo].[Domains] ADD LastUpdateDate DateTime null; +END +GO + IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'ScheduleTasksEmailTemplates') DROP TABLE ScheduleTasksEmailTemplates GO @@ -6639,6 +6646,18 @@ AS UPDATE [dbo].[Domains] SET [ExpirationDate] = @Date WHERE [DomainID] = @DomainId GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateDomainLastUpdateDate') +DROP PROCEDURE UpdateDomainLastUpdateDate +GO +CREATE PROCEDURE [dbo].UpdateDomainLastUpdateDate +( + @DomainId INT, + @Date DateTime +) +AS +UPDATE [dbo].[Domains] SET [LastUpdateDate] = @Date WHERE [DomainID] = @DomainId +GO + --Updating Domain procedures @@ -6673,6 +6692,7 @@ SELECT D.IsInstantAlias, D.CreationDate, D.ExpirationDate, + D.LastUpdateDate, D.IsDomainPointer FROM Domains AS D INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON D.PackageID = PT.PackageID @@ -6754,6 +6774,7 @@ SET @sql = @sql + ' SELECT COUNT(DomainID) FROM @Domains;SELECT D.IsInstantAlias, D.IsDomainPointer, D.ExpirationDate, + D.LastUpdateDate, P.PackageName, ISNULL(SRV.ServerID, 0) AS ServerID, ISNULL(SRV.ServerName, '''') AS ServerName, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs index d4a4c5d8..1fbca5da 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Servers/DomainInfo.cs @@ -150,5 +150,6 @@ namespace WebsitePanel.EnterpriseServer public DateTime? CreationDate { get; set; } public DateTime? ExpirationDate { get; set; } + public DateTime? LastUpdateDate { get; set; } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 803bc8ef..5edbdd3d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -4787,6 +4787,11 @@ namespace WebsitePanel.EnterpriseServer UpdateDomainDate(domainId, "UpdateDomainExpirationDate", date); } + public static void UpdateDomainLastUpdateDate(int domainId, DateTime date) + { + UpdateDomainDate(domainId, "UpdateDomainLastUpdateDate", date); + } + private static void UpdateDomainDate(int domainId, string stroredProcedure, DateTime date) { SqlHelper.ExecuteReader( diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs index 088d9aa7..986118e4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainExpirationTask.cs @@ -53,9 +53,11 @@ namespace WebsitePanel.EnterpriseServer { var domains = ServerController.GetDomains(package.PackageId); - domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains + var subDomains = domains.Where(x => x.IsSubDomain).ToList(); - domains = domains.Where(x => x.CreationDate == null || x.ExpirationDate == null ? true : CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).ToList(); // selecting expired or with empty expire date domains + var topLevelDomains = domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains + + domains = topLevelDomains.Where(x => x.CreationDate == null || x.ExpirationDate == null ? true : CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).ToList(); // selecting expired or with empty expire date domains var domainUser = UserController.GetUser(package.UserId); @@ -80,6 +82,16 @@ namespace WebsitePanel.EnterpriseServer expiredDomains.Add(domain); } } + + foreach (var subDomain in subDomains) + { + var mainDomain = topLevelDomains.Where(x => subDomain.DomainName.Contains(x.DomainName)).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ; + + if (mainDomain != null) + { + ServerController.UpdateDomainRegistrationData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate); + } + } } expiredDomains = expiredDomains.GroupBy(p => p.DomainId).Select(g => g.First()).ToList(); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs index 059ba096..ecb354b9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs @@ -2664,6 +2664,8 @@ namespace WebsitePanel.EnterpriseServer { try { + DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now); + var whoisResult = WhoisClient.Query(domain.DomainName); var createdDate = GetDomainInfoDate(whoisResult.Raw, _createdDatePatterns); @@ -2689,6 +2691,17 @@ namespace WebsitePanel.EnterpriseServer return domain; } + public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain, DateTime? creationDate, DateTime? expirationDate) + { + domain.CreationDate = creationDate; + DataProvider.UpdateDomainCreationDate(domain.DomainId, creationDate.Value); + domain.ExpirationDate = expirationDate; + DataProvider.UpdateDomainExpirationDate(domain.DomainId, expirationDate.Value); + DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now); + + return domain; + } + private static DateTime? GetDomainInfoDate(string raw, IEnumerable patterns) { foreach (var createdRegex in patterns) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx index 66e3563a..3116414f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/Domains.ascx.resx @@ -207,4 +207,10 @@ Expiration Date + + Not Checked + + + Non-Existent + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx index 7d3d6a3f..e7b86704 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx @@ -40,7 +40,7 @@ - <%# GetDomainExpirationDate(Eval("ExpirationDate"))%> + <%# GetDomainExpirationDate(Eval("ExpirationDate"), Eval("LastUpdateDate"))%> diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs index acbf7863..77ccd425 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Domains.ascx.cs @@ -100,16 +100,27 @@ namespace WebsitePanel.Portal return GetLocalizedString("DomainType.Domain"); } - public string GetDomainExpirationDate(object expirationDateObject) + public string GetDomainExpirationDate(object expirationDateObject, object LastUpdateDateObject) { var expirationDate = expirationDateObject as DateTime?; + var lastUpdateDate = LastUpdateDateObject as DateTime?; - if (expirationDate == null) - return GetLocalizedString("DomainExpirationDate.Unknown"); - else if (expirationDate < DateTime.Now) + if (expirationDate != null && expirationDate < DateTime.Now) + { return GetLocalizedString("DomainExpirationDate.Expired"); - else + } + else if(expirationDate != null) + { return expirationDate.Value.ToShortDateString(); + } + else if (lastUpdateDate == null) + { + return GetLocalizedString("DomainExpirationDate.NotChecked"); + } + else + { + return GetLocalizedString("DomainExpirationDate.NotExist"); + } } protected void odsDomainsPaged_Selected(object sender, ObjectDataSourceStatusEventArgs e)