+ * relationTypeResource.getById(1234)
+ * .then(function() {
+ * alert('Found it!');
+ * });
+ *
+ *
+ * @param {Int} id of the relation type to get.
+ * @returns {Promise} resourcePromise containing relation type data.
+ */
+ getById: function (id) {
+ return umbRequestHelper.resourcePromise(
+ $http.get(umbRequestHelper.getApiUrl("relationTypeApiBaseUrl", "GetById", [{ id: id }])),
+ "Failed to get item " + id
+ );
+ },
+
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.relationTypeResource#getRelationObjectTypes
+ * @methodof umbraco.resources.relationTypeResource
+ *
+ * @description
+ * Gets a list of Umbraco object types which can be associated with a relation.
+ *
+ * @returns {Object} A collection of Umbraco object types.
+ */
+ getRelationObjectTypes: function() {
+ return umbRequestHelper.resourcePromise(
+ $http.get(
+ umbRequestHelper.getApiUrl("relationTypeApiBaseUrl", "GetRelationObjectTypes")
+ ),
+ "Failed to get object types"
+ );
+ },
+
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.relationTypeResource#save
+ * @methodof umbraco.resources.relationTypeResource
+ *
+ * @description
+ * Updates a relation type.
+ *
+ * @param {Object} relationType The relation type object to update.
+ * @returns {Promise} A resourcePromise object.
+ */
+ save: function (relationType) {
+ var saveModel = umbDataFormatter.formatRelationTypePostData(relationType);
+
+ return umbRequestHelper.resourcePromise(
+ $http.post(umbRequestHelper.getApiUrl("relationTypeApiBaseUrl", "PostSave"), saveModel),
+ "Failed to save data for relation type ID" + relationType.id
+ );
+ },
+
+ /**
+ * @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"
+ );
+ },
+
+ /**
+ * @ngdoc method
+ * @name umbraco.resources.relationTypeResource#deleteById
+ * @methodof umbraco.resources.relationTypeResource
+ *
+ * @description
+ * Deletes a relation type with a given ID.
+ *
+ * * ## Usage
+ *
+ * relationTypeResource.deleteById(1234).then(function() {
+ * alert('Deleted it!');
+ * });
+ *
+ *
+ * @param {Int} id The ID of the relation type to delete.
+ * @returns {Promose} resourcePromise object.
+ */
+ deleteById: function (id) {
+ return umbRequestHelper.resourcePromise(
+ $http.post(umbRequestHelper.getApiUrl("relationTypeApiBaseUrl", "DeleteById", [{ id: id }])),
+ "Failed to delete item " + id
+ );
+ }
+
+ };
+}
+
+angular.module("umbraco.resources").factory("relationTypeResource", relationTypeResource);
diff --git a/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js b/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js
index 449470f54c..650a210784 100644
--- a/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js
+++ b/src/Umbraco.Web.UI.Client/src/common/services/editor.service.js
@@ -98,7 +98,7 @@
editor: null
};
- eventsService.emit("appState.editors.closeAll", args);
+ eventsService.emit("appState.editors.close", args);
}
/**
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 668509cdf3..e31742e660 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
@@ -431,6 +431,24 @@
}
return displayModel;
+ },
+
+ /**
+ * Formats the display model used to display the relation type to a model used to save the relation type.
+ * @param {Object} relationType
+ */
+ formatRelationTypePostData : function(relationType) {
+ var saveModel = {
+ id: relationType.id,
+ name: relationType.name,
+ alias: relationType.alias,
+ key : relationType.key,
+ 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
new file mode 100644
index 0000000000..2cef0bc5a4
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.controller.js
@@ -0,0 +1,51 @@
+/**
+ * @ngdoc controller
+ * @name Umbraco.Editors.RelationTypes.CreateController
+ * @function
+ *
+ * @description
+ * The controller for creating relation types.
+ */
+function RelationTypeCreateController($scope, $location, relationTypeResource, navigationService, formHelper, appState, notificationsService) {
+ var vm = this;
+ vm.relationType = {};
+ vm.objectTypes = {};
+
+ vm.createRelationType = createRelationType;
+
+ init();
+
+ function init() {
+ relationTypeResource.getRelationObjectTypes().then(function (data) {
+ vm.objectTypes = data;
+ }, function (err) {
+ notificationsService.error("Could not load form.")
+ })
+ }
+
+ function createRelationType() {
+ if (formHelper.submitForm({ scope: $scope, formCtrl: this.createRelationTypeForm, statusMessage: "Creating relation type..." })) {
+ var node = $scope.currentNode;
+
+ relationTypeResource.create(vm.relationType).then(function (data) {
+ navigationService.hideMenu();
+
+ // Set the new item as active in the tree
+ var currentPath = node.path ? node.path : "-1";
+ navigationService.syncTree({ tree: "relationTypes", path: currentPath + "," + data, forceReload: true, activate: true });
+
+ formHelper.resetForm({ scope: $scope });
+
+ var currentSection = appState.getSectionState("currentSection");
+ $location.path("/" + currentSection + "/relationTypes/edit/" + data);
+ }, function (err) {
+ if (err.data && err.data.message) {
+ notificationsService.error(err.data.message);
+ navigationService.hideMenu();
+ }
+ });
+ }
+ }
+}
+
+angular.module("umbraco").controller("Umbraco.Editors.RelationTypes.CreateController", RelationTypeCreateController);
diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html
new file mode 100644
index 0000000000..e5f66c9fe0
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/create.html
@@ -0,0 +1,58 @@
+
+
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/delete.controller.js b/src/Umbraco.Web.UI.Client/src/views/relationtypes/delete.controller.js
new file mode 100644
index 0000000000..1a32f17a46
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/delete.controller.js
@@ -0,0 +1,41 @@
+/**
+ * @ngdoc controller
+ * @name Umbraco.Editors.RelationTypes.DeleteController
+ * @function
+ *
+ * @description
+ * The controller for deleting relation types.
+ */
+function RelationTypeDeleteController($scope, $location, relationTypeResource, treeService, navigationService, appState) {
+
+ var vm = this;
+
+ vm.cancel = cancel;
+ vm.performDelete = performDelete;
+
+ function cancel() {
+ navigationService.hideDialog();
+ }
+
+ function performDelete() {
+ // stop from firing again on double-click
+ if ($scope.busy) { return false; }
+
+ //mark it for deletion (used in the UI)
+ $scope.currentNode.loading = true;
+ $scope.busy = true;
+
+ relationTypeResource.deleteById($scope.currentNode.id).then(function () {
+ $scope.currentNode.loading = false;
+
+ treeService.removeNode($scope.currentNode);
+
+ navigationService.hideMenu();
+
+ var currentSection = appState.getSectionState("currentSection");
+ $location.path("/" + currentSection + "/");
+ });
+ }
+}
+
+angular.module("umbraco").controller("Umbraco.Editors.RelationTypes.DeleteController", RelationTypeDeleteController);
diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/delete.html b/src/Umbraco.Web.UI.Client/src/views/relationtypes/delete.html
new file mode 100644
index 0000000000..e0fdbc6751
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/delete.html
@@ -0,0 +1,12 @@
+
+
| {{relation.parentName}} | +{{relation.childName}} | +{{relation.timestampFormatted}} | +{{relation.comment}} | +