diff --git a/frontend/src/pages/sys-admin/admin-logs/login-logs.js b/frontend/src/pages/sys-admin/admin-logs/login-logs.js index edd7a0d376..836686fe7d 100644 --- a/frontend/src/pages/sys-admin/admin-logs/login-logs.js +++ b/frontend/src/pages/sys-admin/admin-logs/login-logs.js @@ -8,6 +8,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LogsNav from './logs-nav'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; class Content extends Component { @@ -84,7 +85,7 @@ class Item extends Component { let { item } = this.props; return ( - {item.name} + {item.login_ip} {item.login_success ? gettext('Success') : gettext('Failed')} {moment(item.login_time).fromNow()} diff --git a/frontend/src/pages/sys-admin/admin-logs/operation-logs.js b/frontend/src/pages/sys-admin/admin-logs/operation-logs.js index 20f6d8b699..1f0d5b3ffc 100644 --- a/frontend/src/pages/sys-admin/admin-logs/operation-logs.js +++ b/frontend/src/pages/sys-admin/admin-logs/operation-logs.js @@ -8,7 +8,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LogsNav from './logs-nav'; import MainPanelTopbar from '../main-panel-topbar'; - +import UserLink from '../user-link'; class Content extends Component { @@ -180,7 +180,7 @@ class Item extends Component { let { item } = this.props; return ( - {item.name} + {this.getOperationText(item.operation)} diff --git a/frontend/src/pages/sys-admin/departments/member-item.js b/frontend/src/pages/sys-admin/departments/member-item.js index b9f3a04882..7aa4e523d8 100644 --- a/frontend/src/pages/sys-admin/departments/member-item.js +++ b/frontend/src/pages/sys-admin/departments/member-item.js @@ -4,7 +4,7 @@ import { seafileAPI } from '../../../utils/seafile-api'; import { Utils } from '../../../utils/utils.js'; import toaster from '../../../components/toast'; import RoleEditor from '../../../components/select-editor/role-editor'; -import { serviceURL } from '../../../utils/constants'; +import UserLink from '../user-link'; const MemberItemPropTypes = { groupID: PropTypes.string.isRequired, @@ -49,19 +49,18 @@ class MemberItem extends React.Component { toaster.danger(errMessage); }); this.setState({ - highlight: false, + highlight: false }); } render() { const member = this.props.member; const highlight = this.state.highlight; - let memberLink = serviceURL + '/useradmin/info/' + member.email + '/'; if (member.role === 'Owner') return null; return ( member-header - {member.name} + - {item.name} + {item.device_name}{' / '}{item.client_version} {item.device_ip} {item.repo_name} diff --git a/frontend/src/pages/sys-admin/groups/group-members.js b/frontend/src/pages/sys-admin/groups/group-members.js index 3d2060199e..575e294a9e 100644 --- a/frontend/src/pages/sys-admin/groups/group-members.js +++ b/frontend/src/pages/sys-admin/groups/group-members.js @@ -10,6 +10,7 @@ import CommonOperationConfirmationDialog from '../../../components/dialog/common import SysAdminGroupAddMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-group-add-member-dialog'; import SysAdminGroupRoleEditor from '../../../components/select-editor/sysadmin-group-role-editor'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import GroupNav from './group-nav'; class Content extends Component { @@ -105,7 +106,7 @@ class Item extends Component { - {item.name} + {item.role == 'Owner' ? gettext('Owner') : diff --git a/frontend/src/pages/sys-admin/groups/group-repos.js b/frontend/src/pages/sys-admin/groups/group-repos.js index 8ecf9aa592..c419bdfdb3 100644 --- a/frontend/src/pages/sys-admin/groups/group-repos.js +++ b/frontend/src/pages/sys-admin/groups/group-repos.js @@ -7,6 +7,7 @@ import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import GroupNav from './group-nav'; const { enableSysAdminViewRepo } = window.sysadmin.pageOptions; @@ -121,7 +122,7 @@ class Item extends Component { {this.renderRepoName()} {Utils.bytesToSize(item.size)} - {item.shared_by_name} + diff --git a/frontend/src/pages/sys-admin/groups/groups.js b/frontend/src/pages/sys-admin/groups/groups.js index 70ff63a834..d8d7856634 100644 --- a/frontend/src/pages/sys-admin/groups/groups.js +++ b/frontend/src/pages/sys-admin/groups/groups.js @@ -13,6 +13,7 @@ import CommonOperationConfirmationDialog from '../../../components/dialog/common import SysAdminCreateGroupDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-create-group-dialog'; import SysAdminTransferGroupDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-group-transfer-dialog'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import OpMenu from './op-menu'; class Content extends Component { @@ -182,7 +183,7 @@ class Item extends Component { {item.owner == 'system admin' ? '--' : - {item.owner_name} + } diff --git a/frontend/src/pages/sys-admin/institutions/institution-admins.js b/frontend/src/pages/sys-admin/institutions/institution-admins.js index d9e11a3446..089e932e8e 100644 --- a/frontend/src/pages/sys-admin/institutions/institution-admins.js +++ b/frontend/src/pages/sys-admin/institutions/institution-admins.js @@ -2,11 +2,12 @@ import React, { Component, Fragment } from 'react'; import moment from 'moment'; import { Utils } from '../../../utils/utils'; import { seafileAPI } from '../../../utils/seafile-api'; -import { siteRoot, loginUrl, gettext } from '../../../utils/constants'; +import { loginUrl, gettext } from '../../../utils/constants'; import toaster from '../../../components/toast'; import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; +import UserLink from '../user-link'; import MainPanelTopbar from '../main-panel-topbar'; import InstitutionNav from './institution-nav'; import OpMenu from './user-op-menu'; @@ -142,7 +143,9 @@ class Item extends Component { return ( - {item.name} + + + {item.is_active ? gettext('Active') : gettext('Inactive')} @@ -224,7 +227,7 @@ class InstitutionAdmins extends Component { revokeAdmin = (email) => { seafileAPI.sysAdminUpdateInstitutionUser(this.props.institutionID, email, false).then(res => { let userList = this.state.userList.filter(user => { - return user.email != email + return user.email != email; }); this.setState({userList: userList}); toaster.success(gettext('Success')); diff --git a/frontend/src/pages/sys-admin/institutions/institution-users.js b/frontend/src/pages/sys-admin/institutions/institution-users.js index 0c542ea109..86b5ad6bf5 100644 --- a/frontend/src/pages/sys-admin/institutions/institution-users.js +++ b/frontend/src/pages/sys-admin/institutions/institution-users.js @@ -3,15 +3,16 @@ import { Button } from 'reactstrap'; import moment from 'moment'; import { Utils } from '../../../utils/utils'; import { seafileAPI } from '../../../utils/seafile-api'; -import { siteRoot, loginUrl, gettext } from '../../../utils/constants'; +import { loginUrl, gettext } from '../../../utils/constants'; import toaster from '../../../components/toast'; import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; +import Paginator from '../../../components/paginator'; import AddMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-institution-member-dialog'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; +import UserLink from '../user-link'; import MainPanelTopbar from '../main-panel-topbar'; import InstitutionNav from './institution-nav'; -import Paginator from '../../../components/paginator'; import OpMenu from './user-op-menu'; class Content extends Component { @@ -175,7 +176,9 @@ class Item extends Component { return ( - {item.name} + + + {item.is_active ? gettext('Active') : gettext('Inactive')} diff --git a/frontend/src/pages/sys-admin/invitations/invitations.js b/frontend/src/pages/sys-admin/invitations/invitations.js index 562228af8b..1b4c49c4fb 100644 --- a/frontend/src/pages/sys-admin/invitations/invitations.js +++ b/frontend/src/pages/sys-admin/invitations/invitations.js @@ -10,6 +10,7 @@ import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import OpMenu from './op-menu'; class Content extends Component { @@ -174,11 +175,11 @@ class Item extends Component { - {item.inviter_name} + {item.accept_time ? - {item.accepter_name} : + : item.accepter_email } diff --git a/frontend/src/pages/sys-admin/links/share-links.js b/frontend/src/pages/sys-admin/links/share-links.js index 366fbcdb07..04f556f529 100644 --- a/frontend/src/pages/sys-admin/links/share-links.js +++ b/frontend/src/pages/sys-admin/links/share-links.js @@ -9,7 +9,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LinksNav from './links-nav'; import MainPanelTopbar from '../main-panel-topbar'; - +import UserLink from '../user-link'; class Content extends Component { @@ -111,7 +111,7 @@ class Item extends Component { {item.obj_name} {item.token} - {item.creator_name} + {moment(item.ctime).fromNow()} {item.view_cnt} diff --git a/frontend/src/pages/sys-admin/links/upload-links.js b/frontend/src/pages/sys-admin/links/upload-links.js index 18c092ba71..de8a55889c 100644 --- a/frontend/src/pages/sys-admin/links/upload-links.js +++ b/frontend/src/pages/sys-admin/links/upload-links.js @@ -9,6 +9,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LinksNav from './links-nav'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; class Content extends Component { @@ -112,7 +113,7 @@ class Item extends Component { {item.path} {item.token} - {item.creator_name} + {moment(item.ctime).fromNow()} {item.view_cnt} diff --git a/frontend/src/pages/sys-admin/logs-page/file-access-logs.js b/frontend/src/pages/sys-admin/logs-page/file-access-logs.js index 51202131c8..36c730fa45 100644 --- a/frontend/src/pages/sys-admin/logs-page/file-access-logs.js +++ b/frontend/src/pages/sys-admin/logs-page/file-access-logs.js @@ -8,6 +8,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LogsNav from './logs-nav'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog'; import ModalPortal from '../../../components/modal-portal'; @@ -103,7 +104,7 @@ class Item extends Component { let { item } = this.props; return ( - {item.name} + {item.event_type} {item.ip}{' / '}{item.device} {moment(item.time).fromNow()} diff --git a/frontend/src/pages/sys-admin/logs-page/file-update-logs.js b/frontend/src/pages/sys-admin/logs-page/file-update-logs.js index 7e112b2081..42e5a1f872 100644 --- a/frontend/src/pages/sys-admin/logs-page/file-update-logs.js +++ b/frontend/src/pages/sys-admin/logs-page/file-update-logs.js @@ -8,6 +8,7 @@ import Paginator from '../../../components/paginator'; import LogsNav from './logs-nav'; import { Button } from 'reactstrap'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import ModalPortal from '../../../components/modal-portal'; import CommitDetails from '../../../components/dialog/commit-details'; import LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog'; @@ -117,7 +118,7 @@ class Item extends Component { return ( - {item.name} + {moment(item.time).fromNow()} {item.repo_name ? item.repo_name : gettext('Deleted')} diff --git a/frontend/src/pages/sys-admin/logs-page/login-logs.js b/frontend/src/pages/sys-admin/logs-page/login-logs.js index 671d76ae22..d7422c73ac 100644 --- a/frontend/src/pages/sys-admin/logs-page/login-logs.js +++ b/frontend/src/pages/sys-admin/logs-page/login-logs.js @@ -9,6 +9,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LogsNav from './logs-nav'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog'; import ModalPortal from '../../../components/modal-portal'; @@ -102,7 +103,7 @@ class Item extends Component { let { item } = this.props; return ( - {item.name} + {item.login_ip} {item.log_success ? gettext('Success') : gettext('Failed')} {moment(item.login_time).fromNow()} diff --git a/frontend/src/pages/sys-admin/logs-page/share-permission-logs.js b/frontend/src/pages/sys-admin/logs-page/share-permission-logs.js index 602bfe1d9d..ca54143879 100644 --- a/frontend/src/pages/sys-admin/logs-page/share-permission-logs.js +++ b/frontend/src/pages/sys-admin/logs-page/share-permission-logs.js @@ -9,6 +9,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import LogsNav from './logs-nav'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog'; import ModalPortal from '../../../components/modal-portal'; @@ -116,8 +117,8 @@ class Item extends Component { let { item } = this.props; return ( - {item.from_user_name} - {item.to_user_name} + + {this.getActionTextByEType(item.etype)} {Utils.sharePerms(item.permission)} {item.repo_name ? item.repo_name : gettext('Deleted')} diff --git a/frontend/src/pages/sys-admin/orgs/org-groups.js b/frontend/src/pages/sys-admin/orgs/org-groups.js index 233a610502..35ea136b6f 100644 --- a/frontend/src/pages/sys-admin/orgs/org-groups.js +++ b/frontend/src/pages/sys-admin/orgs/org-groups.js @@ -8,6 +8,7 @@ import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import OrgNav from './org-nav'; class Content extends Component { @@ -101,7 +102,7 @@ class Item extends Component { {item.group_name} - {item.creator_name} + {moment(item.created_at).format('YYYY-MM-DD hh:mm:ss')} diff --git a/frontend/src/pages/sys-admin/orgs/org-repos.js b/frontend/src/pages/sys-admin/orgs/org-repos.js index 78afbe43aa..91514a9be5 100644 --- a/frontend/src/pages/sys-admin/orgs/org-repos.js +++ b/frontend/src/pages/sys-admin/orgs/org-repos.js @@ -7,6 +7,7 @@ import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import OrgNav from './org-nav'; class Content extends Component { @@ -103,7 +104,7 @@ class Item extends Component { {item.repo_id} {item.owner_email ? - {item.owner_name} : + : '--' } diff --git a/frontend/src/pages/sys-admin/orgs/org-users.js b/frontend/src/pages/sys-admin/orgs/org-users.js index 9c16eb1c46..876238b28f 100644 --- a/frontend/src/pages/sys-admin/orgs/org-users.js +++ b/frontend/src/pages/sys-admin/orgs/org-users.js @@ -11,6 +11,7 @@ import SysAdminUserStatusEditor from '../../../components/select-editor/sysadmin import SysAdminAddUserDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-user-dialog'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import OrgNav from './org-nav'; import OpMenu from './user-op-menu'; @@ -170,7 +171,7 @@ class Item extends Component { return ( - {item.name} + {item.org_name} - {item.creator_name} + + + {isGroupOwnedRepo ? {repo.group_name} : - {repo.owner_name} + } diff --git a/frontend/src/pages/sys-admin/repos/trash-repos.js b/frontend/src/pages/sys-admin/repos/trash-repos.js index 0362efc223..c16aad7f1f 100644 --- a/frontend/src/pages/sys-admin/repos/trash-repos.js +++ b/frontend/src/pages/sys-admin/repos/trash-repos.js @@ -1,15 +1,16 @@ import React, { Component, Fragment } from 'react'; import { Button } from 'reactstrap'; -import { seafileAPI } from '../../../utils/seafile-api'; -import { gettext ,siteRoot } from '../../../utils/constants'; -import toaster from '../../../components/toast'; -import { Utils } from '../../../utils/utils'; -import EmptyTip from '../../../components/empty-tip'; import moment from 'moment'; +import { Utils } from '../../../utils/utils'; +import { seafileAPI } from '../../../utils/seafile-api'; +import { gettext } from '../../../utils/constants'; +import toaster from '../../../components/toast'; +import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import ModalPortal from '../../../components/modal-portal'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; +import UserLink from '../user-link'; import ReposNav from './repos-nav'; import MainPanelTopbar from '../main-panel-topbar'; @@ -155,7 +156,8 @@ class Item extends Component { {repo.name} {repo.owner.indexOf('@seafile_group') == -1 ? - {repo.owner_name} : repo.group_name} + : + repo.group_name} {moment(repo.delete_time).fromNow()} diff --git a/frontend/src/pages/sys-admin/user-link.js b/frontend/src/pages/sys-admin/user-link.js new file mode 100644 index 0000000000..fb0ff02c7f --- /dev/null +++ b/frontend/src/pages/sys-admin/user-link.js @@ -0,0 +1,20 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { Link } from '@reach/router'; +import { siteRoot } from '../../utils/constants'; + +const propTypes = { + email: PropTypes.string.isRequired, + name: PropTypes.string.isRequired +}; + +class UserLink extends Component { + + render() { + return {this.props.name}; + } +} + +UserLink.propTypes = propTypes; + +export default UserLink; diff --git a/frontend/src/pages/sys-admin/users/ldap-users.js b/frontend/src/pages/sys-admin/users/ldap-users.js index dfaaac2440..478b2ccadd 100644 --- a/frontend/src/pages/sys-admin/users/ldap-users.js +++ b/frontend/src/pages/sys-admin/users/ldap-users.js @@ -9,6 +9,7 @@ import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import UsersNav from './users-nav'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; class Content extends Component { @@ -84,9 +85,7 @@ class Item extends Component { return ( - - {item.email} - + {`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`} diff --git a/frontend/src/pages/sys-admin/users/user-shared-repos.js b/frontend/src/pages/sys-admin/users/user-shared-repos.js index 98077e6f1d..ef97d47dac 100644 --- a/frontend/src/pages/sys-admin/users/user-shared-repos.js +++ b/frontend/src/pages/sys-admin/users/user-shared-repos.js @@ -10,6 +10,7 @@ import Loading from '../../../components/loading'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import TransferDialog from '../../../components/dialog/transfer-dialog'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import Nav from './user-nav'; import OpMenu from './user-op-menu'; @@ -82,17 +83,17 @@ class Item extends Component { } } - getOwnerUrl = () => { - let url; + getOwnerLink = () => { + let link; const { item } = this.props; const index = item.owner_email.indexOf('@seafile_group'); if (index == -1) { - url = `${siteRoot}sys/users/${encodeURIComponent(item.owner_email)}/`; + link = ; } else { const groupID = item.owner_email.substring(0, index); - url = `${siteRoot}sys/departments/${groupID}/`; + link = {item.owner_name}; } - return url; + return link; } render() { @@ -104,7 +105,7 @@ class Item extends Component { {iconTitle} {this.renderRepoName()} - {item.owner_name} + {this.getOwnerLink()} {Utils.bytesToSize(item.size)} {moment(item.last_modify).fromNow()} diff --git a/frontend/src/pages/sys-admin/users/users.js b/frontend/src/pages/sys-admin/users/users.js index d7e8d4459f..2cf00ed047 100644 --- a/frontend/src/pages/sys-admin/users/users.js +++ b/frontend/src/pages/sys-admin/users/users.js @@ -20,6 +20,7 @@ import CommonOperationConfirmationDialog from '../../../components/dialog/common import SysAdminUser from '../../../models/sysadmin-user'; import SysAdminAdminUser from '../../../models/sysadmin-admin-user'; import MainPanelTopbar from '../main-panel-topbar'; +import UserLink from '../user-link'; import UsersNav from './users-nav'; import OpMenu from './user-op-menu'; @@ -333,7 +334,7 @@ class Item extends Component { - {item.name} + {item.contact_email &&