From 7c6854651d1218a7fd543ae599810ef0e38dfad1 Mon Sep 17 00:00:00 2001 From: Sam Lord Date: Thu, 10 Nov 2022 15:52:56 +0000 Subject: [PATCH] Added tag to posts when importing content refs: https://github.com/TryGhost/Toolbox/issues/431 --- .../server/data/importer/email-template.js | 12 +++++----- .../server/data/importer/import-manager.js | 6 ++++- .../importer/importers/data/data-importer.js | 24 +++++++++++++++++++ 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/ghost/core/core/server/data/importer/email-template.js b/ghost/core/core/server/data/importer/email-template.js index b65fc16e9e..f10a7d3c87 100644 --- a/ghost/core/core/server/data/importer/email-template.js +++ b/ghost/core/core/server/data/importer/email-template.js @@ -131,15 +131,15 @@ module.exports = ({result, siteUrl, postsUrl, emailRecipient}) => ` ${iff(result.errors, ` -

Failed to import content with the following error${iff(result.errors && result.errors.length > 1), `s`, ``}:

+

Failed to import content with the following error${iff(result.errors.length > 1), `s`, ``}:

@@ -147,15 +147,15 @@ module.exports = ({result, siteUrl, postsUrl, emailRecipient}) => ` ${iff(result.problems && result.problems.length > 0, ` -

Imported content successfully, but with the following warning${iff(result.problems && result.problems.length > 1), `s`, ``}:

+

Imported content successfully, but with the following warning${iff(result.problems.length > 1), `s`, ``}:

diff --git a/ghost/core/core/server/data/importer/import-manager.js b/ghost/core/core/server/data/importer/import-manager.js index 0b2e3871f5..37a00f28f8 100644 --- a/ghost/core/core/server/data/importer/import-manager.js +++ b/ghost/core/core/server/data/importer/import-manager.js @@ -426,13 +426,17 @@ class ImportManager { importResult = await this.generateReport(importResult); return importResult; + } catch (err) { + logging.error(`Content import was unsuccessful`, { + error: err + }); } finally { // Step 5: Cleanup any files await this.cleanUp(); if (!importOptions.forceInline) { // Step 6: Send email - const email = this.generateCompletionEmail(importResult.data, { + const email = this.generateCompletionEmail(importResult?.data, { emailRecipient: importOptions.user.email, importTag: importOptions.importTag }); diff --git a/ghost/core/core/server/data/importer/importers/data/data-importer.js b/ghost/core/core/server/data/importer/importers/data/data-importer.js index dcfc8cd74f..452602172c 100644 --- a/ghost/core/core/server/data/importer/importers/data/data-importer.js +++ b/ghost/core/core/server/data/importer/importers/data/data-importer.js @@ -1,4 +1,5 @@ const _ = require('lodash'); +const ObjectId = require('bson-objectid').default; const Promise = require('bluebird'); const semver = require('semver'); const {IncorrectUsageError} = require('@tryghost/errors'); @@ -15,6 +16,7 @@ const StripeProductsImporter = require('./stripe-products'); const StripePricesImporter = require('./stripe-prices'); const CustomThemeSettingsImporter = require('./custom-theme-settings'); const RolesImporter = require('./roles'); +const {slugify} = require('@tryghost/string/lib'); let importers = {}; let DataImporter; @@ -46,6 +48,28 @@ DataImporter = { doImport: async function doImport(importData, importOptions) { importOptions = importOptions || {}; + if (importOptions.importTag) { + const tagId = ObjectId().toHexString(); + if (!('tags' in importData.data)) { + importData.data.tags = []; + } + importData.data.tags.push({ + id: tagId, + name: importOptions.importTag, + slug: slugify(importOptions.importTag) + }); + for (const post of importData.data.posts || []) { + if (!('id' in post)) { + // Make sure post has an id if it doesn't already + post.id = ObjectId().toHexString(); + } + importData.data.posts_tags.push({ + post_id: post.id, + tag_id: tagId + }); + } + } + const ops = []; let problems = []; let errors = [];