@@ -68,6 +66,7 @@
search-from-id="{{searchInfo.searchFromId}}"
search-from-name="{{searchInfo.searchFromName}}"
show-search="{{searchInfo.showSearch}}"
+ ignore-user-start-nodes="{{searchInfo.ignoreUserStartNodes}}"
section="{{section}}">
@@ -84,6 +83,7 @@
section="content"
hideheader="true"
hideoptions="true"
+ customtreeparams="{{customTreeParams}}"
api="dialogTreeApi"
on-init="onTreeInit()"
enablelistviewexpand="true"
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js
index 2d6a2be471..f37e1156a8 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js
@@ -1,7 +1,7 @@
//used for the media picker dialog
angular.module("umbraco")
.controller("Umbraco.Editors.MediaPickerController",
- function($scope, mediaResource, entityResource, mediaHelper, mediaTypeHelper, eventsService, treeService, localStorageService, localizationService, editorService) {
+ function ($scope, mediaResource, entityResource, mediaHelper, mediaTypeHelper, eventsService, userService, treeService, localStorageService, localizationService, editorService) {
if (!$scope.model.title) {
localizationService.localizeMany(["defaultdialogs_selectMedia", "general_includeFromsubFolders"])
@@ -20,11 +20,13 @@ angular.module("umbraco")
$scope.showDetails = dialogOptions.showDetails;
$scope.multiPicker = (dialogOptions.multiPicker && dialogOptions.multiPicker !== "0") ? true : false;
$scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1;
+ $scope.ignoreUserStartNodes = Object.toBoolean(dialogOptions.ignoreUserStartNodes);
$scope.cropSize = dialogOptions.cropSize;
$scope.lastOpenedNode = localStorageService.get("umbLastOpenedMediaNodeId");
$scope.lockedFolder = true;
$scope.allowMediaEdit = dialogOptions.allowMediaEdit ? dialogOptions.allowMediaEdit : false;
+ var userStartNodes = [];
var umbracoSettings = Umbraco.Sys.ServerVariables.umbracoSettings;
var allowedUploadFiles = mediaHelper.formatFileTypes(umbracoSettings.allowedUploadFiles);
if ($scope.onlyImages) {
@@ -54,7 +56,8 @@ angular.module("umbraco")
pageSize: 100,
totalItems: 0,
totalPages: 0,
- filter: ''
+ filter: "",
+ ignoreUserStartNodes: $scope.model.ignoreUserStartNodes
};
//preload selected item
@@ -64,15 +67,19 @@ angular.module("umbraco")
}
function onInit() {
- if ($scope.startNodeId !== -1) {
- entityResource.getById($scope.startNodeId, "media")
- .then(function (ent) {
- $scope.startNodeId = ent.id;
- run();
- });
- } else {
- run();
- }
+ userService.getCurrentUser().then(function(userData) {
+ userStartNodes = userData.startMediaIds;
+
+ if ($scope.startNodeId !== -1) {
+ entityResource.getById($scope.startNodeId, "media")
+ .then(function(ent) {
+ $scope.startNodeId = ent.id;
+ run();
+ });
+ } else {
+ run();
+ }
+ });
}
function run() {
@@ -87,7 +94,7 @@ angular.module("umbraco")
} else {
//if a target is specified, go look it up - generally this target will just contain ids not the actual full
//media object so we need to look it up
- var id = $scope.target.udi ? $scope.target.udi : $scope.target.id
+ var id = $scope.target.udi ? $scope.target.udi : $scope.target.id;
var altText = $scope.target.altText;
mediaResource.getById(id)
.then(function (node) {
@@ -117,7 +124,7 @@ angular.module("umbraco")
$scope.submitFolder = function() {
if ($scope.model.newFolderName) {
- $scope.creatingFolder = true;
+ $scope.model.creatingFolder = true;
mediaResource
.addFolder($scope.model.newFolderName, $scope.currentFolder.id)
.then(function(data) {
@@ -126,13 +133,13 @@ angular.module("umbraco")
cacheKey: "__media", //this is the main media tree cache key
childrenOf: data.parentId //clear the children of the parent
});
- $scope.creatingFolder = false;
+ $scope.model.creatingFolder = false;
$scope.gotoFolder(data);
- $scope.showFolderInput = false;
+ $scope.model.showFolderInput = false;
$scope.model.newFolderName = "";
});
} else {
- $scope.showFolderInput = false;
+ $scope.model.showFolderInput = false;
}
};
@@ -143,7 +150,7 @@ angular.module("umbraco")
}
};
- $scope.gotoFolder = function(folder) {
+ $scope.gotoFolder = function (folder) {
if (!$scope.multiPicker) {
deselectAllImages($scope.model.selection);
}
@@ -152,8 +159,10 @@ angular.module("umbraco")
folder = { id: -1, name: "Media", icon: "icon-folder" };
}
+ var options = {};
if (folder.id > 0) {
- entityResource.getAncestors(folder.id, "media")
+ options.ignoreUserStartNodes = $scope.model.ignoreUserStartNodes;
+ entityResource.getAncestors(folder.id, "media", options)
.then(function(anc) {
$scope.path = _.filter(anc,
function(f) {
@@ -169,13 +178,26 @@ angular.module("umbraco")
$scope.path = [];
}
- $scope.lockedFolder = folder.id === -1 && $scope.model.startNodeIsVirtual;
+ $scope.lockedFolder = (folder.id === -1 && $scope.model.startNodeIsVirtual) || hasFolderAccess(folder) === false;
+
$scope.currentFolder = folder;
localStorageService.set("umbLastOpenedMediaNodeId", folder.id);
- return getChildren(folder.id);
+ options.ignoreUserStartNodes = $scope.ignoreUserStartNodes;
+ return getChildren(folder.id, options);
};
+ function hasFolderAccess(node) {
+ var nodePath = node.path ? node.path.split(',') : [node.id];
+
+ for (var i = 0; i < nodePath.length; i++) {
+ if (userStartNodes.indexOf(parseInt(nodePath[i])) !== -1)
+ return true;
+ }
+
+ return false;
+ }
+
$scope.clickHandler = function(image, event, index) {
if (image.isFolder) {
if ($scope.disableFolderSelect) {
@@ -299,7 +321,8 @@ angular.module("umbraco")
pageSize: 100,
totalItems: 0,
totalPages: 0,
- filter: ''
+ filter: "",
+ ignoreUserStartNodes: $scope.model.ignoreUserStartNodes
};
getChildren($scope.currentFolder.id);
}
@@ -367,9 +390,9 @@ angular.module("umbraco")
}
}
- function getChildren(id) {
+ function getChildren(id, options) {
$scope.loading = true;
- return mediaResource.getChildren(id)
+ return mediaResource.getChildren(id, options)
.then(function(data) {
$scope.searchOptions.filter = "";
$scope.images = data.items ? data.items : [];
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html
index da88b9321e..6eee269cee 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.html
@@ -64,15 +64,15 @@
-
+
-
+
-
+