Skip to content

Commit 81fa161

Browse files
Merge pull request #2446 from adaptlearning/issue/2347
Add courseasset check on clone item, fixes #2347
2 parents bf209c6 + f63ec4d commit 81fa161

2 files changed

Lines changed: 58 additions & 2 deletions

File tree

frontend/src/core/helpers.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,27 @@ define(function(require){
336336
'<span class="max-fileupload-size">',
337337
Origin.l10n.t('app.maxfileuploadsize', {size: Origin.constants.humanMaxFileUploadSize}),
338338
'</span>'].join(''))
339+
},
340+
341+
flattenNestedProperties: function(properties) {
342+
if (!properties) return {};
343+
var flatProperties = {};
344+
for (var key in properties) {
345+
// Check for nested properties
346+
if (typeof properties[key] === 'object') {
347+
for (var innerKey in properties[key]) {
348+
// Check if key already exists
349+
if (flatProperties[innerKey]) {
350+
flatProperties[key+'.'+innerKey] = properties[key][innerKey];
351+
} else {
352+
flatProperties[innerKey] = properties[key][innerKey];
353+
}
354+
}
355+
} else {
356+
flatProperties[key] = properties[key];
357+
}
358+
}
359+
return flatProperties;
339360
}
340361
};
341362

frontend/src/modules/scaffold/views/scaffoldListView.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
define([
22
'core/origin',
3+
'core/helpers',
4+
'core/models/courseAssetModel',
35
'backbone-forms',
46
'backbone-forms-lists'
5-
], function(Origin, BackboneForms) {
7+
], function(Origin, Helpers, CourseAssetModel, BackboneForms) {
68

79
var ScaffoldListView = Backbone.Form.editors.List.extend({
810
defaultValue: [],
@@ -92,9 +94,42 @@ define([
9294
},
9395

9496
cloneItem: function(event) {
97+
var flatItem = Helpers.flattenNestedProperties(this.editor.value);
98+
var itemValues = _.values(flatItem);
99+
var parentAttributes = Origin.scaffold.getCurrentModel().attributes;
100+
itemValues.forEach(function(item) {
101+
if (typeof item !== 'string' || item.indexOf('course/assets') === -1) return;
102+
103+
var itemFileName = item.substring(item.lastIndexOf('/')+1);
104+
$.ajax({
105+
url: 'api/asset/query',
106+
type:'GET',
107+
data: {search: { filename: itemFileName }},
108+
success: function (result) {
109+
(new CourseAssetModel()).save({
110+
_courseId : Origin.editor.data.course.get('_id'),
111+
_contentType : parentAttributes._type,
112+
_contentTypeId : parentAttributes._id,
113+
_fieldName : itemFileName,
114+
_assetId : result[0]._id,
115+
_contentTypeParentId: parentAttributes._parentId
116+
}, {
117+
error: function(error) {
118+
Origin.Notify.alert({
119+
type: 'error',
120+
text: Origin.l10n.t('app.errorsaveasset')
121+
});
122+
}
123+
});
124+
},
125+
error: function() {
126+
Origin.Notify.alert({ type: 'error', text: Origin.l10n.t('app.errorduplication') });
127+
}
128+
});
129+
});
130+
95131
this.list.addItem(this.editor.value, true);
96132
}
97-
98133
});
99134

100135
Origin.on('origin:dataReady', function() {

0 commit comments

Comments
 (0)