From 280a6d79b404f8dd41c65fe7e1f175c77f633f8a Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Thu, 14 Feb 2019 16:00:58 +0100 Subject: [PATCH] v8: Add package contributors (#4385) --- .../Models/Packaging/CompiledPackage.cs | 1 + .../Models/Packaging/IPackageInfo.cs | 2 + .../Models/Packaging/PackageDefinition.cs | 4 ++ .../Packaging/CompiledPackageXmlParser.cs | 1 + .../Packaging/PackageDefinitionXmlParser.cs | 3 ++ .../Packaging/PackagesRepository.cs | 20 +++++--- .../src/views/packages/edit.controller.js | 40 +++++++++++++++ .../src/views/packages/edit.html | 50 +++++++++++-------- .../views/packages/views/install-local.html | 15 +++--- src/Umbraco.Web.UI/Umbraco/config/lang/da.xml | 16 +++++- src/Umbraco.Web.UI/Umbraco/config/lang/en.xml | 19 +++++-- .../Umbraco/config/lang/en_us.xml | 16 +++++- .../Editors/PackageInstallController.cs | 1 + .../Models/LocalPackageInstallModel.cs | 3 ++ 14 files changed, 150 insertions(+), 41 deletions(-) diff --git a/src/Umbraco.Core/Models/Packaging/CompiledPackage.cs b/src/Umbraco.Core/Models/Packaging/CompiledPackage.cs index f4ed11e09e..be514eaf44 100644 --- a/src/Umbraco.Core/Models/Packaging/CompiledPackage.cs +++ b/src/Umbraco.Core/Models/Packaging/CompiledPackage.cs @@ -22,6 +22,7 @@ namespace Umbraco.Core.Models.Packaging public RequirementsType UmbracoVersionRequirementsType { get; set; } public string Author { get; set; } public string AuthorUrl { get; set; } + public IList Contributors { get; set; } public string Readme { get; set; } public string PackageView { get; set; } public string IconUrl { get; set; } diff --git a/src/Umbraco.Core/Models/Packaging/IPackageInfo.cs b/src/Umbraco.Core/Models/Packaging/IPackageInfo.cs index eea56549f1..e4e9addf76 100644 --- a/src/Umbraco.Core/Models/Packaging/IPackageInfo.cs +++ b/src/Umbraco.Core/Models/Packaging/IPackageInfo.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace Umbraco.Core.Models.Packaging { @@ -12,6 +13,7 @@ namespace Umbraco.Core.Models.Packaging Version UmbracoVersion { get; } string Author { get; } string AuthorUrl { get; } + IList Contributors { get; } string Readme { get; } /// diff --git a/src/Umbraco.Core/Models/Packaging/PackageDefinition.cs b/src/Umbraco.Core/Models/Packaging/PackageDefinition.cs index 8c0ef79d0b..070d0773d2 100644 --- a/src/Umbraco.Core/Models/Packaging/PackageDefinition.cs +++ b/src/Umbraco.Core/Models/Packaging/PackageDefinition.cs @@ -25,6 +25,7 @@ namespace Umbraco.Core.Models.Packaging Actions = compiled.Actions, Author = compiled.Author, AuthorUrl = compiled.AuthorUrl, + Contributors = compiled.Contributors, PackageView = compiled.PackageView, IconUrl = compiled.IconUrl, License = compiled.License, @@ -79,6 +80,9 @@ namespace Umbraco.Core.Models.Packaging [Url] public string AuthorUrl { get; set; } = string.Empty; + [DataMember(Name = "contributors")] + public IList Contributors { get; set; } = new List(); + [DataMember(Name = "license")] public string License { get; set; } = "MIT License"; diff --git a/src/Umbraco.Core/Packaging/CompiledPackageXmlParser.cs b/src/Umbraco.Core/Packaging/CompiledPackageXmlParser.cs index 8dccf73814..83034a7e1b 100644 --- a/src/Umbraco.Core/Packaging/CompiledPackageXmlParser.cs +++ b/src/Umbraco.Core/Packaging/CompiledPackageXmlParser.cs @@ -43,6 +43,7 @@ namespace Umbraco.Core.Packaging Name = package.Element("name")?.Value, Author = author.Element("name")?.Value, AuthorUrl = author.Element("website")?.Value, + Contributors = info.Element("contributors")?.Elements("contributor").Select(x => x.Value).ToList() ?? new List(), Version = package.Element("version")?.Value, Readme = info.Element("readme")?.Value, License = package.Element("license")?.Value, diff --git a/src/Umbraco.Core/Packaging/PackageDefinitionXmlParser.cs b/src/Umbraco.Core/Packaging/PackageDefinitionXmlParser.cs index b66cdb095c..50cb692530 100644 --- a/src/Umbraco.Core/Packaging/PackageDefinitionXmlParser.cs +++ b/src/Umbraco.Core/Packaging/PackageDefinitionXmlParser.cs @@ -39,6 +39,7 @@ namespace Umbraco.Core.Packaging LicenseUrl = xml.Element("license")?.AttributeValue("url") ?? string.Empty, Author = xml.Element("author")?.Value ?? string.Empty, AuthorUrl = xml.Element("author")?.AttributeValue("url") ?? string.Empty, + Contributors = xml.Element("contributors")?.Elements("contributor").Select(x => x.Value).ToList() ?? new List(), Readme = xml.Element("readme")?.Value ?? string.Empty, Actions = xml.Element("actions")?.ToString(SaveOptions.None) ?? "", //take the entire outer xml value ContentNodeId = xml.Element("content")?.AttributeValue("nodeId") ?? string.Empty, @@ -87,6 +88,8 @@ namespace Umbraco.Core.Packaging new XCData(def.Author ?? string.Empty), new XAttribute("url", def.AuthorUrl ?? string.Empty)), + new XElement("contributors", (def.Contributors ?? Array.Empty()).Where(x => !x.IsNullOrWhiteSpace()).Select(x => new XElement("contributor", x))), + new XElement("readme", new XCData(def.Readme ?? string.Empty)), actionsXml, new XElement("datatypes", string.Join(",", def.DataTypes ?? Array.Empty())), diff --git a/src/Umbraco.Core/Packaging/PackagesRepository.cs b/src/Umbraco.Core/Packaging/PackagesRepository.cs index 05f67b3ed6..72954b238d 100644 --- a/src/Umbraco.Core/Packaging/PackagesRepository.cs +++ b/src/Umbraco.Core/Packaging/PackagesRepository.cs @@ -573,12 +573,25 @@ namespace Umbraco.Core.Packaging package.Add(requirements); info.Add(package); - //Author + // Author var author = new XElement("author", ""); author.Add(new XElement("name", definition.Author)); author.Add(new XElement("website", definition.AuthorUrl)); info.Add(author); + // Contributors + var contributors = new XElement("contributors", ""); + + if (definition.Contributors != null && definition.Contributors.Any()) + { + foreach (var contributor in definition.Contributors) + { + contributors.Add(new XElement("contributor", contributor)); + } + } + + info.Add(contributors); + info.Add(new XElement("readme", new XCData(definition.Readme))); return info; @@ -608,10 +621,5 @@ namespace Umbraco.Core.Packaging var packagesXml = XDocument.Load(packagesFile); return packagesXml; } - - - - - } } diff --git a/src/Umbraco.Web.UI.Client/src/views/packages/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/packages/edit.controller.js index b6026edf03..285bcadd8d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/packages/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/packages/edit.controller.js @@ -22,6 +22,7 @@ vm.openViewPicker = openViewPicker; vm.removePackageView = removePackageView; vm.downloadFile = downloadFile; + vm.contributorsEditor = null; vm.buttonLabel = ""; @@ -34,6 +35,9 @@ //pre populate package with some values packageResource.getEmpty().then(scaffold => { vm.package = scaffold; + + buildContributorsEditor(vm.package); + vm.loading = false; }); @@ -44,6 +48,9 @@ // load package packageResource.getCreatedById(packageId).then(createdPackage => { vm.package = createdPackage; + + buildContributorsEditor(vm.package); + vm.loading = false; // get render model for content node if(vm.package.contentNodeId) { @@ -143,6 +150,10 @@ function createOrUpdatePackage(editPackageForm) { + let contributors = vm.contributorsEditor.value.map(o => o.value); + + vm.package.contributors = contributors; + if (formHelper.submitForm({ formCtrl: editPackageForm, scope: $scope })) { vm.buttonState = "busy"; @@ -251,6 +262,35 @@ vm.package.packageView = null; } + function buildContributorsEditor(pkg) { + + vm.contributorsEditor = { + alias: "contributors", + editor: "Umbraco.MultipleTextstring", + label: "Contributors", + description: "", + hideLabel: true, + view: "views/propertyeditors/multipletextbox/multipletextbox.html", + value: getVals(pkg.contributors), + validation: { + mandatory: false, + pattern: null + }, + config: { + min: 0, + max: 0 + } + }; + } + + function getVals(array) { + var vals = []; + for (var i = 0; i < array.length; i++) { + vals.push({ value: array[i] }); + } + return vals; + } + onInit(); } diff --git a/src/Umbraco.Web.UI.Client/src/views/packages/edit.html b/src/Umbraco.Web.UI.Client/src/views/packages/edit.html index 4c32e7e10c..9ea4b83ba1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/packages/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/packages/edit.html @@ -20,7 +20,7 @@
-
Package Properties
+
Package Properties
 
@@ -44,7 +44,7 @@ - + @@ -61,7 +61,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -79,15 +79,21 @@ - + + + + + + + - + - + @@ -98,13 +104,13 @@
-
Package Content
+
Package Content
 
- + - Include all child nodes + Include all child nodes - +