diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql
index 065e83ae..0b4c21ad 100644
--- a/WebsitePanel/Database/update_db.sql
+++ b/WebsitePanel/Database/update_db.sql
@@ -6393,7 +6393,8 @@ Please, find below details of MX and NS changes.
DNS |
Type |
Status |
- Value |
+ Old Value |
+ New Value |
@@ -6402,7 +6403,8 @@ Please, find below details of MX and NS changes.
#DnsChange.DnsServer# |
#DnsChange.Type# |
#DnsChange.Status# |
- #DnsChange.Record.Value# |
+ #DnsChange.OldRecord.Value# |
+ #DnsChange.NewRecord.Value# |
@@ -6449,8 +6451,9 @@ Please, find below MX and NS Changes Information.
DNS: #DnsChange.DnsServer#
Type: #DnsChange.Type#
- Status: #DnsChange.Status#
- Value: #DnsChange.Record.Value#
+ Status: #DnsChange.Status#
+ Old Value: #DnsChange.OldRecord.Value#
+ New Value: #DnsChange.NewRecord.Value#
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
index b5a7c8ee..150c9c25 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs
@@ -99,6 +99,8 @@ namespace WebsitePanel.EnterpriseServer
domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.MX), dnsMxRecords, dnsServer));
domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.NS), dnsNsRecords, dnsServer));
+
+ domainChanges.DnsChanges = CombineDnsRecordChanges(domainChanges.DnsChanges, dnsServer).ToList();
}
domainsChanges.Add(domainChanges);
@@ -150,13 +152,13 @@ namespace WebsitePanel.EnterpriseServer
if (dnsRecord != null)
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.NotChanged, DnsServer = dnsServer });
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = record, NewRecord = dnsRecord, Type = record.RecordType, Status = DomainDnsRecordStatuses.NotChanged, DnsServer = dnsServer });
dnsRecords.Remove(dnsRecord);
}
else
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed, DnsServer = dnsServer });
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = record, NewRecord = new DnsRecordInfo { Value = string.Empty}, Type = record.RecordType, Status = DomainDnsRecordStatuses.Removed, DnsServer = dnsServer });
RemoveRecord(record);
}
@@ -164,7 +166,7 @@ namespace WebsitePanel.EnterpriseServer
foreach (var record in dnsRecords)
{
- dnsRecordChanges.Add(new DnsRecordInfoChange { Record = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added, DnsServer= dnsServer});
+ dnsRecordChanges.Add(new DnsRecordInfoChange { OldRecord = new DnsRecordInfo { Value = string.Empty }, NewRecord = record, Type = record.RecordType, Status = DomainDnsRecordStatuses.Added, DnsServer = dnsServer });
AddRecord(record);
}
@@ -172,6 +174,39 @@ namespace WebsitePanel.EnterpriseServer
return dnsRecordChanges;
}
+ private IEnumerable CombineDnsRecordChanges(IEnumerable records, string dnsServer)
+ {
+ var resultRecords = records.Where(x => x.DnsServer == dnsServer).ToList();
+
+ var recordsToRemove = new List();
+
+ var removedRecords = records.Where(x => x.Status == DomainDnsRecordStatuses.Removed);
+ var addedRecords = records.Where(x => x.Status == DomainDnsRecordStatuses.Added);
+
+ foreach (DnsRecordType type in (DnsRecordType[])Enum.GetValues(typeof(DnsRecordType)))
+ {
+ foreach (var removedRecord in removedRecords.Where(x => x.Type == type))
+ {
+ var addedRecord = addedRecords.FirstOrDefault(x => x.Type == type && !recordsToRemove.Contains(x));
+
+ if (addedRecord != null)
+ {
+ recordsToRemove.Add(addedRecord);
+
+ removedRecord.NewRecord = addedRecord.NewRecord;
+ removedRecord.Status = DomainDnsRecordStatuses.Updated;
+ }
+ }
+ }
+
+ foreach (var record in recordsToRemove)
+ {
+ resultRecords.Remove(record);
+ }
+
+ return resultRecords;
+ }
+
private void FillRecordData(IEnumerable records, DomainInfo domain, string dnsServer)
{
foreach (var record in records)
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
index 183c16e0..a5c0306b 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DnsRecordInfoChange.cs
@@ -9,7 +9,8 @@ namespace WebsitePanel.Providers.DomainLookup
public class DnsRecordInfoChange
{
public string DnsServer { get; set; }
- public DnsRecordInfo Record { get; set; }
+ public DnsRecordInfo OldRecord { get; set; }
+ public DnsRecordInfo NewRecord { get; set; }
public DomainDnsRecordStatuses Status { get; set; }
public DnsRecordType Type { get; set; }
}
diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
index 88fa25ed..33bddf37 100644
--- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
+++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/DomainLookup/DomainDnsRecordStatuses.cs
@@ -9,6 +9,7 @@ namespace WebsitePanel.Providers.DomainLookup
{
NotChanged,
Removed,
- Added
+ Added,
+ Updated
}
}