From 4c5a2fbd1f8ad2f2447235442bf96b893f18a409 Mon Sep 17 00:00:00 2001 From: Romulus Urakagi Tsai Date: Thu, 14 May 2020 14:55:54 +0800 Subject: Card clone OK --- models/attachments.js | 35 +++++++++++++++++++++++++++++++++-- models/cards.js | 12 ++++++++---- server/migrations.js | 3 +-- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/models/attachments.js b/models/attachments.js index d469f702..1a55cb85 100644 --- a/models/attachments.js +++ b/models/attachments.js @@ -1,4 +1,5 @@ import { FilesCollection } from 'meteor/ostrio:files'; +const fs = require('fs'); const collectionName = 'attachments2'; @@ -19,6 +20,36 @@ if (Meteor.isServer) { // TODO: Permission related // TODO: Add Activity update + Meteor.methods({ + cloneAttachment(file, overrides) { + check(file, Object); + check(overrides, Match.Maybe(Object)); + const path = file.path; + const opts = { + fileName: file.name, + type: file.type, + meta: file.meta, + userId: file.userId + }; + for (let key in overrides) { + if (key === 'meta') { + for (let metaKey in overrides.meta) { + opts.meta[metaKey] = overrides.meta[metaKey]; + } + } else { + opts[key] = overrides[key]; + } + } + const buffer = fs.readFileSync(path); + Attachments.write(buffer, opts, (err, fileRef) => { + if (err) { + console.log('Error when cloning record', err); + } + }); + return true; + } + }); + Meteor.publish(collectionName, function() { return Attachments.find().cursor; }); @@ -51,13 +82,13 @@ function onAttachmentUploaded(fileRef) { } else { // Don't add activity about adding the attachment as the activity // be imported and delete source field - CFSAttachments.update( + Attachments.collection.update( { _id: fileRef._id, }, { $unset: { - source: '', + 'meta.source': '', }, }, ); diff --git a/models/cards.js b/models/cards.js index 1236de1a..ae52ff04 100644 --- a/models/cards.js +++ b/models/cards.js @@ -402,10 +402,14 @@ Cards.helpers({ const _id = Cards.insert(this); // Copy attachments - oldCard.attachments().forEach(att => { - att.meta.cardId = _id; - delete att._id; - return Attachments.insert(att); + oldCard.attachments().forEach((file) => { + Meteor.call('cloneAttachment', file, + { + meta: { + cardId: _id + } + } + ); }); // copy checklists diff --git a/server/migrations.js b/server/migrations.js index e330f043..3577c78d 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -1061,6 +1061,7 @@ Migrations.add('change-attachment-library', () => { let opts = { fileName: file.name(), type: file.type(), + size: file.size(), fileId: file._id, meta: { userId: file.userId, @@ -1077,8 +1078,6 @@ Migrations.add('change-attachment-library', () => { Attachments.addFile(path, opts, (err, fileRef) => { if (err) { console.log('error when migrating ', fileName, err); - } else { - file.remove(); } }); }); -- cgit v1.2.3-1-g7c22