diff --git a/apiserver/apiserver/api/views.py b/apiserver/apiserver/api/views.py index 4e1d8ae..c847197 100644 --- a/apiserver/apiserver/api/views.py +++ b/apiserver/apiserver/api/views.py @@ -1128,9 +1128,15 @@ class HistoryViewSet(Base, List, Retrieve): def get_queryset(self): queryset = models.HistoryIndex.objects - if 'exclude_system' in self.request.query_params: + exclude_system = self.request.query_params.get('exclude_system', '') == 'true' + member_id = self.request.query_params.get('member_id', '') + + if exclude_system: queryset = queryset.filter(is_system=False) + if member_id: + queryset = queryset.filter(owner_id=member_id) + return queryset.order_by('-history_date')[:50] diff --git a/webclient/src/Admin.js b/webclient/src/Admin.js index 4454ac2..075443a 100644 --- a/webclient/src/Admin.js +++ b/webclient/src/Admin.js @@ -118,7 +118,7 @@ export function AdminVetting(props) { } export function AdminHistory(props) { - const { token } = props; + const { token, filterMember } = props; const [history, setHistory] = useState(historyCache); const [excludeSystem, setExcludeSystem] = useState(excludeSystemCache); const [focus, setFocus] = useState(focusCache); @@ -131,7 +131,11 @@ export function AdminHistory(props) { }; useEffect(() => { - const extra = excludeSystem ? '?exclude_system' : ''; + let extra = '?exclude_system=' + excludeSystem; + if (filterMember) { + extra += '&member_id=' + filterMember; + } + requester('/history/'+extra, 'GET', token) .then(res => { setHistory(res.results); @@ -148,6 +152,9 @@ export function AdminHistory(props) { {!error ? history ? <> +
History
+

Last 50 database changes:

+ Date Username Type - Owner + {!filterMember && Owner} Object Changed Fields } + {!history.length &&

None

} + {history.map(x => @@ -177,7 +186,7 @@ export function AdminHistory(props) { {isMobile && 'User: '}{x.is_system ? 'System' : (x.history_user || 'Deleted User')} {isMobile && 'Type: '}{x.history_type} - {isMobile && 'Owner: '}{x.owner_name} + {!filterMember && {isMobile && 'Owner: '}{x.owner_name}} {isMobile && 'Object: '}{x.object_name} {isMobile && 'Changed: '}{x.changes.map(x => x.field).join(', ')} @@ -357,9 +366,7 @@ export function Admin(props) {

All times are in Mountain time.

- -
History
-

Last 50 database changes:

+

diff --git a/webclient/src/Members.js b/webclient/src/Members.js index 1372fe3..0a96f44 100644 --- a/webclient/src/Members.js +++ b/webclient/src/Members.js @@ -6,6 +6,7 @@ import { statusColor, isAdmin, isInstructor, BasicTable, staticUrl, requester } import { NotFound } from './Misc.js'; import { AdminMemberInfo, AdminMemberPause, AdminMemberForm, AdminMemberCards, AdminMemberTraining, AdminMemberCertifications } from './AdminMembers.js'; import { AdminMemberTransactions } from './AdminTransactions.js'; +import { AdminHistory } from './Admin.js'; import { StorageButton } from './Storage.js'; import AbortController from 'abort-controller'; @@ -341,7 +342,8 @@ export function MemberDetail(props) { Cards{' - '} Lockouts{' - '} Training{' - '} - Transactions + Transactions{' - '} + History

} @@ -365,27 +367,23 @@ export function MemberDetail(props) { } {isAdmin(user) && - - - + } {isAdmin(user) && - - - + } {isAdmin(user) && - - - + } {isAdmin(user) && - - - + + } + + {isAdmin(user) && + }