mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-03-11 02:12:21 -05:00
parent
bb355ac9f2
commit
a4462c5753
8 changed files with 114 additions and 4 deletions
|
@ -128,6 +128,28 @@ const members = {
|
|||
}
|
||||
},
|
||||
|
||||
exportCSV: {
|
||||
headers: {
|
||||
disposition: {
|
||||
type: 'csv',
|
||||
value() {
|
||||
const datetime = (new Date()).toJSON().substring(0, 10);
|
||||
return `members.${datetime}.csv`;
|
||||
}
|
||||
}
|
||||
},
|
||||
response: {
|
||||
format: 'plain'
|
||||
},
|
||||
permissions: {
|
||||
method: 'browse'
|
||||
},
|
||||
validation: {},
|
||||
query(frame) {
|
||||
return membersService.api.members.list(frame.options);
|
||||
}
|
||||
},
|
||||
|
||||
importCSV: {
|
||||
statusCode: 201,
|
||||
permissions: {
|
||||
|
|
|
@ -38,6 +38,37 @@ module.exports = {
|
|||
};
|
||||
},
|
||||
|
||||
exportCSV(models, apiConfig, frame) {
|
||||
debug('exportCSV');
|
||||
|
||||
const fields = ['id', 'email', 'name', 'created_at', 'deleted_at'];
|
||||
|
||||
function formatCSV(data) {
|
||||
let csv = `${fields.join(',')}\r\n`,
|
||||
entry,
|
||||
field,
|
||||
j,
|
||||
i;
|
||||
|
||||
for (j = 0; j < data.length; j = j + 1) {
|
||||
entry = data[j];
|
||||
|
||||
for (i = 0; i < fields.length; i = i + 1) {
|
||||
field = fields[i];
|
||||
csv += entry[field] !== null ? entry[field] : '';
|
||||
if (i !== fields.length - 1) {
|
||||
csv += ',';
|
||||
}
|
||||
}
|
||||
csv += '\r\n';
|
||||
}
|
||||
|
||||
return csv;
|
||||
}
|
||||
|
||||
frame.response = formatCSV(models.members);
|
||||
},
|
||||
|
||||
importCSV(data, apiConfig, frame) {
|
||||
debug('importCSV');
|
||||
|
||||
|
|
|
@ -128,6 +128,28 @@ const members = {
|
|||
}
|
||||
},
|
||||
|
||||
exportCSV: {
|
||||
headers: {
|
||||
disposition: {
|
||||
type: 'csv',
|
||||
value() {
|
||||
const datetime = (new Date()).toJSON().substring(0, 10);
|
||||
return `members.${datetime}.csv`;
|
||||
}
|
||||
}
|
||||
},
|
||||
response: {
|
||||
format: 'plain'
|
||||
},
|
||||
permissions: {
|
||||
method: 'browse'
|
||||
},
|
||||
validation: {},
|
||||
query(frame) {
|
||||
return membersService.api.members.list(frame.options);
|
||||
}
|
||||
},
|
||||
|
||||
importCSV: {
|
||||
statusCode: 201,
|
||||
permissions: {
|
||||
|
|
|
@ -38,6 +38,37 @@ module.exports = {
|
|||
};
|
||||
},
|
||||
|
||||
exportCSV(models, apiConfig, frame) {
|
||||
debug('exportCSV');
|
||||
|
||||
const fields = ['id', 'email', 'name', 'created_at', 'deleted_at'];
|
||||
|
||||
function formatCSV(data) {
|
||||
let csv = `${fields.join(',')}\r\n`,
|
||||
entry,
|
||||
field,
|
||||
j,
|
||||
i;
|
||||
|
||||
for (j = 0; j < data.length; j = j + 1) {
|
||||
entry = data[j];
|
||||
|
||||
for (i = 0; i < fields.length; i = i + 1) {
|
||||
field = fields[i];
|
||||
csv += entry[field] !== null ? entry[field] : '';
|
||||
if (i !== fields.length - 1) {
|
||||
csv += ',';
|
||||
}
|
||||
}
|
||||
csv += '\r\n';
|
||||
}
|
||||
|
||||
return csv;
|
||||
}
|
||||
|
||||
frame.response = formatCSV(models.members);
|
||||
},
|
||||
|
||||
importCSV(data, apiConfig, frame) {
|
||||
debug('importCSV');
|
||||
|
||||
|
|
|
@ -105,6 +105,7 @@ module.exports = function apiRoutes() {
|
|||
router.get('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.browse));
|
||||
router.post('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.add));
|
||||
|
||||
router.get('/members/csv', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.exportCSV));
|
||||
router.post('/members/csv',
|
||||
shared.middlewares.labs.members,
|
||||
mw.authAdminApi,
|
||||
|
|
|
@ -105,6 +105,7 @@ module.exports = function apiRoutes() {
|
|||
router.get('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.browse));
|
||||
router.post('/members', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.add));
|
||||
|
||||
router.get('/members/csv', shared.middlewares.labs.members, mw.authAdminApi, http(apiv2.members.exportCSV));
|
||||
router.post('/members/csv',
|
||||
shared.middlewares.labs.members,
|
||||
mw.authAdminApi,
|
||||
|
|
|
@ -215,7 +215,7 @@ describe('Members API', function () {
|
|||
});
|
||||
});
|
||||
|
||||
it.skip('Can export CSV', function () {
|
||||
it('Can export CSV', function () {
|
||||
return request
|
||||
.get(localUtils.API.getApiQuery(`members/csv/`))
|
||||
.set('Origin', config.get('url'))
|
||||
|
@ -225,8 +225,9 @@ describe('Members API', function () {
|
|||
.then((res) => {
|
||||
should.not.exist(res.headers['x-cache-invalidate']);
|
||||
res.headers['content-disposition'].should.match(/Attachment;\sfilename="members/);
|
||||
res.text.should.match(/id,email,created_at,deleted_at/);
|
||||
res.text.should.match(/id,email,name,created_at,deleted_at/);
|
||||
res.text.should.match(/member1@test.com/);
|
||||
res.text.should.match(/Mr Egg/);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -215,7 +215,7 @@ describe('Members API', function () {
|
|||
});
|
||||
});
|
||||
|
||||
it.skip('Can export CSV', function () {
|
||||
it('Can export CSV', function () {
|
||||
return request
|
||||
.get(localUtils.API.getApiQuery(`members/csv/`))
|
||||
.set('Origin', config.get('url'))
|
||||
|
@ -225,8 +225,9 @@ describe('Members API', function () {
|
|||
.then((res) => {
|
||||
should.not.exist(res.headers['x-cache-invalidate']);
|
||||
res.headers['content-disposition'].should.match(/Attachment;\sfilename="members/);
|
||||
res.text.should.match(/id,email,created_at,deleted_at/);
|
||||
res.text.should.match(/id,email,name,created_at,deleted_at/);
|
||||
res.text.should.match(/member1@test.com/);
|
||||
res.text.should.match(/Mr Egg/);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue