diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js index 3112d7378b..4035ce0994 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js @@ -77,6 +77,26 @@ function relationTypeResource($q, $http, umbRequestHelper, umbDataFormatter) { ); }, + /** + * @ngdoc method + * @name umbraco.resources.relationTypeResource#create + * @methodof umbraco.resources.relationTypeResource + * + * @description + * Creates a new relation type. + * + * @param {Object} relationType The relation type object to create. + * @returns {Promise} A resourcePromise object. + */ + create: function (relationType) { + var createModel = umbDataFormatter.formatRelationTypePostData(relationType); + + return umbRequestHelper.resourcePromise( + $http.post(umbRequestHelper.getApiUrl("relationTypeApiBaseUrl", "PostCreate"), createModel), + "Failed to create new realtion" + ); + }, + deleteById: function (id) { } diff --git a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js index d7c071f039..7f520a1fe8 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js @@ -441,7 +441,9 @@ name: relationType.name, alias: relationType.alias, key : relationType.key, - isBidirectional: relationType.isBidirectional + isBidirectional: relationType.isBidirectional, + parentObjectType: relationType.parentObjectType, + childObjectType: relationType.childObjectType }; return saveModel; diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js index b7389c0e56..073099994b 100644 --- a/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js @@ -1,4 +1,4 @@ -function RelationTypeCreateController($scope, relationTypeResource, navigationService, formHelper, appState) { +function RelationTypeCreateController($scope, $location, relationTypeResource, navigationService, formHelper, appState, notificationsService) { var vm = this; vm.relationType = {}; vm.objectTypes = {}; diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html index 1d07c8e1b4..1af1497953 100644 --- a/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html +++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html @@ -27,20 +27,20 @@ diff --git a/src/Umbraco.Web/Editors/RelationTypeController.cs b/src/Umbraco.Web/Editors/RelationTypeController.cs index d490e538a9..3751dd5bcf 100644 --- a/src/Umbraco.Web/Editors/RelationTypeController.cs +++ b/src/Umbraco.Web/Editors/RelationTypeController.cs @@ -1,11 +1,10 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Net; -using System.Text; -using System.Threading.Tasks; +using System.Net.Http; using System.Web.Http; using AutoMapper; +using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; @@ -69,6 +68,37 @@ namespace Umbraco.Web.Editors return objectTypes; } + /// + /// Creates a new relation type. + /// + /// The relation type to create. + /// A containing the persisted relation type's ID. + public HttpResponseMessage PostCreate(RelationTypeSave relationType) + { + var relationTypePersisted = new Core.Models.RelationType(relationType.ChildObjectType, relationType.ParentObjectType, relationType.Name.ToSafeAlias(true)) + { + Name = relationType.Name, + IsBidirectional = relationType.IsBidirectional + }; + + try + { + Services.RelationService.Save(relationTypePersisted); + + return Request.CreateResponse(HttpStatusCode.OK, relationTypePersisted.Id); + } + catch (Exception ex) + { + Logger.Error(GetType(), ex, "Error creating relation type with {Name}", relationType.Name); + return Request.CreateNotificationValidationErrorResponse("Error creating dictionary item"); + } + } + + /// + /// Updates an existing relation type. + /// + /// The relation type to update. + /// A display object containing the updated relation type. public RelationTypeDisplay PostSave(RelationTypeSave relationType) { var relationTypePersisted = Services.RelationService.GetRelationTypeById(relationType.Key); diff --git a/src/Umbraco.Web/Models/ContentEditing/RelationTypeSave.cs b/src/Umbraco.Web/Models/ContentEditing/RelationTypeSave.cs index df118f37ee..e7e8d6d2ba 100644 --- a/src/Umbraco.Web/Models/ContentEditing/RelationTypeSave.cs +++ b/src/Umbraco.Web/Models/ContentEditing/RelationTypeSave.cs @@ -1,4 +1,5 @@ -using System.Runtime.Serialization; +using System; +using System.Runtime.Serialization; namespace Umbraco.Web.Models.ContentEditing { @@ -10,5 +11,17 @@ namespace Umbraco.Web.Models.ContentEditing /// [DataMember(Name = "isBidirectional", IsRequired = true)] public bool IsBidirectional { get; set; } + + /// + /// Gets or sets the parent object type ID. + /// + [DataMember(Name = "parentObjectType", IsRequired = false)] + public Guid ParentObjectType { get; set; } + + /// + /// Gets or sets the child object type ID. + /// + [DataMember(Name = "childObjectType", IsRequired = false)] + public Guid ChildObjectType { get; set; } } }