328 lines
No EOL
18 KiB
PHP
Executable file
328 lines
No EOL
18 KiB
PHP
Executable file
@extends('layouts.layout-2')
|
||
|
||
@section('content')
|
||
|
||
|
||
|
||
{!! Form::open(['url' => route('cms_sidebar_detail', [$id]), 'class' => 'form-horizontal']) !!}
|
||
|
||
<h4 class="font-weight-bold py-3 mb-1">
|
||
Sidebar Widget @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
|
||
<div class="float-right">
|
||
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>
|
||
<a href="{{route('cms_sidebar')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
|
||
</div>
|
||
</h4>
|
||
<div class="clearfix"></div>
|
||
|
||
<input type="hidden" name="id" id="id" value="{{$id}}">
|
||
|
||
|
||
<!-- draft -->
|
||
<div class="card mb-2">
|
||
<div class="card-body">
|
||
<div class="form-row">
|
||
<div class="form-group col-sm-8">
|
||
<label class="form-label" for="widget_title">{{ __('Name') }}*</label>
|
||
{{ Form::text('name', $widget->name, array('placeholder'=>__('Name'), 'class'=>'form-control', 'id'=>'widget_name', 'required'=>true)) }}
|
||
</div>
|
||
<div class="form-group col-sm-4">
|
||
<label class="custom-control custom-checkbox float-right">
|
||
{!! Form::checkbox('active', 1, $widget->active, ['class'=>'custom-control-input']) !!}
|
||
<span class="custom-control-label">{{__('aktiv')}}</span>
|
||
</label>
|
||
<label for="widget_pos" class="form-label">{{__('Position')}}</label>
|
||
{{ Form::text('pos', $widget->pos, array('placeholder'=>__('pos'), 'class'=>'form-control', 'id'=>'widget_pos')) }}
|
||
</div>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group col-sm-12">
|
||
<label class="form-label" for="component">{{ __('Komponente') }}</label>
|
||
<select class="selectpicker" data-style="btn-default" name="component" id="component">
|
||
{!! \App\Models\SidebarWidget::getComponentsOptions($widget->component) !!}
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="form-row" data-config-panel="html" style="{{ $widget->isStructuredConfigComponent() ? 'display:none;' : '' }}">
|
||
<div class="form-group col-sm-12">
|
||
<label class="form-label" for="html">{{ __('HTML') }}</label>
|
||
{{ Form::textarea('html', $widget->html, ['class' => 'form-control']) }}
|
||
<small class="form-text text-muted">
|
||
Wird nur genutzt, wenn keine feste Komponente ausgewählt ist oder die Komponente eigene HTML-Inhalte erwartet.
|
||
</small>
|
||
</div>
|
||
</div>
|
||
<div data-config-panel="homepage-trips" style="{{ $widget->isHomepageTripsComponent() ? '' : 'display:none;' }}">
|
||
<div class="alert alert-info">
|
||
Diese Auswahl steuert die Startseiten-Bereiche „Aktuell planbare Reisen" und „Beliebte Kulturreisen".
|
||
Die Reihenfolge entspricht der Reihenfolge der ausgewählten Einträge.
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group col-sm-12">
|
||
<label class="form-label" for="homepage_page_picker">{{ __('Reise hinzufügen') }}</label>
|
||
<div class="input-group">
|
||
<select class="selectpicker form-control" data-style="btn-default" name="homepage_page_picker" id="homepage_page_picker" data-live-search="true">
|
||
<option value="">{{ __('Bitte Reise wählen') }}</option>
|
||
{!! \App\Models\SidebarWidget::getHomepageTravelPageOptions($widget->getHomepagePageIds()) !!}
|
||
</select>
|
||
<span class="input-group-append">
|
||
<button class="btn btn-primary" type="button" id="homepage_add_page">{{ __('hinzufügen') }}</button>
|
||
</span>
|
||
</div>
|
||
<small class="form-text text-muted">
|
||
Wenn keine Reisen hinzugefügt sind, nutzt die DEV-Startseite die automatische Prioritätslogik.
|
||
</small>
|
||
</div>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group col-sm-12">
|
||
<label class="form-label">{{ __('Ausgewählte Reisen') }}</label>
|
||
<div class="list-group" id="homepage_selected_pages">
|
||
@foreach($widget->getHomepageSelectedTravelPageItems() as $selectedPage)
|
||
<div class="list-group-item d-flex align-items-center justify-content-between" data-page-id="{{ $selectedPage['id'] }}">
|
||
<input type="hidden" name="homepage_page_ids[]" value="{{ $selectedPage['id'] }}">
|
||
<span class="mr-3">
|
||
<span class="badge badge-secondary mr-2" data-page-number>{{ $loop->iteration }}</span>
|
||
{{ $selectedPage['label'] }}
|
||
</span>
|
||
<span class="d-flex align-items-center">
|
||
<label class="custom-control custom-checkbox mb-0 mr-3">
|
||
<input type="checkbox" class="custom-control-input" name="homepage_new_page_ids[]" value="{{ $selectedPage['id'] }}" {{ $selectedPage['is_new'] ? 'checked' : '' }}>
|
||
<span class="custom-control-label">
|
||
<span class="badge badge-warning">{{ __('Neu') }}</span>
|
||
</span>
|
||
</label>
|
||
<span class="btn-group btn-group-sm mr-2" role="group" aria-label="{{ __('Reihenfolge ändern') }}">
|
||
<button class="btn btn-outline-secondary" type="button" data-move-page="up">{{ __('hoch') }}</button>
|
||
<button class="btn btn-outline-secondary" type="button" data-move-page="down">{{ __('runter') }}</button>
|
||
</span>
|
||
<button class="btn btn-sm btn-outline-danger" type="button" data-remove-page>{{ __('entfernen') }}</button>
|
||
</span>
|
||
</div>
|
||
@endforeach
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div data-config-panel="news" style="{{ $widget->isNewsComponent() ? '' : 'display:none;' }}">
|
||
<div class="alert alert-info">
|
||
Die Reisenews werden weiterhin automatisch aus dem News-Bereich geladen. Hier wird nur gesteuert,
|
||
wie viele Einträge in der Sidebar erscheinen.
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group col-sm-3">
|
||
<label class="form-label" for="homepage_news_limit">{{ __('Anzahl Reisenews') }}</label>
|
||
<input type="number" min="1" max="12" class="form-control" name="homepage_news_limit" id="homepage_news_limit" value="{{ $widget->getHomepageNewsLimit() }}">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group col-sm-12">
|
||
<label class="form-label" for="show_at">{{ __('Sichtbar') }}</label>
|
||
<select class="selectpicker" data-style="btn-default" name="show_at[]" multiple>
|
||
{!! \App\Models\SidebarWidget::getShowsOptions($widget->show_at) !!}
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="text-left mt-3">
|
||
<button type="submit" name="action" value="saveAll" class="btn btn-submit">{{ __('save changes') }}</button>
|
||
<a href="{{route('cms_sidebar')}}" class="btn btn-default">{{ __('back') }}</a>
|
||
</div>
|
||
|
||
{!! Form::close() !!}
|
||
|
||
<script>
|
||
$(function () {
|
||
var componentSelect = $('#component');
|
||
var panels = $('[data-config-panel]');
|
||
var homepageTripComponents = ['homepagePlannableTrips', 'homepagePopularTrips'];
|
||
var pagePicker = $('#homepage_page_picker');
|
||
var selectedPages = $('#homepage_selected_pages');
|
||
|
||
function updateConfigPanels() {
|
||
var component = componentSelect.val();
|
||
|
||
panels.hide();
|
||
|
||
if (homepageTripComponents.indexOf(component) !== -1) {
|
||
$('[data-config-panel="homepage-trips"]').show();
|
||
} else if (component === 'newsSidebarWidget') {
|
||
$('[data-config-panel="news"]').show();
|
||
} else {
|
||
$('[data-config-panel="html"]').show();
|
||
}
|
||
|
||
$('.selectpicker').selectpicker('refresh');
|
||
}
|
||
|
||
function addSelectedPage(pageId, label, isNew) {
|
||
if (!pageId || selectedPages.find('[data-page-id="' + pageId + '"]').length) {
|
||
return;
|
||
}
|
||
|
||
var item = $('<div class="list-group-item d-flex align-items-center justify-content-between"></div>');
|
||
var title = $('<span class="mr-3"></span>');
|
||
var controls = $('<span class="d-flex align-items-center"></span>');
|
||
var checkboxId = 'homepage_new_page_' + pageId;
|
||
var newLabel = $('<label class="custom-control custom-checkbox mb-0 mr-3"></label>');
|
||
var newCheckbox = $('<input type="checkbox" class="custom-control-input" name="homepage_new_page_ids[]">')
|
||
.attr('id', checkboxId)
|
||
.val(pageId);
|
||
var moveButtons = $('<span class="btn-group btn-group-sm mr-2" role="group" aria-label="{{ __('Reihenfolge ändern') }}"></span>');
|
||
var removeButton = $('<button class="btn btn-sm btn-outline-danger" type="button" data-remove-page>{{ __('entfernen') }}</button>');
|
||
|
||
if (isNew) {
|
||
newCheckbox.prop('checked', true);
|
||
}
|
||
|
||
item.attr('data-page-id', pageId);
|
||
item.append($('<input type="hidden" name="homepage_page_ids[]">').val(pageId));
|
||
title.append($('<span class="badge badge-secondary mr-2" data-page-number></span>'));
|
||
title.append(document.createTextNode(label));
|
||
newLabel.append(newCheckbox);
|
||
newLabel.append($('<span class="custom-control-label"><span class="badge badge-warning">{{ __('Neu') }}</span></span>'));
|
||
controls.append(newLabel);
|
||
moveButtons.append($('<button class="btn btn-outline-secondary" type="button" data-move-page="up">{{ __('hoch') }}</button>'));
|
||
moveButtons.append($('<button class="btn btn-outline-secondary" type="button" data-move-page="down">{{ __('runter') }}</button>'));
|
||
controls.append(moveButtons);
|
||
controls.append(removeButton);
|
||
item.append(title);
|
||
item.append(controls);
|
||
selectedPages.append(item);
|
||
updateSelectedPageNumbers();
|
||
}
|
||
|
||
function updateSelectedPageNumbers() {
|
||
selectedPages.find('[data-page-id]').each(function (index) {
|
||
$(this).find('[data-page-number]').text(index + 1);
|
||
});
|
||
}
|
||
|
||
componentSelect.on('changed.bs.select change', updateConfigPanels);
|
||
$('#homepage_add_page').on('click', function () {
|
||
var selectedOption = pagePicker.find('option:selected');
|
||
addSelectedPage(selectedOption.val(), selectedOption.data('label') || selectedOption.text(), false);
|
||
});
|
||
selectedPages.on('click', '[data-remove-page]', function () {
|
||
$(this).closest('[data-page-id]').remove();
|
||
updateSelectedPageNumbers();
|
||
});
|
||
selectedPages.on('click', '[data-move-page]', function () {
|
||
var item = $(this).closest('[data-page-id]');
|
||
|
||
if ($(this).data('move-page') === 'up') {
|
||
item.prev('[data-page-id]').before(item);
|
||
} else {
|
||
item.next('[data-page-id]').after(item);
|
||
}
|
||
updateSelectedPageNumbers();
|
||
});
|
||
updateSelectedPageNumbers();
|
||
updateConfigPanels();
|
||
});
|
||
</script>
|
||
|
||
{{--
|
||
<!-- Modal template -->
|
||
<div class="modal fade" id="modals-class">
|
||
<div class="modal-dialog">
|
||
<form class="modal-content" action="{{ route('travel_program_class_update') }}" method="post">
|
||
@csrf
|
||
<input type="hidden" class="form-control" name="id">
|
||
<input type="hidden" class="form-control" name="program_id" value="{{$widget->id}}">
|
||
|
||
|
||
<div class="modal-header">
|
||
<h5 class="modal-title">Programm Katagorie/Klassen <span class="font-weight-light">anlegen/bearbeiten</span></h5>
|
||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<div class="form-row">
|
||
<div class="form-group col">
|
||
<label class="custom-control custom-checkbox float-right">
|
||
<input type="checkbox" class="custom-control-input" name="standard" checked>
|
||
<span class="custom-control-label">{{__('Standard')}}</span>
|
||
</label>
|
||
<label for="name" class="form-label">Name*</label>
|
||
<input type="text" class="form-control" name="name" placeholder="{{__('Description')}}" required>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group col">
|
||
<label for="description" class="form-label">Beschreibung</label>
|
||
<input type="text" class="form-control" name="description" placeholder="{{__('Description')}}">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
|
||
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- Modal template -->
|
||
<div class="modal fade" id="modals-draft">
|
||
<div class="modal-dialog">
|
||
<form class="modal-content" action="{{ route('travel_program_draft_update') }}" method="post">
|
||
@csrf
|
||
<input type="hidden" class="form-control" name="id">
|
||
<input type="hidden" class="form-control" name="travel_program_id" value="{{$widget->id}}">
|
||
|
||
<div class="modal-header">
|
||
<h5 class="modal-title">Vorlage Reiseprogramm <span class="font-weight-light">zuordnen</span></h5>
|
||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
|
||
<div class="form-row">
|
||
<div class="form-group col">
|
||
<label for="draft_id" class="form-label">{{__('Vorlage')}}</label>
|
||
<select class="selectpicker" data-style="btn-default" name="draft_id" data-live-search="true" required>
|
||
{!! HTMLHelper::getDraftOptions() !!}
|
||
</select>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
|
||
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
$( document ).ready(function() {
|
||
$('#modals-class').on('show.bs.modal', function (event) {
|
||
var button = $(event.relatedTarget);
|
||
$(this).find(".modal-content input[name='id']").val(button.data('id'));
|
||
$(this).find(".modal-body input[name='name']").val(button.data('name'));
|
||
$(this).find(".modal-body input[name='description']").val(button.data('description'));
|
||
$(this).find(".modal-body input[name='standard']").prop( "checked", button.data('standard'));
|
||
});
|
||
|
||
$('#modals-draft').on('show.bs.modal', function (event) {
|
||
var button = $(event.relatedTarget);
|
||
$(this).find(".modal-content input[name='id']").val(button.data('id'));
|
||
$(this).find(".modal-body select[name='draft_id']").val(button.data('draft_id'));
|
||
$(this).find(".modal-body select[name='travel_class_id']").val(button.data('travel_class_id'));
|
||
$(this).find(".modal-body select[name='weekdays[]']").val(button.data('weekdays'));
|
||
|
||
$('.selectpicker').selectpicker('refresh');
|
||
});
|
||
});
|
||
</script>
|
||
--}}
|
||
|
||
|
||
@endsection |