mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-06-10 02:21:23 +03:00
ZIP Imports: Added parent selector for page/chapter imports
This commit is contained in:
parent
8f6f81948e
commit
14578c2257
@ -72,14 +72,22 @@ class ImportController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function run(int $id)
|
public function run(int $id, Request $request)
|
||||||
{
|
{
|
||||||
// TODO - Test access/visibility
|
// TODO - Test access/visibility
|
||||||
|
|
||||||
$import = $this->imports->findVisible($id);
|
$import = $this->imports->findVisible($id);
|
||||||
|
$parent = null;
|
||||||
|
|
||||||
|
if ($import->getType() === 'page' || $import->getType() === 'chapter') {
|
||||||
|
$data = $this->validate($request, [
|
||||||
|
'parent' => ['required', 'string']
|
||||||
|
]);
|
||||||
|
$parent = $data['parent'];
|
||||||
|
}
|
||||||
|
|
||||||
// TODO - Run import
|
// TODO - Run import
|
||||||
// Validate again before
|
// TODO - Validate again before
|
||||||
|
// TODO - Check permissions before (create for main item, create for children, create for related items [image, attachments])
|
||||||
// TODO - Redirect to result
|
// TODO - Redirect to result
|
||||||
// TOOD - Or redirect back with errors
|
// TOOD - Or redirect back with errors
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,8 @@ return [
|
|||||||
'import_size' => 'Import ZIP Size:',
|
'import_size' => 'Import ZIP Size:',
|
||||||
'import_uploaded_at' => 'Uploaded:',
|
'import_uploaded_at' => 'Uploaded:',
|
||||||
'import_uploaded_by' => 'Uploaded by:',
|
'import_uploaded_by' => 'Uploaded by:',
|
||||||
|
'import_location' => 'Import Location',
|
||||||
|
'import_location_desc' => 'Select a target location for your imported content. You\'ll need the relevant permissions to create within the location you choose.',
|
||||||
'import_delete_confirm' => 'Are you sure you want to delete this import?',
|
'import_delete_confirm' => 'Are you sure you want to delete this import?',
|
||||||
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
|
'import_delete_desc' => 'This will delete the uploaded import ZIP file, and cannot be undone.',
|
||||||
|
|
||||||
|
@ -138,6 +138,11 @@ $loadingSize: 10px;
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding: $-s $-m;
|
padding: $-s $-m;
|
||||||
}
|
}
|
||||||
|
input[type="text"]:focus {
|
||||||
|
outline: 1px solid var(--color-primary);
|
||||||
|
border-radius: 3px 3px 0 0;
|
||||||
|
outline-offset: -1px;
|
||||||
|
}
|
||||||
.entity-list {
|
.entity-list {
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
height: 400px;
|
height: 400px;
|
||||||
@ -171,6 +176,19 @@ $loadingSize: 10px;
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&.small {
|
||||||
|
.entity-list-item {
|
||||||
|
padding: $-xs $-m;
|
||||||
|
}
|
||||||
|
.entity-list, .loading {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
input[type="text"] {
|
||||||
|
font-size: 13px;
|
||||||
|
padding: $-xs $-m;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.fullscreen {
|
.fullscreen {
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
{{--
|
||||||
|
$name - string
|
||||||
|
$autofocus - boolean, optional
|
||||||
|
$entityTypes - string, optional
|
||||||
|
$entityPermission - string, optional
|
||||||
|
$selectorEndpoint - string, optional
|
||||||
|
$selectorSize - string, optional (compact)
|
||||||
|
--}}
|
||||||
<div class="form-group entity-selector-container">
|
<div class="form-group entity-selector-container">
|
||||||
<div component="entity-selector"
|
<div component="entity-selector"
|
||||||
refs="entity-selector-popup@selector"
|
refs="entity-selector-popup@selector"
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
@section('body')
|
@section('body')
|
||||||
|
|
||||||
|
@php
|
||||||
|
$type = $import->getType();
|
||||||
|
@endphp
|
||||||
|
|
||||||
<div class="container small">
|
<div class="container small">
|
||||||
|
|
||||||
<main class="card content-wrap auto-height mt-xxl">
|
<main class="card content-wrap auto-height mt-xxl">
|
||||||
@ -9,11 +13,9 @@
|
|||||||
<p class="text-muted">{{ trans('entities.import_continue_desc') }}</p>
|
<p class="text-muted">{{ trans('entities.import_continue_desc') }}</p>
|
||||||
|
|
||||||
<div class="mb-m">
|
<div class="mb-m">
|
||||||
@php
|
<label class="setting-list-label">Import Details</label>
|
||||||
$type = $import->getType();
|
|
||||||
@endphp
|
|
||||||
<div class="flex-container-row items-center justify-space-between wrap">
|
<div class="flex-container-row items-center justify-space-between wrap">
|
||||||
<div class="py-s">
|
<div>
|
||||||
<p class="text-{{ $type }} mb-xs bold">@icon($type) {{ $import->name }}</p>
|
<p class="text-{{ $type }} mb-xs bold">@icon($type) {{ $import->name }}</p>
|
||||||
@if($type === 'book')
|
@if($type === 'book')
|
||||||
<p class="text-chapter mb-xs ml-l">@icon('chapter') {{ trans_choice('entities.x_chapters', $import->chapter_count) }}</p>
|
<p class="text-chapter mb-xs ml-l">@icon('chapter') {{ trans_choice('entities.x_chapters', $import->chapter_count) }}</p>
|
||||||
@ -22,7 +24,7 @@
|
|||||||
<p class="text-page mb-xs ml-l">@icon('page') {{ trans_choice('entities.x_pages', $import->page_count) }}</p>
|
<p class="text-page mb-xs ml-l">@icon('page') {{ trans_choice('entities.x_pages', $import->page_count) }}</p>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
<div class="py-s">
|
<div>
|
||||||
<div class="opacity-80">
|
<div class="opacity-80">
|
||||||
<strong>{{ trans('entities.import_size') }}</strong>
|
<strong>{{ trans('entities.import_size') }}</strong>
|
||||||
<span>{{ $import->getSizeString() }}</span>
|
<span>{{ $import->getSizeString() }}</span>
|
||||||
@ -45,6 +47,19 @@
|
|||||||
action="{{ $import->getUrl() }}"
|
action="{{ $import->getUrl() }}"
|
||||||
method="POST">
|
method="POST">
|
||||||
{{ csrf_field() }}
|
{{ csrf_field() }}
|
||||||
|
|
||||||
|
@if($type === 'page' || $type === 'chapter')
|
||||||
|
<hr>
|
||||||
|
<label class="setting-list-label">{{ trans('entities.import_location') }}</label>
|
||||||
|
<p class="small mb-m">{{ trans('entities.import_location_desc') }}</p>
|
||||||
|
@include('entities.selector', [
|
||||||
|
'name' => 'parent',
|
||||||
|
'entityTypes' => $type === 'page' ? 'chapter,book' : 'book',
|
||||||
|
'entityPermission' => "{$type}-create",
|
||||||
|
'selectorSize' => 'compact small',
|
||||||
|
])
|
||||||
|
@include('form.errors', ['name' => 'parent'])
|
||||||
|
@endif
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
{{--
|
||||||
|
$name - string
|
||||||
|
--}}
|
||||||
@if($errors->has($name))
|
@if($errors->has($name))
|
||||||
<div class="text-neg text-small">{{ $errors->first($name) }}</div>
|
<div class="text-neg text-small">{{ $errors->first($name) }}</div>
|
||||||
@endif
|
@endif
|
Loading…
x
Reference in New Issue
Block a user