Exemple #1
0
        public void UpdateTrackingDomains(IEnumerable<string> hostNames, IOenRepository repository)
        {

            if (!domaingroup_id.HasValue)
            {
                throw new Exception("No Domain Group assigned");
            }

            var trackingDomains = (from td in repository.Retrieve<TrackingDomain>().Where(t => t.DeliveryGroupId == deliveryGroup_id)
                                   join d in repository.GetDomains() on td.DomainId equals d.domain_id
                                   select new
                                   {
                                       TrackingDomain = td,
                                       Domain = d
                                   }).ToList();

            trackingDomains.ForEach(t =>
            {
                t.TrackingDomain.Enabled = hostNames.Any(vt => vt.ToLower() == t.Domain.host.ToLower());
            });

            var existingHostNames = trackingDomains.Where(t => t.Domain != null).Select(t => t.Domain.host.ToLower()).Distinct();
            var trackingDomainsToInsert = hostNames.Where(t => !existingHostNames.Contains(t.ToLower())).ToList();

            // Once for validation so none are created unless all are valid
            trackingDomainsToInsert.ForEach(t =>
            {
                var domain = repository.GetDomains().FirstOrDefault(d => d.host == t && d.domainGroup_id != domaingroup_id);

                if (domain != null)
                {
                    throw new Exception("Tracking Domain in use by a different group");
                }
            });

            trackingDomainsToInsert.ForEach(t =>
            {
                var domain = repository.GetDomains().FirstOrDefault(d => d.host == t);

                if (domain == null)
                {
                    domain = repository.AddDomain(new Domain { host = t, domainGroup_id = domaingroup_id, enabled = true });
                    repository.SaveChanges();
                }

                repository.AddTrackingDomain(new TrackingDomain()
                {
                    Enabled = true,
                    DeliveryGroupId = deliveryGroup_id,
                    DomainId = domain.domain_id
                });

            });

        }