Created
May 21, 2019 13:30
-
-
Save taylortom/b77f3ed2260b42e3a3b4c85512816c24 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/plugins/output/adapt/import-transforms.js b/plugins/output/adapt/import-transforms.js | |
new file mode 100644 | |
index 00000000..a128cfb4 | |
--- /dev/null | |
+++ b/plugins/output/adapt/import-transforms.js | |
@@ -0,0 +1,85 @@ | |
+const async = require('async'); | |
+ | |
+let courseId, metadata; | |
+ | |
+function transformContent(done) { | |
+ app.contentmanager.getContentPlugin('course', function(error, plugin) { | |
+ if(error) { | |
+ return done(error); | |
+ } | |
+ plugin.retrieve({ _id: courseId }, {}, function(error, results) { | |
+ if(error || !results.length) { | |
+ return done(error); | |
+ } | |
+ const delta = {}; | |
+ | |
+ async.applyEach([ | |
+ transformStartController, | |
+ transformHeroImage, | |
+ transformFilterMenu | |
+ ], results[0], delta, function(error) { | |
+ if(error || Object.keys(delta).length === 0) { | |
+ return done(error); | |
+ } | |
+ // everything OK, update the DB | |
+ plugin.update({ _id: courseId }, delta, done); | |
+ }); | |
+ }); | |
+ }); | |
+} | |
+ | |
+function transformStartController(courseDoc, delta, done) { | |
+ const ids = courseDoc._start && courseDoc._start._startIds; | |
+ if(!ids || !ids.length) { | |
+ return done(); | |
+ } | |
+ const newIds = []; | |
+ | |
+ for(let i = 0, count = ids.length; i < count; i++) { | |
+ const mappedId = metadata.idMap[ids[i]._id]; | |
+ if(!mappedId) { | |
+ return console.log(`WARN: transformStartController::no match for ${mappedId}`); | |
+ } | |
+ newIds.push(_.extend({}, ids[i], { _id: mappedId })); | |
+ } | |
+ delta._start = _.extend({}, courseDoc._start, { _startIds: newIds }); | |
+ done(); | |
+} | |
+ | |
+function transformHeroImage(courseDoc, delta, done) { | |
+ if(courseDoc.heroImage) { | |
+ const mappedId = metadata.idMap[courseDoc.heroImage]; | |
+ if(!mappedId) { | |
+ return console.log(`WARN: transformHeroImage::no match for image ${mappedId}`); | |
+ } | |
+ delta.heroImage = mappedId; | |
+ } | |
+ done(); | |
+} | |
+ | |
+function transformFilterMenu(courseDoc, delta, done) { | |
+ if(!courseDoc.menuSettings || !courseDoc.menuSettings._filterMenu) { | |
+ return done(); | |
+ } | |
+ delta.menuSettings = _.extend({}, courseDoc.menuSettings); | |
+ | |
+ delta.menuSettings._filterMenu._strips.forEach(function(strip) { | |
+ strip._items.forEach(function(item) { | |
+ if(item._type !== 'contentObject') { | |
+ return; | |
+ } | |
+ const mappedId = metadata.idMap[item._id]; | |
+ if(!mappedId) { | |
+ return console.log(`WARN: transformFilterMenu::no match for ${mappedId.toString()}`); | |
+ } | |
+ item._id = mappedId.toString(); | |
+ }); | |
+ }); | |
+ done(); | |
+} | |
+ | |
+module.exports = function(pCourseId, pMetadata) { | |
+ courseId = pCourseId; | |
+ metadata = pMetadata; | |
+ return transformContent; | |
+} | |
diff --git a/plugins/output/adapt/importsource.js b/plugins/output/adapt/importsource.js | |
index 5d31deda..7015b7ac 100644 | |
--- a/plugins/output/adapt/importsource.js | |
+++ b/plugins/output/adapt/importsource.js | |
@@ -16,6 +16,8 @@ const logger = require("../../../lib/logger"); | |
const mime = require('mime'); | |
const path = require("path"); | |
+const importTransforms = require('./import-transforms'); | |
+ | |
function ImportSource(req, done) { | |
var dbInstance; | |
@@ -73,7 +75,8 @@ function ImportSource(req, done) { | |
installPlugins, | |
addAssets, | |
cacheMetadata, | |
- importContent | |
+ importContent, | |
+ cb => importTransforms(courseId, metadata)(cb), | |
], (importErr, result) => { // cleanup should run regardless of import success | |
helpers.cleanUpImport(cleanupDirs, cleanUpErr => done(importErr || cleanUpErr)); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment