mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-13 13:50:07 +00:00
Metadata views (#6203)
* wip * wip: table finished * wip * feat: metadata views * update models
This commit is contained in:
@@ -6,6 +6,7 @@ import toaster from '../../components/toast';
|
|||||||
import seahubMetadataAPI from './seahub-metadata-api';
|
import seahubMetadataAPI from './seahub-metadata-api';
|
||||||
import { hideMenu, showMenu } from '../context-menu/actions';
|
import { hideMenu, showMenu } from '../context-menu/actions';
|
||||||
import TextTranslation from '../../utils/text-translation';
|
import TextTranslation from '../../utils/text-translation';
|
||||||
|
import { siteRoot } from '../../utils/constants';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
repoID: PropTypes.string.isRequired,
|
repoID: PropTypes.string.isRequired,
|
||||||
@@ -103,7 +104,8 @@ class MetadataManageView extends React.Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
viewMetadata = () => {
|
viewMetadata = () => {
|
||||||
|
let server = siteRoot.substring(0, siteRoot.length-1);
|
||||||
|
window.open(server + '/repos/' + this.props.repoID + '/metadata/table-view/', '_blank');
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@@ -120,7 +122,7 @@ class MetadataManageView extends React.Component {
|
|||||||
onClick={this.onClick}
|
onClick={this.onClick}
|
||||||
onContextMenu={this.onItemContextMenu}
|
onContextMenu={this.onItemContextMenu}
|
||||||
>
|
>
|
||||||
<div className="tree-node-text">{gettext('Metadata View')}
|
<div className="tree-node-text">{gettext('Metadata Views')}
|
||||||
<div className="left-icon">
|
<div className="left-icon">
|
||||||
<i className="tree-node-icon">
|
<i className="tree-node-icon">
|
||||||
<span class="sf2-icon-cog2" aria-hidden="true" />
|
<span class="sf2-icon-cog2" aria-hidden="true" />
|
||||||
|
51
seahub/repo_metadata/views.py
Normal file
51
seahub/repo_metadata/views.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
from seahub.views import check_folder_permission
|
||||||
|
from seaserv import seafile_api
|
||||||
|
from seahub.auth.decorators import login_required
|
||||||
|
from seahub.base.decorators import repo_passwd_set_required
|
||||||
|
from django.http import Http404, HttpResponseBadRequest, HttpResponseForbidden, HttpResponseServerError
|
||||||
|
from seahub.api2.endpoints.metadata_manage import list_metadata_records
|
||||||
|
from seahub.repo_metadata.models import RepoMetadata
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@repo_passwd_set_required
|
||||||
|
def view_metadata(request, repo_id):
|
||||||
|
template = 'metadata_table.html'
|
||||||
|
|
||||||
|
# metadata enable check
|
||||||
|
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||||
|
if not record or not record.enabled:
|
||||||
|
return HttpResponseBadRequest(f'The metadata module is not enable for repo {repo_id}.')
|
||||||
|
|
||||||
|
# recource check
|
||||||
|
repo = seafile_api.get_repo(repo_id)
|
||||||
|
if not repo:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
# permission check
|
||||||
|
permission = check_folder_permission(request, repo_id, '/')
|
||||||
|
if not permission:
|
||||||
|
return HttpResponseForbidden('Permission denied.')
|
||||||
|
|
||||||
|
try:
|
||||||
|
results = list_metadata_records(repo_id, request.user.username)
|
||||||
|
except Exception as err:
|
||||||
|
return HttpResponseServerError(repr(err))
|
||||||
|
|
||||||
|
for result in results:
|
||||||
|
#preprocess creator and modifier
|
||||||
|
if result['creator'] == '':
|
||||||
|
result['creator'] = '-----------'
|
||||||
|
|
||||||
|
if result['modifier'] == '':
|
||||||
|
result['modifier'] = '-----------'
|
||||||
|
|
||||||
|
#preprocess _id
|
||||||
|
result['id'] = result['_id']
|
||||||
|
del result['_id']
|
||||||
|
|
||||||
|
return_dict = {
|
||||||
|
'metadata_records': results
|
||||||
|
}
|
||||||
|
return render(request, template, return_dict)
|
53
seahub/templates/metadata_table.html
Normal file
53
seahub/templates/metadata_table.html
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block main_panel %}
|
||||||
|
<div style="display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0;">
|
||||||
|
<table style="border-collapse: collapse; width: 100%; max-width: 800px;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">id</th>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">Creator</th>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">Created Time</th>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">Modifier</th>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">Modified Time</th>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">Parent Folder</th>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">Name</th>
|
||||||
|
<th style="border: 1px solid black; padding: 8px; text-align: center;">Is Folder</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for record in metadata_records %}
|
||||||
|
<tr>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.id }}</td>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.creator }}</td>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.created_time }}</td>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.modifier }}</td>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.modified_time }}</td>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.parent_dir }}</td>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.name }}</td>
|
||||||
|
<td style="border: 1px solid black; padding: 8px;">{{ record.is_dir|yesno:"Yes,No" }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_script %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.app.metadatas = [];
|
||||||
|
{% for record in metadata_records %}
|
||||||
|
window.app.metadatas.push({
|
||||||
|
id: '{{ record.id }}',
|
||||||
|
creator: '{{ record.creator }}',
|
||||||
|
createdTime: '{{ record.created_time }}',
|
||||||
|
modifier: '{{ record.creator }}',
|
||||||
|
modifiedTime: '{{ record.modified_time }}',
|
||||||
|
parentDir: '{{ record.parent_dir }}',
|
||||||
|
name: '{{ record.name }}',
|
||||||
|
isDir: '{{ record.is_dir }}',
|
||||||
|
});
|
||||||
|
{% endfor %}
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
@@ -204,6 +204,7 @@ from seahub.ocm.settings import OCM_ENDPOINT
|
|||||||
from seahub.ai.apis import LibrarySdocIndexes, Search, LibrarySdocIndex, TaskStatus, \
|
from seahub.ai.apis import LibrarySdocIndexes, Search, LibrarySdocIndex, TaskStatus, \
|
||||||
LibraryIndexState, QuestionAnsweringSearchInLibrary, FileDownloadToken
|
LibraryIndexState, QuestionAnsweringSearchInLibrary, FileDownloadToken
|
||||||
from seahub.wiki2.views import wiki_view
|
from seahub.wiki2.views import wiki_view
|
||||||
|
from seahub.repo_metadata.views import view_metadata
|
||||||
from seahub.api2.endpoints.wiki2 import Wikis2View, Wiki2View, Wiki2ConfigView, Wiki2PagesView, Wiki2PageView
|
from seahub.api2.endpoints.wiki2 import Wikis2View, Wiki2View, Wiki2ConfigView, Wiki2PagesView, Wiki2PageView
|
||||||
from seahub.api2.endpoints.subscription import SubscriptionView, SubscriptionPlansView, SubscriptionLogsView
|
from seahub.api2.endpoints.subscription import SubscriptionView, SubscriptionPlansView, SubscriptionLogsView
|
||||||
from seahub.api2.endpoints.metadata_manage import MetadataRecords, MetadataManage, MetadataRecord
|
from seahub.api2.endpoints.metadata_manage import MetadataRecords, MetadataManage, MetadataRecord
|
||||||
@@ -1028,4 +1029,5 @@ if settings.ENABLE_METADATA_MANAGEMENT:
|
|||||||
re_path(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/metadata/$', MetadataManage.as_view(), name='api-v2.1-metadata'),
|
re_path(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/metadata/$', MetadataManage.as_view(), name='api-v2.1-metadata'),
|
||||||
re_path(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/metadata/records/$', MetadataRecords.as_view(), name='api-v2.1-metadata-records'),
|
re_path(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/metadata/records/$', MetadataRecords.as_view(), name='api-v2.1-metadata-records'),
|
||||||
re_path(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/metadata/records/(?P<record_id>[A-Za-z0-9_-]+)/$', MetadataRecord.as_view(), name='api-v2.1-metadata-record'),
|
re_path(r'^api/v2.1/repos/(?P<repo_id>[-0-9a-f]{36})/metadata/records/(?P<record_id>[A-Za-z0-9_-]+)/$', MetadataRecord.as_view(), name='api-v2.1-metadata-record'),
|
||||||
|
re_path(r'^repos/(?P<repo_id>[-0-9a-f]{36})/metadata/table-view/$', view_metadata, name='view_metadata'),
|
||||||
]
|
]
|
||||||
|
Reference in New Issue
Block a user