150 lines
5.6 KiB
JavaScript
150 lines
5.6 KiB
JavaScript
/**
|
|
* @ngdoc controller
|
|
* @name MemberManager.Dialogs.Member.EditController
|
|
* @function
|
|
*
|
|
* @description
|
|
* The controller for the member editor
|
|
*
|
|
* @param {any} $scope Scope
|
|
* @param {any} $routeParams Route Parameters
|
|
* @param {any} $q Queue
|
|
* @param {any} memberResource Member Resource
|
|
* @param {any} entityResource Entity Resource
|
|
* @param {any} serverValidationManager Server Validation Manager
|
|
* @param {any} contentEditingHelper Content Editing Helper
|
|
* @param {any} fileManager File Manager
|
|
* @param {any} formHelper Form Helper
|
|
*/
|
|
function MemberEditDialogController($scope, $routeParams, $q, memberResource, entityResource, serverValidationManager, contentEditingHelper, fileManager, formHelper) {
|
|
//setup scope vars
|
|
$scope.model = {};
|
|
$scope.model.defaultButton = null;
|
|
$scope.model.subButtons = [];
|
|
$scope.model.nodeId = 0;
|
|
$scope.loaded = false;
|
|
|
|
var dialogOptions = $scope.$parent.dialogOptions;
|
|
|
|
function performGet() {
|
|
var deferred = $q.defer();
|
|
if (angular.isObject(dialogOptions.entity)) {
|
|
$scope.loaded = true;
|
|
deferred.resolve(dialogOptions.entity);
|
|
} else {
|
|
if (dialogOptions.create) {
|
|
//we are creating so get an empty member item
|
|
memberResource.getScaffold(dialogOptions.contentType)
|
|
.then(function (data) {
|
|
|
|
$scope.loaded = true;
|
|
deferred.resolve(data);
|
|
});
|
|
}
|
|
else {
|
|
if (dialogOptions.key && dialogOptions.key.toString().length < 9) {
|
|
entityResource.getById(dialogOptions.key, "Member").then(function (entity) {
|
|
memberResource.getByKey(entity.key).then(function (data) {
|
|
|
|
//in one particular special case, after we've created a new item we redirect back to the edit
|
|
// route but there might be server validation errors in the collection which we need to display
|
|
// after the redirect, so we will bind all subscriptions which will show the server validation errors
|
|
// if there are any and then clear them so the collection no longer persists them.
|
|
serverValidationManager.executeAndClearAllSubscriptions();
|
|
$scope.loaded = true;
|
|
|
|
deferred.resolve(data);
|
|
});
|
|
});
|
|
}
|
|
else {
|
|
//we are editing so get the content item from the server
|
|
memberResource.getByKey(dialogOptions.key)
|
|
.then(function (data) {
|
|
|
|
$scope.loaded = true;
|
|
|
|
//in one particular special case, after we've created a new item we redirect back to the edit
|
|
// route but there might be server validation errors in the collection which we need to display
|
|
// after the redirect, so we will bind all subscriptions which will show the server validation errors
|
|
// if there are any and then clear them so the collection no longer persists them.
|
|
serverValidationManager.executeAndClearAllSubscriptions();
|
|
|
|
deferred.resolve(data);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function performSave(args) {
|
|
var deferred = $q.defer();
|
|
|
|
$scope.busy = true;
|
|
|
|
if (formHelper.submitForm({ scope: $scope, statusMessage: args.statusMessage })) {
|
|
|
|
$scope.busy = true;
|
|
|
|
args.saveMethod($scope.model.entity, $routeParams.create, fileManager.getFiles())
|
|
.then(function (data) {
|
|
|
|
formHelper.resetForm({ scope: $scope, notifications: data.notifications });
|
|
|
|
contentEditingHelper.handleSuccessfulSave({
|
|
scope: $scope,
|
|
savedContent: data,
|
|
rebindCallback: contentEditingHelper.reBindChangedProperties($scope.model.entity, data)
|
|
});
|
|
|
|
$scope.busy = false;
|
|
deferred.resolve(data);
|
|
|
|
}, function (err) {
|
|
|
|
contentEditingHelper.handleSaveError({
|
|
redirectOnFailure: false,
|
|
err: err,
|
|
rebindCallback: contentEditingHelper.reBindChangedProperties($scope.model.entity, err.data)
|
|
});
|
|
|
|
$scope.busy = false;
|
|
deferred.reject(err);
|
|
});
|
|
} else {
|
|
$scope.busy = false;
|
|
deferred.reject();
|
|
}
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
performGet().then(function (content) {
|
|
$scope.model.entity = $scope.filterTabs(content, dialogOptions.tabFilter);
|
|
});
|
|
|
|
$scope.filterTabs = function (entity, blackList) {
|
|
if (blackList) {
|
|
_.each(entity.tabs, function (tab) {
|
|
tab.hide = _.contains(blackList, tab.alias);
|
|
});
|
|
}
|
|
|
|
return entity;
|
|
};
|
|
|
|
$scope.save = function () {
|
|
performSave({ saveMethod: memberResource.save, statusMessage: "Saving..." })
|
|
.then(function (content) {
|
|
if (dialogOptions.closeOnSave) {
|
|
$scope.submit(content);
|
|
}
|
|
});
|
|
};
|
|
|
|
}
|
|
|
|
angular.module("umbraco").controller("MemberManager.Dialogs.Member.EditController", MemberEditDialogController);
|