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 { 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" />
|
||||
|
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, \
|
||||
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'),
|
||||
]
|
||||
|
Reference in New Issue
Block a user