Google2Fa ready to upload
This commit is contained in:
parent
e3495be8b8
commit
73e38a006e
127 changed files with 2637 additions and 589 deletions
|
|
@ -113,6 +113,7 @@ return [
|
|||
'url' => ':attribute muss eine URL sein.',
|
||||
'old_password' => 'Passwort ist nicht gültig',
|
||||
'users_update_email' => 'Die E-Mail ist schon zur Änderung eingetragen',
|
||||
'usernotactive' => 'Konto ist nicht aktiv',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
31
resources/views/admin/active_modal.blade.php
Normal file
31
resources/views/admin/active_modal.blade.php
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h5 class="modal-title">{{__('User')}} <span class="font-weight-light">{{__('create/edit')}}</span></h5>
|
||||
</div>
|
||||
{!! Form::open(['url' => route('admin_user_update_modal', [$action]), 'class' => 'form-horizontal']) !!}
|
||||
|
||||
<div class="modal-body">
|
||||
<input type="hidden" name="id" id="id" value="{{ $user->id }}">
|
||||
<input type="hidden" name="action" id="action" value="{{ $action }}">
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label for="email" class="form-label">{{__('E-Mail')}}</label>
|
||||
{{ Form::text('email', $user->email, array('placeholder'=>__('E-Mail'), 'class'=>'form-control', 'readonly')) }}
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
{!! Form::checkbox('active', 1, $user->active, ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label">User aktiv</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
|
||||
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
60
resources/views/admin/google2fa__modal.blade.php
Normal file
60
resources/views/admin/google2fa__modal.blade.php
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h5 class="modal-title">{{__('User')}}<span class="font-weight-light">{{__('create/edit')}}</span></h5>
|
||||
</div>
|
||||
{!! Form::open(['url' => route('admin_user_update_modal', [$action]), 'class' => 'form-horizontal']) !!}
|
||||
|
||||
<div class="modal-body">
|
||||
<input type="hidden" name="id" id="id" value="{{ $user->id }}">
|
||||
<input type="hidden" name="action" id="action" value="{{ $action }}">
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label for="email" class="form-label">{{__('E-Mail')}}</label>
|
||||
{{ Form::text('email', $user->email, array('placeholder'=>__('E-Mail'), 'class'=>'form-control', 'readonly')) }}
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label for="admin" class="form-label">{{__('Role')}}</label>
|
||||
<select class="selectpicker" data-style="btn-default" name="admin">
|
||||
{!! HTMLHelper::getRolesOptions($user->admin) !!}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
@foreach($groups as $role_id => $permissions)
|
||||
<h6>{{$roles[$role_id]}}</h6>
|
||||
@foreach($permissions as $key=>$val)
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
{!! Form::checkbox('permissions['.$key.']', 1, $user->isPermission($key), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label custom-control-label-{{$val['color']}}">{{$val['name']}}</span>
|
||||
</label>
|
||||
</div>
|
||||
@endforeach
|
||||
<hr>
|
||||
@endforeach
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
{!! Form::checkbox('confirmed', 1, $user->confirmed, ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label">{{__('verified')}}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
{!! Form::checkbox('active', 1, $user->active, ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label">{{__('active')}}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
|
||||
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
35
resources/views/admin/google2fa_delete_modal.blade.php
Normal file
35
resources/views/admin/google2fa_delete_modal.blade.php
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h5 class="modal-title">Google2Fa</h5>
|
||||
</div>
|
||||
{!! Form::open(['url' => route('admin_user_update_modal', [$action]), 'class' => 'form-horizontal']) !!}
|
||||
<div class="modal-body">
|
||||
<input type="hidden" name="id" id="id" value="{{ $user->id }}">
|
||||
<input type="hidden" name="action" id="action" value="{{ $action }}">
|
||||
|
||||
<style>
|
||||
.qrcode {
|
||||
display: inline-block;
|
||||
width: 280px;
|
||||
margin: 20px 0px 25px 0px;
|
||||
padding: 15px;
|
||||
border: 1px solid black;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<div class="text-center">
|
||||
<h5>{{ $MyGoogle2FA->getBy('name') }} | {{ $MyGoogle2FA->getBy('email') }}</h5>
|
||||
<p>Zwei-Faktor-Authentifizierung zurücksetzen.</p>
|
||||
<br>
|
||||
</div>
|
||||
<hr>
|
||||
<p><strong>Vor</strong> der Aktivierung wird beim Login er QR-Code und Secret Key angezeigt, um die Google2FA einzurichten.</p>
|
||||
<p><strong>Nach</strong> der Aktivierung wird beim Login die Google2FA abgefragt.</p>
|
||||
<p><strong>Zurücksetzen</strong> eines aktivierten Codes erzeugt einen neuen Google2FA Code der erneut in die Google Authenticator App hinzugefügt werden muss.</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
|
||||
<button type="submit" class="btn btn-danger">{{__('Google2FA jetzt zurücksetzen')}}</button>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
41
resources/views/admin/google2fa_modal.blade.php
Normal file
41
resources/views/admin/google2fa_modal.blade.php
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h5 class="modal-title">Google2Fa</h5>
|
||||
</div>
|
||||
{!! Form::open(['url' => route('admin_user_update_modal', [$action]), 'class' => 'form-horizontal']) !!}
|
||||
<div class="modal-body">
|
||||
<input type="hidden" name="id" id="id" value="{{ $user->id }}">
|
||||
<input type="hidden" name="action" id="action" value="{{ $action }}">
|
||||
|
||||
<style>
|
||||
.qrcode {
|
||||
display: inline-block;
|
||||
width: 280px;
|
||||
margin: 20px 0px 25px 0px;
|
||||
padding: 15px;
|
||||
border: 1px solid black;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<div class="text-center">
|
||||
<h5>{{ $MyGoogle2FA->getBy('name') }} | {{ $MyGoogle2FA->getBy('email') }}</h5>
|
||||
<p>Richten Sie Ihre Zwei-Faktor-Authentifizierung ein, indem Sie mit der Google Authenticator App den Barcode unten scannen.</p>
|
||||
<br>
|
||||
<div><strong>Secret Key</strong></div>
|
||||
<div class="key">{{ $MyGoogle2FA->getBy('secretKey') }}</div>
|
||||
|
||||
<div class="qrcode">
|
||||
{!! $MyGoogle2FA->getBy('inlineUrl') !!}
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<p><strong>Vor</strong> der Aktivierung wird beim Login er QR-Code und Secret Key angezeigt, um die Google2FA einzurichten.</p>
|
||||
<p><strong>Nach</strong> der Aktivierung wird beim Login die Google2FA abgefragt.</p>
|
||||
<p><strong>Zurücksetzen</strong> eines aktivierten Codes erzeugt einen neuen Google2FA Code der erneut in die Google Authenticator App hinzugefügt werden muss.</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
|
||||
<button type="submit" class="btn btn-primary">{{__('Google2FA jetzt aktivieren')}}</button>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<div class="modal-content">
|
||||
{!! Form::open(['url' => $data['url'], 'class' => '', 'enctype' => 'multipart/form-data']) !!}
|
||||
{{ Form::hidden('id', $data['id']) }}
|
||||
{{ Form::hidden('back', $data['back']) }}
|
||||
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">
|
||||
Buchnungen PDF Inhalte
|
||||
<span class="font-weight-light">anlegen/bearbeiten</span>
|
||||
</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label for="name" class="form-label">Name*</label>
|
||||
{{ Form::text('name', $value->name, array('placeholder'=>__('Name'), 'class'=>'form-control', 'required')) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="general_id" class="form-label">{{__('Vorlage')}}*</label>
|
||||
<select class="selectpicker" data-style="btn-default" name="general_id" data-live-search="true" required>
|
||||
{!! HTMLHelper::getCMSContentOptions($data['identifier'], $value->getObjectBy('general_id'), false) !!}
|
||||
</select>
|
||||
<i>Ein PDF Inhalt benötigt eine Vorlage mit min einen Eintrag.</i>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label for="country_ids" class="form-label">für folgende Länder benutzen (Mehrfachauswahl möglich)</label>
|
||||
{{ Form::select('country_ids[]', \App\Models\TravelCountry::getAsNameIdArray() , [], array('class'=>'selectpicker', 'id'=>'country_ids', 'data-style'=>"btn-default", 'multiple')) }}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('content[page-break]', 1, 1, ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;">Bei jeder Buchung automatisch erstellen (sonst kann es manuell in der Buchung erstellt werden)</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('content[page-break]', 1, 1, ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;">PDF Inhalt aktiv (nicht aktive Inhalte werden nicht angezeigt und nicht automatisch erstellt)</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">schließen</button>
|
||||
<button type="submit" class="btn btn-primary" name="action" value="newOrSaveName">hinzufügen</button>
|
||||
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
</script>
|
||||
|
|
@ -22,14 +22,6 @@
|
|||
{{ Form::text('email-confirm', $user->email, array('placeholder'=>__('Confirm E-Mail'), 'class'=>'form-control', 'id'=>'email-confirm', 'readonly'=>true)) }}
|
||||
</div>
|
||||
</div>
|
||||
@if(isset($isFromAdmin))
|
||||
@if(count($user->user_update_email) > 0)
|
||||
<p class="badge badge-primary" style=" color:#fff;">{{ $user->user_update_email->first()->email }} {{__('waiting for activation since')}} | {{ $user->user_update_email->first()->created_at->format('d.m.Y H:i') }}</p><br>
|
||||
@endif
|
||||
<a href="{{ route('admin_user_change_mail', [$user->id]) }}" class="btn btn-default btn-sm"> {{ __('Contact') }} {{__('Change E-Mail')}}</a>
|
||||
@else
|
||||
<a href="{{ route('user_update_email', [$user->id]) }}" class="btn btn-default btn-sm">{{__('Change E-Mail')}}</a>
|
||||
@endif
|
||||
@else
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-6">
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h5 class="modal-title">{{__('User')}}<span class="font-weight-light">{{__('create/edit')}}</span></h5>
|
||||
<h5 class="modal-title">{{__('User')}} <span class="font-weight-light">{{__('create/edit')}}</span></h5>
|
||||
</div>
|
||||
{!! Form::open(['url' => route('admin_user_update_modal', ['user']), 'class' => 'form-horizontal']) !!}
|
||||
{!! Form::open(['url' => route('admin_user_update_modal', [$action]), 'class' => 'form-horizontal']) !!}
|
||||
|
||||
<div class="modal-body">
|
||||
<input type="hidden" name="id" id="id" value="{{ $user->id }}">
|
||||
<input type="hidden" name="action" id="action" value="{{ $action }}">
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
|
|
@ -37,13 +38,6 @@
|
|||
<hr>
|
||||
@endforeach
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
{!! Form::checkbox('confirmed', 1, $user->confirmed, ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label">{{__('verified')}}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="custom-control custom-checkbox m-0">
|
||||
{!! Form::checkbox('active', 1, $user->active, ['class'=>'custom-control-input']) !!}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('E-Mail')}}</th>
|
||||
<th>{{__('Zugang')}}</th>
|
||||
<th>{{__('verified')}}</th>
|
||||
<th>{{__('Google2FA')}}</th>
|
||||
<th>{{__('active')}}</th>
|
||||
<th>{{__('delete')}}</th>
|
||||
</tr>
|
||||
|
|
@ -42,6 +42,46 @@
|
|||
|
||||
|
||||
<script>
|
||||
|
||||
function update_modal_data_show(e, $ele) {
|
||||
e.preventDefault();
|
||||
|
||||
var ele = $ele,
|
||||
url = ele.data('url'),
|
||||
data = {id:ele.data('data'), action:ele.data('action')};
|
||||
|
||||
console.log(data);
|
||||
console.log(url);
|
||||
$.ajax({
|
||||
url: url,
|
||||
data: data,
|
||||
type: "POST",
|
||||
dataType: "html",
|
||||
cache: false,
|
||||
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
encode: true,
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
success: function(data) {
|
||||
// do what ever you want here. add content to <div> if it was not 1 .
|
||||
//console.log(data);
|
||||
$('#update-modal-content').html(data);
|
||||
$('.selectpicker').selectpicker(["refresh"]);
|
||||
$('.input-daterange').datepicker({toggleActive: true,format: 'dd.mm.yyyy'});
|
||||
// $.Nestable.init();
|
||||
$('#updateModalShow').modal('show');
|
||||
},
|
||||
error: function(xhr, status, errorThrown) {
|
||||
console.log(xhr);
|
||||
console.log(xhr.responseText);
|
||||
console.log(status);
|
||||
console.log("Sorry, there was a problem!");
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
$( document ).ready(function() {
|
||||
$('.datatables-users').dataTable({
|
||||
"processing": true,
|
||||
|
|
@ -52,7 +92,7 @@
|
|||
{ data: 'name', name: 'name' },
|
||||
{ data: 'email', name: 'email' },
|
||||
{ data: 'admin', name: 'admin' },
|
||||
{ data: 'confirmed', name: 'confirmed' },
|
||||
{ data: 'google2fa', name: 'google2fa' },
|
||||
{ data: 'active', name: 'active' },
|
||||
{ data: 'action_delete', orderable: false, searchable: false},
|
||||
],
|
||||
|
|
|
|||
58
resources/views/auth/google2fa.blade.php
Normal file
58
resources/views/auth/google2fa.blade.php
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
@extends('layouts.auth')
|
||||
|
||||
@section('content')
|
||||
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-2 ui-bg-cover ui-bg-overlay-container px-4" style="background-image: url({{asset('images/sphinx.jpg')}});">
|
||||
<div class="ui-bg-overlay bg-dark opacity-25"></div>
|
||||
|
||||
<div class="authentication-inner py-5">
|
||||
|
||||
<div class="card">
|
||||
<div class="p-4 p-sm-5" style="padding-bottom: 1.5rem !important;">
|
||||
<!-- Logo -->
|
||||
<div class="d-flex justify-content-center align-items-center pb-2 mb-2">
|
||||
<div class="">
|
||||
<div class="w-100 position-relative">
|
||||
<a href="https://www.sterntours.de"><img src="{{ asset('/images/stern-tours-logo.png') }}" alt="STERN TOURS" class=""></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Logo -->
|
||||
|
||||
<h5 class="text-center text-muted font-weight-normal mb-4">{{ __('Login to your account') }}</h5>
|
||||
|
||||
<p class="text-center text-muted font-weight-normal">Bitte geben Sie das auf Ihrer Authentificator-App generierte One Time Password ein.
|
||||
Stellen Sie sicher, dass Sie den Aktuellen einreichen, da er alle 30 Sekunden aktualisiert.</p>
|
||||
|
||||
<form method="POST" class="my-5" action="{{ route('2fa') }}" aria-label="OTP">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label class="form-label">One Time Password</label>
|
||||
<input id="one_time_password" type="text" class="form-control {{ $errors->any() ? ' is-invalid' : '' }}" name="one_time_password" value="" required autofocus>
|
||||
@if ($errors->any())
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $errors->first() }}</strong>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center m-0">
|
||||
<button type="submit" class="btn btn-primary">{{ __('Login') }}</button>
|
||||
<a href="{{ route('logout') }}" class="btn btn-default">{{ __('Logout') }}</a>
|
||||
</div>
|
||||
</form>
|
||||
<!-- / Form -->
|
||||
|
||||
<div class="mt-5">
|
||||
<a class="update_modal_data_load" href="{{ route('data_protected') }}" data-url="{{ route('loading_modal') }}" data-data="data_protection" data-target="#modal-loading">{{ __('data protection') }}</a>
|
||||
<a class="update_modal_data_load float-right" href="{{ route('imprint') }}" data-url="{{ route('loading_modal') }}" data-data="imprint" data-target="#modal-loading">{{ __('imprint') }}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
73
resources/views/auth/google2fa_activate.blade.php
Normal file
73
resources/views/auth/google2fa_activate.blade.php
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
@extends('layouts.auth')
|
||||
|
||||
@section('content')
|
||||
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-2 ui-bg-cover ui-bg-overlay-container px-4" style="background-image: url({{asset('images/sphinx.jpg')}});">
|
||||
<div class="ui-bg-overlay bg-dark opacity-25"></div>
|
||||
|
||||
<div class="authentication-inner py-5">
|
||||
|
||||
<div class="card">
|
||||
<div class="p-4 p-sm-5" style="padding-bottom: 1.5rem !important;">
|
||||
<!-- Logo -->
|
||||
<div class="d-flex justify-content-center align-items-center pb-2 mb-2">
|
||||
<div class="">
|
||||
<div class="w-100 position-relative">
|
||||
<a href="https://www.sterntours.de"><img src="{{ asset('/images/stern-tours-logo.png') }}" alt="STERN TOURS" class=""></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<p class="text-center text-muted font-weight-normal">Richten Sie Ihre Zwei-Faktor-Authentifizierung ein, indem Sie mit der Google Authenticator App den Barcode unten scannen.</p>
|
||||
|
||||
<style>
|
||||
.qrcode {
|
||||
display: inline-block;
|
||||
width: 280px;
|
||||
margin: 20px 0px 25px 0px;
|
||||
padding: 15px;
|
||||
border: 1px solid black;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<div class="text-center">
|
||||
<div><strong>Secret Key</strong></div>
|
||||
<div class="key">{{ $MyGoogle2FA->getBy('secretKey') }}</div>
|
||||
|
||||
<div class="qrcode">
|
||||
{!! $MyGoogle2FA->getBy('inlineUrl') !!}
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<p class="text-muted"><strong>Vor</strong> der Aktivierung wird beim Login er QR-Code und Secret Key angezeigt, um die Google2FA einzurichten.</p>
|
||||
<p class="text-muted"><strong>Nach</strong> der Aktivierung wird beim Login die Google2FA abgefragt.</p>
|
||||
<p class="text-muted"><strong>Zurücksetzen</strong> eines aktivierten Codes erzeugt einen neuen Google2FA Code der erneut in die Google Authenticator App hinzugefügt werden muss.</p>
|
||||
|
||||
<form method="POST" class="my-5" action="{{ route('2fa') }}" aria-label="OTP">
|
||||
@csrf
|
||||
<input type="hidden" name="action" id="action" value="activate_user_one_time_password">
|
||||
|
||||
<div class="text-center">
|
||||
<button type="submit" class="btn btn-primary">{{__('Google2FA jetzt aktivieren')}}</button>
|
||||
</div>
|
||||
<div class="text-center mt-2">
|
||||
<a href="{{ route('logout') }}" class="btn btn-default">{{ __('Logout') }}</a>
|
||||
</div>
|
||||
</form>
|
||||
<!-- / Form -->
|
||||
|
||||
<div class="mt-5">
|
||||
<a class="update_modal_data_load" href="{{ route('data_protected') }}" data-url="{{ route('loading_modal') }}" data-data="data_protection" data-target="#modal-loading">{{ __('data protection') }}</a>
|
||||
<a class="update_modal_data_load float-right" href="{{ route('imprint') }}" data-url="{{ route('loading_modal') }}" data-data="imprint" data-target="#modal-loading">{{ __('imprint') }}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -15,6 +15,7 @@
|
|||
<th>Nationalität</th>
|
||||
<th>Pass</th>
|
||||
<th>Kind</th>
|
||||
<th>Storno</th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
@ -81,6 +82,12 @@
|
|||
<span class="custom-control-label"></span>
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<label class="custom-control custom-checkbox mt-2">
|
||||
{!! Form::checkbox('participant['.$item->id.'][participant_storno]', 1, $item->participant_storno, ['class'=>'custom-control-input', 'id'=>'participant_'.$item->id.'_participant_storno']) !!}
|
||||
<span class="custom-control-label"></span>
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<a class="btn btn-sm text-danger" href="{{ route('booking_delete', [$item->id, 'participant']) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@
|
|||
</td>
|
||||
<td><span class="item_pos_number">{{ $i++ }}</span></td>
|
||||
<td>
|
||||
{{ Form::text('contents['.$content->id.'][name]', $content->name, array('placeholder'=>__('Abschnitt*'), 'class'=>'form-control', 'id'=>'contents_'.$content->id.'_name', 'required')) }}
|
||||
{{ Form::text('contents['.$content->id.'][name]', $content->getNameWithEmpty(), array('placeholder'=>__('Abschnitt'), 'class'=>'form-control', 'id'=>'contents_'.$content->id.'_name')) }}
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" name="" value="up_{{$content->id}}" class="btn btn-xs btn-default move-up-btn"><i class="fa fa-arrow-up"></i> </button>
|
||||
|
|
@ -103,11 +103,12 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr class="border-none">
|
||||
<td colspan="2" style="vertical-align: bottom">
|
||||
<button type="submit" name="action" value="saveAll" class="btn btn-secondary btn-sm" title="speichern"><i class="ion ion-ios-save"></i></button>
|
||||
<td colspan="2" style="vertical-align: top">
|
||||
<button type="button" class="btn btn-default btn-sm mb-2 openSummernoteAir" data-id="#contents_{{ $content->id }}_text"><i class="ion ion-md-color-palette"></i></button>
|
||||
<button type="submit" name="action" value="saveAll" class="btn btn-secondary btn-sm mt-2" title="speichern"><i class="ion ion-ios-save"></i></button>
|
||||
</td>
|
||||
<td>
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air', 'id'=>'contents_'.$content->id.'_name', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air-placeholder', 'id'=>'contents_'.$content->id.'_text', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
</td>
|
||||
<td>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
|
|
@ -118,6 +119,14 @@
|
|||
{!! Form::checkbox('contents['.$content->id.'][page-break]', 1, ($content->getObjectBy('page-break') > 0), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;">{{__('Neue Seite')}}</span>
|
||||
</label>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('contents['.$content->id.'][repeat-country]', 1, ($content->getObjectBy('repeat-country') > 0), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;"><i class="ion ion-ios-repeat"></i> {{ __('Länder')}}</span>
|
||||
</label>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('contents['.$content->id.'][repeat-airline]', 1, ($content->getObjectBy('repeat-airline') > 0), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;"><i class="ion ion-ios-repeat"></i> {{__('Airline')}}</span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
@ -139,51 +148,111 @@
|
|||
</div>
|
||||
|
||||
{!! Form::close() !!}
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$.dragYScroll();
|
||||
var sort_item_pos_number = function(){
|
||||
var index = 1;
|
||||
$('#table_dragula_tbody .draft_item_tbody').each(function () {
|
||||
$(this).find('.item_pos_number').html(index);
|
||||
$(this).data('rowPosition', index);
|
||||
index++;
|
||||
});
|
||||
};
|
||||
$(function() {
|
||||
// Drag handle
|
||||
var sortableItems = dragula([$('#table_dragula_tbody')[0]], {
|
||||
moves: function (el, container, handle) {
|
||||
return handle.classList.contains('handle');
|
||||
}
|
||||
});
|
||||
sortableItems.on('dragend', function() {
|
||||
//sort new
|
||||
sort_item_pos_number();
|
||||
});
|
||||
});
|
||||
$('table .move-up-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var prevRow = thisRow.prev();
|
||||
if (prevRow.length) {
|
||||
prevRow.before(thisRow);
|
||||
sort_item_pos_number()
|
||||
|
||||
}
|
||||
});
|
||||
$('table .move-down-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var nextRow = thisRow.next();
|
||||
if (nextRow.length) {
|
||||
nextRow.after(thisRow);
|
||||
sort_item_pos_number()
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('/js/summernote-placeholders.js?v=1') }}"></script>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('.btn-add-item').on('click', function () {
|
||||
$('input[name=content_pos_id]').val($(this).data('pos-id'));
|
||||
$('input[name=action]').val('addItem');
|
||||
$("#booking-content-detail-form").submit();
|
||||
});
|
||||
$.dragYScroll();
|
||||
var sort_item_pos_number = function(){
|
||||
var index = 1;
|
||||
$('#table_dragula_tbody .draft_item_tbody').each(function () {
|
||||
$(this).find('.item_pos_number').html(index);
|
||||
$(this).data('rowPosition', index);
|
||||
index++;
|
||||
});
|
||||
};
|
||||
$(function() {
|
||||
// Drag handle
|
||||
var sortableItems = dragula([$('#table_dragula_tbody')[0]], {
|
||||
moves: function (el, container, handle) {
|
||||
return handle.classList.contains('handle');
|
||||
}
|
||||
});
|
||||
sortableItems.on('dragend', function() {
|
||||
//sort new
|
||||
sort_item_pos_number();
|
||||
});
|
||||
});
|
||||
$('table .move-up-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var prevRow = thisRow.prev();
|
||||
if (prevRow.length) {
|
||||
prevRow.before(thisRow);
|
||||
sort_item_pos_number()
|
||||
|
||||
}
|
||||
});
|
||||
$('table .move-down-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var nextRow = thisRow.next();
|
||||
if (nextRow.length) {
|
||||
nextRow.after(thisRow);
|
||||
sort_item_pos_number()
|
||||
}
|
||||
});
|
||||
|
||||
$('.summernote-air-placeholder').summernote({
|
||||
airMode: true,
|
||||
lang: 'de-DE',
|
||||
placeholder: 'Text ...',
|
||||
tabsize: 2,
|
||||
popover: { air:[
|
||||
['style', ['style']],
|
||||
['font', ['bold', 'italic', 'underline', 'clear']],
|
||||
['font', ['strikethrough']],
|
||||
['para', ['ul', 'ol', 'paragraph']],
|
||||
['insert', ['link']],
|
||||
['color', ['color']],
|
||||
['view', ['codeview']],
|
||||
['extensions', ['placeholders']]
|
||||
] },
|
||||
placeholderList:
|
||||
{
|
||||
blockChar : '#',
|
||||
items: [{!! \App\Services\Placeholder::getOptionsSummernote('booking') !!}],
|
||||
},
|
||||
callbacks: {
|
||||
onFocus: function(e) {
|
||||
},
|
||||
onBlur: function (e) {
|
||||
},
|
||||
},
|
||||
cleaner:{
|
||||
action: 'paste', // both|button|paste 'button' only cleans via toolbar button, 'paste' only clean when pasting content, both does both options.
|
||||
newline: '<br>', // Summernote's default is to use '<p><br></p>'
|
||||
notStyle: 'position:absolute;top:0;left:0;right:0', // Position of Notification
|
||||
icon: '<i class="note-icon">[Your Button]</i>',
|
||||
keepHtml: false, // Remove all Html formats
|
||||
keepOnlyTags: ['<p>', '<br>', '<ul>', '<li>', '<b>', '<strong>','<i>', '<a>'], // If keepHtml is true, remove all tags except these
|
||||
keepClasses: false, // Remove Classes
|
||||
badTags: ['style', 'script', 'applet', 'embed', 'noframes', 'noscript', 'html'], // Remove full tags with contents
|
||||
badAttributes: ['style', 'start'], // Remove attributes from remaining tags
|
||||
limitChars: false, // 0/false|# 0/false disables option
|
||||
limitDisplay: false, // text|html|both
|
||||
limitStop: false // true/false
|
||||
}
|
||||
});
|
||||
|
||||
$('.openSummernoteAir').on('click', function(){
|
||||
$($(this).data('id')).parent().find('.note-editable').focus();
|
||||
popover = $($(this).data('id')).parent().children('.note-editor').children('.note-popover');
|
||||
if(popover.css('display') == 'none'){
|
||||
popover.css("display", "block");
|
||||
}else{
|
||||
popover.css("display", "none");
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -44,8 +44,6 @@
|
|||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.note-editor.note-frame .note-editing-area .note-editable, .note-editor.note-airframe .note-editing-area .note-editable {
|
||||
color: #000;
|
||||
}
|
||||
|
|
@ -100,7 +98,7 @@
|
|||
</td>
|
||||
<td><span class="item_pos_number">{{ $i++ }}</span></td>
|
||||
<td>
|
||||
{{ Form::text('contents['.$content->id.'][name]', $content->name, array('placeholder'=>__('Abschnitt*'), 'class'=>'form-control', 'id'=>'contents_'.$content->id.'_name', 'readonly')) }}
|
||||
{{ Form::text('contents['.$content->id.'][name]', $content->getNameWithEmpty(), array('placeholder'=>__('Abschnitt'), 'class'=>'form-control', 'id'=>'contents_'.$content->id.'_name', 'readonly')) }}
|
||||
{{ Form::hidden('contents['.$content->id.'][identifier]', $identifier_general) }}
|
||||
</td>
|
||||
<td>
|
||||
|
|
@ -130,6 +128,14 @@
|
|||
{!! Form::checkbox('contents['.$content->id.'][page-break]', 1, ($content->getObjectBy('page-break') > 0), ['class'=>'custom-control-input', 'disabled']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;">{{__('Neue Seite')}}</span>
|
||||
</label>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('contents['.$content->id.'][repeat-country]', 1, ($content->getObjectBy('repeat-country') > 0), ['class'=>'custom-control-input', 'disabled']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;"><i class="ion ion-ios-repeat"></i> {{ __('Länder')}}</span>
|
||||
</label>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('contents['.$content->id.'][repeat-airline]', 1, ($content->getObjectBy('repeat-airline') > 0), ['class'=>'custom-control-input', 'disabled']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;"><i class="ion ion-ios-repeat"></i> {{__('Airline')}}</span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
|
@ -144,7 +150,7 @@
|
|||
</td>
|
||||
<td><span class="item_pos_number">{{ $i++ }}</span></td>
|
||||
<td>
|
||||
{{ Form::text('contents['.$content->id.'][name]', $content->name, array('placeholder'=>__('Abschnitt*'), 'class'=>'form-control', 'id'=>'contents_'.$content->id.'_name', 'required')) }}
|
||||
{{ Form::text('contents['.$content->id.'][name]', $content->getNameWithEmpty(), array('placeholder'=>__('Abschnitt'), 'class'=>'form-control', 'id'=>'contents_'.$content->id.'_name', 'required')) }}
|
||||
{{ Form::hidden('contents['.$content->id.'][identifier]', $identifier_content) }}
|
||||
</td>
|
||||
<td>
|
||||
|
|
@ -154,11 +160,12 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr class="border-none">
|
||||
<td colspan="2" style="vertical-align: bottom">
|
||||
<button type="submit" name="action" value="saveAll" class="btn btn-secondary btn-sm" title="speichern"><i class="ion ion-ios-save"></i></button>
|
||||
<td colspan="2" style="vertical-align: top">
|
||||
<button type="button" class="btn btn-default btn-sm mb-2 openSummernoteAir" data-id="#contents_{{ $content->id }}_text"><i class="ion ion-md-color-palette"></i></button>
|
||||
<button type="submit" name="action" value="saveAll" class="btn btn-secondary btn-sm mt-2" title="speichern"><i class="ion ion-ios-save"></i></button>
|
||||
</td>
|
||||
<td>
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air', 'id'=>'contents_'.$content->id.'_name', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air-placeholder', 'id'=>'contents_'.$content->id.'_text', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
</td>
|
||||
<td>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
|
|
@ -169,6 +176,14 @@
|
|||
{!! Form::checkbox('contents['.$content->id.'][page-break]', 1, ($content->getObjectBy('page-break') > 0), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;">{{__('Neue Seite')}}</span>
|
||||
</label>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('contents['.$content->id.'][repeat-country]', 1, ($content->getObjectBy('repeat-country') > 0), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;"><i class="ion ion-ios-repeat"></i> {{ __('Länder')}}</span>
|
||||
</label>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
{!! Form::checkbox('contents['.$content->id.'][repeat-airline]', 1, ($content->getObjectBy('repeat-airline') > 0), ['class'=>'custom-control-input']) !!}
|
||||
<span class="custom-control-label" style="white-space: nowrap;"><i class="ion ion-ios-repeat"></i> {{__('Airline')}}</span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
@ -193,57 +208,112 @@
|
|||
</div>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
$('.btn-add-item').on('click', function () {
|
||||
$('input[name=content_pos_id]').val($(this).data('pos-id'));
|
||||
$('input[name=action]').val('addItem');
|
||||
$("#booking-content-detail-form").submit();
|
||||
});
|
||||
$.dragYScroll();
|
||||
var sort_item_pos_number = function(){
|
||||
var index = 1;
|
||||
$('#table_dragula_tbody .draft_item_tbody').each(function () {
|
||||
$(this).find('.item_pos_number').html(index);
|
||||
$(this).data('rowPosition', index);
|
||||
index++;
|
||||
});
|
||||
};
|
||||
$(function() {
|
||||
// Drag handle
|
||||
var sortableItems = dragula([$('#table_dragula_tbody')[0]], {
|
||||
moves: function (el, container, handle) {
|
||||
return handle.classList.contains('handle');
|
||||
}
|
||||
});
|
||||
sortableItems.on('dragend', function() {
|
||||
//sort new
|
||||
sort_item_pos_number();
|
||||
});
|
||||
});
|
||||
$('table .move-up-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var prevRow = thisRow.prev();
|
||||
if (prevRow.length) {
|
||||
prevRow.before(thisRow);
|
||||
sort_item_pos_number()
|
||||
|
||||
}
|
||||
});
|
||||
$('table .move-down-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var nextRow = thisRow.next();
|
||||
if (nextRow.length) {
|
||||
nextRow.after(thisRow);
|
||||
sort_item_pos_number()
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
|
||||
@section('scripts')
|
||||
<script src="{{ asset('/js/summernote-placeholders.js?v=1') }}"></script>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('.btn-add-item').on('click', function () {
|
||||
$('input[name=content_pos_id]').val($(this).data('pos-id'));
|
||||
$('input[name=action]').val('addItem');
|
||||
$("#booking-content-detail-form").submit();
|
||||
});
|
||||
$.dragYScroll();
|
||||
var sort_item_pos_number = function(){
|
||||
var index = 1;
|
||||
$('#table_dragula_tbody .draft_item_tbody').each(function () {
|
||||
$(this).find('.item_pos_number').html(index);
|
||||
$(this).data('rowPosition', index);
|
||||
index++;
|
||||
});
|
||||
};
|
||||
$(function() {
|
||||
// Drag handle
|
||||
var sortableItems = dragula([$('#table_dragula_tbody')[0]], {
|
||||
moves: function (el, container, handle) {
|
||||
return handle.classList.contains('handle');
|
||||
}
|
||||
});
|
||||
sortableItems.on('dragend', function() {
|
||||
//sort new
|
||||
sort_item_pos_number();
|
||||
});
|
||||
});
|
||||
$('table .move-up-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var prevRow = thisRow.prev();
|
||||
if (prevRow.length) {
|
||||
prevRow.before(thisRow);
|
||||
sort_item_pos_number()
|
||||
|
||||
}
|
||||
});
|
||||
$('table .move-down-btn').on('click', function () {
|
||||
var thisRow = $(this).closest('tbody');
|
||||
var nextRow = thisRow.next();
|
||||
if (nextRow.length) {
|
||||
nextRow.after(thisRow);
|
||||
sort_item_pos_number()
|
||||
}
|
||||
});
|
||||
|
||||
$('.summernote-air-placeholder').summernote({
|
||||
airMode: true,
|
||||
lang: 'de-DE',
|
||||
placeholder: 'Text ...',
|
||||
tabsize: 2,
|
||||
popover: { air:[
|
||||
['style', ['style']],
|
||||
['font', ['bold', 'italic', 'underline', 'clear']],
|
||||
['font', ['strikethrough']],
|
||||
['para', ['ul', 'ol', 'paragraph']],
|
||||
['insert', ['link']],
|
||||
['color', ['color']],
|
||||
['view', ['codeview']],
|
||||
['extensions', ['placeholders']]
|
||||
] },
|
||||
placeholderList:
|
||||
{
|
||||
blockChar : '#',
|
||||
items: [{!! \App\Services\Placeholder::getOptionsSummernote('booking') !!}],
|
||||
},
|
||||
callbacks: {
|
||||
onFocus: function(e) {
|
||||
},
|
||||
onBlur: function (e) {
|
||||
},
|
||||
},
|
||||
cleaner:{
|
||||
action: 'paste', // both|button|paste 'button' only cleans via toolbar button, 'paste' only clean when pasting content, both does both options.
|
||||
newline: '<br>', // Summernote's default is to use '<p><br></p>'
|
||||
notStyle: 'position:absolute;top:0;left:0;right:0', // Position of Notification
|
||||
icon: '<i class="note-icon">[Your Button]</i>',
|
||||
keepHtml: false, // Remove all Html formats
|
||||
keepOnlyTags: ['<p>', '<br>', '<ul>', '<li>', '<b>', '<strong>','<i>', '<a>'], // If keepHtml is true, remove all tags except these
|
||||
keepClasses: false, // Remove Classes
|
||||
badTags: ['style', 'script', 'applet', 'embed', 'noframes', 'noscript', 'html'], // Remove full tags with contents
|
||||
badAttributes: ['style', 'start'], // Remove attributes from remaining tags
|
||||
limitChars: false, // 0/false|# 0/false disables option
|
||||
limitDisplay: false, // text|html|both
|
||||
limitStop: false // true/false
|
||||
}
|
||||
});
|
||||
|
||||
$('.openSummernoteAir').on('click', function(){
|
||||
$($(this).data('id')).parent().find('.note-editable').focus();
|
||||
popover = $($(this).data('id')).parent().children('.note-editor').children('.note-popover');
|
||||
if(popover.css('display') == 'none'){
|
||||
popover.css("display", "block");
|
||||
}else{
|
||||
popover.css("display", "none");
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -27,6 +27,9 @@
|
|||
<th style="max-width: 60px;"> </th>
|
||||
<th>{{__('Name')}}</th>
|
||||
<th>{{__('Vorlage')}}</th>
|
||||
<th>{{__('Länder')}}</th>
|
||||
<th>{{__('auto')}}</th>
|
||||
<th>{{__('aktiv')}}</th>
|
||||
<th>{{__('')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
@ -39,15 +42,19 @@
|
|||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{{ $value->name }}
|
||||
<a href="#" class="text-primary" data-toggle="modal" data-target="#modals-default"
|
||||
data-id="{{ $value->id }}"
|
||||
data-name="{{ $value->name }}"
|
||||
data-general_id="{{ $value->getObjectBy('general_id') }}">
|
||||
<span class="fa fa-edit"></span>
|
||||
</a>
|
||||
<button type="button" class="btn icon-btn btn-sm btn-secondary" data-toggle="modal" data-target="#modals-load-content"
|
||||
data-id="{{$value->id}}"
|
||||
data-model="CMSContent"
|
||||
data-action="modal-cms_booking_content_edit"
|
||||
data-back="{{route('cms_booking_content')}}"
|
||||
data-url="{{ route('cms_booking_content_detail', [$value->id]) }}"
|
||||
data-identifier="{{ $identifier_general_name }}"
|
||||
data-route="{{ route('modal_load') }}"><span class="fa fa-edit"></span></button> {{ $value->name }}
|
||||
</td>
|
||||
<td>{{ \App\Services\Model::getCMSContentGeneralNameById($value->getObjectBy('general_id')) }}</td>
|
||||
<td>x</td>
|
||||
<td>x</td>
|
||||
<td>x</td>
|
||||
<td>
|
||||
<a class="text-danger" href="{{ route('cms_booking_content_delete', [$value->id, 'name']) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a>
|
||||
</td>
|
||||
|
|
@ -58,50 +65,17 @@
|
|||
|
||||
</div>
|
||||
<div class="ml-3 mb-2">
|
||||
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-default"
|
||||
data-id="new"
|
||||
data-name=""
|
||||
data-general_id=""
|
||||
>Neue PDF Vorlage anlegen</button>
|
||||
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-load-content"
|
||||
data-id="new"
|
||||
data-model="CMSContent"
|
||||
data-action="modal-cms_booking_content_edit"
|
||||
data-back="{{route('cms_booking_content')}}"
|
||||
data-url="{{ route('cms_booking_content_detail', [$value->id]) }}"
|
||||
data-identifier="{{ $identifier_general_name }}"
|
||||
data-route="{{ route('modal_load') }}">Neue PDF Vorlage anlegen</button>
|
||||
</div>
|
||||
|
||||
<!-- Modal template -->
|
||||
<div class="modal fade" id="modals-default">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content" action="{{ route('cms_booking_content_detail') }}" method="post">
|
||||
@csrf
|
||||
<input type="hidden" name="id" value="">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Buchnungen PDF Inhalte <span class="font-weight-light">anlegen/bearbeiten</span></h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-row">
|
||||
<div class="form-group col">
|
||||
<label for="name" class="form-label">Name*</label>
|
||||
<input type="text" class="form-control" name="name" placeholder="{{__('Name')}}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="general_id" class="form-label">{{__('Vorlage')}}*</label>
|
||||
<select class="selectpicker" data-style="btn-default" name="general_id" data-live-search="true" required>
|
||||
{!! HTMLHelper::getCMSContentOptions($identifier_general_name, false, false) !!}
|
||||
</select>
|
||||
<i>Ein PDF Inhalt benötigt eine Vorlage mit min einen Eintrag.</i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
|
||||
<button type="submit" class="btn btn-primary" name="action" value="newOrSaveName" >{{__('save')}}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
$('#modals-default').on('show.bs.modal', function (event) {
|
||||
var button = $(event.relatedTarget);
|
||||
$(this).find(".modal-content input[name='id']").val(button.data('id'));
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@
|
|||
<button type="submit" name="action" value="saveAll" class="btn btn-secondary btn-sm" title="speichern"><i class="ion ion-ios-save"></i></button>
|
||||
</td>
|
||||
<td>
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air', 'id'=>'contents_'.$content->id.'_name', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air', 'id'=>'contents_'.$content->id.'_text', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
</td>
|
||||
<td>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@
|
|||
<button type="submit" name="action" value="saveAll" class="btn btn-secondary btn-sm" title="speichern"><i class="ion ion-ios-save"></i></button>
|
||||
</td>
|
||||
<td>
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air', 'id'=>'contents_'.$content->id.'_name', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
{{ Form::textarea('contents['.$content->id.'][full_text]', $content->getContent(), array('class'=>'form-control autoExpand summernote-air', 'id'=>'contents_'.$content->id.'_text', 'rows'=>'1', 'data-min-rows'=>'1')) }}
|
||||
</td>
|
||||
<td>
|
||||
<label class="custom-control custom-checkbox mt-2" style="margin-right: 20px;">
|
||||
|
|
|
|||
|
|
@ -11,8 +11,12 @@
|
|||
@if($customer_mail->is_answer)
|
||||
Antwort von:<br>
|
||||
@else
|
||||
@if($customer_mail->send)
|
||||
Gesendet an:<br>
|
||||
@else
|
||||
(nicht gesendet) an:<br>
|
||||
@endif
|
||||
@endif
|
||||
<<a href="mailto:{{$customer_mail->email}}">{{$customer_mail->email}}</a>> {{$customer_mail->sent_at }}
|
||||
@if($customer_mail->recipient)
|
||||
<div>TO: {{\App\Services\Util::_implodeLines($customer_mail->recipient, ', ')}}</div>
|
||||
|
|
|
|||
|
|
@ -141,8 +141,6 @@
|
|||
<script src="{{ asset('/vendor/libs/summernote/dist/lang/summernote-de-DE.js?v=0.8.16') }}"></script>
|
||||
<script src="{{ asset('/js/summernote-cleaner.js?v=1') }}"></script>
|
||||
|
||||
|
||||
|
||||
<script src="{{ asset('/vendor/libs/quill/quill.min.js?v=1.3.6') }}"></script>
|
||||
<script src="{{ asset('/vendor/libs/quill-placeholder-module/dist/placeholder-module.js?v=1') }}"></script>
|
||||
|
||||
|
|
|
|||
|
|
@ -11,8 +11,12 @@
|
|||
@if($lead_mail->is_answer)
|
||||
Antwort von:<br>
|
||||
@else
|
||||
Gesendet an:<br>
|
||||
@if($lead_mail->send)
|
||||
Gesendet an:<br>
|
||||
@else
|
||||
(nicht gesendet) an:<br>
|
||||
@endif
|
||||
@endif
|
||||
<<a href="mailto:{{$lead_mail->email}}">{{$lead_mail->email}}</a>> {{$lead_mail->sent_at }}
|
||||
@if($lead_mail->recipient)
|
||||
<div>TO: {{\App\Services\Util::_implodeLines($lead_mail->recipient, ', ')}}</div>
|
||||
|
|
|
|||
|
|
@ -10,14 +10,12 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th style="max-width: 60px;"> </th>
|
||||
<th style="max-width: 60px;"><i class="fa fa-eye"></i></th>
|
||||
<th>{{__('BuchungID')}}</th>
|
||||
<th>{{__('Vorname')}}</th>
|
||||
<th>{{__('Nachname')}}</th>
|
||||
<th>{{__('E-Mail')}}</th>
|
||||
<th>{{__('Betreff')}}</th>
|
||||
<th>{{__('Buchung')}}</th>
|
||||
<th>{{__('gesendet')}}</th>
|
||||
<th>{{__('Datum')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
@ -30,17 +28,15 @@
|
|||
"processing": true,
|
||||
"serverSide": true,
|
||||
"ajax": '{!! route('mail_booking_datatable') !!}',
|
||||
"order": [[ 8, "desc" ]],
|
||||
"order": [[ 7, "desc" ]],
|
||||
"columns": [
|
||||
{ data: 'action_edit', orderable: false, searchable: false},
|
||||
{ data: 'action_see', orderable: false, searchable: false},
|
||||
{ data: 'booking_id', name: 'booking_id' },
|
||||
{ data: 'customer.firstname', name: 'customer.firstname' },
|
||||
{ data: 'customer.name', name: 'customer.name' },
|
||||
{ data: 'email', name: 'email' },
|
||||
{ data: 'subject', name: 'subject' },
|
||||
{ data: 'booking', name: 'booking', searchable: false },
|
||||
{ data: 'send', name: 'send', searchable: false },
|
||||
{ data: 'date', name: 'date' },
|
||||
],
|
||||
"bLengthChange": false,
|
||||
|
|
|
|||
|
|
@ -10,14 +10,12 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th style="max-width: 60px;"> </th>
|
||||
<th style="max-width: 60px;"><i class="fa fa-eye"></i></th>
|
||||
<th>{{__('BuchnungID')}}</th>
|
||||
<th>{{__('Vorname')}}</th>
|
||||
<th>{{__('Nachname')}}</th>
|
||||
<th>{{__('E-Mail')}}</th>
|
||||
<th>{{__('Betreff')}}</th>
|
||||
<th>{{__('Buchung')}}</th>
|
||||
<th>{{__('gesendet')}}</th>
|
||||
<th>{{__('Datum')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
@ -30,17 +28,15 @@
|
|||
"processing": true,
|
||||
"serverSide": true,
|
||||
"ajax": '{!! route('mail_booking_fewo_datatable') !!}',
|
||||
"order": [[ 8, "desc" ]],
|
||||
"order": [[ 7, "desc" ]],
|
||||
"columns": [
|
||||
{ data: 'action_edit', orderable: false, searchable: false},
|
||||
{ data: 'action_see', orderable: false, searchable: false},
|
||||
{ data: 'booking_id', name: 'booking_id' },
|
||||
{ data: 'customer.first_name', name: 'customer.first_name' },
|
||||
{ data: 'customer.last_name', last_name: 'customer.name' },
|
||||
{ data: 'email', name: 'email' },
|
||||
{ data: 'subject', name: 'subject' },
|
||||
{ data: 'booking', name: 'booking' },
|
||||
{ data: 'send', name: 'send', searchable: false },
|
||||
{ data: 'date', name: 'date' },
|
||||
],
|
||||
"bLengthChange": false,
|
||||
|
|
|
|||
|
|
@ -10,13 +10,11 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th style="max-width: 60px;"> </th>
|
||||
<th style="max-width: 60px;"><i class="fa fa-eye"></i></th>
|
||||
<th>{{__('AnfrageID')}}</th>
|
||||
<th>{{__('Vorname')}}</th>
|
||||
<th>{{__('Nachname')}}</th>
|
||||
<th>{{__('E-Mail')}}</th>
|
||||
<th>{{__('Betreff')}}</th>
|
||||
<th>{{__('gesendet')}}</th>
|
||||
<th>{{__('Datum')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
@ -29,16 +27,14 @@
|
|||
"processing": true,
|
||||
"serverSide": true,
|
||||
"ajax": '{!! route('mail_lead_datatable') !!}',
|
||||
"order": [[ 7, "desc" ]],
|
||||
"order": [[ 6, "desc" ]],
|
||||
"columns": [
|
||||
{ data: 'action_edit', orderable: false, searchable: false},
|
||||
{ data: 'action_see', orderable: false, searchable: false},
|
||||
{ data: 'lead_id', name: 'lead_id' },
|
||||
{ data: 'customer.firstname', name: 'customer.firstname' },
|
||||
{ data: 'customer.name', name: 'customer.name' },
|
||||
{ data: 'email', name: 'email' },
|
||||
{ data: 'subject', name: 'subject' },
|
||||
{ data: 'send', name: 'send', searchable: false },
|
||||
{ data: 'date', name: 'date' },
|
||||
],
|
||||
"bLengthChange": false,
|
||||
|
|
|
|||
|
|
@ -440,6 +440,10 @@
|
|||
function clearTravelOptionAgenda(){
|
||||
$('#travel_option_agenda_id').empty().prop('disabled', true);
|
||||
}
|
||||
|
||||
function orderDrawTable($order = 1){
|
||||
table.order( [$order, 'desc' ] ).draw();
|
||||
}
|
||||
$('#travel_option_search').on('change', function(){
|
||||
if($(this).val() !== ""){
|
||||
$('.datepicker-base').removeClass('active');
|
||||
|
|
@ -452,38 +456,38 @@
|
|||
$(this).removeClass('active');
|
||||
}
|
||||
clearTravelOptionAgenda();
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_country_id').on('change', function(){
|
||||
clearTravelOptionAgenda();
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_agenda_id').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_company_id').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_lead_status_id').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_airline_id').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#sort_sf_guard_user_id').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_paying_out').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_paying_out_status').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_refund').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
$('#travel_option_xx_tkt').on('change', function(){
|
||||
table.draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
|
||||
$('.datepicker-base').on('change', function(){
|
||||
|
|
@ -498,11 +502,10 @@
|
|||
$('#travel_option_search').removeClass('deactive');
|
||||
}
|
||||
clearTravelOptionAgenda();
|
||||
table.order( [ 5, 'desc' ] ).draw();
|
||||
});
|
||||
$('.full_search').on('keyup', function(){
|
||||
clearTravelOptionAgenda();
|
||||
table.order( [ 5, 'desc' ] ).draw();
|
||||
orderDrawTable();
|
||||
});
|
||||
|
||||
function loadModalInner(self, data){
|
||||
|
|
|
|||
|
|
@ -11,8 +11,12 @@
|
|||
@if($customer_mail->is_answer)
|
||||
Antwort von:<br>
|
||||
@else
|
||||
Gesendet an:<br>
|
||||
@if($customer_mail->send)
|
||||
Gesendet an:<br>
|
||||
@else
|
||||
(nicht gesendet) an:<br>
|
||||
@endif
|
||||
@endif
|
||||
<<a href="mailto:{{$customer_mail->email}}">{{$customer_mail->email}}</a>> {{$customer_mail->sent_at }}
|
||||
@if($customer_mail->recipient)
|
||||
<div>TO: {{\App\Services\Util::_implodeLines($customer_mail->recipient, ', ')}}</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue