mirror of
https://github.com/wekan/wekan.git
synced 2026-01-02 15:48:49 +01:00
Ref: original & and use fileObj.meta
fileObj.meta is part of the ostrio:files API and be passed to the constructor. This is less hacky than trying tu update a persistet object after the fact.
This commit is contained in:
parent
16506e7a6a
commit
e702f17c7b
10 changed files with 124 additions and 159 deletions
|
|
@ -7,6 +7,21 @@ import { createOnAfterRemove } from './lib/fsHooks/createOnAfterRemove';
|
|||
|
||||
const attachmentBucket = createBucket('attachments');
|
||||
|
||||
const insertActivity = (fileObj, activityType) =>
|
||||
Activities.insert({
|
||||
userId: fileObj.userId,
|
||||
type: 'card',
|
||||
activityType,
|
||||
attachmentId: fileObj._id,
|
||||
// this preserves the name so that notifications can be meaningful after
|
||||
// this file is removed
|
||||
attachmentName: fileObj.name,
|
||||
boardId: fileObj.meta.boardId,
|
||||
cardId: fileObj.meta.cardId,
|
||||
listId: fileObj.meta.listId,
|
||||
swimlaneId: fileObj.meta.swimlaneId,
|
||||
});
|
||||
|
||||
// XXX Enforce a schema for the Attachments FilesCollection
|
||||
// see: https://github.com/VeliovGroup/Meteor-Files/wiki/Schema
|
||||
|
||||
|
|
@ -14,84 +29,46 @@ export const Attachments = new FilesCollection({
|
|||
debug: false, // Change to `true` for debugging
|
||||
collectionName: 'attachments',
|
||||
allowClientCode: false,
|
||||
onAfterUpload(doc) {
|
||||
onAfterUpload(fileRef) {
|
||||
createOnAfterUpload(attachmentBucket)(fileRef);
|
||||
// If the attachment doesn't have a source field
|
||||
// or its source is different than import
|
||||
if (!doc.source || doc.source !== 'import') {
|
||||
if (!fileRef.meta.source || fileRef.meta.source !== 'import') {
|
||||
// Add activity about adding the attachment
|
||||
Activities.insert({
|
||||
userId,
|
||||
type: 'card',
|
||||
activityType: 'addAttachment',
|
||||
attachmentId: doc._id,
|
||||
// this preserves the name so that notifications can be meaningful after
|
||||
// this file is removed
|
||||
attachmentName: doc.original.name,
|
||||
boardId: doc.boardId,
|
||||
cardId: doc.cardId,
|
||||
listId: doc.listId,
|
||||
swimlaneId: doc.swimlaneId,
|
||||
});
|
||||
} else {
|
||||
// Don't add activity about adding the attachment as the activity
|
||||
// be imported and delete source field
|
||||
Attachments.update(
|
||||
{
|
||||
_id: doc._id,
|
||||
},
|
||||
{
|
||||
$unset: {
|
||||
source: '',
|
||||
},
|
||||
},
|
||||
);
|
||||
insertActivity(fileRef, 'addAttachment');
|
||||
}
|
||||
createOnAfterUpload(attachmentBucket)(doc);
|
||||
},
|
||||
interceptDownload: createInterceptDownload(attachmentBucket),
|
||||
onAfterRemove(docs) {
|
||||
docs.forEach(function(doc) {
|
||||
Activities.insert({
|
||||
userId: doc.userId,
|
||||
type: 'card',
|
||||
activityType: 'deleteAttachment',
|
||||
attachmentId: doc._id,
|
||||
// this preserves the name so that notifications can be meaningful after
|
||||
// this file is removed
|
||||
attachmentName: doc.original.name,
|
||||
boardId: doc.boardId,
|
||||
cardId: doc.cardId,
|
||||
listId: doc.listId,
|
||||
swimlaneId: doc.swimlaneId,
|
||||
});
|
||||
onAfterRemove(files) {
|
||||
createOnAfterRemove(attachmentBucket)(files);
|
||||
files.forEach(fileObj => {
|
||||
insertActivity(fileObj, 'deleteAttachment');
|
||||
});
|
||||
createOnAfterRemove(attachmentBucket)(docs);
|
||||
},
|
||||
// We authorize the attachment download either:
|
||||
// - if the board is public, everyone (even unconnected) can download it
|
||||
// - if the board is private, only board members can download it
|
||||
downloadCallback(doc) {
|
||||
const board = Boards.findOne(doc.boardId);
|
||||
protected(fileObj) {
|
||||
const board = Boards.findOne(fileObj.meta.boardId);
|
||||
if (board.isPublic()) {
|
||||
return true;
|
||||
} else {
|
||||
return board.hasMember(this.userId);
|
||||
}
|
||||
return board.hasMember(this.userId);
|
||||
},
|
||||
});
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Attachments.allow({
|
||||
insert(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
insert(userId, fileObj) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(fileObj.boardId));
|
||||
},
|
||||
update(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
update(userId, fileObj) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(fileObj.boardId));
|
||||
},
|
||||
remove(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
remove(userId, fileObj) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(fileObj.boardId));
|
||||
},
|
||||
fetch: ['boardId'],
|
||||
fetch: ['meta'],
|
||||
});
|
||||
|
||||
Meteor.startup(() => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue