23-01-2026
This commit is contained in:
parent
8fd1f4d451
commit
389d5d1820
59 changed files with 9642 additions and 883 deletions
|
|
@ -236,7 +236,7 @@
|
|||
name="draft_item[{{ $booking_draft_item->id }}][adult]"
|
||||
id="draft_item_{{ $booking_draft_item->id }}_adult">
|
||||
<option value="">0</option>
|
||||
{!! HTMLHelper::getRangeOptions($booking_draft_item->adult, 10, '') !!}
|
||||
{!! HTMLHelper::getRangeOptions($booking_draft_item->adult, 20, '') !!}
|
||||
</select>
|
||||
{{ Form::text('draft_item[' . $booking_draft_item->id . '][price_adult]', $booking_draft_item->price_adult, ['placeholder' => __('Preis in €'), 'class' => 'form-control', 'id' => 'draft_item_' . $booking_draft_item->id . '_price_adult', 'maxlength' => 10]) }}
|
||||
<span class="input-group-append">
|
||||
|
|
@ -251,7 +251,7 @@
|
|||
name="draft_item[{{ $booking_draft_item->id }}][children]"
|
||||
id="draft_item_{{ $booking_draft_item->id }}_children">
|
||||
<option value="">0</option>
|
||||
{!! HTMLHelper::getRangeOptions($booking_draft_item->children, 10, '') !!}
|
||||
{!! HTMLHelper::getRangeOptions($booking_draft_item->children, 20, '') !!}
|
||||
</select>
|
||||
{{ Form::text('draft_item[' . $booking_draft_item->id . '][price_children]', $booking_draft_item->price_children, ['placeholder' => __('Preis in €'), 'class' => 'form-control', 'id' => 'draft_item_' . $booking_draft_item->id . '_price_children']) }}
|
||||
<span class="input-group-append">
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
|
||||
<h4 class="font-weight-bold py-3 mb-1">
|
||||
{{ __('Reisenews') }}
|
||||
</h4>
|
||||
|
|
@ -13,43 +12,57 @@
|
|||
</div>
|
||||
<table class="datatables-news table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="max-width: 60px;"> </th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Parent')}}</th>
|
||||
<th>{{__('Date')}}</th>
|
||||
<th>{{__('sichtbar')}}</th>
|
||||
<th>#</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="max-width: 60px;"> </th>
|
||||
<th style="max-width: 80px;">Bild</th>
|
||||
<th>{{ __('Name') }}</th>
|
||||
<th>{{ __('Parent') }}</th>
|
||||
<th>{{ __('Date') }}</th>
|
||||
<th>{{ __('sichtbar') }}</th>
|
||||
<th>#</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($news as $value)
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ route('cms_news_detail', [$value->id]) }}" class="btn icon-btn btn-sm btn-primary">
|
||||
<span class="fa fa-edit"></span>
|
||||
</a>
|
||||
</td>
|
||||
<td><a href="{{ route('cms_news_detail', [$value->id]) }}">{{ $value->title }}</a></td>
|
||||
<td>@if($value->parent) {{ $value->parent->title }} @else - Main No-Parent - @endif</td>
|
||||
<td data-sort="{{ $value->getDateRow() }}">{{ $value->date }}</td>
|
||||
@foreach ($news as $value)
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ route('cms_news_detail', [$value->id]) }}"
|
||||
class="btn icon-btn btn-sm btn-primary">
|
||||
<span class="fa fa-edit"></span>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<img src="{{ $value->getImage('thumb_url') }}" alt="{{ $value->title }}" class="img-fluid"
|
||||
style="max-width: 80px;">
|
||||
</td>
|
||||
<td><a href="{{ route('cms_news_detail', [$value->id]) }}">{{ $value->title }}</a></td>
|
||||
<td>
|
||||
@if ($value->parent)
|
||||
{{ $value->parent->title }}
|
||||
@else
|
||||
- Main No-Parent -
|
||||
@endif
|
||||
</td>
|
||||
<td data-sort="{{ $value->getDateRow() }}">{{ $value->date }}</td>
|
||||
|
||||
<td data-sort="{{ $value->status }}">
|
||||
@if($value->status)
|
||||
<span class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>
|
||||
@else
|
||||
<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($value->parent)
|
||||
<a class="text-danger" href="{{ route('cms_news_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a>
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
<td data-sort="{{ $value->status }}">
|
||||
@if ($value->status)
|
||||
<span class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>
|
||||
@else
|
||||
<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if ($value->parent)
|
||||
<a class="text-danger" href="{{ route('cms_news_delete', [$value->id]) }}"
|
||||
onclick="return confirm('{{ __('Wirklich löschen?') }}');"><i
|
||||
class="fa fa-trash-alt"></i></a>
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="mt-4 col">
|
||||
|
|
@ -57,47 +70,45 @@
|
|||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$( document ).ready(function() {
|
||||
$(document).ready(function() {
|
||||
$('.datatables-news').dataTable({
|
||||
"bLengthChange": false,
|
||||
"iDisplayLength": 50,
|
||||
"language": {
|
||||
"url": "/js/German.json"
|
||||
},
|
||||
initComplete: function () {
|
||||
this.api().columns(2).every( function () {
|
||||
initComplete: function() {
|
||||
this.api().columns(2).every(function() {
|
||||
var column = this;
|
||||
var title = $(column.header()).html();
|
||||
var select = $('<select class="selectpicker"><option value="">'+title+'</option></select>')
|
||||
.appendTo( $(column.header()).empty() )
|
||||
.on( 'change', function () {
|
||||
var select = $('<select class="selectpicker"><option value="">' +
|
||||
title + '</option></select>')
|
||||
.appendTo($(column.header()).empty())
|
||||
.on('change', function() {
|
||||
var val = $.fn.dataTable.util.escapeRegex(
|
||||
$(this).val()
|
||||
);
|
||||
|
||||
column
|
||||
.search( val ? '^'+val+'$' : '', true, false )
|
||||
.search(val ? '^' + val + '$' : '', true, false)
|
||||
.draw();
|
||||
} );
|
||||
});
|
||||
|
||||
column.data().unique().sort().each( function ( d, j ) {
|
||||
if(d !== ""){
|
||||
select.append( '<option value="'+d+'">'+d+'</option>' );
|
||||
column.data().unique().sort().each(function(d, j) {
|
||||
if (d !== "") {
|
||||
select.append('<option value="' + d + '">' + d +
|
||||
'</option>');
|
||||
}
|
||||
} );
|
||||
});
|
||||
|
||||
|
||||
} );
|
||||
});
|
||||
$('.selectpicker').selectpicker();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@endsection
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -1,460 +1,673 @@
|
|||
@if (Auth::check())
|
||||
|
||||
|
||||
|
||||
@if(Auth::check())
|
||||
|
||||
<div id="layout-sidenav" class="{{ isset($layout_sidenav_horizontal) ? 'layout-sidenav-horizontal sidenav-horizontal container-p-x flex-grow-0' : 'layout-sidenav sidenav-vertical' }} sidenav bg-sidenav-theme">
|
||||
<div id="layout-sidenav"
|
||||
class="{{ isset($layout_sidenav_horizontal) ? 'layout-sidenav-horizontal sidenav-horizontal container-p-x flex-grow-0' : 'layout-sidenav sidenav-vertical' }} sidenav bg-sidenav-theme">
|
||||
|
||||
<!-- Inner -->
|
||||
<ul class="sidenav-inner{{ empty($layout_sidenav_horizontal) ? ' py-1' : '' }}">
|
||||
|
||||
<li class="sidenav-item{{ Request::is('home') ? ' active' : '' }}">
|
||||
<a href="{{ route('home') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-apps"></i><div>{{__('Home')}}</div></a>
|
||||
<a href="{{ route('home') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-apps"></i>
|
||||
<div>{{ __('Home') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@if(Auth::user()->isPermission('my-dat'))
|
||||
@if (Auth::user()->isPermission('my-dat'))
|
||||
<li class="sidenav-item{{ Request::is('user/edit') ? ' active' : '' }}">
|
||||
<a href="{{ route('user_edit') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-create"></i><div>{{ __('Your Data') }}</div></a>
|
||||
<a href="{{ route('user_edit') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-create"></i>
|
||||
<div>{{ __('Your Data') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isAdmin())
|
||||
@if(Auth::user()->isPermission('crm'))
|
||||
@if (Auth::user()->isAdmin())
|
||||
@if (Auth::user()->isPermission('crm'))
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
<li class="sidenav-header small font-weight-semibold">ADMIN CRM</li>
|
||||
@if(Auth::user()->isPermission('crm-tp'))
|
||||
<li class="sidenav-item{{ Request::is(['travel/*', 'drafts', 'draft/*', 'travel_content', 'travel_content/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-airplane"></i>
|
||||
<div>Reiseprogramme</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('crm-tp-pr'))
|
||||
<li class="sidenav-item{{ Request::is('travel/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_programs') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-airplane"></i><div>Programme</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-tp-dr'))
|
||||
<li class="sidenav-item{{ Request::is(['drafts','draft/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('drafts') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-paper"></i><div>Vorlagen</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-tp-tc'))
|
||||
<li class="sidenav-item{{ Request::is(['travel_content', 'travel_content/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_content') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-map"></i><div>Inhalte</div></a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('crm-tp'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['travel/*', 'drafts', 'draft/*', 'travel_content', 'travel_content/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-airplane"></i>
|
||||
<div>Reiseprogramme</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if (Auth::user()->isPermission('crm-tp-pr'))
|
||||
<li class="sidenav-item{{ Request::is('travel/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_programs') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-airplane"></i>
|
||||
<div>Programme</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-tp-dr'))
|
||||
<li class="sidenav-item{{ Request::is(['drafts', 'draft/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('drafts') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-paper"></i>
|
||||
<div>Vorlagen</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-tp-tc'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['travel_content', 'travel_content/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_content') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-map"></i>
|
||||
<div>Inhalte</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-bo'))
|
||||
<li class="sidenav-item{{ Request::is(['requests', 'bookings', 'booking/*', 'leads', 'lead/*', 'customers', 'customer/*','customer_mails', 'customer_mail/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-bed"></i>
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('crm-bo-re'))
|
||||
<li class="sidenav-item{{ Request::is('requests') ? ' active' : '' }}">
|
||||
<a href="{{ route('requests') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-search"></i><div>Buchungen</div></a>
|
||||
</li>
|
||||
@endif
|
||||
{{--
|
||||
@if(Auth::user()->isPermission('crm-bo-bo'))
|
||||
@if (Auth::user()->isPermission('crm-bo'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['requests', 'bookings', 'booking/*', 'leads', 'lead/*', 'customers', 'customer/*', 'customer_mails', 'customer_mail/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-bed"></i>
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if (Auth::user()->isPermission('crm-bo-re'))
|
||||
<li class="sidenav-item{{ Request::is('requests') ? ' active' : '' }}">
|
||||
<a href="{{ route('requests') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-search"></i>
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
{{--
|
||||
@if (Auth::user()->isPermission('crm-bo-bo'))
|
||||
<li class="sidenav-item{{ Request::is(['bookings', 'booking/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('bookings') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-bed"></i><div>Buchungen</div></a>
|
||||
</li>
|
||||
@endif
|
||||
--}}
|
||||
@if(Auth::user()->isPermission('crm-bo-le'))
|
||||
<li class="sidenav-item{{ Request::is(['leads', 'lead/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('leads') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-contact"></i><div>Anfragen</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-bo-cu'))
|
||||
<li class="sidenav-item{{ Request::is(['customers', 'customer/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('customers') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i><div>Kunden</div></a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('crm-bo-le'))
|
||||
<li class="sidenav-item{{ Request::is(['leads', 'lead/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('leads') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-contact"></i>
|
||||
<div>Anfragen</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-bo-cu'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['customers', 'customer/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('customers') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-people"></i>
|
||||
<div>Kunden</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-cm'))
|
||||
<li class="sidenav-item{{ Request::is(['travel_users', 'travel_user/*', 'travel_user_booking_fewos', 'travel_user_booking_fewo/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-home"></i>
|
||||
<div>Buchungen FeWo</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('crm-cm-cf'))
|
||||
<li class="sidenav-item{{ Request::is('travel_users') ? ' active' : '' }} {{ Request::is('travel_user/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_users') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i><div>Kunden (FeWo)</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-cm-bf'))
|
||||
<li class="sidenav-item{{ Request::is('travel_user_booking_fewos') ? ' active' : '' }} {{ Request::is('travel_user_booking_fewo/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_user_booking_fewos') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-bed"></i><div>Buchungen (FeWo)</div></a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('crm-cm'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['travel_users', 'travel_user/*', 'travel_user_booking_fewos', 'travel_user_booking_fewo/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-home"></i>
|
||||
<div>Buchungen FeWo</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if (Auth::user()->isPermission('crm-cm-cf'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('travel_users') ? ' active' : '' }} {{ Request::is('travel_user/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_users') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-people"></i>
|
||||
<div>Kunden (FeWo)</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-cm-bf'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('travel_user_booking_fewos') ? ' active' : '' }} {{ Request::is('travel_user_booking_fewo/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('travel_user_booking_fewos') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-bed"></i>
|
||||
<div>Buchungen (FeWo)</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isPermission('crm-mail'))
|
||||
<li class="sidenav-item{{ Request::is(['mail/leads', 'mail/bookings', 'mail/booking_fewos']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-mail"></i>
|
||||
<div>E-Mails</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('crm-mail-le'))
|
||||
<li class="sidenav-item{{ Request::is(['mail/leads', 'mail/lead/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('mail_leads') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i><div>Anfragen </div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-mail-bo'))
|
||||
<li class="sidenav-item{{ Request::is(['mail/bookings', 'mail/booking/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('mail_bookings') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-bed"></i><div>Buchungen</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-mail-bf'))
|
||||
<li class="sidenav-item{{ Request::is(['mail/booking_fewos', 'mail/booking_fewo/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('mail_booking_fewos') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-home"></i><div>Buchungen (FeWo)</div></a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('crm-mail'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['mail/leads', 'mail/bookings', 'mail/booking_fewos']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-mail"></i>
|
||||
<div>E-Mails</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if (Auth::user()->isPermission('crm-mail-le'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['mail/leads', 'mail/lead/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('mail_leads') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-people"></i>
|
||||
<div>Anfragen </div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-mail-bo'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['mail/bookings', 'mail/booking/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('mail_bookings') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-bed"></i>
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-mail-bf'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['mail/booking_fewos', 'mail/booking_fewo/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('mail_booking_fewos') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-home"></i>
|
||||
<div>Buchungen (FeWo)</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isPermission('crm-iq-tl'))
|
||||
<li class="sidenav-item{{ Request::is(['iq/travel/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-apps"></i>
|
||||
<div>Reisebausteine</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('crm-iq-tl-pro'))
|
||||
<li class="sidenav-item{{ Request::is(['iq/travel/programms', 'iq/travel/programm/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_travel_programms') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-airplane"></i><div>Programm</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-iq-tl-gp'))
|
||||
<li class="sidenav-item{{ Request::is(['iq/travel/groups', 'iq/travel/group/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_travel_groups') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-grid"></i><div>Gruppe</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-iq-tl-it'))
|
||||
<li class="sidenav-item{{ Request::is(['iq/travel/items', 'iq/travel/item/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_travel_items') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-cube"></i><div>Baustein</div></a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('crm-iq-tl'))
|
||||
<li class="sidenav-item{{ Request::is(['iq/travel/*']) ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-apps"></i>
|
||||
<div>Reisebausteine</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if (Auth::user()->isPermission('crm-iq-tl-pro'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['iq/travel/programms', 'iq/travel/programm/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_travel_programms') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-airplane"></i>
|
||||
<div>Programm</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-iq-tl-gp'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['iq/travel/groups', 'iq/travel/group/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_travel_groups') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-grid"></i>
|
||||
<div>Gruppe</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-iq-tl-it'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['iq/travel/items', 'iq/travel/item/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_travel_items') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-cube"></i>
|
||||
<div>Baustein</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('crm-old-cm'))
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
<li class="sidenav-header small font-weight-semibold">ADMIN CRM altes System</li>
|
||||
@if (Auth::user()->isPermission('crm-old-cm'))
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
<li class="sidenav-header small font-weight-semibold">ADMIN CRM altes System</li>
|
||||
|
||||
<li class="sidenav-item">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-people"></i>
|
||||
<div>Kundenverwaltung</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/customers') }}" class="sidenav-link">
|
||||
<div>Kunden</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/leads') }}" class="sidenav-link">
|
||||
<div>Anfragen</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/bookings') }}" class="sidenav-link">
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/payments') }}" class="sidenav-link">
|
||||
<div>Zahlungen</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-people"></i>
|
||||
<div>Kundenverwaltung</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/customers') }}" class="sidenav-link">
|
||||
<div>Kunden</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/leads') }}" class="sidenav-link">
|
||||
<div>Anfragen</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/bookings') }}" class="sidenav-link">
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ make_old_url('/index.php/payments') }}" class="sidenav-link">
|
||||
<div>Zahlungen</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms'))
|
||||
@if (Auth::user()->isPermission('cms'))
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
<li class="sidenav-header small font-weight-semibold">ADMIN CMS</li>
|
||||
@if(Auth::user()->isPermission('cms-iq-assets'))
|
||||
<li class="sidenav-item{{ Request::is('iq/content/assets') ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_content_assets') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-images"></i><div>Medien</div></a>
|
||||
@if (Auth::user()->isPermission('cms-iq-assets'))
|
||||
<li class="sidenav-item{{ Request::is('iq/content/assets') ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_content_assets') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-images"></i>
|
||||
<div>Medien</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isPermission('cms-tg'))
|
||||
<li class="sidenav-item{{ Request::is('cms/travel_guide/*') ? ' open' : '' }} {{ Request::is('iq/content/tree/*') ? ' open' : '' }}">
|
||||
@if (Auth::user()->isPermission('cms-tg'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('cms/travel_guide/*') ? ' open' : '' }} {{ Request::is('iq/content/tree/*') ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-journal"></i>
|
||||
<div>Reiseführer</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
<li class="sidenav-item{{ Request::is('iq/content/tree/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('iq_content_tree_index') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-list"></i><div>Reiseführer Tree</div></a>
|
||||
<a href="{{ route('iq_content_tree_index') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-list"></i>
|
||||
<div>Reiseführer Tree</div>
|
||||
</a>
|
||||
</li>
|
||||
{{--
|
||||
<li class="sidenav-item{{ Request::is('cms/travel_guide/page') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_travel_guide_page') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-list-box"></i><div>Reiseführer Seiten</div></a>
|
||||
</li>
|
||||
--}}
|
||||
<li class="sidenav-item{{ Request::is('cms/travel_guide/content') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_travel_guide_content') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-paper"></i><div>Reiseführer Inhalte</div></a>
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('cms/travel_guide/content') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_travel_guide_content') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-paper"></i>
|
||||
<div>Reiseführer Inhalte</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item{{ Request::is('cms/travel_guide/test') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_travel_guide_test') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-alert "></i><div>TEST</div></a>
|
||||
<a href="{{ route('cms_travel_guide_test') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-alert "></i>
|
||||
<div>TEST</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-book'))
|
||||
<li class="sidenav-item{{ Request::is('cms/booking/*') ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-bed"></i>
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
<li class="sidenav-item{{ Request::is(['cms/booking/all', 'cms/booking/all/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_booking_all') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-paper"></i><div>PDF Vorlagen</div></a>
|
||||
</li>
|
||||
<li class="sidenav-item{{ Request::is(['cms/booking/content', 'cms/booking/content/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_booking_content') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-paper"></i><div>PDF Inhalte</div></a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('cms-book'))
|
||||
<li class="sidenav-item{{ Request::is('cms/booking/*') ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-bed"></i>
|
||||
<div>Buchungen</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['cms/booking/all', 'cms/booking/all/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_booking_all') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-paper"></i>
|
||||
<div>PDF Vorlagen</div>
|
||||
</a>
|
||||
</li>
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['cms/booking/content', 'cms/booking/content/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_booking_content') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-paper"></i>
|
||||
<div>PDF Inhalte</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-fewo'))
|
||||
@if (Auth::user()->isPermission('cms-fewo'))
|
||||
<li class="sidenav-item{{ Request::is('cms/fewo/*') ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-home"></i>
|
||||
<div>FeWo</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
<li class="sidenav-item{{ Request::is(['cms/fewo/all', 'cms/fewo/all/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_fewo_all') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-paper"></i><div>FeWo Vorlage</div></a>
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['cms/fewo/all', 'cms/fewo/all/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_fewo_all') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-paper"></i>
|
||||
<div>FeWo Vorlage</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="sidenav-item{{ Request::is(['cms/fewo/content', 'cms/fewo/content/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_fewo_content') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-paper"></i><div>FeWo Inhalte</div></a>
|
||||
<li
|
||||
class="sidenav-item{{ Request::is(['cms/fewo/content', 'cms/fewo/content/*']) ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_fewo_content') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-paper"></i>
|
||||
<div>FeWo Inhalte</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-fb'))
|
||||
<li class="sidenav-item{{ Request::is('cms/feedback', 'cms/feedback/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_feedback') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-chatboxes"></i><div>Feedback</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-nw'))
|
||||
<li class="sidenav-item{{ Request::is('cms/news', 'cms/news/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_news') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-bookmarks"></i><div>Reisenews</div></a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isPermission('cms-aq'))
|
||||
<li class="sidenav-item{{ Request::is('cms/answer_question', 'cms/answer_question/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_answer_question') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-help-buoy"></i><div>Fragen & Antworten</div></a>
|
||||
@if (Auth::user()->isPermission('cms-fb'))
|
||||
<li class="sidenav-item{{ Request::is('cms/feedback', 'cms/feedback/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_feedback') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-chatboxes"></i>
|
||||
<div>Feedback</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-sb'))
|
||||
<li class="sidenav-item{{ Request::is('cms/sidebar') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_sidebar') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-list"></i><div>Sidebar</div></a>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('cms-nw'))
|
||||
<li class="sidenav-item{{ Request::is('cms/news', 'cms/news/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_news') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-bookmarks"></i>
|
||||
<div>Reisenews</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-cn'))
|
||||
|
||||
@if (Auth::user()->isPermission('cms-aq'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('cms/answer_question', 'cms/answer_question/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_answer_question') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-help-buoy"></i>
|
||||
<div>Fragen & Antworten</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('cms-sb'))
|
||||
<li class="sidenav-item{{ Request::is('cms/sidebar') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_sidebar') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-list"></i>
|
||||
<div>Sidebar</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('cms-cn'))
|
||||
<li class="sidenav-item{{ Request::is('cms/content/*') ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-map"></i>
|
||||
<div>Inhalte</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('cms-cn-in'))
|
||||
<li class="sidenav-item{{ Request::is('cms/content/infos') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_content_infos') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-business"></i><div>Infos</div></a>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('cms-cn-in'))
|
||||
<li class="sidenav-item{{ Request::is('cms/content/infos') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_content_infos') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-business"></i>
|
||||
<div>Infos</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-cn-al'))
|
||||
@if (Auth::user()->isPermission('cms-cn-al'))
|
||||
<li class="sidenav-item{{ Request::is('cms/content/all') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_content_all') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-paper"></i><div>Allgemein</div></a>
|
||||
<a href="{{ route('cms_content_all') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-paper"></i>
|
||||
<div>Allgemein</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('cms-cn-au'))
|
||||
@if (Auth::user()->isPermission('cms-cn-au'))
|
||||
<li class="sidenav-item{{ Request::is('cms/content/author') ? ' active' : '' }}">
|
||||
<a href="{{ route('cms_content_author') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-finger-print"></i><div>Autoren</div></a>
|
||||
<a href="{{ route('cms_content_author') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-finger-print"></i>
|
||||
<div>Autoren</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('crm-nav-api'))
|
||||
<li class="sidenav-item{{ Request::is(['navigation-api']) ? ' active' : '' }}">
|
||||
<a href="{{ route('navigation_api') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-map"></i>
|
||||
<div>Navigation API</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('cms-newsletter'))
|
||||
<li class="sidenav-item{{ Request::is('newsletter', 'newsletter/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('newsletter.index') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-mail"></i>
|
||||
<div>Newsletter</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isSuperAdmin())
|
||||
@if (Auth::user()->isSuperAdmin())
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
<li class="sidenav-header small font-weight-semibold">SUPERADMIN</li>
|
||||
@if(Auth::user()->isPermission('sua-st'))
|
||||
@if (Auth::user()->isPermission('sua-st'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/*') ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-ios-settings"></i>
|
||||
<div>Einstellungen</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('sua-st-al'))
|
||||
@if (Auth::user()->isPermission('sua-st-al'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/airline') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_airline') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-airplane"></i><div>{{ __('Airline') }}</div></a>
|
||||
<a href="{{ route('admin_settings_airline') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-airplane"></i>
|
||||
<div>{{ __('Airline') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-ap'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/airport') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_airport') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-airplane"></i><div>{{ __('Airport') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-em'))
|
||||
@if (Auth::user()->isPermission('sua-st-ap'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/airport') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_airport') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-airplane"></i>
|
||||
<div>{{ __('Airport') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('sua-st-em'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/emails') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_emails') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-mail"></i><div>{{ __('E-Mails') }}</div></a>
|
||||
<a href="{{ route('admin_settings_emails') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-mail"></i>
|
||||
<div>{{ __('E-Mails') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-ke'))
|
||||
@if (Auth::user()->isPermission('sua-st-ke'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/keyword') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_keyword') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-key"></i><div>{{ __('Keywords') }}</div></a>
|
||||
<a href="{{ route('admin_settings_keyword') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-key"></i>
|
||||
<div>{{ __('Keywords') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-sp'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/service_provider') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_service_provider') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-archive"></i><div>{{ __('Leistungsträger') }}</div></a>
|
||||
@if (Auth::user()->isPermission('sua-st-sp'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/service_provider') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_service_provider') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-archive"></i>
|
||||
<div>{{ __('Leistungsträger') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-tn'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/travel_nationality') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_nationality') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i><div>{{ __('Nationalitäten') }}</div></a>
|
||||
@if (Auth::user()->isPermission('sua-st-tn'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/travel_nationality') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_nationality') }}"
|
||||
class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i>
|
||||
<div>{{ __('Nationalitäten') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-co'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/travel_country') ? ' active' : '' }} {{ Request::is('admin/settings/travel_country/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_country') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-globe"></i><div>{{ __('Reiseländer') }}</div></a>
|
||||
@if (Auth::user()->isPermission('sua-st-co'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/travel_country') ? ' active' : '' }} {{ Request::is('admin/settings/travel_country/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_country') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-globe"></i>
|
||||
<div>{{ __('Reiseländer') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-tpl'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/travel_places') ? ' active' : '' }} {{ Request::is('admin/settings/travel_place/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_places') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-pin"></i><div>{{ __('Reiseorte') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-tp'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/travel_program') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_program') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-airplane"></i><div>{{ __('Reiseprogramme') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-bs'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/booking_status') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_booking_status') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-stats"></i><div>{{ __('Reisestatus') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-tc'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/travel_company') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_company') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-archive"></i><div>{{ __('Veranstalter') }}</div></a>
|
||||
@if (Auth::user()->isPermission('sua-st-tpl'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/travel_places') ? ' active' : '' }} {{ Request::is('admin/settings/travel_place/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_places') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-pin"></i>
|
||||
<div>{{ __('Reiseorte') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-tca'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/travel_category') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_category') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-briefcase"></i><div>{{ __('Reiseart') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-tap'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/travel_arrival_point') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_arrival_point') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-pin"></i><div>{{ __('Zielflughafen') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-in'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/insurance') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_insurance') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-umbrella"></i><div>{{ __('Versicherungen') }}</div></a>
|
||||
@if (Auth::user()->isPermission('sua-st-tp'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/travel_program') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_program') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-airplane"></i>
|
||||
<div>{{ __('Reiseprogramme') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-st-tgn'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/gerneral_notes') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_gerneral_notes') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-paper"></i><div>{{ __('Reisehinweise') }}</div></a>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('sua-st-bs'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/booking_status') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_booking_status') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-stats"></i>
|
||||
<div>{{ __('Reisestatus') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('sua-st-tc'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/travel_company') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_company') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-archive"></i>
|
||||
<div>{{ __('Veranstalter') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('sua-st-tca'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/travel_category') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_category') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-briefcase"></i>
|
||||
<div>{{ __('Reiseart') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('sua-st-tap'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/travel_arrival_point') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_travel_arrival_point') }}"
|
||||
class="sidenav-link"><i class="sidenav-icon ion ion-ios-pin"></i>
|
||||
<div>{{ __('Zielflughafen') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('sua-st-in'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/insurance') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_insurance') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-umbrella"></i>
|
||||
<div>{{ __('Versicherungen') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('sua-st-tgn'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/gerneral_notes') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_gerneral_notes') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-paper"></i>
|
||||
<div>{{ __('Reisehinweise') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if (Auth::user()->isPermission('sua-st-ca'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/settings/categories') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_categories') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-list-box"></i>
|
||||
<div>{{ __('Kategorien') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isPermission('sua-st-ca'))
|
||||
<li class="sidenav-item{{ Request::is('admin/settings/categories') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_settings_categories') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-list-box"></i><div>{{ __('Kategorien') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
|
||||
@if(Auth::user()->isPermission('sua-re'))
|
||||
@if (Auth::user()->isPermission('sua-re'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/*') ? ' open' : '' }}">
|
||||
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
|
||||
<i class="sidenav-icon ion ion-md-analytics"></i>
|
||||
<div>Reporting</div>
|
||||
</a>
|
||||
<ul class="sidenav-menu">
|
||||
@if(Auth::user()->isPermission('sua-re-bo'))
|
||||
@if (Auth::user()->isPermission('sua-re-bo'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/bookings') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_bookings') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-bed"></i><div>{{ __('Buchungen & Leistungen') }}</div></a>
|
||||
<a href="{{ route('admin_report_bookings') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-bed"></i>
|
||||
<div>{{ __('Buchungen & Leistungen') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-re-pp'))
|
||||
@if (Auth::user()->isPermission('sua-re-pp'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/providers') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_providers') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-cash"></i><div>{{ __('Leistungsträger-Zahlungen') }}</div></a>
|
||||
<a href="{{ route('admin_report_providers') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-cash"></i>
|
||||
<div>{{ __('Leistungsträger-Zahlungen') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-re-bo'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/check/bookings') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_check_bookings') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-flash"></i><div>{{ __('Preise pürfen') }}</div></a>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('sua-re-bo'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/report/check/bookings') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_check_bookings') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-md-flash"></i>
|
||||
<div>{{ __('Preise pürfen') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-re-fw'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/fewo') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_fewo') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-home"></i><div>{{ __('Buchungen FeWo') }}</div></a>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('sua-re-fw'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/fewo') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_fewo') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-home"></i>
|
||||
<div>{{ __('Buchungen FeWo') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isPermission('sua-re-le'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/leads') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_leads') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-contact"></i><div>{{ __('Buchungen Anfragen') }}</div></a>
|
||||
</li>
|
||||
@if (Auth::user()->isPermission('sua-re-le'))
|
||||
<li class="sidenav-item{{ Request::is('admin/report/leads') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_report_leads') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-contact"></i>
|
||||
<div>{{ __('Buchungen Anfragen') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
@endif
|
||||
@if(Auth::user()->isPermission('sua-ur-rt'))
|
||||
<li class="sidenav-item{{ Request::is('admin/users') ? ' active' : '' }} {{ Request::is('admin/user/edit/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_users') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-ribbon"></i><div>{{ __('User Rechte') }}</div></a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Auth::user()->isPermission('sua-ur-rt'))
|
||||
<li
|
||||
class="sidenav-item{{ Request::is('admin/users') ? ' active' : '' }} {{ Request::is('admin/user/edit/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('admin_users') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-ribbon"></i>
|
||||
<div>{{ __('User Rechte') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@if(Auth::user()->isSySAdmin())
|
||||
@if (Auth::user()->isSySAdmin())
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
<li class="sidenav-header small font-weight-semibold">SYSADMIN</li>
|
||||
<li class="sidenav-item{{ Request::is('sysadmin/tools', 'sysadmin/tool/*') ? ' active' : '' }}">
|
||||
<a href="{{ route('sysadmin_tools') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-cog"></i><div>Tools</div></a>
|
||||
<a href="{{ route('sysadmin_tools') }}" class="sidenav-link"><i
|
||||
class="sidenav-icon ion ion-ios-cog"></i>
|
||||
<div>Tools</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
<li class="sidenav-divider mb-1"></li>
|
||||
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ route('logout') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-power"></i><div>{{ __('Logout') }}</div></a>
|
||||
</li>
|
||||
<li class="sidenav-item">
|
||||
<a href="{{ route('logout') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-power"></i>
|
||||
<div>{{ __('Logout') }}</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
560
resources/views/navigation/index.blade.php
Normal file
560
resources/views/navigation/index.blade.php
Normal file
|
|
@ -0,0 +1,560 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
<h4 class="font-weight-bold py-3 mb-1">
|
||||
<i class="ion ion-md-map"></i> Navigation API - Navigationsbaum (Frontend-Struktur)
|
||||
</h4>
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i> Dieser Baum zeigt die Navigation genau so, wie sie im Frontend (header.html.twig)
|
||||
angezeigt wird.
|
||||
<br>
|
||||
<strong>Bereiche:</strong>
|
||||
<ul class="mb-0 mt-2">
|
||||
<li><strong>Länder-Navigation:</strong> Länderseiten mit Children, gruppiert nach "Haupt" und "Infos"</li>
|
||||
<li><strong>USEDOM Ferienwohnungen:</strong> Ferienwohnungs-Übersicht mit einzelnen FeWos</li>
|
||||
<li><strong>Weitere Seiten:</strong> Seiten aus dem "Mehr"-Menü (Über uns, Reiseversicherung, Reiseführer, etc.)
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Statistiken -->
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body text-center">
|
||||
<div class="display-4 text-primary" id="stat-total">-</div>
|
||||
<small class="text-muted">Gesamt Seiten</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body text-center">
|
||||
<div class="display-4 text-success" id="stat-active">-</div>
|
||||
<small class="text-muted">Aktive Seiten</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body text-center">
|
||||
<div class="display-4 text-warning" id="stat-programs">-</div>
|
||||
<small class="text-muted">Reiseprogramme</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card">
|
||||
<div class="card-body text-center">
|
||||
<div class="display-4 text-info" id="stat-countries">-</div>
|
||||
<small class="text-muted">Länderseiten</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Toolbar -->
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-4">
|
||||
<div class="input-group">
|
||||
<input type="text" id="search-input" class="form-control"
|
||||
placeholder="Suche nach Titel, Slug oder URL...">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-primary" id="search-btn"><i class="fa fa-search"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 text-right">
|
||||
<div class="btn-group" role="group">
|
||||
<button class="btn btn-secondary" id="expand-all-btn"><i class="fa fa-plus-square"></i> Alle
|
||||
aufklappen</button>
|
||||
<button class="btn btn-secondary" id="collapse-all-btn"><i class="fa fa-minus-square"></i> Alle
|
||||
zuklappen</button>
|
||||
</div>
|
||||
<div class="btn-group ml-2" role="group">
|
||||
<button class="btn btn-info" id="filter-hidden-btn" data-filter="with_hidden"><i
|
||||
class="fa fa-eye"></i>
|
||||
Mit ausgeblendeten</button>
|
||||
</div>
|
||||
<div class="btn-group ml-2" role="group">
|
||||
<button class="btn btn-success" id="export-btn"><i class="fa fa-download"></i> Export JSON</button>
|
||||
<button class="btn btn-warning" id="clear-cache-btn"><i class="fa fa-sync"></i> Cache
|
||||
leeren</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Navigationsbaum -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">
|
||||
<i class="fa fa-sitemap"></i> Navigationsbaum
|
||||
<span class="badge badge-primary ml-2" id="node-count">0 Knoten</span>
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="loading" class="text-center py-5">
|
||||
<div class="spinner-border text-primary" role="status">
|
||||
<span class="sr-only">Lade...</span>
|
||||
</div>
|
||||
<p class="mt-3">Lade Navigationsbaum...</p>
|
||||
</div>
|
||||
<div id="tree-container" style="display: none;">
|
||||
<div id="navigation-tree"></div>
|
||||
</div>
|
||||
<div id="no-results" style="display: none;" class="text-center py-5 text-muted">
|
||||
<i class="fa fa-search fa-3x mb-3"></i>
|
||||
<p>Keine Ergebnisse gefunden.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Styles -->
|
||||
<style>
|
||||
.tree-node {
|
||||
margin-left: 0;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.tree-node-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 8px 12px;
|
||||
border-radius: 4px;
|
||||
transition: background-color 0.2s;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tree-node-content:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.tree-toggle {
|
||||
width: 20px;
|
||||
min-width: 20px;
|
||||
height: 20px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
margin-right: 8px;
|
||||
color: #666;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.tree-toggle:hover {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.tree-toggle.empty {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.tree-icon {
|
||||
width: 24px;
|
||||
min-width: 24px;
|
||||
margin-right: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.tree-title {
|
||||
flex: 1;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.tree-badges {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.tree-url {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.tree-children {
|
||||
margin-left: 30px;
|
||||
border-left: 2px solid #e0e0e0;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.tree-children.collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tree-node.inactive .tree-node-content {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.tree-node.filtered {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tree-node.highlight .tree-node-content {
|
||||
background-color: #fff3cd;
|
||||
border-left: 3px solid #ffc107;
|
||||
}
|
||||
|
||||
.badge-small {
|
||||
font-size: 10px;
|
||||
padding: 2px 6px;
|
||||
}
|
||||
|
||||
/* Separator-Styles */
|
||||
.tree-separator {
|
||||
margin: 15px 0 10px 30px;
|
||||
padding: 8px 12px;
|
||||
background: linear-gradient(to right, #f8f9fa 0%, #e9ecef 100%);
|
||||
border-left: 4px solid #6c757d;
|
||||
border-radius: 4px;
|
||||
font-weight: bold;
|
||||
color: #495057;
|
||||
}
|
||||
|
||||
.tree-separator i {
|
||||
margin-right: 8px;
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
/* Section-Separator (größere Trennung) */
|
||||
.tree-section-separator {
|
||||
margin: 30px 0 20px 0;
|
||||
padding: 12px 20px;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
border-radius: 6px;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
color: white;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.tree-section-separator i {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/* Frontend-spezifische Styles */
|
||||
.tree-node.country-page>.tree-node-content {
|
||||
background-color: #f8f9fa;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
border-left: 4px solid #007bff;
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
.tree-node.country-page>.tree-node-content:hover {
|
||||
background-color: #e9ecef;
|
||||
}
|
||||
|
||||
.tree-node.info-page>.tree-node-content {
|
||||
background-color: #fff9e6;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script>
|
||||
let navigationData = null;
|
||||
let currentFilter = 'with_hidden';
|
||||
let searchQuery = '';
|
||||
|
||||
// Lade Statistiken
|
||||
function loadStats() {
|
||||
fetch('/navigation-api/stats')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
$('#stat-total').text(data.data.total_pages);
|
||||
$('#stat-active').text(data.data.active_nodes);
|
||||
$('#stat-programs').text(data.data.travel_programs);
|
||||
$('#stat-countries').text(data.data.country_pages);
|
||||
}
|
||||
})
|
||||
.catch(error => console.error('Error loading stats:', error));
|
||||
}
|
||||
|
||||
// Lade Navigationsbaum
|
||||
function loadNavigationTree(includeHidden = true) {
|
||||
$('#loading').show();
|
||||
$('#tree-container').hide();
|
||||
$('#no-results').hide();
|
||||
|
||||
const url = `/navigation-api/data?include_hidden=${includeHidden ? '1' : '0'}`;
|
||||
|
||||
fetch(url)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
navigationData = data.data;
|
||||
renderTree(navigationData);
|
||||
updateNodeCount(data.meta.total_nodes);
|
||||
$('#loading').hide();
|
||||
$('#tree-container').show();
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading tree:', error);
|
||||
$('#loading').hide();
|
||||
alert('Fehler beim Laden des Navigationsbaums');
|
||||
});
|
||||
}
|
||||
|
||||
// Rendere Baum
|
||||
function renderTree(nodes) {
|
||||
const container = $('#navigation-tree');
|
||||
container.empty();
|
||||
|
||||
if (nodes.length === 0) {
|
||||
$('#tree-container').hide();
|
||||
$('#no-results').show();
|
||||
return;
|
||||
}
|
||||
|
||||
// Rendere Nodes - unterscheide zwischen Separators und Pages
|
||||
nodes.forEach(node => {
|
||||
// Section-Separators und normale Separators haben keine Children-Logik
|
||||
if (node.is_section_separator || node.is_separator) {
|
||||
container.append(renderNode(node, false));
|
||||
} else {
|
||||
// Länderseiten (section = "Länder-Navigation") haben Children mit Toggle
|
||||
const isCountryPage = node.section === 'Länder-Navigation';
|
||||
container.append(renderNode(node, isCountryPage));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Rendere einzelnen Knoten
|
||||
function renderNode(node, isCountryPage = false) {
|
||||
// Prüfe ob es ein Section-Separator ist
|
||||
if (node.is_section_separator) {
|
||||
return $('<div>')
|
||||
.addClass('tree-section-separator')
|
||||
.html(`<i class="${node.icon}"></i>${node.title}`);
|
||||
}
|
||||
|
||||
// Prüfe ob es ein Separator ist
|
||||
if (node.is_separator) {
|
||||
return $('<div>')
|
||||
.addClass('tree-separator')
|
||||
.html(`<i class="${node.icon}"></i>${node.title}`);
|
||||
}
|
||||
|
||||
const hasChildren = node.has_children;
|
||||
const isActive = node.status === 1;
|
||||
const showInNavi = node.show_in_navi === 1;
|
||||
|
||||
const nodeDiv = $('<div>')
|
||||
.addClass('tree-node')
|
||||
.addClass(isActive ? 'active' : 'inactive')
|
||||
.addClass(isCountryPage ? 'country-page' : '')
|
||||
.addClass(node.before_title === 'Infos' ? 'info-page' : '')
|
||||
.data('node', node);
|
||||
|
||||
// Node Content
|
||||
const contentDiv = $('<div>')
|
||||
.addClass('tree-node-content');
|
||||
|
||||
// Toggle Button (nur für Country-Pages mit Children)
|
||||
const toggle = $('<span>')
|
||||
.addClass('tree-toggle')
|
||||
.addClass(hasChildren && isCountryPage ? '' : 'empty')
|
||||
.html(hasChildren && isCountryPage ? '<i class="fa fa-chevron-down"></i>' : '')
|
||||
.on('click', function(e) {
|
||||
e.stopPropagation();
|
||||
toggleNode(nodeDiv);
|
||||
});
|
||||
|
||||
// Icon
|
||||
const icon = $('<span>').addClass('tree-icon');
|
||||
if (node.is_country_page) {
|
||||
icon.html('<i class="fa fa-star text-warning"></i>');
|
||||
} else if (node.is_travel_program) {
|
||||
icon.html('<i class="fa fa-plane text-primary"></i>');
|
||||
} else if (node.is_fewo_lodging) {
|
||||
icon.html('<i class="fa fa-home text-info"></i>');
|
||||
} else if (node.before_title === 'Infos') {
|
||||
icon.html('<i class="fa fa-info-circle text-muted"></i>');
|
||||
} else {
|
||||
icon.html('<i class="fa fa-file-alt text-muted"></i>');
|
||||
}
|
||||
|
||||
// Title & URL
|
||||
const titleDiv = $('<div>').addClass('tree-title');
|
||||
|
||||
// Verwende titleShort wenn vorhanden, sonst title
|
||||
const displayTitle = node.title_short || node.title;
|
||||
titleDiv.append($('<span>').text(displayTitle));
|
||||
|
||||
if (node.url) {
|
||||
titleDiv.append($('<span>').addClass('tree-url').text(node.url));
|
||||
}
|
||||
|
||||
// Badges
|
||||
const badges = $('<div>').addClass('tree-badges');
|
||||
|
||||
if (!isActive) {
|
||||
badges.append($('<span>').addClass('badge badge-danger badge-small').text('Inaktiv'));
|
||||
}
|
||||
|
||||
if (!showInNavi) {
|
||||
badges.append($('<span>').addClass('badge badge-warning badge-small').text('Ausgeblendet'));
|
||||
}
|
||||
|
||||
if (node.is_travel_program) {
|
||||
badges.append($('<span>').addClass('badge badge-primary badge-small').text('Reiseprogramm'));
|
||||
}
|
||||
|
||||
if (node.is_fewo_lodging) {
|
||||
badges.append($('<span>').addClass('badge badge-info badge-small').text('FeWo'));
|
||||
}
|
||||
|
||||
if (node.is_country_page) {
|
||||
badges.append($('<span>').addClass('badge badge-success badge-small').text('Land'));
|
||||
}
|
||||
|
||||
if (node.before_title) {
|
||||
badges.append($('<span>').addClass('badge badge-secondary badge-small').text('Gruppe: ' + node
|
||||
.before_title));
|
||||
}
|
||||
|
||||
contentDiv.append(toggle, icon, titleDiv, badges);
|
||||
nodeDiv.append(contentDiv);
|
||||
|
||||
// Children (nur für Country-Pages)
|
||||
if (hasChildren && node.children && node.children.length > 0 && isCountryPage) {
|
||||
const childrenDiv = $('<div>').addClass('tree-children');
|
||||
node.children.forEach(child => {
|
||||
childrenDiv.append(renderNode(child, false));
|
||||
});
|
||||
nodeDiv.append(childrenDiv);
|
||||
}
|
||||
|
||||
return nodeDiv;
|
||||
}
|
||||
|
||||
// Toggle Node
|
||||
function toggleNode(nodeDiv) {
|
||||
const childrenDiv = nodeDiv.find('> .tree-children');
|
||||
const toggle = nodeDiv.find('> .tree-node-content > .tree-toggle i');
|
||||
|
||||
if (childrenDiv.hasClass('collapsed')) {
|
||||
childrenDiv.removeClass('collapsed');
|
||||
toggle.removeClass('fa-chevron-right').addClass('fa-chevron-down');
|
||||
} else {
|
||||
childrenDiv.addClass('collapsed');
|
||||
toggle.removeClass('fa-chevron-down').addClass('fa-chevron-right');
|
||||
}
|
||||
}
|
||||
|
||||
// Alle auf/zuklappen
|
||||
function expandAll() {
|
||||
$('.tree-children').removeClass('collapsed');
|
||||
$('.tree-toggle i').removeClass('fa-chevron-right').addClass('fa-chevron-down');
|
||||
}
|
||||
|
||||
function collapseAll() {
|
||||
$('.tree-children').addClass('collapsed');
|
||||
$('.tree-toggle i').removeClass('fa-chevron-down').addClass('fa-chevron-right');
|
||||
}
|
||||
|
||||
// Suche
|
||||
function performSearch(query) {
|
||||
searchQuery = query.toLowerCase();
|
||||
|
||||
if (!query) {
|
||||
$('.tree-node').removeClass('highlight filtered');
|
||||
return;
|
||||
}
|
||||
|
||||
$('.tree-node').each(function() {
|
||||
const node = $(this).data('node');
|
||||
const matches =
|
||||
node.title.toLowerCase().includes(searchQuery) ||
|
||||
(node.slug && node.slug.toLowerCase().includes(searchQuery)) ||
|
||||
(node.url && node.url.toLowerCase().includes(searchQuery));
|
||||
|
||||
if (matches) {
|
||||
$(this).removeClass('filtered').addClass('highlight');
|
||||
// Zeige Parent-Nodes
|
||||
$(this).parents('.tree-children').removeClass('collapsed');
|
||||
$(this).parents('.tree-node').find('> .tree-node-content > .tree-toggle i')
|
||||
.removeClass('fa-chevron-right').addClass('fa-chevron-down');
|
||||
} else {
|
||||
$(this).removeClass('highlight');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Node Count Update
|
||||
function updateNodeCount(count) {
|
||||
$('#node-count').text(`${count} Knoten`);
|
||||
}
|
||||
|
||||
// Export
|
||||
function exportJSON() {
|
||||
window.location.href = '/navigation-api/export?include_hidden=' + (currentFilter === 'with_hidden' ? '1' : '0');
|
||||
}
|
||||
|
||||
// Cache leeren
|
||||
function clearCache() {
|
||||
if (!confirm('Möchten Sie wirklich den Navigation-Cache leeren?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
fetch('/navigation-api/clear-cache', {
|
||||
method: 'POST'
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
alert('Cache erfolgreich gelöscht');
|
||||
loadNavigationTree(currentFilter === 'active');
|
||||
} else {
|
||||
alert('Fehler beim Löschen des Cache');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error clearing cache:', error);
|
||||
alert('Fehler beim Löschen des Cache');
|
||||
});
|
||||
}
|
||||
|
||||
// Event Listeners
|
||||
$(document).ready(function() {
|
||||
loadStats();
|
||||
loadNavigationTree();
|
||||
|
||||
$('#expand-all-btn').on('click', expandAll);
|
||||
$('#collapse-all-btn').on('click', collapseAll);
|
||||
$('#export-btn').on('click', exportJSON);
|
||||
$('#clear-cache-btn').on('click', clearCache);
|
||||
|
||||
$('#search-btn').on('click', function() {
|
||||
performSearch($('#search-input').val());
|
||||
});
|
||||
|
||||
$('#search-input').on('keyup', function(e) {
|
||||
if (e.key === 'Enter') {
|
||||
performSearch($(this).val());
|
||||
}
|
||||
});
|
||||
|
||||
$('#filter-hidden-btn').on('click', function() {
|
||||
if (currentFilter === 'with_hidden') {
|
||||
currentFilter = 'visible_only';
|
||||
$(this).html('<i class="fa fa-eye-slash"></i> Nur sichtbare').removeClass('btn-info')
|
||||
.addClass('btn-primary');
|
||||
} else {
|
||||
currentFilter = 'with_hidden';
|
||||
$(this).html('<i class="fa fa-eye"></i> Mit ausgeblendeten').removeClass('btn-primary')
|
||||
.addClass('btn-info');
|
||||
}
|
||||
loadNavigationTree(currentFilter === 'with_hidden');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
235
resources/views/newsletter/detail.blade.php
Normal file
235
resources/views/newsletter/detail.blade.php
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
<h4 class="d-flex justify-content-between align-items-center w-100 font-weight-bold py-3 mb-4">
|
||||
<div>
|
||||
<i class="ion ion-md-contact text-primary"></i> Newsletter-Kontakt
|
||||
</div>
|
||||
<div>
|
||||
<a href="{{ route('newsletter.index') }}" class="btn btn-secondary btn-sm">
|
||||
<i class="fa fa-arrow-left"></i> Zurück
|
||||
</a>
|
||||
<a href="{{ route('newsletter.edit', $contact->id) }}" class="btn btn-primary btn-sm">
|
||||
<i class="fa fa-edit"></i> Bearbeiten
|
||||
</a>
|
||||
</div>
|
||||
</h4>
|
||||
|
||||
@if (Session::has('alert-success'))
|
||||
<div class="alert alert-success alert-dismissible fade show">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
{{ Session::get('alert-success') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<!-- Linke Spalte -->
|
||||
<div class="col-md-8">
|
||||
<!-- Kontakt-Informationen -->
|
||||
<div class="card mb-4">
|
||||
<h6 class="card-header">Kontakt-Informationen</h6>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless">
|
||||
<tr>
|
||||
<th width="30%">E-Mail:</th>
|
||||
<td><a href="mailto:{{ $contact->email }}">{{ $contact->email }}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Name:</th>
|
||||
<td>{{ $contact->full_name ?: '-' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Vorname:</th>
|
||||
<td>{{ $contact->firstname ?: '-' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Nachname:</th>
|
||||
<td>{{ $contact->lastname ?: '-' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Status:</th>
|
||||
<td>{!! $contact->status_badge !!}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Gruppen:</th>
|
||||
<td>
|
||||
@if ($contact->group_kulturreisen)
|
||||
<span class="badge badge-info">Kulturreisen</span>
|
||||
@endif
|
||||
@if ($contact->group_ferienwohnungen)
|
||||
<span class="badge badge-primary">Ferienwohnungen</span>
|
||||
@endif
|
||||
@if (!$contact->group_kulturreisen && !$contact->group_ferienwohnungen)
|
||||
<span class="text-muted">Keine Gruppe zugewiesen</span>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Herkunft:</th>
|
||||
<td>{{ $contact->source_label }}</td>
|
||||
</tr>
|
||||
@if ($contact->notes)
|
||||
<tr>
|
||||
<th>Notizen:</th>
|
||||
<td>{{ $contact->notes }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Buchungsstatistiken -->
|
||||
<div class="card mb-4">
|
||||
<h6 class="card-header">Buchungsstatistiken</h6>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless">
|
||||
<tr>
|
||||
<th width="30%">Kulturreisen Buchungen:</th>
|
||||
<td>
|
||||
<span class="badge badge-secondary">{{ $contact->total_bookings_kulturreisen }}</span>
|
||||
@if ($contact->customer)
|
||||
<a href="{{ route('customer_detail', $contact->customer_id) }}"
|
||||
class="btn btn-sm btn-link">
|
||||
<i class="fa fa-external-link-alt"></i> Kunde anzeigen
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Ferienwohnungen Buchungen:</th>
|
||||
<td>
|
||||
<span class="badge badge-secondary">{{ $contact->total_bookings_ferienwohnungen }}</span>
|
||||
@if ($contact->travel_user)
|
||||
<a href="{{ route('travel_user_detail', $contact->travel_user_id) }}"
|
||||
class="btn btn-sm btn-link">
|
||||
<i class="fa fa-external-link-alt"></i> Kunde anzeigen
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Gesamt Buchungen:</th>
|
||||
<td><span class="badge badge-primary">{{ $contact->total_bookings }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Letzte Buchung:</th>
|
||||
<td>{{ $contact->last_booking_at ? $contact->last_booking_at->format('d.m.Y') : '-' }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Aktivitäts-Log -->
|
||||
<div class="card">
|
||||
<h6 class="card-header">Aktivitäts-Log</h6>
|
||||
<div class="card-body">
|
||||
@if ($contact->logs->count() > 0)
|
||||
<div class="timeline">
|
||||
@foreach ($contact->logs as $log)
|
||||
<div class="timeline-item mb-3">
|
||||
<div class="d-flex">
|
||||
<div class="mr-3">
|
||||
<i
|
||||
class="fa fa-circle text-{{ $log->action === 'subscribed' ? 'success' : ($log->action === 'unsubscribed' ? 'danger' : 'info') }}"></i>
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<div class="d-flex justify-content-between">
|
||||
<strong>{{ $log->action_label }}</strong>
|
||||
<small
|
||||
class="text-muted">{{ $log->created_at->format('d.m.Y H:i') }}</small>
|
||||
</div>
|
||||
@if ($log->description)
|
||||
<div class="text-muted">{{ $log->description }}</div>
|
||||
@endif
|
||||
@if ($log->user)
|
||||
<small class="text-muted">Durch: {{ $log->user->fullname }}</small>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@else
|
||||
<p class="text-muted">Keine Aktivitäten vorhanden</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Rechte Spalte -->
|
||||
<div class="col-md-4">
|
||||
<!-- Aktionen -->
|
||||
<div class="card mb-4">
|
||||
<h6 class="card-header">Aktionen</h6>
|
||||
<div class="card-body">
|
||||
@if ($contact->status === 'active')
|
||||
<form method="POST" action="{{ route('newsletter.unsubscribe', $contact->id) }}" class="mb-2">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label>Abmelde-Grund (optional)</label>
|
||||
<input type="text" name="reason" class="form-control form-control-sm"
|
||||
placeholder="z.B. Auf Wunsch des Kunden">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-warning btn-block btn-sm"
|
||||
onclick="return confirm('Kontakt wirklich abmelden?')">
|
||||
<i class="fa fa-times"></i> Kontakt abmelden
|
||||
</button>
|
||||
</form>
|
||||
@elseif($contact->status === 'unsubscribed')
|
||||
<form method="POST" action="{{ route('newsletter.resubscribe', $contact->id) }}" class="mb-2">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-success btn-block btn-sm"
|
||||
onclick="return confirm('Kontakt wieder aktivieren?')">
|
||||
<i class="fa fa-check"></i> Wieder aktivieren
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
|
||||
<form method="POST" action="{{ route('newsletter.delete', $contact->id) }}" class="mb-2">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-danger btn-block btn-sm"
|
||||
onclick="return confirm('Kontakt wirklich löschen?')">
|
||||
<i class="fa fa-trash"></i> Kontakt löschen
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Zeitstempel -->
|
||||
<div class="card">
|
||||
<h6 class="card-header">Zeitstempel</h6>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tr>
|
||||
<th>Erstellt:</th>
|
||||
<td>{{ $contact->created_at->format('d.m.Y H:i') }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Aktualisiert:</th>
|
||||
<td>{{ $contact->updated_at->format('d.m.Y H:i') }}</td>
|
||||
</tr>
|
||||
@if ($contact->subscribed_at)
|
||||
<tr>
|
||||
<th>Angemeldet:</th>
|
||||
<td>{{ $contact->subscribed_at->format('d.m.Y H:i') }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if ($contact->unsubscribed_at)
|
||||
<tr>
|
||||
<th>Abgemeldet:</th>
|
||||
<td>{{ $contact->unsubscribed_at->format('d.m.Y H:i') }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if ($contact->last_synced_at)
|
||||
<tr>
|
||||
<th>Letzte Sync:</th>
|
||||
<td>{{ $contact->last_synced_at->format('d.m.Y H:i') }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
150
resources/views/newsletter/edit.blade.php
Normal file
150
resources/views/newsletter/edit.blade.php
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
<h4 class="d-flex justify-content-between align-items-center w-100 font-weight-bold py-3 mb-4">
|
||||
<div>
|
||||
<i class="ion ion-md-create text-primary"></i>
|
||||
{{ $id === 'new' ? 'Neuer Newsletter-Kontakt' : 'Newsletter-Kontakt bearbeiten' }}
|
||||
</div>
|
||||
<div>
|
||||
@if ($id !== 'new')
|
||||
<a href="{{ route('newsletter.detail', $contact->id) }}" class="btn btn-secondary btn-sm">
|
||||
<i class="fa fa-arrow-left"></i> Zurück
|
||||
</a>
|
||||
@else
|
||||
<a href="{{ route('newsletter.index') }}" class="btn btn-secondary btn-sm">
|
||||
<i class="fa fa-arrow-left"></i> Zurück
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</h4>
|
||||
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger alert-dismissible fade show">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<ul class="mb-0">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('newsletter.store', $id) }}">
|
||||
@csrf
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label">E-Mail-Adresse <span class="text-danger">*</span></label>
|
||||
<input type="email" name="email" class="form-control @error('email') is-invalid @enderror"
|
||||
value="{{ old('email', $contact->email) }}" required>
|
||||
@error('email')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Vorname</label>
|
||||
<input type="text" name="firstname" class="form-control"
|
||||
value="{{ old('firstname', $contact->firstname) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Nachname</label>
|
||||
<input type="text" name="lastname" class="form-control"
|
||||
value="{{ old('lastname', $contact->lastname) }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Status <span class="text-danger">*</span></label>
|
||||
<select name="status" class="form-control @error('status') is-invalid @enderror" required>
|
||||
@foreach (\App\Models\NewsletterContact::$statusLabels as $key => $label)
|
||||
<option value="{{ $key }}"
|
||||
{{ old('status', $contact->status) === $key ? 'selected' : '' }}>
|
||||
{{ $label }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('status')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Herkunft</label>
|
||||
<select name="source" class="form-control">
|
||||
@foreach (\App\Models\NewsletterContact::$sourceLabels as $key => $label)
|
||||
<option value="{{ $key }}"
|
||||
{{ old('source', $contact->source) === $key ? 'selected' : '' }}>
|
||||
{{ $label }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Newsletter-Gruppen</label>
|
||||
<div class="custom-controls-stacked">
|
||||
<label class="custom-control custom-checkbox">
|
||||
<input type="checkbox" name="group_kulturreisen" class="custom-control-input"
|
||||
value="1"
|
||||
{{ old('group_kulturreisen', $contact->group_kulturreisen) ? 'checked' : '' }}>
|
||||
<span class="custom-control-label">Kulturreisen</span>
|
||||
</label>
|
||||
<label class="custom-control custom-checkbox">
|
||||
<input type="checkbox" name="group_ferienwohnungen" class="custom-control-input"
|
||||
value="1"
|
||||
{{ old('group_ferienwohnungen', $contact->group_ferienwohnungen) ? 'checked' : '' }}>
|
||||
<span class="custom-control-label">Ferienwohnungen</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Notizen</label>
|
||||
<textarea name="notes" class="form-control" rows="4">{{ old('notes', $contact->notes) }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
<div class="text-right">
|
||||
@if ($id !== 'new')
|
||||
<a href="{{ route('newsletter.detail', $contact->id) }}" class="btn btn-secondary">
|
||||
Abbrechen
|
||||
</a>
|
||||
@else
|
||||
<a href="{{ route('newsletter.index') }}" class="btn btn-secondary">
|
||||
Abbrechen
|
||||
</a>
|
||||
@endif
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="fa fa-save"></i> Speichern
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
322
resources/views/newsletter/index.blade.php
Normal file
322
resources/views/newsletter/index.blade.php
Normal file
|
|
@ -0,0 +1,322 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
<h4 class="d-flex justify-content-between align-items-center w-100 font-weight-bold py-3 mb-4">
|
||||
<div>
|
||||
<i class="ion ion-md-mail text-primary"></i> Newsletter-Kontakte
|
||||
</div>
|
||||
<div>
|
||||
<a href="{{ route('newsletter.edit', 'new') }}" class="btn btn-primary btn-sm">
|
||||
<i class="fa fa-plus"></i> Neuer Kontakt
|
||||
</a>
|
||||
</div>
|
||||
</h4>
|
||||
|
||||
@if (Session::has('alert-success'))
|
||||
<div class="alert alert-success alert-dismissible fade show">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
{{ Session::get('alert-success') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Statistiken -->
|
||||
<div class="row">
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="lnr lnr-users display-4 text-primary"></div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">Gesamte Kontakte</div>
|
||||
<div class="text-large">{{ $statistics['total'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="lnr lnr-checkmark-circle display-4 text-success"></div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">Aktive Kontakte</div>
|
||||
<div class="text-large">{{ $statistics['active'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="lnr lnr-map display-4 text-info"></div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">Kulturreisen</div>
|
||||
<div class="text-large">{{ $statistics['kulturreisen'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="lnr lnr-home display-4 text-primary"></div>
|
||||
<div class="ml-3">
|
||||
<div class="text-muted small">Ferienwohnungen</div>
|
||||
<div class="text-large">{{ $statistics['ferienwohnungen'] }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Filter & Aktionen -->
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<label>Gruppe</label>
|
||||
<select class="form-control" id="filter-group">
|
||||
<option value="">Alle Gruppen</option>
|
||||
<option value="kulturreisen">Kulturreisen</option>
|
||||
<option value="ferienwohnungen">Ferienwohnungen</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label>Status</label>
|
||||
<select class="form-control" id="filter-status">
|
||||
<option value="">Alle Status</option>
|
||||
<option value="active">Aktiv</option>
|
||||
<option value="inactive">Inaktiv</option>
|
||||
<option value="unsubscribed">Abgemeldet</option>
|
||||
<option value="bounced">Bounced</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label>Herkunft</label>
|
||||
<select class="form-control" id="filter-source">
|
||||
<option value="">Alle Herkünfte</option>
|
||||
<option value="booking_kulturreisen">Buchung Kulturreisen</option>
|
||||
<option value="booking_ferienwohnungen">Buchung Ferienwohnungen</option>
|
||||
<option value="newsletter_signup">Newsletter-Anmeldung</option>
|
||||
<option value="manual">Manuell</option>
|
||||
<option value="import">Import</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label> </label>
|
||||
<button type="button" class="btn btn-primary btn-block" id="btn-filter">
|
||||
<i class="fa fa-filter"></i> Filtern
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-3">
|
||||
<div class="col-md-3">
|
||||
<label>Letzte Reise von</label>
|
||||
<input type="text" class="form-control datepicker-base" id="filter-travel-from"
|
||||
placeholder="TT.MM.JJJJ">
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label>Letzte Reise bis</label>
|
||||
<input type="text" class="form-control datepicker-base" id="filter-travel-to"
|
||||
placeholder="TT.MM.JJJJ">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label> </label>
|
||||
<button type="button" class="btn btn-secondary btn-block" id="btn-reset-filter">
|
||||
<i class="fa fa-times"></i> Filter zurücksetzen
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-3">
|
||||
<div class="col-md-12">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-success btn-sm" onclick="syncContacts('all', false)">
|
||||
<i class="fa fa-sync"></i> Synchronisieren
|
||||
</button>
|
||||
<button type="button" class="btn btn-warning btn-sm" onclick="syncContacts('all', true)">
|
||||
<i class="fa fa-sync"></i> Voll-Sync (alle)
|
||||
</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-info btn-sm ml-2" onclick="exportContacts()">
|
||||
<i class="fa fa-download"></i> Export (mit aktuellen Filtern)
|
||||
</button>
|
||||
@if ($statistics['last_sync'])
|
||||
<small class="text-muted ml-3">
|
||||
Letzte Synchronisation: {{ $statistics['last_sync'] }}
|
||||
</small>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tabelle -->
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered" id="newsletter-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>E-Mail</th>
|
||||
<th>Name</th>
|
||||
<th>Gruppen</th>
|
||||
<th>Status</th>
|
||||
<th>Herkunft</th>
|
||||
<th>Buchungen</th>
|
||||
<th>Letzte Reise</th>
|
||||
<th>Letzte Buchung</th>
|
||||
<th>Erstellt</th>
|
||||
<th>Aktionen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('scripts')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var table = $('#newsletter-table').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: {
|
||||
url: '{{ route('newsletter.datatable') }}',
|
||||
data: function(d) {
|
||||
d.group = $('#filter-group').val();
|
||||
d.status = $('#filter-status').val();
|
||||
d.source = $('#filter-source').val();
|
||||
d.travel_from = $('#filter-travel-from').val();
|
||||
d.travel_to = $('#filter-travel-to').val();
|
||||
}
|
||||
},
|
||||
columns: [{
|
||||
data: 'id',
|
||||
name: 'id'
|
||||
},
|
||||
{
|
||||
data: 'email',
|
||||
name: 'email'
|
||||
},
|
||||
{
|
||||
data: 'full_name',
|
||||
name: 'full_name',
|
||||
orderable: false,
|
||||
searchable: false
|
||||
},
|
||||
{
|
||||
data: 'groups',
|
||||
name: 'groups',
|
||||
orderable: false,
|
||||
searchable: false
|
||||
},
|
||||
{
|
||||
data: 'status_badge',
|
||||
name: 'status'
|
||||
},
|
||||
{
|
||||
data: 'source_label',
|
||||
name: 'source_label'
|
||||
},
|
||||
{
|
||||
data: 'total_bookings',
|
||||
name: 'total_bookings',
|
||||
orderable: false,
|
||||
searchable: false
|
||||
},
|
||||
{
|
||||
data: 'last_travel',
|
||||
name: 'last_travel_end_date'
|
||||
},
|
||||
{
|
||||
data: 'last_booking',
|
||||
name: 'last_booking_at'
|
||||
},
|
||||
{
|
||||
data: 'created',
|
||||
name: 'created_at'
|
||||
},
|
||||
{
|
||||
data: 'actions',
|
||||
name: 'actions',
|
||||
orderable: false,
|
||||
searchable: false
|
||||
}
|
||||
],
|
||||
order: [
|
||||
[0, 'desc']
|
||||
],
|
||||
iDisplayLength: 50,
|
||||
language: {
|
||||
url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/German.json'
|
||||
}
|
||||
});
|
||||
|
||||
$('#btn-filter').on('click', function() {
|
||||
table.draw();
|
||||
});
|
||||
|
||||
$('#btn-reset-filter').on('click', function() {
|
||||
$('#filter-group').val('');
|
||||
$('#filter-status').val('');
|
||||
$('#filter-source').val('');
|
||||
$('#filter-travel-from').val('');
|
||||
$('#filter-travel-to').val('');
|
||||
table.draw();
|
||||
});
|
||||
});
|
||||
|
||||
function syncContacts(type, force) {
|
||||
if (!confirm('Möchten Sie die Synchronisation wirklich starten?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
var url = '{{ route('newsletter.sync') }}';
|
||||
var data = {
|
||||
type: type,
|
||||
_token: '{{ csrf_token() }}'
|
||||
};
|
||||
|
||||
if (force) {
|
||||
data.force = true;
|
||||
}
|
||||
|
||||
$.post(url, data, function(response) {
|
||||
location.reload();
|
||||
}).fail(function() {
|
||||
alert('Fehler bei der Synchronisation');
|
||||
});
|
||||
}
|
||||
|
||||
function exportContacts() {
|
||||
var params = [];
|
||||
|
||||
var group = $('#filter-group').val();
|
||||
var status = $('#filter-status').val();
|
||||
var source = $('#filter-source').val();
|
||||
var travelFrom = $('#filter-travel-from').val();
|
||||
var travelTo = $('#filter-travel-to').val();
|
||||
|
||||
if (group) params.push('group=' + encodeURIComponent(group));
|
||||
if (status) params.push('status=' + encodeURIComponent(status));
|
||||
if (source) params.push('source=' + encodeURIComponent(source));
|
||||
if (travelFrom) params.push('travel_from=' + encodeURIComponent(travelFrom));
|
||||
if (travelTo) params.push('travel_to=' + encodeURIComponent(travelTo));
|
||||
|
||||
var url = '{{ route('newsletter.export') }}';
|
||||
if (params.length > 0) {
|
||||
url += '?' + params.join('&');
|
||||
}
|
||||
|
||||
window.location.href = url;
|
||||
}
|
||||
</script>
|
||||
@endsection
|
||||
Loading…
Add table
Add a link
Reference in a new issue