diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 6245c2a31f..1c93a4f56d 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -580,8 +580,19 @@ namespace Umbraco.Core.Services foreach (XElement tempElement in templateElements) { var dependencies = new List(); - if(tempElement.Element("Master") != null && string.IsNullOrEmpty(tempElement.Element("Master").Value) == false) + if (tempElement.Element("Master") != null && + string.IsNullOrEmpty(tempElement.Element("Master").Value) == false && + templateElements.Any(x => x.Element("Alias").Value == tempElement.Element("Master").Value)) + { dependencies.Add(tempElement.Element("Master").Value); + } + else if (tempElement.Element("Master") != null && + string.IsNullOrEmpty(tempElement.Element("Master").Value) == false && + templateElements.Any(x => x.Element("Alias").Value == tempElement.Element("Master").Value) == + false) + { + LogHelper.Info(string.Format("Template '{0}' has an invalid Master '{1}', so the reference has been ignored.", tempElement.Element("Alias").Value, tempElement.Element("Master").Value)); + } var field = new TopologicalSorter.DependencyField { diff --git a/src/Umbraco.Core/TopologicalSorter.cs b/src/Umbraco.Core/TopologicalSorter.cs index b62628538a..436a247f5e 100644 --- a/src/Umbraco.Core/TopologicalSorter.cs +++ b/src/Umbraco.Core/TopologicalSorter.cs @@ -139,9 +139,15 @@ namespace Umbraco.Core { if (fields[i].DependsOn != null) { - foreach (string t in fields[i].DependsOn.Where(t => indexes.ContainsKey(t.ToLowerInvariant()))) + for (int j = 0; j < fields[i].DependsOn.Length; j++) { - g.AddEdge(i,indexes[t.ToLowerInvariant()]); + if (indexes.ContainsKey(fields[i].DependsOn[j].ToLowerInvariant()) == false) + throw new IndexOutOfRangeException( + string.Format( + "The alias '{0}' has an invalid dependency. The dependency '{1}' does not exist in the list of aliases", + fields[i], fields[i].DependsOn[j])); + + g.AddEdge(i, indexes[fields[i].DependsOn[j].ToLowerInvariant()]); } } } diff --git a/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs b/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs index fe580b782b..a465d0762a 100644 --- a/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs +++ b/src/Umbraco.Tests/Services/Importing/ImportResources.Designer.cs @@ -136,5 +136,32 @@ namespace Umbraco.Tests.Services.Importing { return ResourceManager.GetString("uBlogsy_Package", resourceCulture); } } + + /// + /// Looks up a localized string similar to <?xml version="1.0" encoding="UTF-8" standalone="no"?> + ///<umbPackage> + /// <files> + /// <file> + /// <guid>XSLTsearch.xslt</guid> + /// <orgPath>/xslt</orgPath> + /// <orgName>XSLTsearch.xslt</orgName> + /// </file> + /// <file> + /// <guid>XSLTsearch.cs</guid> + /// <orgPath>/App_Code</orgPath> + /// <orgName>XSLTsearch.cs</orgName> + /// </file> + /// </files> + /// <info> + /// <package> + /// <name>XSLTsearch</name> + /// <version>3.0.4</version> + /// <license url="http://www.opensource.org/licenses/mit-li [rest of string was truncated]";. + /// + internal static string XsltSearch_Package { + get { + return ResourceManager.GetString("XsltSearch_Package", resourceCulture); + } + } } } diff --git a/src/Umbraco.Tests/Services/Importing/ImportResources.resx b/src/Umbraco.Tests/Services/Importing/ImportResources.resx index 6fd3b9cf87..cc7d59a7eb 100644 --- a/src/Umbraco.Tests/Services/Importing/ImportResources.resx +++ b/src/Umbraco.Tests/Services/Importing/ImportResources.resx @@ -127,4 +127,7 @@ ublogsy-package.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + xsltsearch-package.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + \ No newline at end of file diff --git a/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs b/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs index 287ebd0c94..5dc1a697a2 100644 --- a/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs +++ b/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs @@ -188,5 +188,23 @@ namespace Umbraco.Tests.Services.Importing Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.EqualTo(numberOfDocs)); } + + [Test] + public void PackagingService_Can_Import_Templates_Package_Xml_With_Invalid_Master() + { + // Arrange + string strXml = ImportResources.XsltSearch_Package; + var xml = XElement.Parse(strXml); + var templateElement = xml.Descendants("Templates").First(); + var packagingService = ServiceContext.PackagingService; + + // Act + var templates = packagingService.ImportTemplates(templateElement); + var numberOfTemplates = (from doc in templateElement.Elements("Template") select doc).Count(); + + // Assert + Assert.That(templates.Any(), Is.True); + Assert.That(templates.Count(), Is.EqualTo(numberOfTemplates)); + } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/Services/Importing/XsltSearch-Package.xml b/src/Umbraco.Tests/Services/Importing/XsltSearch-Package.xml new file mode 100644 index 0000000000..8096cfb833 --- /dev/null +++ b/src/Umbraco.Tests/Services/Importing/XsltSearch-Package.xml @@ -0,0 +1,254 @@ + + + + + XSLTsearch.xslt + /xslt + XSLTsearch.xslt + + + XSLTsearch.cs + /App_Code + XSLTsearch.cs + + + + + XSLTsearch + 3.0.4 + MIT license + http://www.percipientstudios.com + + 3 + 0 + 0 + + + + Percipient Studios + http://www.percipientstudios.com + + + + + + + + + 0 + + + + + + + XSLTsearch + XSLTsearch + .sprTreeDoc2 + doc.png + + XSLTsearch page. + (adjust settings via the macro in the XSLTsearch template) + + + + + XSLTsearch + + + + + Hide in navigation + umbracoNaviHide + 38b352c1-e9f8-4fd8-9324-9a2eab06d97a + 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49 + + + False + + + + + + + + + + + + + + XSLTsearch + + + + + + + + + + XSLTsearch + XSLTsearch + + + + + XSLTsearch.xslt + False + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + \ No newline at end of file diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 2d4f87535c..ad98224325 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -430,6 +430,7 @@ Designer +