Skip to content

Commit e0f10db

Browse files
authored
Merge pull request #1683 from CanStudios/issue/1678
Populate new courses so that they can be previewed
2 parents a51fed7 + 4f4cdae commit e0f10db

9 files changed

Lines changed: 94 additions & 42 deletions

File tree

frontend/src/core/models/articleModel.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ define(function(require) {
66
urlRoot: '/api/content/article',
77
_parent: 'contentObjects',
88
_siblings: 'articles',
9-
_children: 'blocks',
10-
11-
initialize: function(options) {
12-
// TODO intentional override?
13-
}
9+
_children: 'blocks'
1410
});
1511

1612
return ArticleModel;

frontend/src/core/models/blockModel.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@ define(function(require) {
2828
'_extensions',
2929
'themeSettings',
3030
'_onScreen'
31-
],
32-
33-
initialize: function() {
34-
// TODO interntional override?
35-
}
31+
]
3632
});
3733

3834
return BlockModel;

frontend/src/core/models/componentModel.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,7 @@ define(function(require) {
2727
'version',
2828
'themeSettings',
2929
'_onScreen'
30-
],
31-
32-
initialize: function() {
33-
// TODO intentional override?
34-
}
30+
]
3531
});
3632

3733
return ComponentModel;

frontend/src/core/models/componentTypeModel.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ define(function(require) {
99

1010
comparator: function(model) {
1111
return model.get('displayName');
12-
},
13-
14-
initialize: function() {
15-
// TODO intentional override?
1612
}
1713
});
1814

frontend/src/core/models/contentObjectModel.js

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,6 @@ define(function(require) {
1212
defaults: {
1313
_isSelected: false,
1414
_isExpanded: false
15-
},
16-
17-
initialize: function() {
18-
this.listenTo(this, 'sync change:_type', this.setupConstructor);
19-
this.setupConstructor();
20-
},
21-
22-
setupConstructor: function() {
23-
if (this.get('_parentId') === Origin.editor.data.course.get('_id')) {
24-
this._parent === 'course';
25-
}
26-
if (this.get('_type') === 'menu') {
27-
this._children = 'contentObjects';
28-
}
2915
}
3016
});
3117

