Files
Umbraco-CMS/src/Umbraco.Web.UI.Client/src/views/content/content.create.controller.js
T
2020-02-25 21:42:37 +01:00

140 lines
4.5 KiB
JavaScript

/**
* @ngdoc controller
* @name Umbraco.Editors.Content.CreateController
* @function
*
* @description
* The controller for the content creation dialog
*/
function contentCreateController($scope,
$routeParams,
contentTypeResource,
iconHelper,
$location,
navigationService,
blueprintConfig,
authResource,
contentResource,
$q) {
var mainCulture = $routeParams.mculture ? $routeParams.mculture : null;
function initialize() {
$scope.loading = true;
$scope.allowedTypes = null;
var getAllowedTypes = contentTypeResource.getAllowedTypes($scope.currentNode.id).then(function (data) {
$scope.allowedTypes = iconHelper.formatContentTypeIcons(data);
if ($scope.allowedTypes.length === 0) {
contentTypeResource.getCount().then(function(count) {
$scope.countTypes = count;
});
}
});
var getCurrentUser = authResource.getCurrentUser().then(function (currentUser) {
if (currentUser.allowedSections.indexOf("settings") > -1) {
$scope.hasSettingsAccess = true;
if ($scope.currentNode.id > -1) {
contentResource.getById($scope.currentNode.id).then(function (data) {
$scope.contentTypeId = data.contentTypeId;
});
}
}
});
$q.all([getAllowedTypes, getCurrentUser]).then(function() {
$scope.loading = false;
});
$scope.selectContentType = true;
$scope.selectBlueprint = false;
$scope.allowBlank = blueprintConfig.allowBlank;
}
function close() {
navigationService.hideMenu();
}
function createBlank(docType) {
$location
.path("/content/content/edit/" + $scope.currentNode.id)
.search("doctype", docType.alias)
.search("create", "true")
/* when we create a new node we want to make sure it uses the same
language as what is selected in the tree */
.search("cculture", mainCulture)
/* when we create a new node we must make sure that any previously
used blueprint is reset */
.search("blueprintId", null);
close();
}
function createOrSelectBlueprintIfAny(docType) {
// map the blueprints into a collection that's sortable in the view
var blueprints = _.map(_.pairs(docType.blueprints || {}), function (pair) {
return {
id: pair[0],
name: pair[1]
};
});
$scope.docType = docType;
if (blueprints.length) {
if (blueprintConfig.skipSelect) {
createFromBlueprint(blueprints[0].id);
} else {
$scope.selectContentType = false;
$scope.selectBlueprint = true;
$scope.selectableBlueprints = blueprints;
}
} else {
createBlank(docType);
}
}
function createFromBlueprint(blueprintId) {
$location
.path("/content/content/edit/" + $scope.currentNode.id)
.search("doctype", $scope.docType.alias)
.search("create", "true")
.search("blueprintId", blueprintId);
close();
}
$scope.close = function() {
close();
};
$scope.closeDialog = function (showMenu) {
navigationService.hideDialog(showMenu);
};
$scope.createContentType = function () {
$location.path("/settings/documenttypes/edit/-1").search("create", "true");
close();
};
$scope.editContentType = function () {
$location.path("/settings/documenttypes/edit/" + $scope.contentTypeId).search("view", "permissions");
close();
};
$scope.createBlank = createBlank;
$scope.createOrSelectBlueprintIfAny = createOrSelectBlueprintIfAny;
$scope.createFromBlueprint = createFromBlueprint;
// the current node changes behind the scenes when the context menu is clicked without closing
// the default menu first, so we must watch the current node and re-initialize accordingly
var unbindModelWatcher = $scope.$watch("currentNode", initialize);
$scope.$on('$destroy', function () {
unbindModelWatcher();
});
}
angular.module("umbraco").controller("Umbraco.Editors.Content.CreateController", contentCreateController);
angular.module("umbraco").value("blueprintConfig", {
skipSelect: false,
allowBlank: true
});