diff --git a/src/Umbraco.Core/Models/Editors/ContentPropertyFile.cs b/src/Umbraco.Core/Models/Editors/ContentPropertyFile.cs
index 225e29a8a1..f27feba8cf 100644
--- a/src/Umbraco.Core/Models/Editors/ContentPropertyFile.cs
+++ b/src/Umbraco.Core/Models/Editors/ContentPropertyFile.cs
@@ -16,6 +16,11 @@
///
public string Culture { get; set; }
+ ///
+ /// When dealing with content variants, this is the segment for the variant
+ ///
+ public string Segment { get; set; }
+
///
/// An array of metadata that is parsed out from the file info posted to the server which is set on the client.
///
diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbpropertyfileupload.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbpropertyfileupload.directive.js
index 96a072330b..653b4f427c 100644
--- a/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbpropertyfileupload.directive.js
+++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbpropertyfileupload.directive.js
@@ -26,6 +26,7 @@
fileManager.setFiles({
propertyAlias: vm.propertyAlias,
culture: vm.culture,
+ segment: vm.segment,
files: []
});
//clear the current files
@@ -92,6 +93,11 @@
vm.culture = null;
}
+ //normalize segment to null if it's not there
+ if (!vm.segment) {
+ vm.segment = null;
+ }
+
// TODO: need to figure out what we can do for things like Nested Content
var existingClientFiles = checkPendingClientFiles();
@@ -134,11 +140,16 @@
vm.culture = null;
}
+ //normalize segment to null if it's not there
+ if (!vm.segment) {
+ vm.segment = null;
+ }
+
//check the file manager to see if there's already local files pending for this editor
var existingClientFiles = _.map(
_.filter(fileManager.getFiles(),
function (f) {
- return f.alias === vm.propertyAlias && f.culture === vm.culture;
+ return f.alias === vm.propertyAlias && f.culture === vm.culture && f.segment === vm.segment;
}),
function (f) {
return f.file;
@@ -264,7 +275,8 @@
fileManager.setFiles({
propertyAlias: vm.propertyAlias,
files: args.files,
- culture: vm.culture
+ culture: vm.culture,
+ segment: vm.segment
});
updateModelFromSelectedFiles(args.files).then(function(newVal) {
@@ -287,6 +299,7 @@
templateUrl: 'views/components/upload/umb-property-file-upload.html',
bindings: {
culture: "@?",
+ segment: "@?",
propertyAlias: "@",
value: "<",
hideSelection: "<",
diff --git a/src/Umbraco.Web.UI.Client/src/common/services/filemanager.service.js b/src/Umbraco.Web.UI.Client/src/common/services/filemanager.service.js
index 9e0285d58d..38aee3fc4a 100644
--- a/src/Umbraco.Web.UI.Client/src/common/services/filemanager.service.js
+++ b/src/Umbraco.Web.UI.Client/src/common/services/filemanager.service.js
@@ -39,18 +39,22 @@ function fileManager($rootScope) {
args.culture = null;
}
+ if (!args.segment) {
+ args.segment = null;
+ }
+
var metaData = [];
if (Utilities.isArray(args.metaData)) {
metaData = args.metaData;
}
- //this will clear the files for the current property/culture and then add the new ones for the current property
+ //this will clear the files for the current property/culture/segment and then add the new ones for the current property
fileCollection = _.reject(fileCollection, function (item) {
- return item.alias === args.propertyAlias && (!args.culture || args.culture === item.culture);
+ return item.alias === args.propertyAlias && (!args.culture || args.culture === item.culture) && (!args.segment || args.segment === item.segment);
});
for (var i = 0; i < args.files.length; i++) {
//save the file object to the files collection
- fileCollection.push({ alias: args.propertyAlias, file: args.files[i], culture: args.culture, metaData: metaData });
+ fileCollection.push({ alias: args.propertyAlias, file: args.files[i], culture: args.culture, segment: args.segment, metaData: metaData });
}
},
diff --git a/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js
index edf698c8a7..4cbc5e567a 100644
--- a/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js
+++ b/src/Umbraco.Web.UI.Client/src/common/services/umbrequesthelper.service.js
@@ -252,12 +252,13 @@ function umbRequestHelper($http, $q, notificationsService, eventsService, formHe
for (var f in args.files) {
//each item has a property alias and the file object, we'll ensure that the alias is suffixed to the key
// so we know which property it belongs to on the server side
- var fileKey = "file_" + args.files[f].alias + "_" + (args.files[f].culture ? args.files[f].culture : "");
+ var file = args.files[f];
+ var fileKey = "file_" + file.alias + "_" + (file.culture ? file.culture : "") + "_" + (file.segment ? file.segment : "");
- if (Utilities.isArray(args.files[f].metaData) && args.files[f].metaData.length > 0) {
- fileKey += ("_" + args.files[f].metaData.join("_"));
+ if (Utilities.isArray(file.metaData) && file.metaData.length > 0) {
+ fileKey += ("_" + file.metaData.join("_"));
}
- formData.append(fileKey, args.files[f].file);
+ formData.append(fileKey, file.file);
}
}).then(function (response) {
//success callback
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.controller.js
index 17959b9950..c485f4bbc6 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.controller.js
@@ -34,6 +34,7 @@
fileManager.setFiles({
propertyAlias: $scope.model.alias,
culture: $scope.model.culture,
+ segment: $scope.model.segment,
files: []
});
}
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.html
index 2bc609714a..522278e99e 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.html
@@ -1,5 +1,6 @@
3)
+ {
+ segment = parts[3];
+ //normalize to null if empty
+ if (segment.IsNullOrWhiteSpace())
+ {
+ segment = null;
+ }
+ }
+
+ // TODO: anything after 4 parts we can put in metadata
var fileName = file.Headers.ContentDisposition.FileName.Trim('\"');
@@ -59,6 +71,7 @@ namespace Umbraco.Web.Editors.Binders
TempFilePath = file.LocalFileName,
PropertyAlias = propAlias,
Culture = culture,
+ Segment = segment,
FileName = fileName
});
}
diff --git a/src/Umbraco.Web/Editors/ContentControllerBase.cs b/src/Umbraco.Web/Editors/ContentControllerBase.cs
index 300c777b3a..893c9f5941 100644
--- a/src/Umbraco.Web/Editors/ContentControllerBase.cs
+++ b/src/Umbraco.Web/Editors/ContentControllerBase.cs
@@ -76,7 +76,7 @@ namespace Umbraco.Web.Editors
// prepare files, if any matching property and culture
var files = contentItem.UploadedFiles
- .Where(x => x.PropertyAlias == propertyDto.Alias && x.Culture == propertyDto.Culture)
+ .Where(x => x.PropertyAlias == propertyDto.Alias && x.Culture == propertyDto.Culture && x.Segment == propertyDto.Segment)
.ToArray();
foreach (var file in files)