mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-11 11:51:27 +00:00
[system admin] update user links (#4234)
This commit is contained in:
@@ -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 (
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.email + '/'}>{item.name}</a></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>{item.login_ip}</td>
|
||||
<td>{item.login_success ? gettext('Success') : gettext('Failed')}</td>
|
||||
<td>{moment(item.login_time).fromNow()}</td>
|
||||
|
@@ -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 (
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.email + '/'}>{item.name}</a></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>{this.getOperationText(item.operation)}</td>
|
||||
<td>
|
||||
<span dangerouslySetInnerHTML={{__html: this.getOperationDetail(item)}}></span>
|
||||
|
@@ -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 (
|
||||
<tr className={highlight ? 'tr-highlight' : ''} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
|
||||
<td><img src={member.avatar_url} alt="member-header" width="24" className="avatar"/></td>
|
||||
<td><a href={memberLink}>{member.name}</a></td>
|
||||
<td><UserLink email={member.email} name={member.name} /></td>
|
||||
<td>
|
||||
<RoleEditor
|
||||
isTextMode={true}
|
||||
|
@@ -10,6 +10,7 @@ import Loading from '../../../components/loading';
|
||||
import { Link } from '@reach/router';
|
||||
import DevicesNav from './devices-nav';
|
||||
import MainPanelTopbar from '../main-panel-topbar';
|
||||
import UserLink from '../user-link';
|
||||
|
||||
class Content extends Component {
|
||||
|
||||
@@ -76,7 +77,7 @@ class Item extends Component {
|
||||
let item = this.props.item;
|
||||
return (
|
||||
<tr onMouseEnter={this.handleMouseOver} onMouseLeave={this.handleMouseOut}>
|
||||
<td><Link to={`${siteRoot}useradmin/info/${encodeURIComponent(item.email)}/`}>{item.name}</Link></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>{item.device_name}{' / '}{item.client_version}</td>
|
||||
<td>{item.device_ip}</td>
|
||||
<td><Link to={`${siteRoot}sysadmin/#libs/${item.repo_id}`}>{item.repo_name}</Link></td>
|
||||
|
@@ -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 {
|
||||
<Fragment>
|
||||
<tr onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<td><img src={item.avatar_url} alt="" className="rounded-circle" width="24" /></td>
|
||||
<td><a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.email)}/`}>{item.name}</a></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>
|
||||
{item.role == 'Owner' ?
|
||||
gettext('Owner') :
|
||||
|
@@ -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 {
|
||||
<td>{this.renderRepoName()}</td>
|
||||
<td>{Utils.bytesToSize(item.size)}</td>
|
||||
<td>
|
||||
<a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.shared_by)}/`}>{item.shared_by_name}</a>
|
||||
<UserLink email={item.shared_by} name={item.shared_by_name} />
|
||||
</td>
|
||||
<td>
|
||||
<a href="#" className={`action-icon sf2-icon-x3 ${isOpIconShown ? '' : 'invisible'}`} title={gettext('Unshare')} onClick={this.toggleUnshareRepoDialog}></a>
|
||||
|
@@ -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 {
|
||||
<td>
|
||||
{item.owner == 'system admin' ?
|
||||
'--' :
|
||||
<Link to={`${siteRoot}sys/users/${encodeURIComponent(item.owner)}/`}>{item.owner_name}</Link>
|
||||
<UserLink email={item.owner} name={item.owner_name} />
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
|
@@ -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 (
|
||||
<Fragment>
|
||||
<tr className={this.state.highlight ? 'tr-highlight' : ''} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<td><a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.email)}/`}>{item.name}</a></td>
|
||||
<td>
|
||||
<UserLink email={item.email} name={item.name} />
|
||||
</td>
|
||||
<td>
|
||||
{item.is_active ? gettext('Active') : gettext('Inactive')}
|
||||
</td>
|
||||
@@ -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'));
|
||||
|
@@ -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 (
|
||||
<Fragment>
|
||||
<tr className={this.state.highlight ? 'tr-highlight' : ''} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<td><a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.email)}/`}>{item.name}</a></td>
|
||||
<td>
|
||||
<UserLink email={item.email} name={item.name} />
|
||||
</td>
|
||||
<td>
|
||||
{item.is_active ? gettext('Active') : gettext('Inactive')}
|
||||
</td>
|
||||
|
@@ -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 {
|
||||
<Fragment>
|
||||
<tr className={this.state.highlight ? 'tr-highlight' : ''} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<td>
|
||||
<Link to={`${siteRoot}sys/users/${encodeURIComponent(item.inviter_email)}/`}>{item.inviter_name}</Link>
|
||||
<UserLink email={item.inviter_email} name={item.inviter_name} />
|
||||
</td>
|
||||
<td>
|
||||
{item.accept_time ?
|
||||
<Link to={`${siteRoot}sys/users/${encodeURIComponent(item.accepter_email)}/`}>{item.accepter_name}</Link> :
|
||||
<UserLink email={item.accepter_email} name={item.accepter_name} /> :
|
||||
item.accepter_email
|
||||
}
|
||||
</td>
|
||||
|
@@ -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 {
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td>{item.obj_name}</td>
|
||||
<td>{item.token}</td>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.creator_email + '/'}>{item.creator_name}</a></td>
|
||||
<td><UserLink email={item.creator_email} name={item.creator_name} /></td>
|
||||
<td>{moment(item.ctime).fromNow()}</td>
|
||||
<td>{item.view_cnt}</td>
|
||||
<td>
|
||||
|
@@ -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 {
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td>{item.path}</td>
|
||||
<td>{item.token}</td>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.creator_email + '/'}>{item.creator_name}</a></td>
|
||||
<td><UserLink email={item.creator_email} name={item.creator_name} /></td>
|
||||
<td>{moment(item.ctime).fromNow()}</td>
|
||||
<td>{item.view_cnt}</td>
|
||||
<td>
|
||||
|
@@ -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 (
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.email + '/'}>{item.name}</a></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>{item.event_type}</td>
|
||||
<td>{item.ip}{' / '}{item.device}</td>
|
||||
<td>{moment(item.time).fromNow()}</td>
|
||||
|
@@ -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 (
|
||||
<Fragment>
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.email + '/'}>{item.name}</a></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>{moment(item.time).fromNow()}</td>
|
||||
<td>{item.repo_name ? item.repo_name : gettext('Deleted')}</td>
|
||||
<td>
|
||||
|
@@ -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 (
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.email + '/'}>{item.name}</a></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>{item.login_ip}</td>
|
||||
<td>{item.log_success ? gettext('Success') : gettext('Failed')}</td>
|
||||
<td>{moment(item.login_time).fromNow()}</td>
|
||||
|
@@ -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 (
|
||||
<tr onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut}>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.from_user_email + '/'}>{item.from_user_name}</a></td>
|
||||
<td><a href={siteRoot + 'useradmin/info/' + item.to_user_email + '/'}>{item.to_user_name}</a></td>
|
||||
<td><UserLink email={item.from_user_email} name={item.from_user_name} /></td>
|
||||
<td><UserLink email={item.to_user_email} name={item.to_user_name} /></td>
|
||||
<td>{this.getActionTextByEType(item.etype)}</td>
|
||||
<td>{Utils.sharePerms(item.permission)}</td>
|
||||
<td>{item.repo_name ? item.repo_name : gettext('Deleted')}</td>
|
||||
|
@@ -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 {
|
||||
<Fragment>
|
||||
<tr onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<td><a href={groupUrl}>{item.group_name}</a></td>
|
||||
<td><a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.creator_email)}/`}>{item.creator_name}</a></td>
|
||||
<td><UserLink email={item.creator_email} name={item.creator_name} /></td>
|
||||
<td>{moment(item.created_at).format('YYYY-MM-DD hh:mm:ss')}</td>
|
||||
<td>
|
||||
<a href="#" className={`action-icon sf2-icon-delete ${isOpIconShown ? '' : 'invisible'}`} title={gettext('Delete')} onClick={this.toggleDeleteDialog}></a>
|
||||
|
@@ -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 {
|
||||
<td>{item.repo_id}</td>
|
||||
<td>
|
||||
{item.owner_email ?
|
||||
<a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.owner_email)}/`}>{item.owner_name}</a> :
|
||||
<UserLink email={item.owner_email} name={item.owner_name} /> :
|
||||
'--'
|
||||
}
|
||||
</td>
|
||||
|
@@ -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 (
|
||||
<Fragment>
|
||||
<tr className={this.state.highlight ? 'tr-highlight' : ''} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<td><a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.email)}/`}>{item.name}</a></td>
|
||||
<td><UserLink email={item.email} name={item.name} /></td>
|
||||
<td>
|
||||
<SysAdminUserStatusEditor
|
||||
isTextMode={true}
|
||||
|
@@ -12,6 +12,7 @@ import SysAdminUserRoleEditor from '../../../components/select-editor/sysadmin-u
|
||||
import SysAdminAddOrgDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-org-dialog';
|
||||
import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';
|
||||
import MainPanelTopbar from '../main-panel-topbar';
|
||||
import UserLink from '../user-link';
|
||||
|
||||
const { availableRoles } = window.sysadmin.pageOptions;
|
||||
|
||||
@@ -108,7 +109,9 @@ class Item extends Component {
|
||||
<Fragment>
|
||||
<tr onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<td><Link to={`${siteRoot}sys/organizations/${item.org_id}/info/`}>{item.org_name}</Link></td>
|
||||
<td><a href={`${siteRoot}useradmin/info/${encodeURIComponent(item.creator_email)}/`}>{item.creator_name}</a></td>
|
||||
<td>
|
||||
<UserLink email={item.creator_email} name={item.creator_name} />
|
||||
</td>
|
||||
<td>
|
||||
<SysAdminUserRoleEditor
|
||||
isTextMode={true}
|
||||
|
@@ -15,6 +15,7 @@ import SysAdminShareDialog from '../../../components/dialog/sysadmin-dialog/sysa
|
||||
import SysAdminLibHistorySettingDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-lib-history-setting-dialog';
|
||||
import SysAdminCreateRepoDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-create-repo-dialog';
|
||||
import MainPanelTopbar from '../main-panel-topbar';
|
||||
import UserLink from '../user-link';
|
||||
import ReposNav from './repos-nav';
|
||||
import RepoOpMenu from './repo-op-menu';
|
||||
|
||||
@@ -231,7 +232,7 @@ class Item extends Component {
|
||||
<td>
|
||||
{isGroupOwnedRepo ?
|
||||
<Link to={`${siteRoot}sys/departments/${repo.owner_name}/`}>{repo.group_name}</Link> :
|
||||
<Link to={`${siteRoot}sys/users/${encodeURIComponent(repo.owner_email)}/`}>{repo.owner_name}</Link>
|
||||
<UserLink email={repo.owner_email} name={repo.owner_name} />
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
|
@@ -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 {
|
||||
<td>{repo.name}</td>
|
||||
<td>
|
||||
{repo.owner.indexOf('@seafile_group') == -1 ?
|
||||
<a href={`${siteRoot}useradmin/info/${encodeURIComponent(repo.owner)}/`}>{repo.owner_name}</a> : repo.group_name}
|
||||
<UserLink email={repo.owner} name={repo.owner_name} /> :
|
||||
repo.group_name}
|
||||
</td>
|
||||
<td>{moment(repo.delete_time).fromNow()}</td>
|
||||
<td>
|
||||
|
20
frontend/src/pages/sys-admin/user-link.js
Normal file
20
frontend/src/pages/sys-admin/user-link.js
Normal file
@@ -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 <Link to={`${siteRoot}sys/users/${encodeURIComponent(this.props.email)}/`}>{this.props.name}</Link>;
|
||||
}
|
||||
}
|
||||
|
||||
UserLink.propTypes = propTypes;
|
||||
|
||||
export default UserLink;
|
@@ -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 (
|
||||
<Fragment>
|
||||
<tr>
|
||||
<td>
|
||||
<Link to={`${siteRoot}sys/users/${encodeURIComponent(item.email)}/`}>{item.email}</Link>
|
||||
</td>
|
||||
<td><UserLink email={item.email} name={item.email} /></td>
|
||||
<td>
|
||||
{`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`}
|
||||
</td>
|
||||
|
@@ -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 = <UserLink email={item.owner_email} name={item.owner_name} />;
|
||||
} else {
|
||||
const groupID = item.owner_email.substring(0, index);
|
||||
url = `${siteRoot}sys/departments/${groupID}/`;
|
||||
link = <Link to={`${siteRoot}sys/departments/${groupID}/`}>{item.owner_name}</Link>;
|
||||
}
|
||||
return url;
|
||||
return link;
|
||||
}
|
||||
|
||||
render() {
|
||||
@@ -104,7 +105,7 @@ class Item extends Component {
|
||||
<tr>
|
||||
<td><img src={iconUrl} title={iconTitle} alt={iconTitle} width="24" /></td>
|
||||
<td>{this.renderRepoName()}</td>
|
||||
<td><Link to={this.getOwnerUrl()}>{item.owner_name}</Link></td>
|
||||
<td>{this.getOwnerLink()}</td>
|
||||
<td>{Utils.bytesToSize(item.size)}</td>
|
||||
<td>{moment(item.last_modify).fromNow()}</td>
|
||||
</tr>
|
||||
|
@@ -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 {
|
||||
<input type="checkbox" className="vam" onChange={this.onUserSelected} checked={item.isSelected} />
|
||||
</td>
|
||||
<td>
|
||||
<Link to={`${siteRoot}sys/users/${encodeURIComponent(item.email)}/`}>{item.name}</Link>
|
||||
<UserLink email={item.email} name={item.name} />
|
||||
{item.contact_email &&
|
||||
<Fragment>
|
||||
<br />
|
||||
|
Reference in New Issue
Block a user