Skip to content

Instantly share code, notes, and snippets.

@taylortom
Created May 21, 2019 13:30
Show Gist options
  • Save taylortom/b77f3ed2260b42e3a3b4c85512816c24 to your computer and use it in GitHub Desktop.
Save taylortom/b77f3ed2260b42e3a3b4c85512816c24 to your computer and use it in GitHub Desktop.
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