frontend/src/core/models/courseModel.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ define(function(require) {
99
_type: 'course',
1010
_children: 'contentObjects',
1111

12-
initialize : function(options) {
13-
},
14-
1512
getHeroImageURI: function () {
1613
if(Helpers.isAssetExternal(this.get('heroImage'))) {
1714
return this.get('heroImage');

frontend/src/core/models/extensionModel.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ define(function(require) {
55
var ExtensionModel = ContentModel.extend({
66
urlRoot: '/api/extensiontype',
77
idAttribute: '_id',
8-
_type: 'extension',
9-
10-
initialize: function(){
11-
}
8+
_type: 'extension'
129
});
1310

1411
return ExtensionModel;

frontend/src/modules/editor/course/views/editorCourseEditView.js

Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
// LICENCE https://github.com/adaptlearning/adapt_authoring/blob/master/LICENSE
22
define(function(require) {
3-
var Backbone = require('backbone');
43
var Origin = require('core/origin');
54

65
var ConfigModel = require('core/models/configModel');
6+
var ContentObjectModel = require('core/models/contentObjectModel');
7+
var ArticleModel = require('core/models/articleModel');
8+
var BlockModel = require('core/models/blockModel');
9+
var ComponentModel = require('core/models/componentModel');
10+
var ComponentTypeModel = require('core/models/componentTypeModel');
711
var EditorOriginView = require('../../global/views/editorOriginView');
12+
var EditorCollection = require('../../global/collections/editorCollection');
813

914
var EditorCourseEditView = EditorOriginView.extend({
1015
className: "course-edit",
@@ -44,7 +49,7 @@ define(function(require) {
4449

4550
onSaveSuccess: function(model, response, options) {
4651
if (this.isNew) {
47-
return Origin.router.navigateTo('editor/' + response._id + '/menu');
52+
this.populateNewCourse(model);
4853
} else {
4954
EditorOriginView.prototype.onSaveSuccess.apply(this, arguments);
5055
}
@@ -58,7 +63,89 @@ define(function(require) {
5863

5964
var messageText = typeof response.responseJSON == 'object' && response.responseJSON.message;
6065
EditorOriginView.prototype.onSaveError.call(this, null, messageText);
66+
},
67+
68+
/**
69+
* When a new course is created it gets populated with a page, article, block and text component
70+
* so that it can be previewed immediately.
71+
* @param model
72+
*/
73+
populateNewCourse: function(model) {
74+
this.createGenericPage(model);
75+
},
76+
77+
createGenericPage: function(courseModel) {
78+
var contentObjectModel = new ContentObjectModel({
79+
title: Origin.l10n.t('app.placeholdernewpage'),
80+
displayTitle: Origin.l10n.t('app.placeholdernewpage'),
81+
_type: 'page',
82+
_courseId: courseModel.get('_id'),
83+
_parentId: courseModel.get('_id')
84+
});
85+
contentObjectModel.save(null, {
86+
error: _.bind(this.onSaveError, this),
87+
success: _.bind(this.createGenericArticle, this)
88+
});
89+
},
90+
91+
createGenericArticle: function(pageModel) {
92+
var articleModel = new ArticleModel({
93+
_courseId: pageModel.get('_courseId'),
94+
_parentId: pageModel.get('_id'),
95+
_type: 'article'
96+
});
97+
articleModel.save(null, {
98+
error: _.bind(this.onSaveError, this),
99+
success: _.bind(this.createGenericBlock, this)
100+
});
101+
},
102+
103+
createGenericBlock: function(articleModel) {
104+
var blockModel = new BlockModel({
105+
_courseId: articleModel.get('_courseId'),
106+
_parentId: articleModel.get('_id'),
107+
_type: 'block',
108+
layoutOptions: [
109+
{ type: 'left', name: 'app.layoutleft', pasteZoneRenderOrder: 2 },
110+
{ type: 'full', name: 'app.layoutfull', pasteZoneRenderOrder: 1 },
111+
{ type: 'right', name: 'app.layoutright', pasteZoneRenderOrder: 3 }
112+
]
113+
});
114+
blockModel.save(null, {
115+
error: _.bind(this.onSaveError, this),
116+
success: _.bind(this.createGenericComponent, this)
117+
});
118+
},
119+
120+
createGenericComponent: function(blockModel) {
121+
// Store the component types
122+
var componentTypes = new EditorCollection(null, {
123+
model: ComponentTypeModel,
124+
url: '/api/componenttype',
125+
_type: 'componentTypes'
126+
});
127+
componentTypes.fetch({
128+
error: _.bind(this.onSaveError, this),
129+
success: _.bind(function() {
130+
var componentModel = new ComponentModel({
131+
_courseId: blockModel.get('_courseId'),
132+
_parentId: blockModel.get('_id'),
133+
body: Origin.l10n.t('app.projectcontentbody'),
134+
_type: 'component',
135+
_component: 'text',
136+
_componentType: componentTypes.findWhere({ component: 'text' }).attributes._id,
137+
_layout: 'full'
138+
});
139+
componentModel.save(null, {
140+
error: _.bind(this.onSaveError, this),
141+
success: function() {
142+
Origin.router.navigateTo('/editor/' + componentModel.get('_courseId') + '/menu');
143+
}
144+
});
145+
}, this)
146+
});
61147
}
148+
62149
}, {
63150
template: 'editorCourseEdit'
64151
});

routes/lang/en-application.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
"app.fixerrors": "Please fix the below errors before continuing.",
141141
"app.manageextensions": "Manage extensions",
142142
"app.projectsettings": "Project settings",
143+
"app.projectcontentbody": "This is a text component",
143144
"app.configurationsettings": "Configuration settings",
144145
"app.themesettings": "Theme settings",
145146
"app.themepicker": "Theme picker",

0 commit comments

Comments
 (0)