From 21c6cf71cbaa374251e098f0e96397f6f7ab1181 Mon Sep 17 00:00:00 2001 From: jakobdyrby Date: Mon, 11 Aug 2014 09:52:16 +0200 Subject: [PATCH 1/3] fixed bug where root element is documents and not documentSet --- src/Umbraco.Core/Constants-Packaging.cs | 1 + .../Packaging/PackageInstallation.cs | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Core/Constants-Packaging.cs b/src/Umbraco.Core/Constants-Packaging.cs index 4e9f294406..31cbad1246 100644 --- a/src/Umbraco.Core/Constants-Packaging.cs +++ b/src/Umbraco.Core/Constants-Packaging.cs @@ -23,6 +23,7 @@ public const string DictionaryItemsNodeName = "DictionaryItems"; public const string DictionaryItemNodeName = "DictionaryItem"; public const string MacrosNodeName = "Macros"; + public const string DocumentsNodeName = "Documents"; public const string DocumentSetNodeName = "DocumentSet"; public const string DocumentTypesNodeName = "DocumentTypes"; public const string DocumentTypeNodeName = "DocumentType"; diff --git a/src/Umbraco.Core/Packaging/PackageInstallation.cs b/src/Umbraco.Core/Packaging/PackageInstallation.cs index 74d1691c2b..3aa6debe78 100644 --- a/src/Umbraco.Core/Packaging/PackageInstallation.cs +++ b/src/Umbraco.Core/Packaging/PackageInstallation.cs @@ -116,6 +116,7 @@ namespace Umbraco.Core.Packaging XElement documentTypes; XElement styleSheets; XElement documentSet; + XElement documents; XElement actions; MetaData metaData; InstallationSummary installationSummary; @@ -134,6 +135,7 @@ namespace Umbraco.Core.Packaging documentTypes = rootElement.Element(Constants.Packaging.DocumentTypesNodeName); styleSheets = rootElement.Element(Constants.Packaging.StylesheetsNodeName); documentSet = rootElement.Element(Constants.Packaging.DocumentSetNodeName); + documents = rootElement.Element(Constants.Packaging.DocumentsNodeName); actions = rootElement.Element(Constants.Packaging.ActionsNodeName); metaData = GetMetaData(rootElement); @@ -170,7 +172,9 @@ namespace Umbraco.Core.Packaging var stylesheetsInstalled = EmptyEnumerableIfNull(styleSheets) ?? InstallStylesheets(styleSheets, userId); installationSummary.StylesheetsInstalled = stylesheetsInstalled; - var documentsInstalled = EmptyEnumerableIfNull(documentSet) ?? InstallDocuments(documentSet, userId); + var documentsInstalled = documents != null ? InstallDocuments(documents, userId) + : EmptyEnumerableIfNull(documentSet) + ?? InstallDocuments(documentSet, userId); installationSummary.ContentInstalled = documentsInstalled; var packageActions = EmptyEnumerableIfNull(actions) ?? GetPackageActions(actions, metaData.Name); @@ -308,12 +312,20 @@ namespace Umbraco.Core.Packaging private IEnumerable InstallDocuments(XElement documentsElement, int userId = 0) { - if (string.Equals(Constants.Packaging.DocumentSetNodeName, documentsElement.Name.LocalName) == false) + if ((string.Equals(Constants.Packaging.DocumentSetNodeName, documentsElement.Name.LocalName) == false) + && (string.Equals(Constants.Packaging.DocumentsNodeName, documentsElement.Name.LocalName) == false)) { - throw new ArgumentException("Must be \"" + Constants.Packaging.DocumentSetNodeName + "\" as root", + throw new ArgumentException("Must be \"" + Constants.Packaging.DocumentsNodeName + "\" as root", "documentsElement"); } - return _packagingService.ImportContent(documentsElement, -1, userId); + + if (string.Equals(Constants.Packaging.DocumentSetNodeName, documentsElement.Name.LocalName) == false) + return _packagingService.ImportContent(documentsElement, -1, userId); + + return + documentsElement.Elements() + .Where(e => e.Name.LocalName == Constants.Packaging.DocumentSetNodeName) + .SelectMany(documentSetElement => _packagingService.ImportContent(documentSetElement, -1, userId)); } private IEnumerable InstallStylesheets(XElement styleSheetsElement, int userId = 0) From 4aedfc419e9147fb83492aa1242813af2b8c9d22 Mon Sep 17 00:00:00 2001 From: jakobdyrby Date: Mon, 11 Aug 2014 10:07:27 +0200 Subject: [PATCH 2/3] copy past error --- src/Umbraco.Core/Packaging/PackageInstallation.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Packaging/PackageInstallation.cs b/src/Umbraco.Core/Packaging/PackageInstallation.cs index 3aa6debe78..a91a308117 100644 --- a/src/Umbraco.Core/Packaging/PackageInstallation.cs +++ b/src/Umbraco.Core/Packaging/PackageInstallation.cs @@ -319,7 +319,7 @@ namespace Umbraco.Core.Packaging "documentsElement"); } - if (string.Equals(Constants.Packaging.DocumentSetNodeName, documentsElement.Name.LocalName) == false) + if (string.Equals(Constants.Packaging.DocumentSetNodeName, documentsElement.Name.LocalName)) return _packagingService.ImportContent(documentsElement, -1, userId); return From 1a3d3994c3f87d6a0fc7b56f20d79690ab0fe177 Mon Sep 17 00:00:00 2001 From: jakobdyrby Date: Mon, 11 Aug 2014 12:35:55 +0200 Subject: [PATCH 3/3] added some ToArray() to ensure execution --- src/Umbraco.Core/Packaging/PackageInstallation.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Packaging/PackageInstallation.cs b/src/Umbraco.Core/Packaging/PackageInstallation.cs index a91a308117..522048d2d7 100644 --- a/src/Umbraco.Core/Packaging/PackageInstallation.cs +++ b/src/Umbraco.Core/Packaging/PackageInstallation.cs @@ -307,7 +307,7 @@ namespace Umbraco.Core.Packaging return packageAction; - }); + }).ToArray(); } private IEnumerable InstallDocuments(XElement documentsElement, int userId = 0) @@ -323,9 +323,9 @@ namespace Umbraco.Core.Packaging return _packagingService.ImportContent(documentsElement, -1, userId); return - documentsElement.Elements() - .Where(e => e.Name.LocalName == Constants.Packaging.DocumentSetNodeName) - .SelectMany(documentSetElement => _packagingService.ImportContent(documentSetElement, -1, userId)); + documentsElement.Elements(Constants.Packaging.DocumentSetNodeName) + .SelectMany(documentSetElement => _packagingService.ImportContent(documentSetElement, -1, userId)) + .ToArray(); } private IEnumerable InstallStylesheets(XElement styleSheetsElement, int userId = 0) @@ -373,7 +373,7 @@ namespace Umbraco.Core.Packaging _packageExtraction.CopyFilesFromArchive(packageFilePath, sourceDestination); - return sourceDestination.Select(sd => sd.Value); + return sourceDestination.Select(sd => sd.Value).ToArray(); } private KeyValuePair[] AppendRootToDestination(string fullpathToRoot, IEnumerable> sourceDestination)