feat: add quick action buttons to logs list cell

This commit is contained in:
Emil Zhai
2022-12-12 09:27:25 +00:00
parent 40007589c1
commit 60d16f3469
4 changed files with 174 additions and 25 deletions

View File

@@ -42,6 +42,7 @@ class Access_Logs {
$ip = array_key_exists('ip', $filters) ? $filters['ip'] : '';
$ua = array_key_exists('ua', $filters) ? $filters['ua'] : '';
$cid = array_key_exists('cid', $filters) ? $filters['cid'] : '';
$url = array_key_exists('url', $filters) ? $filters['url'] : '';
$path = array_key_exists('path', $filters) ? $filters['path'] : '';
$robot = array_key_exists('robot', $filters) ? $filters['robot'] : '';
$preset = array_key_exists('preset', $filters) ? $filters['preset'] : '';
@@ -59,6 +60,9 @@ class Access_Logs {
if ($cid !== '') {
$query->where('content_id' . $compare, $cid);
}
if ($url !== $empty) {
$query->where('url' . $compare, $url);
}
if ($path !== $empty) {
$query->where('path' . $compare, $path);
}
@@ -95,6 +99,7 @@ class Access_Logs {
'ip' => $this->request->get('ip', ''),
'ua' => $this->request->get('ua', ''),
'cid' => $this->request->get('cid', ''),
'url' => $this->request->get('url', ''),
'path' => $this->request->get('path', ''),
'robot' => $this->request->get('robot', ''),
'preset' => $this->request->get('preset', ''),
@@ -163,6 +168,7 @@ class Access_Logs {
$ip = $this->request->get('ip', '');
$ua = $this->request->get('ua', '');
$cid = $this->request->get('cid', '');
$url = $this->request->get('url', '');
$path = $this->request->get('path', '');
$robot = $this->request->get('robot', '');
$preset = $this->request->get('preset', '');
@@ -174,11 +180,12 @@ class Access_Logs {
}
$counterQuery = $this->filterQueryBuilder($counterQuery, ['ids' => $ids], false);
$operatorQuery = $this->filterQueryBuilder($operatorQuery, ['ids' => $ids], false);
} else if ($ip || $ua || $cid || $path || $robot || $preset) {
} else if ($ip || $ua || $cid || $url || $path || $robot || $preset) {
$filters = array(
'ip' => $ip,
'ua' => $ua,
'cid' => $cid,
'url' => $url,
'path' => $path,
'robot' => $robot,
'preset' => $preset,

View File

@@ -1,4 +1,6 @@
a[data-action="search-anchor"] {
[data-action="search-anchor"],
[data-action="ua-information"],
[data-action="ip-information"] {
cursor: pointer;
}
@@ -237,6 +239,42 @@ select.typecho-access-logs-filter-item__content {
cursor: pointer;
}
.typecho-access-logs-list-cell {
display: flex;
flex-wrap: wrap;
align-items: center;
}
.typecho-access-logs-list-cell-item:first-child {
margin-right: 5px;
}
.typecho-access-logs-list-cell-item-icon {
width: 18px;
height: 18px;
cursor: pointer;
opacity: .7;
background-size: 100% 100%;
background-position: center center;
background-repeat: no-repeat;
}
.typecho-access-logs-list-cell-item-icon:hover {
opacity: 1;
}
.typecho-access-logs-list-cell-item-information {
background-image: url("data:image/svg+xml;base64,PHN2ZyB0PSIxNjcwNTc1MDk3MDA4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE0Mzk0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTUxMi4wMDEgOTI4Ljk5N2MyMzAuNTI0IDAgNDE4LjA3Ni0xODcuNTUyIDQxOC4wNzUtNDE4LjA3NyAwLTIzMC41MjctMTg3LjU1Mi00MTguMDc3LTQxOC4wNzUtNDE4LjA3N3MtNDE4LjA3NyAxODcuNTUtNDE4LjA3NyA0MTguMDc3YzAgMjMwLjUyNSAxODcuNTUyIDQxOC4wNzcgNDE4LjA3NyA0MTguMDc3ek01MTIgMzAxLjg4YzI4Ljg2IDAgNTIuMjYgMjMuMzk5IDUyLjI2IDUyLjI2MyAwIDI4Ljg1OC0yMy4zOTkgNTIuMjU3LTUyLjI2IDUyLjI1N3MtNTIuMjYtMjMuMzk5LTUyLjI2LTUyLjI1N2MwLTI4Ljg2MyAyMy4zOTktNTIuMjYzIDUyLjI2LTUyLjI2M3pNNDU5Ljc0IDUxMC45MjJjMC0yOC44NiAyMy4zOTktNTIuMjYgNTIuMjYtNTIuMjZzNTIuMjYgMjMuMzk5IDUyLjI2IDUyLjI2djE1Ni43NzVjMCAyOC44Ni0yMy4zOTkgNTIuMjYtNTIuMjYgNTIuMjZzLTUyLjI2LTIzLjM5OS01Mi4yNi01Mi4yNnYtMTU2Ljc3NXoiIHAtaWQ9IjE0Mzk1IiBmaWxsPSIjMTI5NmRiIj48L3BhdGg+PC9zdmc+");
}
.typecho-access-logs-list-cell-item-search {
background-image: url("data:image/svg+xml;base64,PHN2ZyB0PSIxNjcwODM1ODQyODg4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE4OTQ5IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTIzMi4xMDY2NjcgMjMyLjEwNjY2N2EzNTUuNTQxMzMzIDM1NS41NDEzMzMgMCAwIDEgNTMxLjI0MjY2NiA0NzAuOTEybDE2MS4yMzczMzQgMTYxLjE5NDY2NmE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMSAxLTYwLjM3MzMzNCA2MC4zNzMzMzRsLTE4OS41NjgtMTg5LjYxMDY2N2E0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAxIDAtNjAuMzMwNjY3IDI3MC4yMDggMjcwLjIwOCAwIDEgMC05Mi44IDYwLjcxNDY2NyA0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMSAxIDMwLjk3NiA3OS40ODhBMzU1LjYyNjY2NyAzNTUuNjI2NjY3IDAgMCAxIDIzMi4xNDkzMzMgMjMyLjE0OTMzM3oiIGZpbGw9IiMxMjk2ZGIiIHAtaWQ9IjE4OTUwIj48L3BhdGg+PHBhdGggZD0iTTQ4OS4wODggMzgyLjM3ODY2N2ExMDYuNjY2NjY3IDEwNi42NjY2NjcgMCAwIDAtMTA2LjY2NjY2NyAxMDYuNjY2NjY2IDQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDEtODUuMzMzMzMzIDAgMTkyIDE5MiAwIDAgMSAxOTItMTkyIDQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDEgMCA4NS4zMzMzMzR6IiBmaWxsPSIjMTI5NmRiIiBwLWlkPSIxODk1MSI+PC9wYXRoPjwvc3ZnPg==");
}
.typecho-access-logs-list-cell-item-delete {
background-image: url("data:image/svg+xml;base64,PHN2ZyB0PSIxNjcwNTc0OTQxODMyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEzMjc5IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTU4Ni4zODEwNTggMzIyLjczNDQwMiIgcC1pZD0iMTMyODAiIGZpbGw9IiNkODFlMDYiPjwvcGF0aD48cGF0aCBkPSJNMTkxLjkwMjY1OCAxNjguODgxMzM4bDYzOS42MDYyODMgMCAwIDg3LjAyMDkzNi02MzkuNjA2MjgzIDAgMC04Ny4wMjA5MzZaIiBwLWlkPSIxMzI4MSIgZmlsbD0iI2Q4MWUwNiI+PC9wYXRoPjxwYXRoIGQ9Ik03MDMuNTg3NDggMjMyLjg0MjA2OWMwIDIzLjA2MDIwNS02My45NjA3MzEgMjMuMDYwMjA1LTc0LjAwNjUyOCAyMi40NTMzODVMMzYxLjg0NjE4OCAyNTUuMjk1NDU0Yy00Mi4wMjIwNjkgMC42MDc4NDQtNDIuMDIyMDY5IDAuNjA3ODQ0LTQyLjAyMjA2OS0yMi40NTMzODVsMC0xNy44MzkyOTdjMC00OC4wNjA1OTkgMjUuOTczNTU4LTg3LjAyMDkzNiA1OC4wMTQyOTgtODcuMDIwOTM2bDI2Ny43MzQ3NjQgMGMzMi4wNDA3NCAwIDU4LjAxNDI5OCAzOC45NjAzMzcgNTguMDE0Mjk4IDg3LjAyMDkzNkw3MDMuNTg3NDggMjMyLjg0MjA2OXoiIHAtaWQ9IjEzMjgyIiBmaWxsPSIjZDgxZTA2Ij48L3BhdGg+PHBhdGggZD0iTTY4OC43NTM2MzMgMzE5Ljg2MzAwNSAzMzQuNjU3OTY2IDMxOS44NjMwMDVjLTE0LjgzMzg0NyAwLTc4Ljc5NDU3NyAwLTc4Ljc5NDU3NyAwbDAgNTExLjY4NDgyMmMwIDQzLjUxNzExOSAzNS4yNzc0NTggNjMuOTYwNzMxIDc4Ljc5NDU3NyA2My45NjA3MzFsMzU0LjA5NTY2NyAwYzQzLjUxNzExOSAwIDc4Ljc5NDU3Ny0yMC40NDM2MTEgNzguNzk0NTc3LTYzLjk2MDczMUw3NjcuNTQ4MjEgMzE5Ljg2MzAwNUM3NjcuNTQ4MjEgMzE5Ljg2MzAwNSA3MzIuMjcwNzUyIDMxOS44NjMwMDUgNjg4Ljc1MzYzMyAzMTkuODYzMDA1ek00NDcuNzQ1NTggNzY3LjU4ODExOSAzODMuNzg0ODUgNzY3LjU4ODExOSAzODMuNzg0ODUgNDQ3Ljc4NDQ2Nmw2My45NjA3MzEgMEw0NDcuNzQ1NTggNzY3LjU4ODExOXpNNjM5LjYyNzc3MiA3NjcuNTg4MTE5bC02My45NjA3MzEgMEw1NzUuNjY3MDQyIDQ0Ny43ODQ0NjZsNjMuOTYwNzMxIDBMNjM5LjYyNzc3MiA3NjcuNTg4MTE5eiIgcC1pZD0iMTMyODMiIGZpbGw9IiNkODFlMDYiPjwvcGF0aD48L3N2Zz4=");
}
.typecho-access-logs-pagination {
list-style: none;
float: right;

View File

@@ -15,6 +15,7 @@ $(document).ready(function () {
ua: $('[name="filter-ua"]').val(),
ip: $('[name="filter-ip"]').val(),
cid: $('[name="filter-cid"]').val(),
url: $('[name="filter-url"]').val(),
path: $('[name="filter-path"]').val(),
robot: $('[name="filter-robot"]').val(),
preset: $('[name="filter-preset"]').val(),
@@ -26,6 +27,7 @@ $(document).ready(function () {
$('[name="filter-ua"]').val('ua' in filters ? filters.ua : '');
$('[name="filter-ip"]').val('ip' in filters ? filters.ip : '');
$('[name="filter-cid"]').val('cid' in filters ? filters.cid : '');
$('[name="filter-url"]').val('url' in filters ? filters.url : '');
$('[name="filter-path"]').val('path' in filters ? filters.path : '');
$('[name="filter-robot"]').val('robot' in filters ? filters.robot : '');
$('[name="filter-preset"]').val('preset' in filters ? filters.preset : '');
@@ -96,28 +98,91 @@ $(document).ready(function () {
$tr.append($td);
// url
$td = $('<td />');
$td.append($('<a />', {
class: '',
'data-action': 'search-anchor',
'data-filter': JSON.stringify({ path: item.path }),
}).text(item.url.replace(/%23/u, '#')));
$td.append(
$('<div />', { class: 'typecho-access-logs-list-cell' })
.append(
$('<a />', {
class: 'typecho-access-logs-list-cell-item',
href: item.url,
target: '__blank',
}).text(item.url.replace(/%23/u, '#'))
)
.append(
$('<span />', {
class: 'typecho-access-logs-list-cell-item typecho-access-logs-list-cell-item-icon typecho-access-logs-list-cell-item-search',
'data-action': 'search-anchor',
'data-filter': JSON.stringify({ path: item.path }),
'data-auto-hide': 'yes',
}).hide()
)
.append(
$('<span />', {
class: 'typecho-access-logs-list-cell-item typecho-access-logs-list-cell-item-icon typecho-access-logs-list-cell-item-delete',
'data-action': 'quick-filter-delete',
'data-filter': JSON.stringify({ url: item.url }),
'data-auto-hide': 'yes',
}).hide()
)
);
$tr.append($td);
// ua
$td = $('<td />');
$td.append($('<a />', {
title: item.ua,
class: '',
'data-action': 'search-anchor',
'data-filter': JSON.stringify({ ua: item.ua }),
}).text(item.display_name));
$td.append(
$('<div />', { class: 'typecho-access-logs-list-cell' })
.append(
$('<a />', {
title: item.ua,
class: 'typecho-access-logs-list-cell-item',
'data-action': 'ua-information',
'data-ua': item.ua,
}).text(item.display_name)
)
.append(
$('<span />', {
class: 'typecho-access-logs-list-cell-item typecho-access-logs-list-cell-item-icon typecho-access-logs-list-cell-item-search',
'data-action': 'search-anchor',
'data-filter': JSON.stringify({ ua: item.ua }),
'data-auto-hide': 'yes',
}).hide()
)
.append(
$('<span />', {
class: 'typecho-access-logs-list-cell-item typecho-access-logs-list-cell-item-icon typecho-access-logs-list-cell-item-delete',
'data-action': 'quick-filter-delete',
'data-filter': JSON.stringify({ ua: item.ua }),
'data-auto-hide': 'yes',
}).hide()
)
);
$tr.append($td);
// ip
$td = $('<td />');
$td.append($('<a />', {
class: '',
'data-action': 'search-anchor',
'data-filter': JSON.stringify({ ip: item.ip }),
}).text(item.ip));
$td.append(
$('<div />', { class: 'typecho-access-logs-list-cell' })
.append(
$('<a />', {
class: 'typecho-access-logs-list-cell-item',
'data-action': 'ip-information',
'data-ip-information': item.ip + '\n\n' + item.ip_country + ' ' + item.ip_loc,
}).text(item.ip)
)
.append(
$('<span />', {
class: 'typecho-access-logs-list-cell-item typecho-access-logs-list-cell-item-icon typecho-access-logs-list-cell-item-search',
'data-action': 'search-anchor',
'data-filter': JSON.stringify({ ip: item.ip }),
'data-auto-hide': 'yes',
}).hide()
)
.append(
$('<span />', {
class: 'typecho-access-logs-list-cell-item typecho-access-logs-list-cell-item-icon typecho-access-logs-list-cell-item-delete',
'data-action': 'quick-filter-delete',
'data-filter': JSON.stringify({ ip: item.ip }),
'data-auto-hide': 'yes',
}).hide()
)
);
$tr.append($td);
// ip_loc
$td = $('<td />');
@@ -125,11 +190,7 @@ $(document).ready(function () {
$tr.append($td);
// referer
$td = $('<td />');
$td.append($('<a />', {
class: '',
'data-action': 'search-anchor',
'data-filter': JSON.stringify({ referer: item.referer }),
}).text(item.referer));
$td.append($('<span />').text(item.referer));
$tr.append($td);
// time
$td = $('<td />');
@@ -142,7 +203,46 @@ $(document).ready(function () {
$tbody.html('<tr><td colspan="7"><h6 class="typecho-access-logs-list-table-title typecho-access-logs-table-placeholder">暂无数据</h6></td></tr>');
}
$('.typecho-access-logs-list-checkbox').change(updateSelectAll);
$('a[data-action="search-anchor"]').click(onSearchAnchorClick);
$('[data-action="search-anchor"]').click(onSearchAnchorClick);
$('.typecho-access-logs-list-cell').hover(
function() {
$(this).find('[data-auto-hide="yes"]').show();
},
function() {
$(this).find('[data-auto-hide="yes"]').hide();
}
);
$('[data-action="quick-filter-delete"]').click(function(e) {
var text = '';
var filters = JSON.parse(e.target.getAttribute('data-filter'));
if (filters.url) {
text = '本次操作将删除符合以下受访地址的记录,你确认要删除这些记录吗?\n\n' + filters.url;
} else if (filters.ua) {
text = '本次操作将删除符合以下UA的记录你确认要删除这些记录吗?\n\n' + filters.ua;
} else if (filters.ip) {
text = '本次操作将删除符合以下IP地址的记录你确认要删除这些记录吗?\n\n' + filters.ip;
}
swal({
title: "你确定?",
text: text,
icon: "warning",
buttons: {
cancel: "算啦",
confirm: "是的",
},
}).then((value) => {
if (value === true) {
deleteLogs(filters);
}
});
});
$('[data-action="ua-information"]').click(function(e) {
swal('User-Agent', e.target.getAttribute('data-ua'), 'info');
});
$('[data-action="ip-information"]').click(function(e) {
swal('IP 信息', e.target.getAttribute('data-ip-information'), 'info');
});
updateSelectAll();
// logs pagination
@@ -269,7 +369,7 @@ $(document).ready(function () {
$('[name="filter-fuzzy"]').change(function(e) {
var filters = getFilters();
var inputKeys = ['ua', 'ip', 'path'];
var inputKeys = ['ua', 'ip', 'url', 'path'];
if (e.target.value === '1') {
$(inputKeys).each(function(_, k) {
if (filters[k] === '') {

View File

@@ -45,6 +45,10 @@
<option value=""><?php _e('不限'); ?></option>
</select>
</div>
<div class="typecho-access-logs-filter-item">
<label class="typecho-access-logs-filter-item__label">受访 URL</label>
<input class="typecho-access-logs-filter-item__content" type="text" class="text-s" name="filter-url" autocomplete="off" />
</div>
<div class="typecho-access-logs-filter-item">
<label class="typecho-access-logs-filter-item__label">受访地址</label>
<input class="typecho-access-logs-filter-item__content" type="text" class="text-s" name="filter-path" autocomplete="off" />