mirror of
https://github.com/kokororin/typecho-plugin-Access.git
synced 2026-08-19 02:13:29 +08:00
feat: add quick action buttons to logs list cell
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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] === '') {
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user