mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 17:16:14 +01:00
feat: #7032
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
@import "./extend/rewards";
|
@import "./extend/rewards";
|
||||||
@import "./extend/widgets";
|
@import "./extend/widgets";
|
||||||
@import "./advanced/database";
|
@import "./advanced/database";
|
||||||
|
@import "./advanced/events";
|
||||||
@import "./advanced/logs";
|
@import "./advanced/logs";
|
||||||
@import "./advanced/errors";
|
@import "./advanced/errors";
|
||||||
@import "./advanced/hooks";
|
@import "./advanced/hooks";
|
||||||
|
|||||||
6
public/less/admin/advanced/events.less
Normal file
6
public/less/admin/advanced/events.less
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
.delete-event {
|
||||||
|
i {
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,17 @@ define('admin/advanced/events', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('.delete-event').on('click', function () {
|
||||||
|
var parentEl = $(this).parents('[data-eid]');
|
||||||
|
var eid = parentEl.attr('data-eid');
|
||||||
|
socket.emit('admin.deleteEvents', [eid], function (err) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
parentEl.remove();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
$('#filter').on('change', function () {
|
$('#filter').on('change', function () {
|
||||||
var filter = $(this).val();
|
var filter = $(this).val();
|
||||||
ajaxify.go('admin/advanced/events' + (filter ? '?filter=' + filter : ''));
|
ajaxify.go('admin/advanced/events' + (filter ? '?filter=' + filter : ''));
|
||||||
|
|||||||
@@ -158,9 +158,7 @@ events.deleteEvents = function (eids, callback) {
|
|||||||
var keys;
|
var keys;
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function (next) {
|
function (next) {
|
||||||
keys = eids.map(function (eid) {
|
keys = eids.map(eid => 'event:' + eid);
|
||||||
return 'event:' + eid;
|
|
||||||
});
|
|
||||||
db.getObjectsFields(keys, ['type'], next);
|
db.getObjectsFields(keys, ['type'], next);
|
||||||
},
|
},
|
||||||
function (eventData, next) {
|
function (eventData, next) {
|
||||||
|
|||||||
@@ -333,6 +333,10 @@ SocketAdmin.errors.clear = function (socket, data, callback) {
|
|||||||
meta.errors.clear(callback);
|
meta.errors.clear(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SocketAdmin.deleteEvents = function (socket, eids, callback) {
|
||||||
|
events.deleteEvents(eids, callback);
|
||||||
|
};
|
||||||
|
|
||||||
SocketAdmin.deleteAllEvents = function (socket, data, callback) {
|
SocketAdmin.deleteAllEvents = function (socket, data, callback) {
|
||||||
events.deleteAll(callback);
|
events.deleteAll(callback);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<!-- ENDIF !events.length -->
|
<!-- ENDIF !events.length -->
|
||||||
<div class="events-list">
|
<div class="events-list">
|
||||||
<!-- BEGIN events -->
|
<!-- BEGIN events -->
|
||||||
<div>
|
<div data-eid="{events.eid}">
|
||||||
<span>#{events.eid} </span><span class="label label-info">{events.type}</span>
|
<span>#{events.eid} </span><span class="label label-info">{events.type}</span>
|
||||||
<a href="{config.relative_path}/user/{events.user.userslug}" target="_blank">
|
<a href="{config.relative_path}/user/{events.user.userslug}" target="_blank">
|
||||||
<!-- IF events.user.picture -->
|
<!-- IF events.user.picture -->
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
<!-- ENDIF events.user.picture -->
|
<!-- ENDIF events.user.picture -->
|
||||||
</a>
|
</a>
|
||||||
<a href="{config.relative_path}/user/{events.user.userslug}" target="_blank">{events.user.username}</a> (uid {events.uid}) (IP {events.ip})
|
<a href="{config.relative_path}/user/{events.user.userslug}" target="_blank">{events.user.username}</a> (uid {events.uid}) (IP {events.ip})
|
||||||
|
<span class="pull-right delete-event"><i class="fa fa-trash-o"></i></span>
|
||||||
<span class="pull-right">{events.timestampISO}</span>
|
<span class="pull-right">{events.timestampISO}</span>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<pre>{events.jsonString}</pre>
|
<pre>{events.jsonString}</pre>
|
||||||
|
|||||||
@@ -580,6 +580,20 @@ describe('socket.io', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should delete a single event', function (done) {
|
||||||
|
db.getSortedSetRevRange('events:time', 0, 0, function (err, eids) {
|
||||||
|
assert.ifError(err);
|
||||||
|
socketAdmin.deleteEvents({ uid: adminUid }, eids, function (err) {
|
||||||
|
assert.ifError(err);
|
||||||
|
db.isSortedSetMembers('events:time', eids, function (err, isMembers) {
|
||||||
|
assert.ifError(err);
|
||||||
|
assert(!isMembers.includes(true));
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should delete all events', function (done) {
|
it('should delete all events', function (done) {
|
||||||
socketAdmin.deleteAllEvents({ uid: adminUid }, {}, function (err) {
|
socketAdmin.deleteAllEvents({ uid: adminUid }, {}, function (err) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
|
|||||||
Reference in New Issue
Block a user