diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 3899933d61..0000000000 --- a/.hgignore +++ /dev/null @@ -1,81 +0,0 @@ -syntax: regexp -^src/packages/(?!repositories.config$) -web.Template.[a-zA-Z0-9]*.Debug.config - -syntax: glob -*.obj -*.pdb -*.user -*.aps -*.pch -*.vspscc -[Bb]in -[Db]ebug*/ -obj/ -[Rr]elease*/ -_ReSharper*/ -_NCrunch_*/ -*.ncrunchsolution -*.ncrunchsolution.user -*.ncrunchproject -*.crunchsolution.cache -[Tt]est[Rr]esult* -[Bb]uild[Ll]og.* -*.[Pp]ublish.xml -*.suo -[sS]ource -[sS]andbox -umbraco.config -*.vs10x -App_Data\TEMP\* -umbraco\presentation\umbraco\plugins\* -umbraco\presentation\usercontrols\* -umbraco\presentation\scripts\* -umbraco\presentation\fonts\* -umbraco\presentation\css\* - -src\Umbraco.Web.UI\[Cc]ss\* -src\Umbraco.Web.UI\App_Code\* -src\Umbraco.Web.UI\App_Data\* -src\Umbraco.Tests\App_Data\* -src\Umbraco.Web.UI\[Mm]edia\* -src\Umbraco.Web.UI\[Mm]aster[Pp]ages\* -src\Umbraco.Web.UI\[Mm]acro[Ss]cripts\* -src\Umbraco.Web.UI\[Xx]slt\* -src\Umbraco.Web.UI\[Ii]mages\* -src\Umbraco.Web.UI\[Ss]cripts\* -src\Umbraco.Web.UI\Web.*.config.transformed - -umbraco\presentation\umbraco\plugins\uComponents\uComponentsInstaller.ascx -umbraco\presentation\packages\uComponents\MultiNodePicker\CustomTreeService.asmx -_BuildOutput/* -*.ncrunchsolution -build/UmbracoCms.AllBinaries*zip -build/UmbracoCms.WebPI*zip -build/UmbracoCms*zip -build/*.nupkg -src/Umbraco.Tests/config/applications.config -src/Umbraco.Tests/config/trees.config -src/Umbraco.Web.UI/web.config -*.orig -src/Umbraco.Tests/config/404handlers.config -src/Umbraco.Web.UI/Views/*.cshtml -src/Umbraco.Web.UI/Views/*.vbhtml -src/Umbraco.Tests/config/umbracoSettings.config -src/Umbraco.Web.UI/App_Plugins/* -src/Umbraco.Web.UI/Views/* -src/packages/ - -src\Umbraco.Web.UI\[W]eb.config -*.transformed - -node_modules -src/Umbraco.Web.UI/umbraco/lib/* -src/Umbraco.Web.UI/umbraco/js/umbraco.* -src/Umbraco.Web.UI/umbraco/js/routes.js -src/Umbraco.Web.UI/umbraco/js/main.js -src/Umbraco.Web.UI/umbraco/js/app.js -src/Umbraco.Web.UI/umbraco/Views/**/*.js -src/Umbraco.Web.UI/umbraco/Views/**/*.css -src/Umbraco.Web.UI/umbraco/Views/**/*.html -src/Umbraco.Web.UI/umbraco/assets/* diff --git a/.hgtags b/.hgtags deleted file mode 100644 index 5f9469eec6..0000000000 --- a/.hgtags +++ /dev/null @@ -1,38 +0,0 @@ -d0aba247db91d1b70c39c6397b965ca370a67497 Sprint-Juno-A -0b8f67be2ca8faf008151d87f232c698de69e735 Release-4.5.0 -5960c073250926d202861a09472f5f334da6e283 Sprint-Juno-B -f15d4ff81a8368e9d42788f7e0ae726f7a70a3b1 Release-4.0.3 -283065df4d3c27245267709dd2644a479c4f62a5 Release-4.0.4.2 -ffc34b23e1a03785e4098afa4290d8c03cf10115 Release-4.5.2 -d03fcffb8834a9583a56813bb44b6abbd9f042cc Release-4.6.0 -1809f7b2593270c192cd47bdcfdb392100686f79 4.7.2 -488779dec0ceb1d2874bcef906241b919325c904 4.8.0-beta -096f20bb0575d6199f20fcb3147b63554e765a74 Release-4.8.0 -8f8a203857886b373148af29edd57460a42940be Release-4.8.1 -de73e687ddf6086ed52b6554676c1632865d07f2 Release-4.9.0 -8d7d8609e2e4b971da99cd97f72132ce85ce3333 Release-4.9.1 -f6da531fbb4c251ff61d314e2a7effb13c71e74a Release-4.10.0 -20e4dff821d8ac2527a5353618fa1a23ea1d8b34 Release-4.11.0 -7f827760cb49d749616859f528d19dde64807947 Release-4.11.1 -7f827760cb49d749616859f528d19dde64807947 Release-4.11.1 -6eb5f2fb5a88aa29ea544499df9160a1b31b5638 Release-4.11.1 -73711b806a4044dbf0d7d7c095ddfdda23b09932 4.11.2 -73711b806a4044dbf0d7d7c095ddfdda23b09932 4.11.2 -0000000000000000000000000000000000000000 4.11.2 -73711b806a4044dbf0d7d7c095ddfdda23b09932 Release-4.11.2 -77db220b89e166b3c0736ed321ecfd6416cddbcd Release-4.11.2.1 -54cde33b809dcb3a1f7e7ae0d5375f6dd0d89c8d Release-4.11.2.2 -ff3bb24ea0c915878396a6ae27f1ff164e8ac150 Release-6.0.0-beta -56015ac26f5ab60e3c61b1d09075297b660afa07 Release-6.0.0-RC -1719fbd857f28b376639ac2aa0abada0ef2e7560 Release-6.0.0 -e02f5aebb87e3f07d27376647756caa9762931d8 Release-4.11.4 -14338b0ab1738fbd8987677ecdb9a73d79fc229d release-4.11.6 -ce47176bc6b9298741783e20f1fe2672c811f744 release-4.11.7 -b247b35d821144849f551e02da8ba719f91d5fb0 Release-6.0.2 -aed55cba29009ad3db48880a7cfb66407ce9805f release-6.0.3 -87cf618a39e38ec58df916d10e6a924de62ae37d release-6.1.0-beta -0dee9964687ea51ea797984cf7cce3655d6a6558 release-6.0.4 -7670bb47a671a9ecc15118589d8048907ea76241 release-6.1.0-beta2 -953c466faf8fcfd6e85e06ccd04c2346bbdb88a8 release-6.0.6 -8309c3bd6db5885c9ef37e71db0672b8947fcb59 release-6.1.0 -7271ae03cb53f44d3fac909e6b254036f7f1ebc9 release-6.1.1 diff --git a/build/Build.bat b/build/Build.bat index 39cfe80ddf..36396bcc1f 100644 --- a/build/Build.bat +++ b/build/Build.bat @@ -5,6 +5,8 @@ SET version=%release% IF [%comment%] EQU [] (SET version=%release%) ELSE (SET version=%release%-%comment%) +ReplaceIISExpressPortNumber.exe ..\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj %release% + %windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "Build.proj" /p:BUILD_RELEASE=%release% /p:BUILD_COMMENT=%comment% echo This file is only here so that the containing folder will be included in the NuGet package, it is safe to delete. > .\_BuildOutput\WebApp\App_Code\dummy.txt diff --git a/build/NuSpecs/UmbracoCms.Core.nuspec b/build/NuSpecs/UmbracoCms.Core.nuspec index dbb59b1d6c..ea5c9f86d0 100644 --- a/build/NuSpecs/UmbracoCms.Core.nuspec +++ b/build/NuSpecs/UmbracoCms.Core.nuspec @@ -15,7 +15,7 @@ en-US umbraco - + diff --git a/build/ReplaceIISExpressPortNumber.exe b/build/ReplaceIISExpressPortNumber.exe new file mode 100644 index 0000000000..04334ebffe Binary files /dev/null and b/build/ReplaceIISExpressPortNumber.exe differ diff --git a/src/Umbraco.Core/Models/ContentTypeBase.cs b/src/Umbraco.Core/Models/ContentTypeBase.cs index d2fd56f0b6..aba4ef66a9 100644 --- a/src/Umbraco.Core/Models/ContentTypeBase.cs +++ b/src/Umbraco.Core/Models/ContentTypeBase.cs @@ -477,6 +477,15 @@ namespace Umbraco.Core.Models } } + /// + /// Removes a PropertyGroup from the current ContentType + /// + /// Name of the to remove + public void RemovePropertyGroup(string propertyGroupName) + { + PropertyGroups.RemoveItem(propertyGroupName); + } + /// /// Sets the ParentId from the lazy integer id /// diff --git a/src/Umbraco.Core/Models/IContentTypeBase.cs b/src/Umbraco.Core/Models/IContentTypeBase.cs index b0a671eff8..89fca20b8e 100644 --- a/src/Umbraco.Core/Models/IContentTypeBase.cs +++ b/src/Umbraco.Core/Models/IContentTypeBase.cs @@ -64,6 +64,12 @@ namespace Umbraco.Core.Models /// Alias of the to remove void RemovePropertyType(string propertyTypeAlias); + /// + /// Removes a PropertyGroup from the current ContentType + /// + /// Name of the to remove + void RemovePropertyGroup(string propertyGroupName); + /// /// Sets the ParentId from the lazy integer id /// diff --git a/src/Umbraco.Core/Models/PropertyGroupCollection.cs b/src/Umbraco.Core/Models/PropertyGroupCollection.cs index ee73c3c7ea..facb5b9e5c 100644 --- a/src/Umbraco.Core/Models/PropertyGroupCollection.cs +++ b/src/Umbraco.Core/Models/PropertyGroupCollection.cs @@ -97,6 +97,14 @@ namespace Umbraco.Core.Models return this.Any(x => x.Name == groupName); } + public void RemoveItem(string propertyGroupName) + { + var key = IndexOfKey(propertyGroupName); + //Only removes an item if the key was found + if (key != -1) + RemoveItem(key); + } + public int IndexOfKey(string key) { for (var i = 0; i < this.Count; i++) diff --git a/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs b/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs index 62fb7cc18e..de2c109af4 100644 --- a/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs +++ b/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System.IO; +using System.Linq; using System.Text.RegularExpressions; using NUnit.Framework; using Umbraco.Core.Models; @@ -57,11 +58,35 @@ namespace Umbraco.Tests.CodeFirst #region Test setup public override void Initialize() { + var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); + + var configPath = Path.Combine(currDir.Parent.Parent.FullName, "config"); + if (Directory.Exists(configPath) == false) + Directory.CreateDirectory(configPath); + + var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + if (System.IO.File.Exists(umbracoSettingsFile) == false) + System.IO.File.Copy( + currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") + .First() + .GetDirectories("config").First() + .GetFiles("umbracoSettings.Release.config").First().FullName, + Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), + true); + + Core.Configuration.UmbracoSettings.SettingsFilePath = Core.IO.IOHelper.MapPath(Core.IO.SystemDirectories.Config + Path.DirectorySeparatorChar, false); + base.Initialize(); } public override void TearDown() { + var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); + + var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + if (System.IO.File.Exists(umbracoSettingsFile)) + System.IO.File.Delete(umbracoSettingsFile); + base.TearDown(); } diff --git a/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs b/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs index 20a3ac0c86..ba88bf447b 100644 --- a/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs +++ b/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using NUnit.Framework; @@ -17,8 +18,32 @@ namespace Umbraco.Tests.CoreStrings public void Setup() { _helper = new LegacyShortStringHelper(); + var currDir = new DirectoryInfo(TestHelpers.TestHelper.CurrentAssemblyDirectory); + Directory.CreateDirectory(Path.Combine(currDir.Parent.Parent.FullName, "config")); + File.Copy( + currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") + .First() + .GetDirectories("config").First() + .GetFiles("umbracoSettings.Release.config").First().FullName, + Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), + true); + + Core.Configuration.UmbracoSettings.SettingsFilePath = Core.IO.IOHelper.MapPath(Core.IO.SystemDirectories.Config + Path.DirectorySeparatorChar, false); } + [TearDown] + public void TearDown() + { + //TODO: Deleting the umbracoSettings.config file makes a lot of tests fail + + //var currDir = new DirectoryInfo(TestHelpers.TestHelper.CurrentAssemblyDirectory); + + //var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + //if (File.Exists(umbracoSettingsFile)) + // File.Delete(umbracoSettingsFile); + } + + #region Cases [TestCase("foo", "foo")] [TestCase(" foo ", "Foo")] diff --git a/src/Umbraco.Tests/LibraryTests.cs b/src/Umbraco.Tests/LibraryTests.cs index 77fe2afe96..fa365e8b0b 100644 --- a/src/Umbraco.Tests/LibraryTests.cs +++ b/src/Umbraco.Tests/LibraryTests.cs @@ -27,19 +27,34 @@ namespace Umbraco.Tests UmbracoContext.Current = routingContext.UmbracoContext; var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); - File.Copy( - currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") - .First() - .GetDirectories("config").First() - .GetFiles("umbracoSettings.Release.config").First().FullName, - Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), - true); + + var configPath = Path.Combine(currDir.Parent.Parent.FullName, "config"); + if (Directory.Exists(configPath) == false) + Directory.CreateDirectory(configPath); + + var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + if (File.Exists(umbracoSettingsFile) == false) + File.Copy( + currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") + .First() + .GetDirectories("config").First() + .GetFiles("umbracoSettings.Release.config").First().FullName, + Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), + true); Core.Configuration.UmbracoSettings.SettingsFilePath = Core.IO.IOHelper.MapPath(Core.IO.SystemDirectories.Config + Path.DirectorySeparatorChar, false); } public override void TearDown() { + //TODO: Deleting the umbracoSettings.config file makes a lot of tests fail + + //var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); + + //var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + //if (File.Exists(umbracoSettingsFile)) + // File.Delete(umbracoSettingsFile); + base.TearDown(); UmbracoContext.Current = null; } diff --git a/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs b/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs index 78a28145da..d1abe13d54 100644 --- a/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs +++ b/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs @@ -4,6 +4,7 @@ using System.Xml; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Configuration; +using Umbraco.Tests.PublishedContent; using Umbraco.Tests.TestHelpers; using Umbraco.Web; using Umbraco.Web.PublishedCache; @@ -77,6 +78,7 @@ namespace Umbraco.Tests.PublishedCache //ensure the StateHelper is using our custom context StateHelper.HttpContext = _httpContextFactory.HttpContext; + UmbracoSettings.UseLegacyXmlSchema = false; var cache = new PublishedContentCache { GetXmlDelegate = (context, preview) => diff --git a/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs b/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs index 011ed05d0a..a8db72ad5e 100644 --- a/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs +++ b/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs @@ -30,13 +30,20 @@ namespace Umbraco.Tests.PublishedContent base.Initialize(); //copy the umbraco settings file over var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); - File.Copy( - currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") - .First() - .GetDirectories("config").First() - .GetFiles("umbracoSettings.Release.config").First().FullName, - Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), - true); + + var configPath = Path.Combine(currDir.Parent.Parent.FullName, "config"); + if (Directory.Exists(configPath) == false) + Directory.CreateDirectory(configPath); + + var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + if (File.Exists(umbracoSettingsFile) == false) + File.Copy( + currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") + .First() + .GetDirectories("config").First() + .GetFiles("umbracoSettings.Release.config").First().FullName, + Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), + true); UmbracoSettings.SettingsFilePath = IOHelper.MapPath(SystemDirectories.Config + Path.DirectorySeparatorChar, false); @@ -76,6 +83,14 @@ namespace Umbraco.Tests.PublishedContent public override void TearDown() { + //TODO: Deleting the umbracoSettings.config file makes a lot of tests fail + + //var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); + + //var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + //if (File.Exists(umbracoSettingsFile)) + // File.Delete(umbracoSettingsFile); + base.TearDown(); } diff --git a/src/Umbraco.Tests/PublishedContent/DynamicPublishedContentTests.cs b/src/Umbraco.Tests/PublishedContent/DynamicPublishedContentTests.cs index fdf097472d..0bf8784ab0 100644 --- a/src/Umbraco.Tests/PublishedContent/DynamicPublishedContentTests.cs +++ b/src/Umbraco.Tests/PublishedContent/DynamicPublishedContentTests.cs @@ -1,3 +1,4 @@ +using System.IO; using System.Linq; using NUnit.Framework; using Umbraco.Core; @@ -6,6 +7,7 @@ using Umbraco.Web; using Umbraco.Web.Models; using Umbraco.Web.PublishedCache; using Umbraco.Web.PublishedCache.XmlPublishedCache; +using File = Umbraco.Core.Models.File; namespace Umbraco.Tests.PublishedContent { @@ -13,9 +15,26 @@ namespace Umbraco.Tests.PublishedContent public class DynamicPublishedContentTests : DynamicDocumentTestsBase { public override void Initialize() - { - base.Initialize(); + { + var currDir = new DirectoryInfo(TestHelpers.TestHelper.CurrentAssemblyDirectory); + var configPath = Path.Combine(currDir.Parent.Parent.FullName, "config"); + if (Directory.Exists(configPath) == false) + Directory.CreateDirectory(configPath); + + var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + if (System.IO.File.Exists(umbracoSettingsFile) == false) + System.IO.File.Copy( + currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") + .First() + .GetDirectories("config").First() + .GetFiles("umbracoSettings.Release.config").First().FullName, + Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), + true); + + Core.Configuration.UmbracoSettings.SettingsFilePath = Core.IO.IOHelper.MapPath(Core.IO.SystemDirectories.Config + Path.DirectorySeparatorChar, false); + + base.Initialize(); } public override void TearDown() diff --git a/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs b/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs index a64de740af..8d58c386b2 100644 --- a/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs +++ b/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs @@ -18,17 +18,36 @@ namespace Umbraco.Tests.Routing base.Initialize(); var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); - File.Copy( - currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") - .First() - .GetDirectories("config").First() - .GetFiles("umbracoSettings.Release.config").First().FullName, - Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), - true); + + var configPath = Path.Combine(currDir.Parent.Parent.FullName, "config"); + if (Directory.Exists(configPath) == false) + Directory.CreateDirectory(configPath); + + var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + if (File.Exists(umbracoSettingsFile) == false) + File.Copy( + currDir.Parent.Parent.Parent.GetDirectories("Umbraco.Web.UI") + .First() + .GetDirectories("config").First() + .GetFiles("umbracoSettings.Release.config").First().FullName, + Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"), + true); SettingsForTests.SettingsFilePath = Core.IO.IOHelper.MapPath(Core.IO.SystemDirectories.Config + Path.DirectorySeparatorChar, false); } + + public void TearDown() + { + //TODO: Deleting the umbracoSettings.config file makes a lot of tests fail + + //var currDir = new DirectoryInfo(TestHelper.CurrentAssemblyDirectory); + + //var umbracoSettingsFile = Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"); + //if (File.Exists(umbracoSettingsFile)) + // File.Delete(umbracoSettingsFile); + } + protected override void FreezeResolution() { SiteDomainHelperResolver.Current = new SiteDomainHelperResolver(new SiteDomainHelper()); diff --git a/src/Umbraco.Tests/TypeFinderTests.cs b/src/Umbraco.Tests/TypeFinderTests.cs index c77620c11e..df3797b4a4 100644 --- a/src/Umbraco.Tests/TypeFinderTests.cs +++ b/src/Umbraco.Tests/TypeFinderTests.cs @@ -447,7 +447,9 @@ namespace Umbraco.Tests "HtmlAgilityPack.", "TidyNet.", "ICSharpCode.", - "CookComputing." + "CookComputing.", + /* Mono */ + "MonoDevelop.NUnit" }; public static IEnumerable FindClassesOfTypeWithAttribute() diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 247949eed0..6ec0aa4b4f 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -2582,9 +2582,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.0\x86\*.* "$(TargetDir)x86\" True True - 61637 + 6120 / - http://localhost:61638 + http://localhost:6120/ False False diff --git a/src/Umbraco.Web.UI/install/steps/defaultUser.ascx b/src/Umbraco.Web.UI/install/steps/defaultUser.ascx index a81a64fc13..e9db821e9c 100644 --- a/src/Umbraco.Web.UI/install/steps/defaultUser.ascx +++ b/src/Umbraco.Web.UI/install/steps/defaultUser.ascx @@ -33,7 +33,7 @@
Email: - +
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml index e3aa533783..d800f72a6b 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml @@ -432,13 +432,13 @@ Dette er en automatisk mail for at fortælle at handlingen '%1%' er blevet udført på siden '%2%' af brugeren '%3%' -Gå til http://%4%/umbraco/default.aspx?section=content&id=%5% for at redigere. +Gå til http://%4%/default.aspx?section=content&id=%5% for at redigere. Ha' en dejlig dag! Mange hilsner fra umbraco robotten ]]> - Hej %0%

