1
0
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:
Huang Junxiang
2024-06-15 14:03:17 +08:00
committed by GitHub
parent 58875d110c
commit 8d4dbf6043
4 changed files with 110 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ import toaster from '../../components/toast';
import seahubMetadataAPI from './seahub-metadata-api';
import { hideMenu, showMenu } from '../context-menu/actions';
import TextTranslation from '../../utils/text-translation';
import { siteRoot } from '../../utils/constants';
const propTypes = {
repoID: PropTypes.string.isRequired,
@@ -103,7 +104,8 @@ class MetadataManageView extends React.Component {
};
viewMetadata = () => {
let server = siteRoot.substring(0, siteRoot.length-1);
window.open(server + '/repos/' + this.props.repoID + '/metadata/table-view/', '_blank');
};
render() {
@@ -120,7 +122,7 @@ class MetadataManageView extends React.Component {
onClick={this.onClick}
onContextMenu={this.onItemContextMenu}
>
<div className="tree-node-text">{gettext('Metadata View')}
<div className="tree-node-text">{gettext('Metadata Views')}
<div className="left-icon">
<i className="tree-node-icon">
<span class="sf2-icon-cog2" aria-hidden="true" />

View 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)

View 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 %}

View File

@@ -204,6 +204,7 @@ from seahub.ocm.settings import OCM_ENDPOINT
from seahub.ai.apis import LibrarySdocIndexes, Search, LibrarySdocIndex, TaskStatus, \
LibraryIndexState, QuestionAnsweringSearchInLibrary, FileDownloadToken
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.subscription import SubscriptionView, SubscriptionPlansView, SubscriptionLogsView
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/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'^repos/(?P<repo_id>[-0-9a-f]{36})/metadata/table-view/$', view_metadata, name='view_metadata'),
]