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()
{