From 78b44daaa89e0fcaea3765f3e9f1c0d4a61a45f2 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Wed, 13 Apr 2022 22:38:57 -0400 Subject: [PATCH] ExportEtherpad: Fix `exportEtherpadAdditionalContent` hook docs When exporting, only records like `comments:padId` are supported, not records like `comments:padId:foo`. --- doc/api/hooks_server-side.md | 20 +++++++++++--------- src/node/utils/ExportEtherpad.js | 2 -- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/api/hooks_server-side.md b/doc/api/hooks_server-side.md index de2aaa74e..c12f42b20 100644 --- a/doc/api/hooks_server-side.md +++ b/doc/api/hooks_server-side.md @@ -945,17 +945,19 @@ exports.exportHtmlAdditionalTagsWithData = function(hook, pad, cb){ }; ``` -## exportEtherpadAdditionalContent -Called from src/node/utils/ExportEtherpad.js and -src/node/utils/ImportEtherpad.js +## `exportEtherpadAdditionalContent` -Things in context: Nothing +Called from `src/node/utils/ExportEtherpad.js` and +`src/node/utils/ImportEtherpad.js`. -Useful for exporting and importing pad metadata that is stored in the database -but not in the pad's content or attributes. For example, in ep_comments_page the -comments are stored as `comments:padId:uniqueIdOfComment` so a complete export -of all pad data to an `.etherpad` file must include the `comments:padId:*` -records. +Called when exporting to an `.etherpad` file or when importing from an +`.etherpad` file. The hook function should return prefixes for pad-specific +records that should be included in the export/import. On export, each +`${prefix}:${padId}` record (but not `${prefix}:${padId}:*` records) are +included in the generated `.etherpad` file. On import, all `${prefix}:${padId}` +and `${prefix}:${padId}:*` records are loaded into the database. + +Context properties: None. Example: diff --git a/src/node/utils/ExportEtherpad.js b/src/node/utils/ExportEtherpad.js index 176a53f40..6f5eb474c 100644 --- a/src/node/utils/ExportEtherpad.js +++ b/src/node/utils/ExportEtherpad.js @@ -32,8 +32,6 @@ exports.getPadRaw = async (padId, readOnlyId) => { } for (let i = 0; i <= pad.head; ++i) data[`${pfx}:revs:${i}`] = await pad.getRevision(i); for (let i = 0; i <= pad.chatHead; ++i) data[`${pfx}:chat:${i}`] = await pad.getChatMessage(i); - // get content that has a different prefix IE comments:padId:foo - // a plugin would return something likle ['comments', 'cakes'] const prefixes = await hooks.aCallAll('exportEtherpadAdditionalContent'); await Promise.all(prefixes.map(async (prefix) => { data[`${prefix}:${readOnlyId || padId}`] = await pad.db.get(`${prefix}:${padId}`);