11// LICENCE https://github.com/adaptlearning/adapt_authoring/blob/master/LICENSE
22define ( 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 } ) ;
0 commit comments