private void UpdateRegions( PageTemplateFile fileTemplate, PageTemplateFileInfo fileTemplateDetails, PageTemplate dbPageTemplate, IExecutionContext executionContext ) { // De-dup region names var duplicateRegionName = fileTemplateDetails .Regions .GroupBy(s => s.Name.ToLowerInvariant()) .FirstOrDefault(g => g.Count() > 1); if (duplicateRegionName != null) { throw new PageTemplateRegistrationException($"Dulpicate template region '{ duplicateRegionName.First().Name }' in template { fileTemplate.VirtualPath }"); } // Deletions var regionsToDelete = dbPageTemplate .PageTemplateRegions .Where(ts => !fileTemplateDetails.Regions.Any(fs => ts.Name.Equals(fs.Name, StringComparison.OrdinalIgnoreCase))) .ToList(); foreach (var regionToDelete in regionsToDelete) { _dbContext.PageTemplateRegions.Remove(regionToDelete); } // Updates/Additions foreach (var fileRegion in fileTemplateDetails.Regions) { var existing = dbPageTemplate .PageTemplateRegions .FirstOrDefault(s => s.Name.Equals(fileRegion.Name, StringComparison.OrdinalIgnoreCase)); if (existing == null) { existing = new PageTemplateRegion(); existing.PageTemplate = dbPageTemplate; existing.CreateDate = executionContext.ExecutionDate; _dbContext.PageTemplateRegions.Add(existing); } // casing might have changed if (existing.Name != fileRegion.Name) { existing.Name = fileRegion.Name; existing.UpdateDate = executionContext.ExecutionDate; } // this will detach region data but there's no migrating that... if (existing.IsCustomEntityRegion != fileRegion.IsCustomEntityRegion) { existing.IsCustomEntityRegion = fileRegion.IsCustomEntityRegion; existing.UpdateDate = executionContext.ExecutionDate; } } }
protected PageTemplateRegionDetails MapRegion(PageTemplateRegion dbRegion) { return(new PageTemplateRegionDetails() { CreateDate = dbRegion.CreateDate, IsCustomEntityRegion = dbRegion.IsCustomEntityRegion, Name = dbRegion.Name, PageTemplateId = dbRegion.PageTemplateId, PageTemplateRegionId = dbRegion.PageTemplateRegionId, UpdateDate = dbRegion.UpdateDate }); }
private PageTemplateRegionDetails MapRegion(PageTemplateRegion dbRegion) { return(new PageTemplateRegionDetails() { CreateDate = DbDateTimeMapper.AsUtc(dbRegion.CreateDate), IsCustomEntityRegion = dbRegion.IsCustomEntityRegion, Name = dbRegion.Name, PageTemplateId = dbRegion.PageTemplateId, PageTemplateRegionId = dbRegion.PageTemplateRegionId, UpdateDate = DbDateTimeMapper.AsUtc(dbRegion.UpdateDate) }); }
private async Task ValidateTemplateUsedByPage(AddCustomEntityVersionPageBlockCommand command, PageTemplateRegion templateRegion) { var isRegionInTemplate = await _dbContext .PageVersions .FilterActive() .FilterByPageId(command.PageId) .AnyAsync(p => p.PageTemplateId == templateRegion.PageTemplateId); if (!isRegionInTemplate) { throw new Exception($"Error adding custom entity page block. The page template region {command.PageTemplateRegionId} does not belong to a template referenced by the page {command.PageId}"); } }