diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index b684942ad4..7887f197c9 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -107,17 +107,18 @@ define('admin/manage/category', [ }); }, 1000); - socket.emit('admin.categories.purge', ajaxify.data.category.cid, function (err) { - if (err) { - return app.alertError(err.message); - } - + $.ajax({ + url: config.relative_path + '/api/v1/categories/' + ajaxify.data.category.cid, + method: 'delete', + }).done(function () { if (intervalId) { clearInterval(intervalId); } modal.modal('hide'); app.alertSuccess('[[admin/manage/categories:alert.purge-success]]'); ajaxify.go('admin/manage/categories'); + }).fail(function (ev) { + app.alertError(ev.responseJSON.status.message); }); return false; diff --git a/src/controllers/write/categories.js b/src/controllers/write/categories.js index 02e28b5539..7643ec027b 100644 --- a/src/controllers/write/categories.js +++ b/src/controllers/write/categories.js @@ -1,6 +1,7 @@ 'use strict'; const categories = require('../../categories'); +const events = require('../../events'); const helpers = require('../helpers'); @@ -20,3 +21,17 @@ Categories.update = async (req, res) => { const categoryObjs = await categories.getCategories([req.params.cid]); helpers.formatApiResponse(200, res, categoryObjs[0]); }; + +Categories.delete = async (req, res) => { + const name = await categories.getCategoryField(req.params.cid, 'name'); + await Categories.purge(req.params.cid, req.user.uid); + await events.log({ + type: 'category-purge', + uid: req.user.uid, + ip: req.ip, + cid: req.params.cid, + name: name, + }); + + helpers.formatApiResponse(200, res); +}; diff --git a/src/routes/write/categories.js b/src/routes/write/categories.js index 6607d65daf..f07cf54b8e 100644 --- a/src/routes/write/categories.js +++ b/src/routes/write/categories.js @@ -10,16 +10,11 @@ const setupApiRoute = routeHelpers.setupApiRoute; module.exports = function () { const middlewares = [middleware.authenticate]; - setupApiRoute(router, '/', middleware, [...middlewares, middleware.checkRequired.bind(null, ['name'])], 'post', controllers.write.categories.create); - setupApiRoute(router, '/:cid', middleware, [...middlewares], 'put', controllers.write.categories.update); - - // app.route('/:cid') - // .delete(apiMiddleware.requireUser, apiMiddleware.requireAdmin, apiMiddleware.validateCid, function(req, res) { - // Categories.purge(req.params.cid, req.user.uid, function(err) { - // return errorHandler.handle(err, res); - // }); - // }); + setupApiRoute(router, '/', middleware, [...middlewares, middleware.checkRequired.bind(null, ['name']), middleware.isAdmin], 'post', controllers.write.categories.create); + setupApiRoute(router, '/:cid', middleware, [...middlewares, middleware.isAdmin], 'put', controllers.write.categories.update); + setupApiRoute(router, '/:cid', middleware, [...middlewares, middleware.isAdmin], 'delete', controllers.write.categories.delete); + // Category disabled state is deprecated, so this route won't be ported over // app.route('/:cid/state') // .put(apiMiddleware.requireUser, apiMiddleware.requireAdmin, apiMiddleware.validateCid, function(req, res) { // var payload = {}; diff --git a/src/socket.io/admin/categories.js b/src/socket.io/admin/categories.js index 31bd2ae0bf..e73d4d14ae 100644 --- a/src/socket.io/admin/categories.js +++ b/src/socket.io/admin/categories.js @@ -40,6 +40,8 @@ Categories.getNames = async function () { }; Categories.purge = async function (socket, cid) { + sockets.warnDeprecated(socket, 'DELETE /api/v1/categories/:cid'); + const name = await categories.getCategoryField(cid, 'name'); await categories.purge(cid, socket.uid); await events.log({