Dette er en automatisk mail for at informere dig om at opgaven '%1%' er blevet udførtpå siden '%2%' af brugeren '%3%'

Opdateringssammendrag:

%6%

Hav en fortsat god dag!

De bedste hilsner fra umbraco robotten

]]>
+ Hej %0%

Dette er en automatisk mail for at informere dig om at opgaven '%1%' er blevet udførtpå siden '%2%' af brugeren '%3%'

Opdateringssammendrag:

%6%

Hav en fortsat god dag!

De bedste hilsner fra umbraco robotten

]]>
[%0%] Notificering om %1% udført på %2% Notificeringer diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml index 707648950f..c721c7e227 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml @@ -463,7 +463,7 @@ Hallo %0%, die Aufgabe '%1%' (von Benutzer '%3%') an der Seite '%2%' wurde ausgeführt. -Zum Bearbeiten verwenden Sie bitte diesen Link: http://%4%/umbraco/actions/editContent.aspx?id=%5% +Zum Bearbeiten verwenden Sie bitte diesen Link: http://%4%/actions/editContent.aspx?id=%5% Einen schönen Tag wünscht Ihr freundlicher Umbraco-Robot @@ -474,9 +474,9 @@ Ihr freundlicher Umbraco-Robot

die Aufgabe '%1%' (von Benutzer '%3%') an der Seite '%2%' wurde ausgeführt.

@@ -487,9 +487,9 @@ Ihr freundlicher Umbraco-Robot

Einen schönen Tag wünscht
Ihr freundlicher Umbraco-Robot

diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index b24a83de35..e895731f4b 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -50,7 +50,7 @@
One-level paths in domains are supported, eg. "example.com/en". However, they - they should be avoided. Better use the culture setting above.]]> + should be avoided. Better use the culture setting above.]]>
Domain '%0%' has been updated Edit Current Domains diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml index 58396680cd..0e646278f8 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml @@ -534,7 +534,7 @@ Pour gerer votre site, accéder simplement au back office et commencez à contri Ceci est un email automatique pour vous informer que la tâche '%1%' a été activée sur la page '%2%' par l'utilisateur '%3%' - Allez à http://%4%/umbraco/actions/editContent.aspx?id=%5% pour éditer. + Allez à http://%4%/actions/editContent.aspx?id=%5% pour éditer. Bonne journée! @@ -550,9 +550,9 @@ Pour gerer votre site, accéder simplement au back office et commencez à contri

@@ -564,9 +564,9 @@ Pour gerer votre site, accéder simplement au back office et commencez à contri

diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml index 729883cf4e..7e8fbd8e3a 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml @@ -452,9 +452,9 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je

@@ -466,9 +466,9 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je

diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/no.xml b/src/Umbraco.Web.UI/umbraco/config/lang/no.xml index 8dcc4dcdb7..ce5d23a286 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/no.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/no.xml @@ -433,7 +433,7 @@ Dette er en automatisk mail for å informere om at handlingen '%1%' er utført på siden '%2%' av brukeren '%3%' -Gå til http://%4%/umbraco/default.aspx?section=content&id=%5% for å redigere. +Gå til http://%4%/default.aspx?section=content&id=%5% for å redigere. Ha en fin dag! @@ -447,9 +447,9 @@ Vennlig hilsen umbraco roboten

@@ -461,9 +461,9 @@ Vennlig hilsen umbraco roboten

diff --git a/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/EditRelationType.aspx b/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/EditRelationType.aspx index ea6de5b968..2b8e9e16b0 100644 --- a/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/EditRelationType.aspx +++ b/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/EditRelationType.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.EditRelationType" MasterPageFile="/umbraco/masterpages/umbracoPage.Master" %> +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.EditRelationType" MasterPageFile="../../masterpages/umbracoPage.Master" %> <%@ Register TagPrefix="umb" Namespace="umbraco.uicontrols" Assembly="controls" %> diff --git a/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/NewRelationType.aspx b/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/NewRelationType.aspx index fd16f91b03..d2c72fef2a 100644 --- a/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/NewRelationType.aspx +++ b/src/Umbraco.Web.UI/umbraco/developer/RelationTypes/NewRelationType.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.NewRelationType" MasterPageFile="/umbraco/masterpages/umbracoPage.Master"%> +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.NewRelationType" MasterPageFile="../../masterpages/umbracoPage.Master"%> <%@ Register TagPrefix="umb" Namespace="umbraco.uicontrols" Assembly="controls" %> diff --git a/src/Umbraco.Web.UI/umbraco/scripting/templates/cshtml/ListChildPagesOrderedByProperty.cshtml b/src/Umbraco.Web.UI/umbraco/scripting/templates/cshtml/ListChildPagesOrderedByProperty.cshtml index 2f5ebb543b..8383d9077e 100644 --- a/src/Umbraco.Web.UI/umbraco/scripting/templates/cshtml/ListChildPagesOrderedByProperty.cshtml +++ b/src/Umbraco.Web.UI/umbraco/scripting/templates/cshtml/ListChildPagesOrderedByProperty.cshtml @@ -10,7 +10,7 @@ @* Get the property alias we want to filter on from the macro parameter *@ var propertyAlias = Parameter.propertyAlias; - var selection = Model.Children.Where("Visible").OrderBy(propertyAlias) + var selection = Model.Children.Where("Visible").OrderBy(propertyAlias); } diff --git a/src/Umbraco.Web.UI/umbraco/settings/stylesheet/property/EditStyleSheetProperty.aspx b/src/Umbraco.Web.UI/umbraco/settings/stylesheet/property/EditStyleSheetProperty.aspx index c554ab88b9..1d0166285d 100644 --- a/src/Umbraco.Web.UI/umbraco/settings/stylesheet/property/EditStyleSheetProperty.aspx +++ b/src/Umbraco.Web.UI/umbraco/settings/stylesheet/property/EditStyleSheetProperty.aspx @@ -10,25 +10,25 @@
- <%=umbraco.ui.Text("name", UmbracoUser)%>: + <%=umbraco.ui.Text("name", base.getUser())%>:
- <%=umbraco.ui.Text("stylesheet", "nameHelp", UmbracoUser)%> + <%=umbraco.ui.Text("stylesheet", "nameHelp", base.getUser())%>
- <%=umbraco.ui.Text("alias", UmbracoUser)%>: + <%=umbraco.ui.Text("alias", base.getUser())%>:
- <%=umbraco.ui.Text("stylesheet", "aliasHelp", UmbracoUser)%> + <%=umbraco.ui.Text("stylesheet", "aliasHelp", base.getUser())%>
- <%=umbraco.ui.Text("styles", UmbracoUser)%>: + <%=umbraco.ui.Text("styles", base.getUser())%>: @@ -38,7 +38,7 @@
- <%=umbraco.ui.Text("preview", UmbracoUser)%>: + <%=umbraco.ui.Text("preview", base.getUser())%>:
diff --git a/src/Umbraco.Web.UI/web.Template.config b/src/Umbraco.Web.UI/web.Template.config index 24ccf4b587..ede0ce13bd 100644 --- a/src/Umbraco.Web.UI/web.Template.config +++ b/src/Umbraco.Web.UI/web.Template.config @@ -175,7 +175,7 @@ - + diff --git a/src/Umbraco.Web/Mvc/DefaultRenderMvcControllerResolver.cs b/src/Umbraco.Web/Mvc/DefaultRenderMvcControllerResolver.cs index 7db655f5a8..715fc674a7 100644 --- a/src/Umbraco.Web/Mvc/DefaultRenderMvcControllerResolver.cs +++ b/src/Umbraco.Web/Mvc/DefaultRenderMvcControllerResolver.cs @@ -36,14 +36,14 @@ namespace Umbraco.Web.Mvc /// /// Returns an instance of the default controller instance. /// - public RenderMvcController GetControllerInstance() + public IRenderMvcController GetControllerInstance() { //try the dependency resolver, then the activator var instance = DependencyResolver.Current.GetService(Value) ?? Activator.CreateInstance(Value); - var result = instance as RenderMvcController; + var result = instance as IRenderMvcController; if (result == null) { - throw new InvalidOperationException("Could not create an instance of " + Value + " for the default RenderMvcController"); + throw new InvalidOperationException("Could not create an instance of " + Value + " for the default " + typeof(IRenderMvcController).Name); } return result; } @@ -64,9 +64,9 @@ namespace Umbraco.Web.Mvc /// private void ValidateType(Type type) { - if (TypeHelper.IsTypeAssignableFrom(type) == false) + if (TypeHelper.IsTypeAssignableFrom(type) == false) { - throw new InvalidOperationException("The Type specified (" + type + ") is not of type " + typeof(RenderMvcController)); + throw new InvalidOperationException("The Type specified (" + type + ") is not of type " + typeof(IRenderMvcController)); } } diff --git a/src/Umbraco.Web/Mvc/IRenderMvcController.cs b/src/Umbraco.Web/Mvc/IRenderMvcController.cs new file mode 100644 index 0000000000..de4dc1045a --- /dev/null +++ b/src/Umbraco.Web/Mvc/IRenderMvcController.cs @@ -0,0 +1,18 @@ +using System.Web.Mvc; +using Umbraco.Web.Models; + +namespace Umbraco.Web.Mvc +{ + /// + /// The interface that must be implemented for a controller to be designated to execute for route hijacking + /// + public interface IRenderMvcController : IController + { + /// + /// The default action to render the front-end view + /// + /// + /// + ActionResult Index(RenderModel model); + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Mvc/RenderActionInvoker.cs b/src/Umbraco.Web/Mvc/RenderActionInvoker.cs index 014b0c1e48..4fa9702a61 100644 --- a/src/Umbraco.Web/Mvc/RenderActionInvoker.cs +++ b/src/Umbraco.Web/Mvc/RenderActionInvoker.cs @@ -22,8 +22,8 @@ namespace Umbraco.Web.Mvc //now we need to check if it exists, if not we need to return the Index by default if (ad == null) { - //check if the controller is an instance of RenderMvcController - if (controllerContext.Controller is RenderMvcController) + //check if the controller is an instance of IRenderMvcController + if (controllerContext.Controller is IRenderMvcController) { return new ReflectedActionDescriptor(controllerContext.Controller.GetType().GetMethod("Index"), "Index", controllerDescriptor); } diff --git a/src/Umbraco.Web/Mvc/RenderControllerFactory.cs b/src/Umbraco.Web/Mvc/RenderControllerFactory.cs index 9482815a03..ccc80782a5 100644 --- a/src/Umbraco.Web/Mvc/RenderControllerFactory.cs +++ b/src/Umbraco.Web/Mvc/RenderControllerFactory.cs @@ -1,3 +1,4 @@ +using System.Web.Mvc; using System.Web.Routing; namespace Umbraco.Web.Mvc @@ -22,5 +23,27 @@ namespace Umbraco.Web.Mvc return dataToken == null || string.IsNullOrWhiteSpace(dataToken.ToString()); } + /// + /// Creates the controller + /// + /// + /// + /// + /// + /// We always set the correct ActionInvoker on our custom created controller, this is very important for route hijacking! + /// + public override IController CreateController(RequestContext requestContext, string controllerName) + { + var instance = base.CreateController(requestContext, controllerName); + var controllerInstance = instance as Controller; + if (controllerInstance != null) + { + //set the action invoker! + controllerInstance.ActionInvoker = new RenderActionInvoker(); + } + + return instance; + } + } } \ No newline at end of file diff --git a/src/Umbraco.Web/Mvc/RenderMvcController.cs b/src/Umbraco.Web/Mvc/RenderMvcController.cs index 4615937e6b..b11ee8efc3 100644 --- a/src/Umbraco.Web/Mvc/RenderMvcController.cs +++ b/src/Umbraco.Web/Mvc/RenderMvcController.cs @@ -15,7 +15,7 @@ namespace Umbraco.Web.Mvc /// /// A controller to render front-end requests /// - public class RenderMvcController : UmbracoController + public class RenderMvcController : UmbracoController, IRenderMvcController { public RenderMvcController() diff --git a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs index b7342119c9..6756847980 100644 --- a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs @@ -271,8 +271,9 @@ namespace Umbraco.Web.Mvc //check if that controller exists if (controllerType != null) { - //ensure the controller is of type 'RenderMvcController' - if (TypeHelper.IsTypeAssignableFrom(controllerType)) + //ensure the controller is of type 'IRenderMvcController' and ControllerBase + if (TypeHelper.IsTypeAssignableFrom(controllerType) + && TypeHelper.IsTypeAssignableFrom(controllerType)) { //set the controller and name to the custom one def.ControllerType = controllerType; @@ -285,10 +286,11 @@ namespace Umbraco.Web.Mvc else { LogHelper.Warn( - "The current Document Type {0} matches a locally declared controller of type {1}. Custom Controllers for Umbraco routing must inherit from '{2}'.", + "The current Document Type {0} matches a locally declared controller of type {1}. Custom Controllers for Umbraco routing must implement '{2}' and inherit from '{3}'.", () => publishedContentRequest.PublishedContent.DocumentTypeAlias, () => controllerType.FullName, - () => typeof (RenderMvcController).FullName); + () => typeof(IRenderMvcController).FullName, + () => typeof(ControllerBase).FullName); //exit as we cannnot route to the custom controller, just route to the standard one. return def; } diff --git a/src/Umbraco.Web/Mvc/SurfaceControllerFactory.cs b/src/Umbraco.Web/Mvc/SurfaceControllerFactory.cs index a6eeda68d6..c82c59db65 100644 --- a/src/Umbraco.Web/Mvc/SurfaceControllerFactory.cs +++ b/src/Umbraco.Web/Mvc/SurfaceControllerFactory.cs @@ -7,6 +7,7 @@ namespace Umbraco.Web.Mvc /// /// Creates SurfaceControllers /// + [Obsolete("This is not used in the codebase and will be removed from the core in future versions")] public class SurfaceControllerFactory : RenderControllerFactory { /// diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 6bef467ed0..be16cbb25d 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -413,6 +413,7 @@ + diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/GenericProperties/GenericProperty.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/GenericProperties/GenericProperty.ascx.cs index 955b885692..4106275165 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/GenericProperties/GenericProperty.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/GenericProperties/GenericProperty.ascx.cs @@ -226,7 +226,7 @@ namespace umbraco.controls.GenericProperties checkMandatory.Checked = true; // validation - if (_pt != null && _pt.ValidationRegExp != "") + if (_pt != null && string.IsNullOrEmpty(_pt.ValidationRegExp) == false) tbValidation.Text = _pt.ValidationRegExp; // description diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/create/ScriptTasks.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/create/ScriptTasks.cs index 46ee8f3f80..5e3f16ca0c 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/create/ScriptTasks.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/create/ScriptTasks.cs @@ -42,7 +42,7 @@ namespace umbraco public bool Save() { - string[] scriptFileAr = _alias.Split('¤'); + string[] scriptFileAr = _alias.Split('\u00A4'); diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx index ea6de5b968..2b8e9e16b0 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.EditRelationType" MasterPageFile="/umbraco/masterpages/umbracoPage.Master" %> +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.EditRelationType" MasterPageFile="../../masterpages/umbracoPage.Master" %> <%@ Register TagPrefix="umb" Namespace="umbraco.uicontrols" Assembly="controls" %> diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/NewRelationType.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/NewRelationType.aspx index fd16f91b03..d2c72fef2a 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/NewRelationType.aspx +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/NewRelationType.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.NewRelationType" MasterPageFile="/umbraco/masterpages/umbracoPage.Master"%> +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewRelationType.aspx.cs" Inherits="umbraco.cms.presentation.developer.RelationTypes.NewRelationType" MasterPageFile="../../masterpages/umbracoPage.Master"%> <%@ Register TagPrefix="umb" Namespace="umbraco.uicontrols" Assembly="controls" %> diff --git a/src/umbraco.presentation.targets b/src/umbraco.presentation.targets index 6bceb13987..79eb7c494d 100644 --- a/src/umbraco.presentation.targets +++ b/src/umbraco.presentation.targets @@ -39,17 +39,22 @@ + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll + - - + +