diff --git a/src/Umbraco.Core/Models/IDomain.cs b/src/Umbraco.Core/Models/IDomain.cs index d7cea0f6a1..b9f6bc65ec 100644 --- a/src/Umbraco.Core/Models/IDomain.cs +++ b/src/Umbraco.Core/Models/IDomain.cs @@ -8,5 +8,10 @@ namespace Umbraco.Core.Models string DomainName { get; set; } int? RootContentId { get; set; } bool IsWildcard { get; } + + /// + /// Readonly value of the language ISO code for the domain + /// + string LanguageIsoCode { get; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/DomainDto.cs b/src/Umbraco.Core/Models/Rdbms/DomainDto.cs index bd0bbc859c..e43c1bdeae 100644 --- a/src/Umbraco.Core/Models/Rdbms/DomainDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DomainDto.cs @@ -23,5 +23,11 @@ namespace Umbraco.Core.Models.Rdbms [Column("domainName")] public string DomainName { get; set; } + + /// + /// Used for a result on the query to get the associated language for a domain if there is one + /// + [ResultColumn("languageISOCode")] + public string IsoCode { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/UmbracoDomain.cs b/src/Umbraco.Core/Models/UmbracoDomain.cs index 3252df0365..943f96c9f9 100644 --- a/src/Umbraco.Core/Models/UmbracoDomain.cs +++ b/src/Umbraco.Core/Models/UmbracoDomain.cs @@ -14,6 +14,12 @@ namespace Umbraco.Core.Models _domainName = domainName; } + public UmbracoDomain(string domainName, string languageIsoCode) + : this(domainName) + { + LanguageIsoCode = languageIsoCode; + } + private int? _contentId; private int? _languageId; private string _domainName; @@ -70,9 +76,9 @@ namespace Umbraco.Core.Models get { return string.IsNullOrWhiteSpace(DomainName) || DomainName.StartsWith("*"); } } - public string IsoCode - { - get { throw new NotImplementedException(); } - } + /// + /// Readonly value of the language ISO code for the domain + /// + public string LanguageIsoCode { get; internal set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs index a7451a77d5..21ba8b4baf 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs @@ -14,6 +14,8 @@ using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Persistence.Repositories { + //TODO: We need to get a readonly ISO code for the domain assigned + internal class DomainRepository : PetaPocoRepositoryBase, IDomainRepository { private readonly RepositoryCacheOptions _cacheOptions; @@ -62,7 +64,18 @@ namespace Umbraco.Core.Persistence.Repositories protected override Sql GetBaseQuery(bool isCount) { var sql = new Sql(); - sql.Select(isCount ? "COUNT(*)" : "*").From(SqlSyntax); + if (isCount) + { + sql.Select("COUNT(*)").From(SqlSyntax); + } + else + { + sql.Select("umbracoDomains.*, umbracoLanguage.languageISOCode") + .From(SqlSyntax) + .LeftJoin(SqlSyntax) + .On(SqlSyntax, dto => dto.DefaultLanguage, dto => dto.Id); + } + return sql; } @@ -110,6 +123,12 @@ namespace Umbraco.Core.Persistence.Repositories var id = Convert.ToInt32(Database.Insert(dto)); entity.Id = id; + //if the language changed, we need to resolve the ISO code! + if (entity.LanguageId.HasValue) + { + ((UmbracoDomain)entity).LanguageIsoCode = Database.ExecuteScalar("SELECT languageISOCode FROM umbracoLanguage WHERE id=@langId", new { langId = entity.LanguageId }); + } + entity.ResetDirtyProperties(); } @@ -139,6 +158,12 @@ namespace Umbraco.Core.Persistence.Repositories Database.Update(dto); + //if the language changed, we need to resolve the ISO code! + if (entity.WasPropertyDirty("LanguageId")) + { + ((UmbracoDomain)entity).LanguageIsoCode = Database.ExecuteScalar("SELECT languageISOCode FROM umbracoLanguage WHERE id=@langId", new {langId = entity.LanguageId}); + } + entity.ResetDirtyProperties(); } @@ -176,7 +201,12 @@ namespace Umbraco.Core.Persistence.Repositories public IDomain BuildEntity(DomainDto dto) { - var domain = new UmbracoDomain(dto.DomainName) { Id = dto.Id, LanguageId = dto.DefaultLanguage, RootContentId = dto.RootStructureId }; + var domain = new UmbracoDomain(dto.DomainName, dto.IsoCode) + { + Id = dto.Id, + LanguageId = dto.DefaultLanguage, + RootContentId = dto.RootStructureId + }; //on initial construction we don't want to have dirty properties tracked // http://issues.umbraco.org/issue/U4-1946 domain.ResetDirtyProperties(false); diff --git a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs index d53959f37c..782eeaf4e9 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs @@ -85,9 +85,41 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual("test.com", domain.DomainName); Assert.AreEqual(content.Id, domain.RootContentId); Assert.AreEqual(lang.Id, domain.LanguageId); + Assert.AreEqual(lang.IsoCode, domain.LanguageIsoCode); } + } + [Test] + public void Can_Create_And_Get_By_Id_Empty_lang() + { + var provider = new PetaPocoUnitOfWorkProvider(Logger); + var unitOfWork = provider.GetUnitOfWork(); + ContentType ct; + var contentId = CreateTestData("en-AU", out ct); + + ContentRepository contentRepo; + LanguageRepository langRepo; + ContentTypeRepository contentTypeRepo; + + using (var repo = CreateRepository(unitOfWork, out contentTypeRepo, out contentRepo, out langRepo)) + { + var content = contentRepo.Get(contentId); + + var domain = (IDomain)new UmbracoDomain("test.com") { RootContentId = content.Id }; + repo.AddOrUpdate(domain); + unitOfWork.Commit(); + + //re-get + domain = repo.Get(domain.Id); + + Assert.NotNull(domain); + Assert.IsTrue(domain.HasIdentity); + Assert.Greater(domain.Id, 0); + Assert.AreEqual("test.com", domain.DomainName); + Assert.AreEqual(content.Id, domain.RootContentId); + Assert.IsFalse(domain.LanguageId.HasValue); + } } [Test] @@ -203,11 +235,13 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual("blah.com", domain.DomainName); Assert.AreEqual(content2.Id, domain.RootContentId); Assert.AreEqual(lang2.Id, domain.LanguageId); + Assert.AreEqual(lang2.IsoCode, domain.LanguageIsoCode); } } + [Test] public void Exists() {