init without trunk

This commit is contained in:
Kevin Adametz 2020-07-09 12:49:32 +02:00
parent ed24ac4994
commit bb809e7233
14652 changed files with 177862 additions and 94817 deletions

7
app/.htaccess Normal file
View file

@ -0,0 +1,7 @@
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>

7
app/AppCache.php Normal file
View file

@ -0,0 +1,7 @@
<?php
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
class AppCache extends HttpCache
{
}

55
app/AppKernel.php Normal file
View file

@ -0,0 +1,55 @@
<?php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
new AppBundle\AppBundle(),
new WhiteOctober\TCPDFBundle\WhiteOctoberTCPDFBundle(),
new Gregwar\ImageBundle\GregwarImageBundle(),
];
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
$bundles[] = new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle();
}
return $bundles;
}
public function getRootDir()
{
return __DIR__;
}
public function getCacheDir()
{
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
}
public function getLogDir()
{
return dirname(__DIR__).'/var/logs';
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
}

View file

@ -0,0 +1,7 @@
{% extends get_base_template() %}
{% block body %}
<h1>Fehler</h1>
<div class="alert alert-danger">Es ist ein Fehler aufgetreten. Ihre Anfrage konnte nicht verarbeitet werden</div>
{% endblock %}

View file

@ -0,0 +1,19 @@
{% extends get_base_template() %}
{% block body %}
<h1>Fehler 404</h1>
<h4>Leider konnte die von Ihnen angeforderte Seite nicht gefunden werden.</h4>
<p>
Bitte überprüfen Sie:
</p>
<ul style="list-style-type: disc; padding-left: 40px; margin-top: 20px;">
<li>die Schreibweise der URL (Groß- und Kleinschreibung)</li>
<li>Ihren Bookmark (Lesezeichen)</li>
<li>die Seite, von der Sie gekommen sind</li>
</ul>
<p style="margin-top: 20px;">
Versuchen Sie ggf. die gewünschte Seite über unsere <a href="/">Homepage</a> zu finden.
</p>
{% endblock body %}

View file

@ -0,0 +1,116 @@
<!DOCTYPE html>
{% if app.debug -%}
<!-- {% if page is defined %}page-Eintrag mit ID {{ page.id }}{% else %}Für diese Seite existiert kein page-Eintrag, sondern ein Twig-Seitetemplate in app/Resources/views/default/pages{% endif %} -->
{%- endif %}
<!--[if lt IE 7 ]><html class="ie ie6" lang="de"> <![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="de"> <![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="de"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="de"><!--<![endif]-->
<head>
<title>
{% block page_title %}
FeWo-Adminbereich
{% endblock page_title %}
</title>
<!-- Favicons -->
<link rel="shortcut icon" href="/bundles/app/images/favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="/bundles/app/images/apple-icon.png" />
<link rel="apple-touch-icon" sizes="72x72" href="/bundles/app/images/apple-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="114x114" href="/bundles/app/images/apple-icon-114x114.png" />
<link rel="stylesheet" href="{{ asset('css/my-custom.css?v') }}{{ get_file_last_time('css/my-custom.css') }}">
<link rel="stylesheet" href="{{ asset('css/my-custom.css?v') }}{{ get_file_last_time('css/my-custom.css') }}">
{% block stylesheets %}
{% stylesheets
'bundles/app/css/daterangepicker.css'
filter='cssrewrite'
%}
<link rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}
<style>.box-slider .slide:not(.active) {display: none;}</style>{# TODO Move to custom.css #}
{% endblock stylesheets %}
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<script src="{{ asset('js/custom-min.js?v') }}{{ get_file_last_time('js/custom-min.js') }}"></script>
<script src="{{ asset('js/fewoBooking-min.js?v') }}{{ get_file_last_time('js/fewoBooking-min.js') }}"></script>
</head>
<body>
<div id="wrapper">
<header class="header fixedheader setbg">
<div class="menu-container">
<div class="container">
<div class="menu-wrapper">
<nav id="navigation" class="navbar" role="navigation" itemscope itemtype="https://schema.org/SiteNavigationElement">
<div class="navbar-inner">
<div id="navbar-collapse" class="navbar-left navbar-collapse collapse clearfix">
<ul class="nav navbar-nav">
<li itemprop="name">
<a href="/admin/fewo/lodgings" title="Wohnungen/Objekte" itemprop="">Objekte</a>
</li>
<li itemprop="name">
<a href="/admin/fewo/seasons" title="Saisons" itemprop="">Saisons</a>
</li>
<li itemprop="name">
<a href="/logout" title="Logout" itemprop="">Logout</a>
</li>
</ul><!-- end navbar-right -->
</div><!-- end navbar-callopse -->
</div>
</nav><!-- end navigation -->
</div><!-- menu wrapper -->
</div><!-- end container -->
</div><!-- end menu-container -->
</header>
<section class="section clearfix" style="padding-top: 100px;">
<div class="container">
<div class="row">
<div id="fullwidth" class="col-sm-12">
<!-- START CONTENT -->
<div class="row">
<div id="content" class="col-md-9 col-sm-8 col-xs-12">
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Sterntours - Adminbereich</h1>
</div>
</section><!-- end section -->
{% endblock %}
</div><!-- end col -->
</div><!-- end row -->
<!-- END CONTENT -->
</div><!-- end fullwidth -->
</div><!-- end row -->
</div><!-- end container -->
</section><!-- end section -->
{#{% include 'default/components/footer.html.twig' %}#}
</div><!-- end wrapper -->
<!-- default modal -->
{#{% embed 'default/components/embed/modal.html.twig' with {id: 'default'} %}{% endembed %}#}
{#TODO ausmisten und im gleichen zuge das CSS für den Datepicker einfügen#}
{% block javascripts %}
{% endblock javascripts %}
</body>
</html>

View file

@ -0,0 +1 @@
{% block body %}{% endblock %}

View file

@ -0,0 +1,184 @@
<!doctype html>
{% if app.debug -%}
<!-- {% if page is defined %}page-Eintrag mit ID {{ page.id }}{% else %}Für diese Seite existiert kein page-Eintrag, sondern ein Twig-Seitetemplate in app/Resources/views/default/pages{% endif %} -->
{%- endif %}
<!--[if lt IE 7 ]><html class="ie ie6" lang="de"> <![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="de"> <![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="de"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="de"><!--<![endif]-->
<head>
<title>{% block page_title %}
{{ page is defined ? page.pagetitle : iq_page_title is defined ? iq_page_title : 'Kulturreisen vom Reiseveranstalter STERN TOURS aus Berlin' }}
{% endblock page_title %}</title>
{% block metatags %}
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
{% block meta_description -%}
{%- if page is defined and page.description is not empty -%}
<meta name="description" content="{{ page.description }}" >
{%- endif -%}
{%- if iq_page_description is defined and iq_page_description is not empty -%}
<meta name="description" content="{{ iq_page_description }}" >
{%- endif -%}
{%- endblock %}
{% block meta_keywords -%}
{%- if page is defined and page.keywords is not empty -%}
<meta name="keywords" content="{{ page.keywords }}" >
{%- endif -%}
{%- endblock %}
{% block meta_robots %}
<meta name="robots" content="follow,index" />
{% endblock %}
{% endblock %}
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
{% block canonical_tag %}
{% if canonical_url is not defined and page is defined %}
{% if page.canonicalUrl is not empty %}
{% set canonical_url = (page.canonicalUrl starts with '/' ? get_base_url()) ~ page.canonicalUrl %}
{% if app.debug %}<!-- Die canonical URL wurde über das Feld "canonical_url" des page-Eintrags ermittelt -->{% endif %}
{% else %}
{% set canonical_url = get_base_url() ~ page.urlPath %}
{% if app.debug %}<!-- Die canonical URL wurde über den URL-Pfad des page-Eintrags berechnet, also entweder über das Feld "real_url_path" oder den "slug"-Werten der Seitenhierarchie -->{% endif %}
{% endif %}
{% elseif app.debug and canonical_url is defined %}
<!-- Die canonical_url wurde im Controller festgelegt -->
{% endif %}
{% if canonical_url is defined %}
<link rel="canonical" href="{{ canonical_url }}" />
<link rel="alternate" hreflang="de-de" href="{{ canonical_url }}" />
{% elseif app.debug %}
<!-- Die canonical_url konnte nicht automatisch ermittelt werden und muss daher entweder durch den Controller festgelegt werden, oder der Block "canonical_tag" im Seiten-Template überschrieben werden -->
{% endif %}
{% endblock %}
<style>
#preloader{position:fixed;z-index:9999999;top:0;bottom:0;right:0;left:0;background:#fff}#preloader .inner{position:absolute;top:0;bottom:0;right:0;left:0;width:54px;height:54px;margin:auto}.page-loader{display:block;width:100%;height:100%;position:fixed;top:0;left:0;background:#fefefe;z-index:100000}#preloader span.loader{width:50px;height:50px;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;font-size:10px;text-indent:-12345px;border-top:1px solid rgba(0,0,0,0.08);border-right:1px solid rgba(0,0,0,0.08);border-bottom:1px solid rgba(0,0,0,0.08);border-left:1px solid rgba(0,0,0,0.5);border-radius:50%;-webkit-animation:spinner 700ms infinite linear;animation:spinner 700ms infinite linear;z-index:100001}@-webkit-keyframes spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
.item-img .img-responsiv-item { width: 100%; max-width: none; height: auto; }
</style>
<link rel="preload" href="{{ asset('css/my-custom.css?v') }}{{ get_file_last_time('css/my-custom.css') }}" as="style" onload="this.rel='stylesheet'">
<noscript>
<style>
.item-img >div.img-background { display: none; }
</style>
<link rel="stylesheet" href="{{ asset('css/my-custom.css?v') }}{{ get_file_last_time('css/my-custom.css') }}">
</noscript>
<script>
/*loadCss*/
!function(w){"use strict";var loadCSS=function(href,before,media){function ready(cb){return doc.body?cb():void setTimeout(function(){ready(cb)})}function loadCB(){ss.addEventListener&&ss.removeEventListener("load",loadCB),ss.media=media||"all"}var ref,doc=w.document,ss=doc.createElement("link");if(before)ref=before;else{var refs=(doc.body||doc.getElementsByTagName("head")[0]).childNodes;ref=refs[refs.length-1]}var sheets=doc.styleSheets;ss.rel="stylesheet",ss.href=href,ss.media="only x",ready(function(){ref.parentNode.insertBefore(ss,before?ref:ref.nextSibling)});var onloadcssdefined=function(cb){for(var resolvedHref=ss.href,i=sheets.length;i--;)if(sheets[i].href===resolvedHref)return cb();setTimeout(function(){onloadcssdefined(cb)})};return ss.addEventListener&&ss.addEventListener("load",loadCB),ss.onloadcssdefined=onloadcssdefined,onloadcssdefined(loadCB),ss};"undefined"!=typeof exports?exports.loadCSS=loadCSS:w.loadCSS=loadCSS}("undefined"!=typeof global?global:this);
/*link[rel=preload] polyfill*/
!function(w){if(w.loadCSS){var rp=loadCSS.relpreload={};if(rp.support=function(){try{return w.document.createElement("link").relList.supports("preload")}catch(e){return!1}},rp.poly=function(){for(var links=w.document.getElementsByTagName("link"),i=0;i<links.length;i++){var link=links[i];"preload"===link.rel&&"style"===link.getAttribute("as")&&(w.loadCSS(link.href,link),link.rel=null)}},!rp.support()){rp.poly();var run=w.setInterval(rp.poly,300);w.addEventListener&&w.addEventListener("load",function(){w.clearInterval(run)}),w.attachEvent&&w.attachEvent("onload",function(){w.clearInterval(run)})}}}(this);
</script>
{% block stylesheets %}
{% endblock stylesheets %}
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js" async></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js" async></script>
<![endif]-->
</head>
<body class="no-js">
<div id="wrapper">
<div id="preloader">
<div class="inner">
<span class="loader"></span>
</div>
</div>
{{ render(controller('AppBundle:Component:header')) }}
{% block header2 %}
<section class="section fullscreen background lozad" data-background-image="/bundles/app/images/travel/header-top-image3.jpg" style="background-image:url({{ asset('images/placeholder-image.png') }});">
<div class="container-fluid">
<div class="row">
<div class="col-md-12 col-xs-12">
<div class="home-message text-center small">
<div class="home-info-box">
<div id="eKomiSeal_default" class="eKomi-header" style="padding-top: 5px;padding-left: 2px;">
<img class="lozad" border="0" src="{{ asset('images/dummy.png') }}" data-src="/bundles/app/images/logo-qualitaet.png" alt="Top Kundenservice" height="78">
</div>
<ul class="c4">
<li>Spezialist für Kulturreisen </li>
<li>Reiseexperte seit 1998</li>
<li>Beratung für individuelle Reisen</li>
</ul>
</div>
</div><!-- end homemessage -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end container -->
</section><!-- end section -->
{% endblock %}
{# #TODO additional section classes if not home #}
<section class="section clearfix">
<div class="container-fluid">
<div class="row">
<div id="fullwidth" class="col-sm-12">
{% block breadcrumb %}
{% if page is defined %}
{{ render(controller('AppBundle:Component:breadcrumb', {'page': page})) }}
{% elseif breadcrumb_entries is defined %}
{{ include('default/components/breadcrumb.html.twig') }}
{% endif %}
{% endblock %}
<!-- START CONTENT -->
<div class="row" id="order_row">
<div id="show_sterntours_video_full" class="col-md-12" style="display: none;">
</div>
<div id="content" class="col-xs-12 col-sm-12 col-md-9 col-md-push-3 order_sec">
{% block body %}{% endblock %}
</div>
<div id="sidebar" class="col-xs-12 col-sm-12 col-md-3 col-md-pull-9 order_first">
{% if site_loading is defined and page is defined %}
{{ render(controller('AppBundle:Component:makeSidebarWidget', {'site_loading': site_loading, 'page': page})) }}
{% elseif site_loading is defined and api is defined %}
{{ render(controller('AppBundle:Component:makeSidebarWidget', {'site_loading': site_loading, 'page': null, 'api': api})) }}
{% else %}
{% if site_loading is defined and search_form is defined %}
{{ render(controller('AppBundle:Component:makeSidebarWidget', {'site_loading': site_loading, 'page': null, 'api': null, 'search_form': search_form})) }}
{% else %}
{{ render(controller('AppBundle:Component:makeSidebarWidget', {'site_loading': 'default'})) }}
{% endif %}
{% endif %}
</div>
</div><!-- end row -->
<!-- END CONTENT -->
</div><!-- end fullwidth -->
</div><!-- end row -->
</div><!-- end container -->
</section><!-- end section -->
{{ render(controller('AppBundle:Component:footer')) }}
<a class="js-go-to u-go-to-v1 animated" href="#!" data-type="fixed" data-offset-top="400" data-show-effect="zoomIn" data-hide-effect="zoomOut" data-position='{"bottom": 15, "right": 15 }'>
<i class="icon-up-open-big"></i>
</a>
</div><!-- end wrapper -->
<!-- default modal -->
{% embed 'default/components/embed/modal.html.twig' with {id: 'default'} %}{% endembed %}
{% block javascripts %}
<script src="{{ asset('js/custom-min.js?v') }}{{ get_file_last_time('js/custom-min.js') }}"></script>
{% endblock javascripts %}
</body>
</html>

View file

@ -0,0 +1,45 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Bild für Gruppe "{{ lodgingGroup.name }}" anlegen / bearbeiten</h1>
<form class="st-booking-form" method="post" enctype="multipart/form-data">
{{ form_errors(form) }}
<div class="form-box">
{% if is_new %}
{{ form_row(form.file, {label: 'Bild'}) }}
{% else %}
<div>
<img src="{{ asset('_uploads/images/' ~ image_file_name) }}" alt="{{ image.description }}" style="height:250px;" >
</div>
{% endif %}
{{ form_row(form.fileName, {label: 'Name'}) }}
{{ form_row(form.pos, {label: 'Position'}) }}
{{ form_row(form.comp, {label: 'Comnp'}) }}
{{ form_row(form.description, {label: 'Beschreibung'}) }}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_widget(form._token) }}
</form>
<a href="{{ '/admin/fewo/lodging/group/' ~ lodgingGroup.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,35 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Mehrere Bilder für Gruppe "{{ lodgingGroup.name }}" hochladen</h1>
<form class="st-booking-form" method="post" enctype="multipart/form-data">
{{ form_errors(form) }}
<div class="form-box">
{{ form(form) }}
<br/>
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div>
</form>
<a href="{{ '/admin/fewo/lodging/group/' ~ lodgingGroup.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section>
{% endblock body %}

View file

@ -0,0 +1,44 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Bild für "{{ lodging.name }}" anlegen / bearbeiten</h1>
<form class="st-booking-form" method="post" enctype="multipart/form-data">
{{ form_errors(form) }}
<div class="form-box">
{% if is_new %}
{{ form_row(form.file, {label: 'Bild'}) }}
{% else %}
<div>
<img src="{{ asset('_uploads/images/' ~ image_file_name) }}" alt="{{ image.description }}" style="width:456px;height:151px;" >
</div>
{% endif %}
{{ form_row(form.fileName, {label: 'Name'}) }}
{{ form_row(form.pos, {label: 'Position'}) }}
{{ form_row(form.description, {label: 'Beschreibung'}) }}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_widget(form._token) }}
</form>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,35 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Mehrere Bilder für "{{ lodging.name }}" hochladen</h1>
<form class="st-booking-form" method="post" enctype="multipart/form-data">
{{ form_errors(form) }}
<div class="form-box">
{{ form(form) }}
<br/>
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div>
</form>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section>
{% endblock body %}

View file

@ -0,0 +1,140 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Gruppe {{ lodgingGroup.name }} bearbeiten</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.name, {'label': 'Name'}) }}
<br><br>
<h3>Bilder vor</h3>
{% if lodgingGroup.images is not empty %}
<table class="table">
<thead>
<tr>
<th>Bild</th>
<th>Pos</th>
<th>Name</th>
<th>Beschreibung</th>
<th></th>
</tr>
</thead>
<tbody>
{% for image in lodgingGroup.images %}
{% if image.comp == 'pre' %}
<tr>
<td><img src="{{ asset('_uploads/images/' ~ image.file) }}" alt="{{ image.description }}" style="height:80px;" ></td>
<td>{{ image.pos }}</td>
<td>{{ image.fileName }}</td>
<td>{{ image.description }}</td>
<td>
<a href="{{ '/admin/fewo/lodgings/group/' ~ lodgingGroup.id ~ '/images/' ~ image.id }}"
class="btn btn-primary"
>
Bearbeiten
</a>
<a href="{{ '/admin/fewo/lodgings/group/' ~ lodgingGroup.id ~ '/images/' ~ image.id ~ '/delete' }}"
class="btn btn-primary"
>
Löschen
</a>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
{% else %}
<h4>Keine Bilder vorhanden</h4>
{% endif %}
<a href="{{ '/admin/fewo/lodgings/group/pre/' ~ lodgingGroup.id ~ '/images/new' }}" class="btn btn-primary">
Hinzufügen
</a>
<a href="/admin/fewo/lodgings/group/pre/{{ lodgingGroup.id }}/images/multi-upload" class="btn btn-primary">
Mehrere Bilder hochladen
</a>
<br><br>
<h3>Bilder nach</h3>
{% if lodgingGroup.images is not empty %}
<table class="table">
<thead>
<tr>
<th>Bild</th>
<th>Pos</th>
<th>Name</th>
<th>Beschreibung</th>
<th></th>
</tr>
</thead>
<tbody>
{% for image in lodgingGroup.images %}
{% if image.comp == 'post' %}
<tr>
<td><img src="{{ asset('uploads/images/' ~ image.file) }}" alt="{{ image.description }}" style="height:80px;" ></td>
<td>{{ image.pos }}</td>
<td>{{ image.fileName }}</td>
<td>{{ image.description }}</td>
<td>
<a href="{{ '/admin/fewo/lodgings/group/' ~ lodgingGroup.id ~ '/images/' ~ image.id }}"
class="btn btn-primary"
>
Bearbeiten
</a>
<a href="{{ '/admin/fewo/lodgings/group/' ~ lodgingGroup.id ~ '/images/' ~ image.id ~ '/delete' }}"
class="btn btn-primary"
>
Löschen
</a>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
{% else %}
<h4>Keine Bilder vorhanden</h4>
{% endif %}
<a href="{{ '/admin/fewo/lodgings/group/post/' ~ lodgingGroup.id ~ '/images/new' }}" class="btn btn-primary">
Hinzufügen
</a>
<a href="/admin/fewo/lodgings/group/post/{{ lodgingGroup.id }}/images/multi-upload" class="btn btn-primary">
Mehrere Bilder hochladen
</a>
<br><br>
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,99 @@
{% extends 'admin.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Objekte</h1>
<div class="table-responsive" id="no-more-tables">
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Typ</th>
<th>Objekt</th>
</tr>
</thead>
<tbody>
{% if lodgingGroups is not empty %}
{% for lodgingGroup in lodgingGroups %}
<tr>
<td>- ({{ lodgingGroup.id }}) -</td>
<td>{{ lodgingGroup.name }}</td>
<td>Gruppe</td>
<td>
<a href="{{ '/admin/fewo/lodging/group/' ~ lodgingGroup.id }}"
class="btn btn-primary"
rel="nofollow"
>
Bearbeiten
</a>
<a href="{{ '/admin/fewo/lodging/group/' ~ lodgingGroup.id ~ '/delete' }}"
class="btn btn-primary"
rel="nofollow"
>
Löschen
</a>
</td>
</tr>
{% if lodgingGroup.lodgings is not empty %}
{% for lodging in lodgingGroup.lodgings %}
<tr>
<td>{{ lodging.id }}</td>
<td>{{ lodging.name }}</td>
<td>{{ lodging.type }}</td>
<td>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id }}"
class="btn btn-primary"
rel="nofollow"
>
Bearbeiten
</a>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/delete' }}"
class="btn btn-primary"
rel="nofollow"
>
Löschen
</a>
</td>
</tr>
{% endfor %}
{% endif %}
{% endfor %}
{% else %}
<h2>Keine Objekte verfügbar</h2>
{% endif %}
<tr>
<td>
<a href="/admin/fewo/lodgings/new"
class="btn btn-primary"
rel="nofollow"
>
Hinzufügen
</a>
</td>
</tr>
<tr>
<td>
<a href="/admin/fewo/lodgings/group/new"
class="btn btn-primary"
rel="nofollow"
>
Gruppe hinzufügen
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,350 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>{{ lodging.name }} bearbeiten</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
<h3>Reservierungen</h3>
{% if lodging.reservations is not empty %}
<table class="table">
<thead>
<tr>
<th>Von</th>
<th>Bis</th>
<th>Status</th>
<th>Typ</th>
<th></th>
</tr>
</thead>
<tbody>
{% for lodgingReservation in lodging.reservations %}
<tr>
<td>{{ lodgingReservation.fromDate|date('d.m.y') }}</td>
<td>{{ lodgingReservation.toDate|date('d.m.y') }}</td>
<td>
{% if lodgingReservation.status == 0 %}
belegt
{% elseif lodgingReservation.status == 1 %}
nicht verfügbar
{% endif %}
</td>
<td>
{% if lodgingReservation.type == 0 %}
Buchung
{% elseif lodgingReservation.type == 1 %}
händisch
{% endif %}
</td>
<td>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/reservations/' ~ lodgingReservation.id }}"
class="btn btn-primary"
rel="nofollow"
>
Bearbeiten
</a>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/reservations/' ~ lodgingReservation.id ~ '/delete' }}"
class="btn btn-primary"
rel="nofollow"
>
Löschen
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h4>Keine Reservierungen vorhanden</h4>
{% endif %}
{% if lodging.prices is not empty %}
<a href="/admin/fewo/lodgings/{{ lodging.id }}/reservations/new"
class="btn btn-primary"
rel="nofollow"
>
Hinzufügen
</a>
{% else %}
<h4>Mindestens eine Saison pflegen.</h4>
{% endif %}
<br><br>
<h1>Verfügbarkeit</h1>
<style>
.table > tbody > tr > td.normal {
background-color: #deebde;
padding: 6px;
}
.table > tbody > tr > td.calendar-day-non {
background-color: #fff;
}
.table > tbody > tr > td.calendar-day-past {
background-color: rgba(242, 242, 242, 0.5);
}
.table > tbody > tr > td.calendar-light {
opacity: 0.5;
}
.table > tbody > tr > td.calendar-day-disabled-half {
/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#f0bcbc+49,f2f2f2+50,f0bcbc+51 */
background: #f0bcbc; /* Old browsers */
background: -moz-linear-gradient(-35deg, #f0bcbc 49%, #f2f2f2 50%, #f0bcbc 51%); /* FF3.6-15 */
background: -webkit-linear-gradient(-35deg, #f0bcbc 49%,#f2f2f2 50%,#f0bcbc 51%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(145deg, #f0bcbc 49%,#f2f2f2 50%,#f0bcbc 51%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f0bcbc', endColorstr='#f0bcbc',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.table > tbody > tr > td.calendar-day-disabled-half-booked {
/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#f0bcbc+49,f2f2f2+50,f0bcbc+51 */
background: #f0bcbc; /* Old browsers */
background: -moz-linear-gradient(-35deg, #f0bcbc 49%, #f2f2f2 50%, #C5DCC6 51%); /* FF3.6-15 */
background: -webkit-linear-gradient(-35deg, #f0bcbc 49%,#f2f2f2 50%,#C5DCC6 51%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(145deg, #f0bcbc 49%,#f2f2f2 50%,#C5DCC6 51%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f0bcbc', endColorstr='#C5DCC6',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.table > tbody > tr > td.calendar-day-disabled-half-booked.active {
/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#f0bcbc+49,f2f2f2+50,f0bcbc+51 */
background: #f0bcbc; /* Old browsers */
background: -moz-linear-gradient(-35deg, #f0bcbc 49%, #f2f2f2 50%, #b7ceb8 51%); /* FF3.6-15 */
background: -webkit-linear-gradient(-35deg, #f0bcbc 49%,#f2f2f2 50%,#b7ceb8 51%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(145deg, #f0bcbc 49%,#f2f2f2 50%,#b7ceb8 51%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f0bcbc', endColorstr='#b7ceb8',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
}
.table > tbody > tr > .calendar-day-reservation-begin {
background-color: #f0bcbc;
background: -moz-linear-gradient(to bottom right, #deebde 0%, #deebde 49%, #f0bcbc 50%, #f0bcbc 100%);
background: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #deebde), color-stop(49%, #deebde), color-stop(50%, #f0bcbc), color-stop(100%, #f0bcbc));
background: -webkit-linear-gradient(to bottom right, #deebde 0%, #deebde 49%, #f0bcbc 50%, #f0bcbc 100%);
background: -o-linear-gradient(to bottom right, #deebde 0%, #deebde 49%, #f0bcbc 50%, #f0bcbc 100%);
background: -ms-linear-gradient(to bottom right, #deebde 0%, #deebde 49%, #f0bcbc 50%, #f0bcbc 100%);
background: linear-gradient(to bottom right, #deebde 0%, #deebde 49%, #f0bcbc 50%, #f0bcbc 100%);
}
.table > tbody > tr > .calendar-day-reservation-end {
background-color: #f2f2f2;
background: -moz-linear-gradient(to bottom right, #f0bcbc 0%, #f0bcbc 49%, #deebde 50%, #deebde 100%);
background: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #f0bcbc), color-stop(49%, #f0bcbc), color-stop(50%, #deebde), color-stop(100%, #deebde));
background: -webkit-linear-gradient(to bottom right, #f0bcbc 0%, #f0bcbc 49%, #deebde 50%, #deebde 100%);
background: -o-linear-gradient(to bottom right, #f0bcbc 0%, #f0bcbc 49%, #deebde 50%, #deebde 100%);
background: -ms-linear-gradient(to bottom right, #f0bcbc 0%, #f0bcbc 49%, #deebde 50%, #deebde 100%);
background: linear-gradient(to bottom right, #f0bcbc 0%, #f0bcbc 49%, #deebde 50%, #deebde 100%);
}
.table > tbody > tr > td.active {
background-color: rgba(88, 155, 92, 0.35);
padding: 6px;
}
.table > tbody > tr > td.active:hover {
background-color: #648859;
}
.table > tbody > tr > td a.link {
color: #5a5a5a;
font-weight: 700;
width: 100%;
display: block;
height: 100%;
// padding: 6px;
text-decoration: underline;
}
.table > tbody > tr > td:hover a.link {
color: #fff;
font-weight: 700;
width: 100%;
display: block;
height: 100%;
}
.table > tbody > tr > td a.link {
font-weight: 700;
width: 100%;
display: block;
height: 100%;
// padding: 6px;
}
</style>
{% include 'default/admin/lodgingsEditCalendar.html.twig' %}
<br><br>
<h3>Saisons (Preise)</h3>
{% if lodging.prices is not empty %}
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Von</th>
<th>Bis</th>
<th>Mindestbelegung</th>
<th>Preis pro Nacht</th>
<th>Service-Gebühr</th>
<th></th>
</tr>
</thead>
<tbody>
{% for lodgingPrice in lodging.prices %}
{% if lodgingPrice.season is not empty %}
<tr>
<td>{{ lodgingPrice.season.name }}</td>
<td>{{ lodgingPrice.season.fromDate|date('d.m.y') }}</td>
<td>{{ lodgingPrice.season.toDate|date('d.m.y') }}</td>
<td>{{ lodgingPrice.season.minimumStay }}</td>
<td>{{ lodgingPrice.perNight }}</td>
<td>{{ lodgingPrice.flatPrice }}</td>
<td>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/prices/' ~ lodgingPrice.id }}"
class="btn btn-primary"
rel="nofollow"
>
Bearbeiten
</a>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/prices/' ~ lodgingPrice.id ~ '/delete' }}"
class="btn btn-primary"
rel="nofollow"
>
Löschen
</a>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
{% else %}
<h4>Keine Saisons vorhanden</h4>
{% endif %}
<a href="/admin/fewo/lodgings/{{ lodging.id }}/prices/new"
class="btn btn-primary"
rel="nofollow"
>
Hinzufügen
</a>
<hr>
<br><br>
{{ form_row(form.name, {'label': 'Name'}) }}
{{ form_row(form.group, {'label': 'Gruppe'}) }}
{{ form_row(form.type, {'label': 'Typ'}) }}
{{ form_row(form.description, {'label': 'Beschreibung'}) }}
{{ form_row(form.equipment, {'label': 'Ausstattung'}) }}
{{ form_row(form.adress1, {'label': 'Adresse 1'}) }}
{{ form_row(form.adress2, {'label': 'Adresse 2'}) }}
{{ form_row(form.zipCode, {'label': 'PLZ'}) }}
{{ form_row(form.city, {'label': 'Ort'}) }}
{{ form_row(form.maximumPersons, {'label': 'Maximale Personenanzahl'}) }}
{{ form_row(form.maximumAdults, {'label': 'Maximale Erwachsene'}) }}
{{ form_row(form.maximumChilds, {'label': 'Maximale Kinder'}) }}
{{ form_row(form.deposit, {'label': 'Kaution'}) }}
{#
<div class="checkbox">
{{ form_widget(form.calendarVisible) }}
<label for="{{ form.calendarVisible.vars.id }}">
Kalender sichtbar
</label>
{{ form_errors(form.calendarVisible) }}
</div>
#}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
<br><br>
<h3>Bilder</h3>
{% if lodging.images is not empty %}
<table class="table">
<thead>
<tr>
<th>Bild</th>
<th>Pos</th>
<th>Name</th>
<th>Beschreibung</th>
<th></th>
</tr>
</thead>
<tbody>
{% for image in lodging.images %}
<tr>
<td><img src="{{ asset('_uploads/images/' ~ image.file) }}" alt="{{ image.description }}" style="width:228px;height:75px;" ></td>
<td>{{ image.pos }}</td>
<td>{{ image.fileName }}</td>
<td>{{ image.description }}</td>
<td>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/images/' ~ image.id }}"
class="btn btn-primary"
>
Bearbeiten
</a>
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/images/' ~ image.id ~ '/delete' }}"
class="btn btn-primary"
>
Löschen
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h4>Keine Bilder vorhanden</h4>
{% endif %}
<a href="{{ '/admin/fewo/lodgings/' ~ lodging.id ~ '/images/new' }}" class="btn btn-primary">
Hinzufügen
</a>
<a href="/admin/fewo/lodgings/{{ lodging.id }}/images/multi-upload" class="btn btn-primary">
Mehrere Bilder hochladen
</a>
<br><br>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,76 @@
{% set counter = 0 %}
{% for calendar_month in calendar %}
{% set counter = counter + 1 %}
{% if counter%2 != 0 %}
<div class="row" style="">
{% endif %}
<div class="col-xs-12 col-sm-6">
<table class="table calendar-table">
<thead>
<tr>
<th colspan="7">
{{ calendar_month['monthName'] }} {{ calendar_month['year'] }}
</th>
</tr>
<tr>
<th>Mo</th>
<th>Di</th>
<th>Mi</th>
<th>Do</th>
<th>Fr</th>
<th>Sa</th>
<th>So</th>
</tr>
</thead>
<tbody>
{% for weekIndex in 0..5 %}
<tr>
{% for dayIndex in 0..6 %}
{# @var dayState \AppBundle\Util\CalendarDayState #}
{% set dayState = calendar_month['data'][(weekIndex * 7) + dayIndex] %}
{% set is_past_date = dayState.date is not empty and date(dayState.date) < date('now') %}
{# Set cell class #}
<td class="{{ dayState.getCssClass }} {% if dayState.isBookable %}active{% endif %}">
{% if dayState.isReserved or dayState.isReservationBegin %}
{% if dayState.reservation.id is defined %}
<a class="link" href="/admin/fewo/lodgings/{{ lodging.id }}/reservations/{{ dayState.reservation.id }}">
{{ dayState.day }}
</a>
{% else %}
ID
{% endif %}
{% elseif dayState.isBookable and not is_past_date %}
<a class="link" href="/admin/fewo/lodgings/{{ lodging.id }}/reservations/new/{{ dayState.day < 10 ? '0':'' }}{{dayState.day}}{{ calendar_month['monthNumber'] < 10 ? '0':'' }}{{calendar_month['monthNumber']}}{{calendar_month['year']}}">
{{ dayState.day }}
</a>
{% elseif dayState.day == 0 %}
&nbsp;
{% else %}
{% if dayState.isPastDate %}
<del style="color:#989898;">{{ dayState.day }}</del>
{% else %}
{{ dayState.day }}
{% endif %}
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if counter%2 == 0 or calendar|length ==counter %}
</div>
{% endif %}
{% endfor %}

View file

@ -0,0 +1,39 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Neue Gruppe anlegen</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.name, {label: 'Name'}) }}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,56 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Neues Objekt anlegen</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.name, {label: 'Name'}) }}
{{ form_row(form.type, {label: 'Typ'}) }}
{{ form_row(form.description, {label: 'Beschreibung'}) }}
{{ form_row(form.equipment, {label: 'Ausstattung'}) }}
{{ form_row(form.adress1, {label: 'Adresse 1'}) }}
{{ form_row(form.adress2, {label: 'Adresse 2'}) }}
{{ form_row(form.zipCode, {label: 'PLZ'}) }}
{{ form_row(form.city, {label: 'Ort'}) }}
{{ form_row(form.maximumPersons, {label: 'Maximale Personenanzahl'}) }}
{{ form_row(form.deposit, {label: 'Kaution'}) }}
{#
<div class="checkbox">
{{ form_widget(form.calendarVisible) }}
<label for="{{ form.calendarVisible.vars.id }}">
Kalender sichtbar
</label>
{{ form_errors(form.calendarVisible) }}
</div>
#}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,37 @@
{% extends 'admin.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Login Adminbereich</h1>
{% if error %}
<div id="message">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('login') }}" class="st-booking-form" method="post">
{#{{ form_errors(form) }}#}
<div class="form-box">
<label for="username">Benutzername:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Passwort:</label>
<input type="password" id="password" name="_password" />
{#TODO hier evtl hidden input#}
<br><br>
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Login
</button>
</div>
</div><!-- end form-box -->
</form>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,37 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Saison von {{ lodging.name }} bearbeiten</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.season, {label: 'Saison'}) }}
{{ form_row(form.perNight, {label: 'Preis pro Nacht'}) }}
{{ form_row(form.flatPrice, {label: 'Service-Gebühr'}) }}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings/{{ lodging.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,37 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Saison zu {{ lodging.name }} hinzufügen</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.season, {label: 'Saison'}) }}
{{ form_row(form.perNight, {label: 'Preis pro Nacht'}) }}
{{ form_row(form.flatPrice, {label: 'Service-Gebühr'}) }}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings/{{ lodging.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,191 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Reservierung bearbeiten für {{ lodging.name }}</h1>
<h3>Reservierung</h3>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.lodging, {label: 'Objekt'}) }}
<div class="form-group">
<label class="st-required control-label required">Datum</label>
<div class="input-daterange input-group" id="date-range">
{{ form_widget(form.fromDate) }}
<span class="input-group-addon bg-info b-0 text-white">bis</span>
{{ form_widget(form.toDate) }}
</div>
</div>
{{ form_row(form.status, {label: 'Status'}) }}
{#{{ form_row(form.type, {label: 'Typ'}) }}#}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings/{{ lodging.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
<a href="/admin/fewo/lodgings/{{ lodging.id }}/reservations/{{ reservationId }}/delete"
class="btn btn-primary"
rel="nofollow"
>
Löschen
</a>
<hr>
<h3>Mögliche Saisons</h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Von</th>
<th>Bis</th>
<th>Preis pro Nacht</th>
<th>Service-Gebühr</th>
</tr>
</thead>
<tbody>
{% for lodgingPrice in lodging.prices %}
{% if lodgingPrice.season is not empty %}
<tr>
<td>{{ lodgingPrice.season.name }}</td>
<td>{{ lodgingPrice.season.fromDate|date('d-m-y') }}</td>
<td>{{ lodgingPrice.season.toDate|date('d-m-y') }}</td>
<td>{{ lodgingPrice.perNight }}</td>
<td>{{ lodgingPrice.flatPrice }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</section><!-- end section -->
<script type="text/javascript">
checkDates = function(date) {
formatted = date.format('DD.MM.YYYY');
reservationDays = {{ reservationDays|json_encode|raw }}
return reservationDays.indexOf(formatted) > -1;
};
checkCustom = function(date) {
customDays = {{ classByDays|json_encode|raw }};
formatted = date.format('DD.MM.YYYY');
if(customDays[formatted] != undefined){
return customDays[formatted];
}
};
$(document).ready(function() {
var currentDate = moment().format("DD.MM.YYYY");
var startDate = $('#appbundle_feworeservation_fromDate').val();
var endDate = $('#appbundle_feworeservation_toDate').val();
var maxDate = "{{ lastSeason.toDate|date('d-m-y') }}";
$('#appbundle_feworeservation_fromDate, #appbundle_feworeservation_toDate').daterangepicker({
isInvalidDate: checkDates,
isCustomDate: checkCustom,
"minDate": moment(),
"maxDate": maxDate,
"timePickerSeconds": true,
"locale": {
"format": "DD.MM.YYYY",
"separator": " - ",
"applyLabel": "OK",
"cancelLabel": "X",
"fromLabel": "Von",
"toLabel": "Bis",
"customRangeLabel": "Custom",
"weekLabel": "W",
"daysOfWeek": [
"So",
"Mo",
"Di",
"Mi",
"Do",
"Fr",
"Sa"
],
"monthNames": [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
],
"firstDay": 1
},
autoApply: true,
autoUpdateInput: false,
"startDate": startDate,
"endDate": endDate,
}, function(start, end, label) {
console.log(start);
// console.log("New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')");
// Lets update the fields manually this event fires on selection of range
var selectedStartDate = start.format('DD.MM.YYYY'); // selected start
var selectedEndDate = end.format('DD.MM.YYYY'); // selected end
$checkinInput = $('#appbundle_feworeservation_fromDate');
$checkoutInput = $('#appbundle_feworeservation_toDate');
// Updating Fields with selected dates
$checkinInput.val(selectedStartDate);
$checkoutInput.val(selectedEndDate);
// Setting the Selection of dates on calender on CHECKOUT FIELD (To get this it must be binded by Ids not Calss)
var checkOutPicker = $checkoutInput.data('daterangepicker');
checkOutPicker.setStartDate(selectedStartDate);
checkOutPicker.setEndDate(selectedEndDate);
// Setting the Selection of dates on calender on CHECKIN FIELD (To get this it must be binded by Ids not Calss)
var checkInPicker = $checkinInput.data('daterangepicker');
checkInPicker.setStartDate(selectedStartDate);
checkInPicker.setEndDate(selectedEndDate);
});
$('#appbundle_feworeservation_fromDate, #appbundle_feworeservation_toDate').on('show.daterangepicker', function(ev, picker) {
console.log(picker.startDate.format('YYYY-MM-DD'));
console.log(picker.endDate.format('YYYY-MM-DD'));
});
});
</script>
{% endblock body %}

View file

@ -0,0 +1,184 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Neue Reservierung anlegen für {{ lodging.name }}</h1>
<h3>Reservierung</h3>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.lodging, {label: 'Objekt'}) }}
<div class="form-group">
<label class="st-required control-label required">Datum</label>
<div class="input-daterange input-group" id="date-range">
{{ form_widget(form.fromDate) }}
<span class="input-group-addon bg-info b-0 text-white">bis</span>
{{ form_widget(form.toDate) }}
</div>
</div>
{{ form_row(form.status, {label: 'Status'}) }}
{#{{ form_row(form.type, {label: 'Typ'}) }}#}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/lodgings/{{ lodging.id }}"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
<hr>
<h3>Mögliche Saisons</h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Von</th>
<th>Bis</th>
<th>Preis pro Nacht</th>
<th>Service-Gebühr</th>
<th>Mindestbelegung</th>
</tr>
</thead>
<tbody>
{% for lodgingPrice in lodging.prices %}
{% if lodgingPrice.season is not empty %}
<tr>
<td>{{ lodgingPrice.season.name }}</td>
<td>{{ lodgingPrice.season.fromDate|date('d-m-y') }}</td>
<td>{{ lodgingPrice.season.toDate|date('d-m-y') }}</td>
<td>{{ lodgingPrice.perNight }}</td>
<td>{{ lodgingPrice.flatPrice }}</td>
<td>{{ lodgingPrice.season.minimumStay }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</section><!-- end section -->
<script type="text/javascript">
checkDates = function(date) {
formatted = date.format('DD.MM.YYYY');
reservationDays = {{ reservationDays|json_encode|raw }}
return reservationDays.indexOf(formatted) > -1;
};
checkCustom = function(date) {
customDays = {{ classByDays|json_encode|raw }};
formatted = date.format('DD.MM.YYYY');
if(customDays[formatted] != undefined){
return customDays[formatted];
}
};
$(document).ready(function() {
var currentDate = moment().format("DD.MM.YYYY");
var startDate = $('#appbundle_feworeservation_fromDate').val();
var endDate = $('#appbundle_feworeservation_toDate').val();
var maxDate = "{{ lastSeason.toDate|date('d-m-y') }}";
$('#appbundle_feworeservation_fromDate, #appbundle_feworeservation_toDate').daterangepicker({
isInvalidDate: checkDates,
isCustomDate: checkCustom,
"minDate": moment(),
"maxDate": maxDate,
"timePickerSeconds": true,
"locale": {
"format": "DD.MM.YYYY",
"separator": " - ",
"applyLabel": "OK",
"cancelLabel": "X",
"fromLabel": "Von",
"toLabel": "Bis",
"customRangeLabel": "Custom",
"weekLabel": "W",
"daysOfWeek": [
"So",
"Mo",
"Di",
"Mi",
"Do",
"Fr",
"Sa"
],
"monthNames": [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
],
"firstDay": 1
},
autoApply: true,
autoUpdateInput: false,
"startDate": startDate,
"endDate": endDate,
}, function(start, end, label) {
console.log(start);
// console.log("New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')");
// Lets update the fields manually this event fires on selection of range
var selectedStartDate = start.format('DD.MM.YYYY'); // selected start
var selectedEndDate = end.format('DD.MM.YYYY'); // selected end
$checkinInput = $('#appbundle_feworeservation_fromDate');
$checkoutInput = $('#appbundle_feworeservation_toDate');
// Updating Fields with selected dates
$checkinInput.val(selectedStartDate);
$checkoutInput.val(selectedEndDate);
// Setting the Selection of dates on calender on CHECKOUT FIELD (To get this it must be binded by Ids not Calss)
var checkOutPicker = $checkoutInput.data('daterangepicker');
checkOutPicker.setStartDate(selectedStartDate);
checkOutPicker.setEndDate(selectedEndDate);
// Setting the Selection of dates on calender on CHECKIN FIELD (To get this it must be binded by Ids not Calss)
var checkInPicker = $checkinInput.data('daterangepicker');
checkInPicker.setStartDate(selectedStartDate);
checkInPicker.setEndDate(selectedEndDate);
});
$('#appbundle_feworeservation_fromDate, #appbundle_feworeservation_toDate').on('show.daterangepicker', function(ev, picker) {
console.log(picker.startDate.format('YYYY-MM-DD'));
console.log(picker.endDate.format('YYYY-MM-DD'));
});
});
</script>
{% endblock body %}

View file

@ -0,0 +1,66 @@
{% extends 'admin.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Saisons</h1>
<div class="table-responsive" id="no-more-tables">
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Von</th>
<th>Bis</th>
<th>Mindestbelegung in Nächte</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
{% if seasons is not empty %}
{% for season in seasons %}
<tr>
<td>{{ season.name }}</td>
<td>{{ season.fromDate|date('d.m.y') }}</td>
<td>{{ season.toDate|date('d.m.y') }}</td>
<td>{{ season.minimumStay }}</td>
<td>
<a href="{{ '/admin/fewo/seasons/' ~ season.id }}"
class="btn btn-primary"
rel="nofollow"
>
Bearbeiten
</a>
</td>
<td>
<a href="{{ '/admin/fewo/seasons/' ~ season.id ~ '/delete' }}"
class="btn btn-primary"
rel="nofollow"
>
Löschen
</a>
</td>
</tr>
{% endfor %}
{% else %}
<h2>Keine Saisons verfügbar</h2>
{% endif %}
<tr>
<td>
<a href="/admin/fewo/seasons/new"
class="btn btn-primary"
rel="nofollow"
>
Hinzufügen
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,41 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Saison {{ season.name }} bearbeiten</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.name, {label: 'Name'}) }}
{{ form_row(form.fromDate, {label: 'Von'}) }}
{{ form_row(form.toDate, {label: 'Bis'}) }}
{{ form_row(form.minimumStay, {label: 'Mindestbelegung in Tagen'}) }}
{{ form_row(form.description, {label: 'Beschreibung'}) }}
{{ form_row(form.onlyWeekday, {label: 'Exklusiver Wochentag'}) }}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/seasons"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,42 @@
{% extends 'admin.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Neue Saison anlegen</h1>
<form class="st-booking-form" method="post">
{{ form_errors(form) }}
<div id="message"></div>
<div class="form-box">
{{ form_row(form.name, {label: 'Name'}) }}
{{ form_row(form.fromDate, {label: 'Von'}) }}
{{ form_row(form.toDate, {label: 'Bis'}) }}
{{ form_row(form.minimumStay, {label: 'Mindestbelegung in Tagen'}) }}
{{ form_row(form.description, {label: 'Beschreibung'}) }}
{{ form_row(form.onlyWeekday, {label: 'Exklusiver Wochentag'}) }}
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="btn btn-primary btn-lg border-radius"
>
Speichern
</button>
</div>
</div><!-- end form-box -->
{{ form_rest(form) }}
</form>
<a href="/admin/fewo/seasons"
class="btn btn-primary"
rel="nofollow"
>
Zurück
</a>
</div>
</section><!-- end section -->
{% endblock body %}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,183 @@
<header class="header fixedheader setbg sticky">
<div class="topbar">
<div class="container-fluid">
<div class="pull-right">
<ul class="topbar-drops list-inline">
<li class="nohover visible-xs visible-sm"> {{ getContextBySlug('uhrzeit-header') }} Uhr
</li>
<li class="nohover"><i class="fa fa-phone"></i> {{ getContextBySlug('telefon-header') }}</li>
<li>
<a href="/kontakt" title="Kontakt"><i class="fa fa-envelope"></i> <span class="hidden-xs">Kontakt</span></a>
</li>
<li>
<a href="/ueber-uns" title="Über uns">
<i class="fa fa-users"></i> <span class="hidden-xs">Über uns</span>
</a>
</li>
</ul>
</div>
</div><!-- end container -->
</div><!-- end topbar -->
<div class="menu-container">
<div class="container-fluid">
<div class="menu-wrapper">
<nav id="navigation" class="navbar" role="navigation" itemscope
itemtype="https://schema.org/SiteNavigationElement">
<div class="navbar-inner">
<div id="navbar-collapse" class="navbar-left navbar-collapse collapse clearfix">
<ul class="nav navbar-nav">
<li itemprop="name">
<a href="/" title="Kulturreisen" itemprop="">Kulturreisen</a>
</li>
<li itemprop="name">
<a href="/ferienwohnungen" title="Usedom Ferienwohnungen" itemprop="">
Usedom Ferienwohnungen
</a>
</li>
<li class="dropdown openClick" itemprop="name"><a itemprop="url" href="#" title=""
class="dropdown-toggle"
data-toggle="dropdown"><i
class="icon-menu27"></i></a>
<ul class="dropdown-menu" role="menu">
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/jugendreisen" title="Jugendreisen">
Jugendreisen
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reiseversicherung" title="Reiseversicherung">
Reiseversicherung
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisefuehrer" title="Reiseführer">
Reiseführer
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisemagazin" title="Reisemagazin">
Reisemagazin
</a>
</li>
</ul>
</li>
</ul><!-- end navbar-left -->
</div><!-- end navbar-callopse -->
<div class="navbar-header">
<button class="btn btn-mobile" data-toggle="collapse" data-target=".nav-main-collapse"
aria-label="Toggle navigation">
<i class="icon-menu27"></i> <span style="display: none">Menu</span>
</button>
<div id="brand" class="navbar-brand">
<a href="/"><img src="{{ asset('images/wlogo.png') }}" alt="Stern Tours"></a>
</div>
</div><!-- end navbar-header -->
<div id="navbar-collapse_1" class="navbar-right">
<div class="navbar-times visible-md visible-lg hidden-xs hidden-sm">
<span style="float:left; margin-top: 30pt; margin-right: 5pt; color: #e5aa30; font-size: 18px">E-Mail: <a
href="mailto:stern@sterntours.de" style="font-size: 18px; color: #777777">stern@sterntours.de</a></span>
<i class="fa fa-phone "></i>
<span>{{ getContextBySlug('uhrzeit-header')|replace({'|': "Uhr<br>"})|raw }} Uhr</span>
</div>
</div><!-- end navbar-callopse -->
</div><!-- end navbar-inner -->
<div class="clearfix"></div>
<hr class="hidden-xs">
<div id="header" class="sticky clearfix">
<!-- TOP NAV -->
<header id="topNav">
<div class="container-fluid">
<div class="navbar-collapse nav-main-collapse collapse submenu-dark">
<nav class="nav-main">
<ul id="topMain" class="nav nav-pills nav-main">
<li role="menuitem" itemprop="name" class="hidden visible-xs">
<a href="/" title="Usedom Ferienwohnungen" itemprop="">
Kulturreisen
</a>
</li>
<li role="menuitem" itemprop="name" class="hidden visible-xs">
<a href="/ferienwohnungen" title="Usedom Ferienwohnungen" itemprop="">
Usedom Ferienwohnungen
</a>
</li>
{% for nav_page in nav_pages if nav_page.country is not empty %}
{# @var nav_page \AppBundle\Entity\Page #}
<li class="dropdown">
<a class="dropdown-toggle" href="{{ nav_page.urlPath }}"
title="{{ nav_page.title }}">
{{ nav_page.title|replace({'Reisen': ''}) }} Reisen
</a>
<ul class="dropdown-menu">
<li class="first" role="menuitem" itemprop="name">
<a itemprop="url" href="{{ nav_page.urlPath }}"
title="{{ nav_page.title }}">
{{ nav_page.title }}
</a>
</li>
{% for childnav_page in nav_page.children %}
{# @var childnav_page \AppBundle\Entity\Page #}
<li role="menuitem" itemprop="name">
<a itemprop="url" href="{{ childnav_page.urlPath }}"
title="{{ childnav_page.title }}"
>
{{ childnav_page.title }}
</a>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
<li role="menuitem" itemprop="name" class="hidden visible-xs">
<a itemprop="url" href="/jugendreisen" title="Jugendreisen">
Jugendreisen
</a>
</li>
<li class="dropdown hidden visible-xs">
<a class="dropdown-toggle" href="#" title="Reiseninformationen">
Reiseninformationen
</a>
<ul class="dropdown-menu">
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reiseversicherung"
title="Reiseversicherung">
Reiseversicherung
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisefuehrer" title="Reiseführer">
Reiseführer
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisemagazin" title="Reisemagazin">
Reisemagazin
</a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</header>
<!-- /Top Nav -->
</div>
</nav><!-- end navigation -->
</div><!-- menu wrapper -->
</div><!-- end container -->
</div><!-- end menu-container -->
</header><!-- end header -->

View file

@ -0,0 +1,131 @@
<header class="header fixedheader setbg sticky">
<div class="topbar">
<div class="container">
<div class="pull-right">
<ul class="topbar-drops list-inline">
<li class="nohover"><i class="fa fa-phone"></i> 030 - 700 94 100</li>
<li>
<a href="/kontakt" title=""><i class="fa fa-envelope"></i> <span class="hidden-xs">Kontakt</span></a>
</li>
<li>
<a href="javascript:void(window.open('/server/chat.php','','width=590,height=610,left=0,top=0,resizable=yes,menubar=no,location=no,status=yes,scrollbars=yes'))"
title="Chat-Fenster öffnen"
>
<i class="fa fa-comments"></i> <span class="hidden-xs">Chat</span>
</a>
</li>
<li>
<a href="/ueber-uns" title="Über uns">
<i class="fa fa-users"></i> <span class="hidden-xs">Über uns</span>
</a>
</li>
</ul>
</div>
</div><!-- end container -->
</div><!-- end topbar -->
<div class="menu-container">
<div class="container">
<div class="menu-wrapper">
<nav id="navigation" class="navbar" role="navigation" itemscope itemtype="https://schema.org/SiteNavigationElement">
<div class="navbar-inner">
<div id="navbar-collapse" class="navbar-left navbar-collapse collapse clearfix">
<ul class="nav navbar-nav">
<li itemprop="name">
<a href="/" title="Kulturreisen" itemprop="">Kulturreisen</a>
</li>
<li itemprop="name">
<a href="/ferienwohnungen" title="Usedom Ferienwohnungen" itemprop="">
Usedom Ferienwohnungen
</a>
</li>
<li class="dropdown openClick" itemprop="name"><a itemprop="url" href="#" title="" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-menu27"></i></a>
<ul class="dropdown-menu" role="menu">
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/jugendreisen" title="Jugendreisen">
Jugendreisen
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reiseversicherung" title="Reiseversicherung">
Reiseversicherung
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisefuehrer" title="Reiseführer">
Reiseführer
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisemagazin" title="Reisemagazin">
Reisemagazin
</a>
</li>
</ul>
</li>
</ul><!-- end navbar-left -->
</div><!-- end navbar-callopse -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<i class="icon-menu27"></i>
</button>
<div id="brand" class="navbar-brand">
<a href="/"><img src="{{ asset('images/wlogo.png') }}" alt="Stern Tours"></a>
</div>
</div><!-- end navbar-header -->
<div id="navbar-collapse_1" class="navbar-right">
<div class="navbar-times hidden-xs">
<span style="float:left; margin-top: 30pt; margin-right: 5pt; color: #e5aa30; font-size: 18px">E-Mail: <a href="mailto:stern@sterntours.de" style="font-size: 18px; color: #777777" >stern@sterntours.de</a></span>
<i class="fa fa-phone "></i>
<span>Mo-Fr: 09:00 - 22:00 Uhr<br>Sa: 10:00 - 22:00 Uhr<br>So: 11:00 - 22:00 Uhr</span>
</div>
</div><!-- end navbar-callopse -->
</div><!-- end navbar-inner -->
<div class="clearfix"></div>
<hr>
<div class="navbar-subnavi">
<div id="navbar-collapse_2" class="navbar-left navbar-collapse collapse clearfix subnavi">
<ul class="nav navbar-nav">
{% for nav_page in nav_pages if nav_page.country is not empty %}
{# @var nav_page \AppBundle\Entity\Page #}
<li class="dropdown nav-first-li" itemprop="name">
<a href="{{ nav_page.urlPath }}" title="{{ nav_page.title }}"
class="dropdown-toggle nav-first-a" data-toggle="dropdown"
>
{{ nav_page.title|replace({'Reisen': ''}) }}<span class="hidden-md hidden-sm">Reisen</span>
</a>
<ul class="dropdown-menu" role="menu">
<li class="first" role="menuitem" itemprop="name">
<a itemprop="url" href="{{ nav_page.urlPath }}" title="{{ nav_page.title }}">
{{ nav_page.title }}
</a>
</li>
{% for childnav_page in nav_page.children %}
{# @var childnav_page \AppBundle\Entity\Page #}
<li role="menuitem" itemprop="name">
<a itemprop="url" href="{{ childnav_page.urlPath }}"
title="{{ childnav_page.title }}"
>
{{ childnav_page.title }}
</a>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul><!-- end navbar-right -->
</div><!-- end navbar-callopse -->
</div>
</nav><!-- end navigation -->
</div><!-- menu wrapper -->
</div><!-- end container -->
</div><!-- end menu-container -->
</header><!-- end header -->

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,78 @@
{% if(isPossible) %}
<table class="st-booking-table">
<tbody>
<tr>
<td class="st-position-price-col">
Datum:
</td>
<td class="st-position-name-col">
{{ fewo_booking_request.fromDate|date }} - {{ fewo_booking_request.toDate|date }}
</td>
</tr>
<tr>
<td colspan="2"><hr style="margin-top: 0; margin-bottom: 0"></td>
</tr>
{% for season, values in priceResult.season %}
<tr>
<td class="st-position-price-col">
Saison:
</td>
<td class="st-position-name-col">
{{ season }}
</td>
</tr>
<tr>
<td class="st-position-price-col">
Mindestbelegung:
</td>
<td class="st-position-name-col">
{{ values.minimumStay }} {{ values.minimumStay < 2 ? 'Nacht' : 'Nächte' }}
</td>
</tr>
<tr>
<td class="st-position-price-col">
+ {{ values.price|number_format(2) }}
</td>
<td class="st-position-name-col">
{{ values.numberDays }} {{ values.numberDays < 2 ? 'Nacht' : 'Nächte' }} x {{ values.perNight|number_format(2) }}
</td>
</tr>
<tr>
<td colspan="2"><hr style="margin-top: 0; margin-bottom: 0"></td>
</tr>
{% endfor %}
<tr>
<td class="st-position-price-col">
+ {{ priceResult.flatPrice|number_format(2) }}
</td>
<td class="st-position-name-col">
Service-Gebühr
</td>
</tr>
<tr>
<td class="st-position-price-col">
+ {{ priceResult.deposit|number_format(2) }}
</td>
<td class="st-position-name-col">
Kaution
</td>
</tr>
<tr class="st-total-tr">
<td class="st-position-price-col">
<span class="st-total-price">= {{ priceResult.total_price|number_format(2) }} €</span>
</td>
<td class="st-position-name-col">Miete inkl. Kaution</td>
</tr>
</tbody>
</table>
{% else %}
Leider ist der gewünschter Zeitraum ist nicht buchbar.<br>
Bitte ändern Sie das Datum, rote Felder sind bereits gebucht.
{% endif %}

View file

@ -0,0 +1,93 @@
{# @var insurance \AppBundle\Entity\TravelInsurance #}
<style>
.c1.c1b li:before {
top:-20px;
}
</style>
<div class="radio">
{{ form_widget(form) }}
<label for="{{ form.vars.id }}">
{{ insurance.name }}
(<a href="#" data-toggle="modal" data-target="#st-insurance-{{ insurance.id }}-modal">Preisdetails</a>)
</label>
<div class="accordion-toggle-2">
<div class="panel-group booking_insurance_toogle" id="accordion_in_{{ form.vars.id }}" style="margin-left: 5px;margin-top: 5px;">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion_in_{{ form.vars.id }}" href="#collapse_in_{{ form.vars.id }}" aria-expanded="false">
<h5 style="font-size: 0.9em;font-weight: 600;"><span>Leistungen einblenden</span><i class="indicator pull-right icon-plus"></i></h5>
</a>
<div id="collapse_in_{{ form.vars.id }}" class="panel-collapse collapse" aria-expanded="false" style="height: 0px;">
<div class="panel-body">
{% if insurance.insuranceName != "" %}
<p><strong>Versicherung:</strong> {{ insurance.insuranceName }} </p>
{% endif %}
<ul class="c1 c1b">
{% if insurance.text != "" %}
{% for textli in insurance.text|split('\n') %}
<li>{{ textli|raw }}</li>
{% endfor %}
{% endif %}
</ul>
{% if insurance.insurancePdf != "" %}
<br>
<p><a href="/_uploads/{{ insurance.insurancePdf }} " target="_blank"> Informationsblatt zur Versicherung <i class="fa fa-file-pdf-o"></i></a> </p>
{% endif %}
</div>
</div>
</div>
</div>
{% embed 'default/components/embed/modal.html.twig' with {
id: 'insurance-' ~ insurance.id,
title: insurance.name
} %}
{% block body %}
<h3>Leistungen & Preisliste</h3>
{#
<ul class="c1 c1b">
{% for item in insurance.included|split('\n') %}
<li>{{ item }}</li>
{% endfor %}
</ul>
#}
<table class="table">
<thead>
<tr>
<td>Reisepreis bis</td>
<td>je Person (bis 65 Jahren)</td>
<td>je Person (ab 66 Jahren)</td>
</tr>
</thead>
<tbody>
{% for insurance_price in insurance.prices %}
<tr>
<td>{{ insurance_price.border|number_format(2) }} €</td>
<td>
{% if insurance_price.price > 0 %}
{{ insurance_price.price|number_format(2) }}
{% elseif insurance_price.percent > 0 %}
{{ insurance_price.percent|number_format }} % vom Reisepreis
{% endif %}
</td>
<td>
{% if insurance_price.priceOld > 0 %}
{{ insurance_price.priceOld|number_format(2) }}
{% elseif insurance_price.percentOld > 0 %}
{{ insurance_price.percentOld|number_format }} % vom Reisepreis
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% endembed %}
</div>

View file

@ -0,0 +1,45 @@
<table class="st-booking-table">
<tbody>
{% for summary_entry in summary %}
<tr>
<td class="st-position-price-col" style="min-width: 120px;">
{% if(summary_entry.value != "!") %}
{{ summary_entry.value|number_format(2) }}
{% endif %}
</td>
<td class="st-position-name-col">
{{ summary_entry.label|raw }}
</td>
</tr>
{% endfor %}
<tr class="st-total-tr">
<td class="st-position-price-col" style="min-width: 120px;">
<span class="st-total-price">= {{ total_price|number_format(2) }} €</span>
</td>
<td class="st-position-name-col">Gesamtpreis der Reise</td>
</tr>
<tr class="">
<td class="st-position-price-col" style="min-width: 120px;">
<span class="st-deposit-price">{{ booking_price_info.deposit_total|number_format(2) }} €</span>
</td>
<td class="st-position-name-col">Anzahlung (ist sofort fällig)</td>
</tr>
{% if( booking_price_info.totalInsurance > 0) %}
<tr class="">
<td class="st-position-price-col" style="min-width: 120px;">
<span class="st-deposit-price">{{ booking_price_info.totalInsurance|number_format(2) }} €</span>
</td>
<td class="st-position-name-col">Versicherung (ist sofort fällig)</td>
</tr>
{% endif %}
<tr class="">
<td class="st-position-price-col" style="min-width: 120px;">
<span class="st-final-price">{{ booking_price_info.final_payment|number_format(2) }} €</span>
</td>
<td class="st-position-name-col">Restzahlung ({{ booking_price_info.final_payment_date_str}})</td>
</tr>
</tbody>
</table>

View file

@ -0,0 +1,19 @@
{# @var travelOption \AppBundle\Entity\TravelOption #}
<div class="checkbox">
{{ form_widget(travelOptionForm) }}
<label for="{{ travelOptionForm.vars.id }}">
{{ travelOption.name }} (p.P {{ travelOption.price|number_format(2) }} €)
{% if travelOption.description is not empty %}
<br class="visible-xs">
(<a href="#" data-toggle="modal" data-target="#st-booking-option-{{ travelOption.id }}-modal">Details</a>)
{% endif %}
</label>
{% if travelOption.description is not empty %}
{% embed "default/components/embed/modal.html.twig" with {
'title': travelOption.name,
'id': 'booking-option-' ~ travelOption.id
} %}
{% block body %}{{ travelOption.description|raw }}{% endblock %}
{% endembed %}
{% endif %}
</div>

View file

@ -0,0 +1,20 @@
{% if breadcrumb_entries is not empty %}
<div class="breadcrumb-holder">
<ol class="breadcrumb" itemprop="breadcrumb" itemscope="" itemtype="http://schema.org/BreadcrumbList">
<li itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<a class="on" itemprop="item" title="STERN TOURS" href="{{ app.request.getSchemeAndHttpHost() }}">
<span itemprop="name">STERN TOURS</span></a>
<meta itemprop="position" content="1">
</li>
{% for breadcrumb_entry in breadcrumb_entries %}
{# @var breadcrumb_entry \AppBundle\Entity\BreadcrumbEntry #}
<li itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<a itemprop="item" title="{{ breadcrumb_entry.title }}" href="{{ app.request.getSchemeAndHttpHost() }}{{ breadcrumb_entry.url }}">
<span itemprop="name">{{ breadcrumb_entry.title }}</span>
</a>
<meta itemprop="position" content="{{ loop.index0 + 2 }}">
</li>
{% endfor %}
</ol>
</div>
{% endif %}

View file

@ -0,0 +1,57 @@
<div class="modal fade" tabindex="-1" role="dialog" id="st-departures-modal-{{ id }}">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true"><i class="fa fa-times"></i></span>
</button>
<h4 class="modal-title text-left">Abflugorte / Zuschläge</h4>
</div>
<div class="modal-body">
<table class="table table-modal">
<thead>
<tr>
<th style="text-align: left; width: 80%">Ort</th>
<th style="width: 20%">Zu-/Abschlag</th>
</tr>
</thead>
<tbody>
{% for departure in departures %}
{# @var departure \AppBundle\Entity\TravelDeparturePoint #}
<tr>
<td style="text-align: left">
{% if departure.flightTime is defined %}
{% if departure.flightTime.startWeekday is defined %}
{% if departure.flightTime[startWeekday] != "" %}
<a href="#" data-toggle="collapse" data-target="#flight_{{ travelName }}_{{ departure.id }}" class="pull-right collapsed">Flugzeiten <i class="fa fa-plus"></i></a>
{% endif %}
{% endif %}
<h4>{{ departure.name }}</h4>
{% if departure.flightTime.startWeekday is defined %}
<div class="collapse" id="flight_{{ travelName }}_{{ departure.id }}" style="">
{% for flightTime in departure.flightTime[startWeekday]|split('\n') %}
{% if flightTime != "" %}
{{ flightTime|raw }}<br>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endif %}
</td>
<td>{{ departure.extraCharge|number_format(2) }} €</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">schließen</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
{% for departure in travel_date.departures %}
{# @var departure \AppBundle\Entity\TravelDeparturePoint #}
{% endfor %}

View file

@ -0,0 +1,23 @@
<style>
.modal-content .wrapper-nav-tabs {
display: none;
}
</style>
<div class="modal fade" tabindex="-1" role="dialog" id="st-{{ id }}-modal">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">{{ title ?? '' }}</h4>
</div>
<div class="modal-body">
{% block body %}{% endblock %}
</div>
<div class="modal-footer">
{% block footer %}
<button type="button" class="btn btn-default" data-dismiss="modal">schließen</button>
{% endblock %}
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->

View file

@ -0,0 +1,204 @@
<!--<footer class="clearfix">
<div class="container">
<div class="row">
<div class="col-md-5 col-sm-12 col-xs-12">
<div class="info-text">
<i class="fa fa-phone"></i>
<p class="text">
{{ getContextBySlug('telefon-header') }}
<span class="small"> {{ getContextBySlug('uhrzeit-header')|replace({'|': " • "})|raw }} Uhr</span>
</p>
</div>
</div>
<div class="col-md-4 col-sm-12 col-xs-12 text-center">
<a href="/kontakt" title=""><i class="fa fa-envelope"></i> Kontaktformular</a>
</div>
<div class="col-md-3 col-sm-12 col-xs-12">
<div class="social-footer text-right">
<a href="/ueber-uns" title="Über uns"><i class="fa fa-users"></i></a>
</div>
</div>
</div>
</div>
</footer>-->
<style>
/* Info Bar */
.info-bar {
margin:0;
border:0;
padding:10px 0;
display: block;
background-color: rgba(80, 80, 80, 0.1);
border-top: rgba(0,0,0,0.05) 1px solid;
color: #777;
}
.info-bar div.row>div {
padding-top:20px;
padding-bottom:20px;
margin:0 !important;
border-right:rgba(0,0,0,0.1) 1px solid;
}
.info-bar div.row>div:last-child {
border:0;
}
.info-bar div.row>div i {
font-size:34px;
line-height: 1.2;
margin-right:10px;
float:left;
}
.info-bar h1,
.info-bar h2,
.info-bar h3,
.info-bar h4,
.info-bar h5,
.info-bar h6,
.info-bar p {
font-size:18px;
line-height:1.5;
font-weight: 600;
margin:0;
padding:0;
border-bottom: none;
}
.info-bar p {
font-size: 12px;
line-height:1;
}
.info-bar.info-bar-color div.row>div {
border-right-color:rgba(0,0,0,0.1);
}
/* bordered */
.info-bar.info-bar-bordered {
margin:30px 0;
border: rgba(0,0,0,0.1) 1px solid;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.info-bar.info-bar-bordered div.row>div {
padding-top:15px;
padding-bottom:15px;
}
.footer p.hl4 {
text-transform: none;
}
.footer p {
font-size: 90%;
line-height: 1.3em;
}
.footer .left-img {
max-width: 180px;
}
.footer .c4 li {
margin: 10px 15px;
font-size: 15px;
}
.text-success {
color:#648859;
}
</style>
<section class="info-bar">
<div class="container">
<div class="row">
<div class="col-md-3 col-sm-6">
<i class="fa fa-phone-square text-success"></i>
<h3><a href="tel:030 - 700 94 100">030 - 700 94 100</a></h3>
<p>{% if(content.available.phone.active) %}
<span class="text-success">erreichbar</span>
{% else %}
erreichbar
{% endif %}
{{ content.available.phone.content }}</p>
</div>
<div class="col-md-3 col-sm-6">
<i class="fa fa-envelope text-success"></i>
<h3><a href="mailto:stern@sterntours.de">stern@sterntours.de</a></h3>
<p>schreiben Sie uns jederzeit</p>
</div>
<div class="col-md-3 col-sm-6">
<i class="fa fa-envelope-open text-success"></i>
<h3><a href="/kontakt">Kontaktformular</a></h3>
<p>oder nutzen Sie einfach unser:</p>
</div>
<div class="col-md-3 col-sm-6">
<i class="fa fa-users text-success"></i>
<h3><a href="/ueber-uns" title="Über uns">Über uns</a></h3>
<p>Erfahren Sie mehr über unser Reisebüro.</p>
</div>
</div>
</div>
</section>
<footer class="footer clearfix">
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-6 col-xs-12">
<p class="hl4">Ihre Vorteile bei STERN TOURS</p>
<p>Unsere Produktauswahl ist vielfältig. Neben dem Pauschaltourismus und Jugendreisen sind wir auf individuelle Kulturreisen spezialisiert.</p>
<img class="left-img lozad" src="{{ asset('/images/dummy.png') }}" data-src="{{ asset('/images/STERN_22-Jahre.png') }}" alt="Stern Tours 20 Jahre">
<ul class="c4">
<li>Spezialist seit 1998</li>
<li>Top Service</li>
<li>Riesen Auswahl</li>
<li>Individuelle Beratung</li>
</ul>
</div><!-- end col -->
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="row">
<div class="col-md-6" style="margin-bottom: 1rem;">
<p class="hl4">Reiseversicherung</p>
{% image '@AppBundle/Resources/public/images/logos/rundv.png' %}
<img class="img-responsive lozad" src="{{ asset('/images/dummy.png') }}" data-src="{{ asset_url }}" alt="R + V">
{% endimage %}
</div>
<div class="col-md-6">
<p class="hl4">Sicherheit</p>
{% image '@AppBundle/Resources/public/images/logos/ssl.png' %}
<img class="left-img lozad" src="{{ asset('/images/dummy.png') }}" data-src="{{ asset_url }}" alt="SSL" style="margin-top: 0.3rem;">
{% endimage %}
</div>
</div>
</div>
</div>
<div class="clearfix padding-bottom"></div>
</div><!-- end container -->
</footer><!-- end copyrights -->
<div class="copyrights clearfix" style="padding-bottom:270px;">
<div class="container">
<div class="row">
<div class="col-md-4 text-left">
<p>STERN TOURS © {{ 'now'|date('Y') }}</p>
</div><!-- end col -->
<div class="col-md-8 text-right">
<div class="link-footer">
<a href="/impressum" title="Impressum">Impressum</a> |
<a href="/arb" title="ARB">ARB</a> |
<a href="/datenschutz" title="Datenschutzerklärung">Datenschutzerklärung</a> |
<a href="/bildnachweis" title="Bildnachweise">Bildnachweise</a> |
<a href="/sitemap" title="Sitemap">Sitemap</a>
</div><!-- end social-footer -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end container -->
</div><!-- end copyrights -->

View file

@ -0,0 +1,316 @@
<style>
#header {
margin-bottom: 0px;
}
#topNav div.nav-main-collapse {
margin-bottom: -10px;
padding-bottom: 10px;
}
#topNav {
margin-bottom: 0px;
}
.nav-main-collapse-bottom {
}
</style>
<div id="topBar" class="">
<div class="container-fluid">
<!-- left -->
{% if content.info.office_important_note_active == 1 %}
<ul class="top-links block">
<li class="icon">
<a class="dropdown-toggle no-text-underline" data-toggle="dropdown" data-hover="dropdown" href="#"><i class="fa fa-info"></i></a>
<div class="dropdown-menu dropdown-menu-left dropdown-menu-infos">
<div class="dropdown-menu-header">
<span><i class="fa fa-info"></i> aktuelle Infos</span>
</div>
<div class="dropdown-menu-body">
{{ content.info.office_important_note }}
</div>
</div>
</li>
<li style="overflow: hidden;width: 100%;">
<div id="marquee" class="marquee"><span> {{ content.info.office_important_note }}</span></div>
</li>
</ul>
{% endif %}
<ul class="top-links block wrap" id="topNavAccordion">
<li>
<a class="dropdown-toggle no-text-underline collapsed" data-toggle="collapse" href="#collapseTopLocal" role="button" aria-expanded="false" aria-controls="collapseTopLocal">
<i class="fa fa-clock-o"></i> Reisebüro
{% if(content.available.local.active) %}
<span class="text-success">geöffnet</span> &bull;
{% else %}
<span class="text-danger">geschlossen</span> &bull;
{% endif %}
{{ content.available.local.content }}
<i class="fa fa-caret-collapse"></i>
</a>
<div class="dropdown-menu-infos collapse" id="collapseTopLocal">
<div class="dropdown-menu-body">
<div class="badge badge-default btn-block">
{% if(content.available.local.active) %}
<span class="text-success"><i class="fa fa-check-circle fa-lg"></i></span> Unsere Büro ist aktuell geöffnet.
{% else %}
<span class="text-danger"><i class="fa fa-times-circle fa-lg"></i></span> Unsere Büro ist aktuell geschlossen.
{% endif %}
</div>
<table class="table table-condensed table-vertical-middle">
{% for key, val in local %}
<tr>
<td class="text-left" style="width: 50%">{{ val.day }} <span class="text-muted pull-right"> {{ val.date }}</span></td>
{% if val.active == 0 %}
<td colspan="3">geschlossen</td>
{% else %}
<td>{{ val.from }}</td><td>-</td><td>{{ val.to }}</td>
{% endif %}
</tr>
{% endfor %}
</table>
</div>
</div>
</li>
<li>
<a class="dropdown-toggle no-text-underline collapsed" data-toggle="collapse" href="#collapseTopPhone" role="button" aria-expanded="false" aria-controls="collapseTopPhone">
<i class="fa fa-phone-square"></i> 030 - 700 94 100 &bull;
{% if(content.available.phone.active) %}
<span class="text-success">erreichbar</span>
{% else %}
erreichbar
{% endif %}
{{ content.available.phone.content }}
<i class="fa fa-caret-collapse"></i>
</a>
<!-- ab Montag um 09:00 Uhr -->
<!-- bis xxx Uhr -->
<div class="dropdown-menu-infos collapse" id="collapseTopPhone">
<div class="dropdown-menu-body">
<p><a href="tel:030 - 700 94 100" class="btn btn-secondary btn-sm btn-block text-center"><i class="fa fa-phone-square text-success" ></i> 030 - 700 94 100</a></p>
<hr>
<div class="badge badge-default btn-block">
{% if(content.available.phone.active) %}
<span class="text-success"><i class="fa fa-check-circle fa-lg"></i></span> Wir sind zur Zeit telefonisch zu erreichen.
{% else %}
<span class="text-danger"><i class="fa fa-times-circle fa-lg"></i></span> Wir sind zur Zeit telefonisch nicht zu erreichen.
{% endif %}
</div>
<table class="table table-condensed table-vertical-middle">
{% for key, val in phone %}
<tr>
<td class="text-left" style="width: 50%">{{ val.day }} <span class="text-muted pull-right"> {{ val.date }}</span></td>
{% if val.active == 0 %}
<td colspan="3">geschlossen</td>
{% else %}
<td>{{ val.from }}</td><td>-</td><td>{{ val.to }}</td>
{% endif %}
</tr>
{% endfor %}
</table>
</div>
</div>
</li>
<li>
<a class="dropdown-toggle no-text-underline collapsed" data-toggle="collapse" href="#collapseTopContact" role="button" aria-expanded="false" aria-controls="collapseTopContact"><i class="fa fa-envelope"></i> Kontakt &bull; Formular &bull; Terminvereinbarung <i class="fa fa-caret-collapse"></i></a>
<div class="dropdown-menu-infos collapse" id="collapseTopContact">
<div class="dropdown-menu-body">
{{ content.info.office_appointment | raw }}
</div>
</div>
</li>
</ul>
</div>
</div>
<div id="header" class="sticky clearfix">
<!-- TOP NAV -->
<header id="topNav">
<div class="container-fluid">
<!-- Mobile Menu Button -->
<button class="btn btn-mobile" data-toggle="collapse" data-target=".nav-main-collapse">
<i class="fa fa-bars"></i> Menü
</button>
<!-- Logo -->
<a class="logo" href="/">
<img src="{{ asset('images/wlogo.png') }}" alt="Stern Tours">
</a>
<div class="navbar-collapse nav-main-collapse collapse">
<nav class="nav-main">
<ul class="topMain nav nav-pills nav-main md-pull-left">
<li class=" active"><!-- HOME -->
<a href="/" title="Kulturreisen" itemprop="">
<i class="fa fa-home fa-lg"></i> <span class="hidden-md hidden-lg">Kulturreisen</span>
</a>
</li>
{% for nav_page in nav_pages if nav_page.country is not empty %}
{% if nav_page.showInNavi == 1 %}
{# @var nav_page \AppBundle\Entity\Page #}
<li class="dropdown">
<a class="dropdown-toggle" href="{{ nav_page.urlPath }}">
<i class="fa fa-star"></i> {{ nav_page.title|replace({'Reisen': ''}) }} <span class="hidden-md">Reisen</span>
</a>
<ul class="dropdown-menu">
<li>
<h4><i class="fa fa-star"></i> <a href="{{ nav_page.urlPath }}" title="{{ nav_page.title }}">
{{ nav_page.title|replace({'Reisen': ''}) }} Reisen
</a></h4>
</li>
{% for childnav_page in nav_page.children %}
{# @var childnav_page \AppBundle\Entity\Page #}
{% if(childnav_page.beforeTitle == "Infos") %}
<li>
<h4><i class="fa fa-info-circle"></i> &nbsp;Infos</h4>
</li>
{% endif %}
<li role="menuitem" itemprop="name">
<a itemprop="url" href="{{ childnav_page.urlPath }}" title="{{ childnav_page.title }}">
{{ childnav_page.titleShort }}
</a>
</li>
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
</ul>
<ul class="topMain nav nav-pills nav-main md-pull-right">
<li class="dropdown">
<a class="dropdown-toggle extra-margin-left" href="/ferienwohnungen">
<span class="text-usedom">USEDOM</span> <span class="hidden-md">Ferienwohnungen</span> <span class="hidden-sm hidden-lg hidden-xs">FeWo</span>
</a>
<ul class="dropdown-menu pull-right">
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen" title="Usedom Ferienwohnungen"><i class="isv-fewo"></i> Übersicht </a>
</li>
<li class="divider"></li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo1-strandstr29" title="FeWo 1 Strandstr. 29">
<i class="isv-fewo"></i> FeWo 1 Strandstr. 29
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo2-strandstr29" title="FeWo 2 Strandstr. 29">
<i class="isv-fewo"></i> FeWo 2 Strandstr. 29
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo3-strandstr29" title="FeWo 3 Strandstr. 29">
<i class="isv-fewo"></i> FeWo 3 Strandstr. 29
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo4-strandstr29" title="FeWo 4 Strandstr. 29">
<i class="isv-fewo"></i> FeWo 4 Strandstr. 29
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo1-triftweg10" title="FeWo 1 Triftweg 10">
<i class="isv-fewo"></i> FeWo 1 Triftweg 10
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo2-triftweg10" title="FeWo 2 Triftweg 10">
<i class="isv-fewo"></i> FeWo 2 Triftweg 10
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo3-triftweg10" title="FeWo 3 Triftweg 10">
<i class="isv-fewo"></i> FeWo 3 Triftweg 10
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ferienwohnungen/fewo4-triftweg10" title="FeWo 4 Triftweg 10">
<i class="isv-fewo"></i> FeWo 4 Triftweg 10
</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" href="#">
<i class="fa fa-ellipsis-v fa-lg"></i> <span class="hidden-md hidden-lg">mehr</span>
</a>
<ul class="dropdown-menu pull-right">
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/tuerkei-reisen" title="Türkei Reisen"><i class="fa fa-star"></i> Türkei Reisen </a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/usbekistan-reisen" title="Usbekistan Reisen"><i class="fa fa-star"></i> Usbekistan Reisen </a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/marokko-urlaub" title="Marokko Reisen"><i class="fa fa-star"></i> Marokko Reisen</a>
</li>
<li class="divider"></li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/ueber-uns" title="Über uns"><i class="fa fa-users"></i> Über uns</a>
</li>
<li class="divider"></li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reiseversicherung" title="Reiseversicherung">
<i class="fa fa-shield"></i> Reiseversicherung
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisefuehrer" title="Reiseführer">
<i class="fa fa-flag"></i> Reiseführer
</a>
</li>
<li role="menuitem" itemprop="name">
<a itemprop="url" href="/reisemagazin" title="Reisemagazin">
<i class="fa fa-book"></i> Reisemagazin
</a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</header>
</div>

View file

@ -0,0 +1,130 @@
{% form_theme search_form 'default/form/theme.html.twig' %}
<section class="section fullscreen background start-slider">
<div class="absolute-section">
<div class="container-fluid">
<div class="row">
<div class="col-md-12 col-xs-12">
<div class="home-message text-center">
<div class="home-info-box">
<div id="eKomiSeal_default" class="eKomi-header" style="padding-top: 5px;padding-left: 2px;">
<img class="lozad" border="0" src="{{ asset('images/dummy.png') }}" data-src="/bundles/app/images/logo-qualitaet.png" alt="Top Kundenservice" height="78">
</div>
<ul class="c4">
<li>Spezialist für Kulturreisen </li>
<li>Reiseexperte seit 1998</li>
<li>Beratung für individuelle Reisen</li>
</ul>
</div>
</div><!-- end homemessage -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end container -->
</div>
<div id="myCarousel" class="carousel slide">
<!-- Indicators -->
<!-- Wrapper for Slides -->
<div class="carousel-inner">
<div class="item active">
<!-- Set the first background image using inline CSS below. -->
<div class="fill lozad" style="background-image:url(images/placeholder-image.png)" data-background-image="{{ image('bundles/app/images/travel/slider_aegypten.jpg').cropResize(1024).guess(70) }}"></div>
<noscript>
<div class="fill" style="background-image:url({{ image('bundles/app/images/travel/slider_aegypten.jpg').cropResize(1024).guess(70) }})"></div>
</noscript>
</div>
<div class="item">
<!-- Set the second background image using inline CSS below. -->
<div class="fill lozad" style="background-image:url(images/placeholder-image.png)" data-background-image=" {{ image('bundles/app/images/travel/slider_felsendom.jpg').cropResize(1024).guess(70) }}"></div>
<noscript>
<div class="fill" style="background-image:url({{ image('bundles/app/images/travel/slider_felsendom.jpg').cropResize(1024).guess(70) }})"></div>
</noscript>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. -->
<div class="fill lozad" style="background-image:url(images/placeholder-image.png)" data-background-image="{{ image('bundles/app/images/travel/slider_petra.jpg').cropResize(1024).guess(70) }}"></div>
<noscript>
<div class="fill" style="background-image:url({{ image('bundles/app/images/travel/slider_petra.jpg').cropResize(1024).guess(70) }})"></div>
</noscript>
</div>
</div>
</div>
</section><!-- end section -->
<section class="nopadding">
<div class="container-full absolute">
<div class="container-fluid container-form">
<div class="home-form">
<!-- Nav tabs
Hier bitte die Tabs über Parameter Steuer, wenn JS aus.
Paramter an URL hängen und dann den jeweiligen Tab auf active setzen.
-->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="tab_01">
<form class="bookform form-inline row st-search-form" style="margin-right: -5px; margin-left: -5px;" action="/suche" method="get">
<div class="form-group col-lg-2 col-md-12 col-sm-12 col-xs-12" style="padding-right: 5px;padding-left: 5px;">
<div class="head_tap">KULTURREISEN</div>
</div>
<div class="form-group col-lg-2 col-md-3 col-sm-6 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
{{ form_field_pho(search_form.b, 'Anreise') }}
</div>
<div class="form-group col-lg-2 col-md-3 col-sm-6 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
{{ form_field_pho(search_form.e, 'Abreise') }}
</div>
<div class="form-group col-lg-2 col-md-3 col-sm-6 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
{{ form_field_pho(search_form.c) }}
</div>
<div class="form-group col-lg-2 col-md-3 col-sm-6 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
<label class="sr-only" for="departure">Abfahrtsort</label>
<div class="dropdown form-bottom">
<select id="departure" class="selectpicker" data-style="btn-white" data-dropup-auto="false">
<option>Abfahrtsort beliebig</option>
<option>Basel</option>
<option>Berlin</option>
<option>Berlin Schönefeld</option>
<option>Berlin Tegel</option>
<option>Bonn</option>
<option>Bremen</option>
<option>Dresden</option>
<option>Düsseldorf</option>
<option>Eigenanreise</option>
<option>Erfurt</option>
<option>Frankfurt</option>
<option>Friedrichshafen</option>
<option>Genf</option>
<option>Graz</option>
<option>Hamburg</option>
<option>Hannover</option>
<option>Köln</option>
<option>Leipzig</option>
<option>Linz</option>
<option>München</option>
<option>Nürnberg</option>
<option>Saarbrücken</option>
<option>Salzburg</option>
<option>Stuttgart</option>
<option>Wien</option>
<option>Zürich</option>
</select>
</div>
</div>
<div class="form-group col-lg-2 col-md-12 col-sm-12 col-xs-12" style="padding-right: 5px;padding-left: 5px;">
<button type="submit" class="btn btn-primary btn-block text-center">suchen</button>
</div>
</form>
</div><!-- end tab-pane -->
</div><!-- end tab-content -->
</div><!-- end homeform -->
</div>
</div><!-- end container -->
</section><!-- end section -->

View file

@ -0,0 +1,128 @@
{% form_theme search_form 'default/form/theme.html.twig' %}
<section class="section fullscreen background start-slider">
<div class="absolute-section">
<div class="container-fluid">
<div class="row">
<div class="col-md-12 col-xs-12">
<div class="home-message text-center">
<div class="home-info-box">
<div id="eKomiSeal_default" class="eKomi-header" style="padding-top: 5px;padding-left: 2px;">
<img class="lozad" border="0" src="{{ asset('images/dummy.png') }}" data-src="/bundles/app/images/logo-qualitaet-22.png" alt="Top Kundenservice" height="78">
</div>
<ul class="c4">
<li>Spezialist für Kulturreisen </li>
<li>Reiseexperte seit 1998</li>
<li>Beratung für individuelle Reisen</li>
</ul>
</div>
</div><!-- end homemessage -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end container -->
</div>
<div id="myCarousel" class="carousel slide">
<!-- Indicators -->
<!-- Wrapper for Slides -->
<div class="carousel-inner">
<div class="item active">
<!-- Set the first background image using inline CSS below. .cropResize(1024).guess(70) -->
<div class="fill lozad" style="background-image:url(images/placeholder-image.png)" data-background-image="{{ image('bundles/app/images/travel/slider_aegypten.jpg') }}"></div>
<noscript>
<div class="fill" style="background-image:url({{ image('bundles/app/images/travel/slider_aegypten.jpg').cropResize(1024).guess(70) }})"></div>
</noscript>
</div>
<div class="item">
<!-- Set the second background image using inline CSS below. .cropResize(1024).guess(70) -->
<div class="fill lozad" style="background-image:url(images/placeholder-image.png)" data-background-image=" {{ image('bundles/app/images/travel/slider_felsendom.jpg') }}"></div>
<noscript>
<div class="fill" style="background-image:url({{ image('bundles/app/images/travel/slider_felsendom.jpg').cropResize(1024).guess(70) }})"></div>
</noscript>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. .cropResize(1024).guess(70) -->
<div class="fill lozad" style="background-image:url(images/placeholder-image.png)" data-background-image="{{ image('bundles/app/images/travel/slider_petra.jpg') }}"></div>
<noscript>
<div class="fill" style="background-image:url({{ image('bundles/app/images/travel/slider_petra.jpg').cropResize(1024).guess(70) }})"></div>
</noscript>
</div>
</div>
</div>
</section><!-- end section -->
<section class="nopadding">
<div class="container-full absolute">
<div class="container-fluid container-form">
<div class="home-form">
<!-- Nav tabs
Hier bitte die Tabs über Parameter Steuer, wenn JS aus.
Paramter an URL hängen und dann den jeweiligen Tab auf active setzen.
-->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="tab_01">
<form class="bookform form-inline row st-search-form" style="margin-right: -5px; margin-left: -5px;" action="/suche" method="get">
<div class="form-group col-lg-2 col-md-2 col-sm-3 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
{{ form_field_pho(search_form.b, 'Anreise am') }}
</div>
<div class="form-group col-lg-2 col-md-2 col-sm-3 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
{{ form_field_pho(search_form.e, 'Abreise am') }}
</div>
<div class="form-group col-lg-2 col-md-3 col-sm-3 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
{{ form_field_pho(search_form.c) }}
</div>
<div class="form-group col-lg-2 col-md-3 col-sm-3 col-xs-6" style="padding-right: 5px;padding-left: 5px;">
<label class="sr-only" for="departure">Abfahrtsort</label>
<div class="dropdown form-bottom">
<select id="departure" class="selectpicker" data-style="btn-white" data-dropup-auto="false">
<option>Abfahrtsort beliebig</option>
<option>Basel</option>
<option>Berlin</option>
<option>Berlin Schönefeld</option>
<option>Berlin Tegel</option>
<option>Bonn</option>
<option>Bremen</option>
<option>Dresden</option>
<option>Düsseldorf</option>
<option>Eigenanreise</option>
<option>Erfurt</option>
<option>Frankfurt</option>
<option>Friedrichshafen</option>
<option>Genf</option>
<option>Graz</option>
<option>Hamburg</option>
<option>Hannover</option>
<option>Köln</option>
<option>Leipzig</option>
<option>Linz</option>
<option>München</option>
<option>Nürnberg</option>
<option>Saarbrücken</option>
<option>Salzburg</option>
<option>Stuttgart</option>
<option>Wien</option>
<option>Zürich</option>
</select>
</div>
</div>
<div class="form-group col-lg-4 col-md-2 col-sm-12 col-xs-12" style="padding-right: 5px;padding-left: 5px;">
<button type="submit" class="btn btn-primary btn-block text-center"><i class="fa fa-search" style="font-size: 1.1em"></i> &nbsp;<span class="hidden-md">Kulturreisen</span> suchen</button>
</div>
</form>
</div><!-- end tab-pane -->
</div><!-- end tab-content -->
</div><!-- end homeform -->
</div>
</div><!-- end container -->
</section><!-- end section -->

View file

@ -0,0 +1,32 @@
<div class="owl-fullwidth owl-carousel owl-theme">
{% for page in pages %}
<div class="owl-item-full">
<div class="travel-wrapper get-box-link">
<div class="item text-center">
<div class="item-img">
{% include 'default/components/pageBoxImage.html.twig' %}
</div>
<div class="box_mid">
<div class="hl5">{{ page.title }}</div>
{% if (page.boxBody ?? page.description) is not empty %}
<p>{{ page.boxBody|default(page.description) }}</p>
{% endif %}
{% if page.travelProgram is not empty and page.travelProgram.lowestPrice > 0 %}
<div class="price">
Für {{ page.travelProgram.lowestPrice|number_format }},- € p.P.
</div>
{% endif %}
</div>
<a class="item-button is-box-link dobble_line" href="{{ page.urlPath }}"><span>ansehen</span></a>
</div>
</div><!-- end travel-wrapper -->
</div>
{% endfor %}
</div>

View file

@ -0,0 +1,34 @@
{# @var child_page \AppBundle\Entity\Page #}
<div class="col-md-4 col-sm-6">
<div class="travel-wrapper get-box-link">
<div class="item text-left">
<div class="item-img">
<div class="lb">
{% if child_page.boxStar is not empty %}
<div class="cstar_left">{{ child_page.boxStar|raw }}</div>
{% endif %}
{% if child_page.travelProgram is not empty and child_page.travelProgram.lowestPrice > 0 %}
<div class="cprice">ab {{ child_page.travelProgram.lowestPrice|number_format }} € p.P.</div>
{% endif %}
{% if child_page.boxDiscount is not empty %}
<div class="cdiscount">{{ child_page.boxDiscount|raw }}</div>
{% endif %}
{% if child_page.model == 'feedback'%}
<div class="cdiscount">{{ child_page.date|date }}</div>
{% endif %}
</div>
{% include 'default/components/pageBoxImage.html.twig' with {page: child_page} %}
</div>
<div class="box_mid">
<div class="hl5">{{ child_page.title }}</div>
<p>{{ child_page.boxBody ?? child_page.description }}</p>
</div>
<a class="item-button is-box-link dobble_line" href="{{ child_page.urlPath }}" title="{{ child_page.title }}">
<span>{{ child_page.title }}</span>
</a>
</div>
</div>
</div>

View file

@ -0,0 +1,17 @@
{% if page.boxImageUrl is not empty %}
{% set image_url = page.boxImageUrl %}
{% set image_alt = page.travelProgram.title|default(page.title) %}
{% elseif page.travelProgram is not empty and page.travelProgram.previewImage is not empty %}
{% set image_url = 'uploads/travel_program/' ~ page.travelProgram.previewImage.fileNameWithExtension %}
{% set image_alt = page.title %}
{% elseif page.fewoLodging is not empty and page.fewoLodging.images is not empty and page.fewoLodging.images[0] is not empty %}
{% set image_url = '_uploads/images/' ~ page.fewoLodging.images[0].file %}
{% set image_alt = page.title %}
{% else %}
{% set image_url = asset('/bundles/app/images/no-picture.png')%}
{% set image_alt = 'Kein Vorschaubild vorhanden' %}
{% endif %}
<div class="img-background lozad" data-background-image="{{ image(image_url|trim('/')).cropResize(360).guess(70) }}" style="background-image:url({{ asset('images/placeholder-image.png') }})"></div>
<noscript>
<img width="234" data-url="{{ image_url }}" height="180" src="{{ image(image_url|trim('/')).cropResize(360).guess(70) }}" class="img-responsiv img-responsiv-item" style="">
</noscript>

View file

@ -0,0 +1,30 @@
{# @var lodging \AppBundle\Entity\FewoLodging #}
<div class="col-md-4 col-sm-4">
<div class="travel-wrapper get-box-link">
<div class="item text-left">
<div class="item-img">
<div class="lb">
{% if lodging.page.boxStar is not empty %}
<div class="cstar_left">{{ lodging.page.boxStar|raw }}</div>
{% endif %}
{% if lodging.page.travelProgram is not empty and lodging.page.travelProgram.lowestPrice > 0 %}
<div class="cprice">ab {{ lodging.page.travelProgram.lowestPrice|number_format }} € p.P.</div>
{% endif %}
{% if lodging.page.boxDiscount is not empty %}
<div class="cdiscount">{{ lodging.page.boxDiscount|raw }}</div>
{% endif %}
</div>
{% include 'default/components/pageBoxImage.html.twig' with {page: lodging.page} %}
</div>
<div class="box_mid">
<div class="hl5">{{ lodging.page.title }}</div>
<p>{{ lodging.page.boxBody ?? lodging.page.description }}</p>
</div>
<a class="item-button is-box-link dobble_line" href="{{ lodging.page.urlPath }}" title="{{ lodging.page.title }}">
<span>{{ lodging.page.title }}</span>
</a>
</div>
</div>
</div>

View file

@ -0,0 +1,29 @@
{% form_theme search_form 'default/form/theme.html.twig' %}
<div class="widget clearfix">
<div class="widget-title">
<!-- <a class="collapse-widget" href="#search-widget" data-toggle="collapse">Zeitraum</a> -->
</div><!-- end title -->
<div class="searchwidget collapse in" id="search-widget">
<form action="/ferienwohnungen/ferienwohnungen-kalender" method="get" class="searchform row st-search-form">
<div class="form-group col-md-6">
<div class="required">
{{ form_field_pho(search_form.from, 'Anreise', {required: true}) }}
</div>
</div>
<div class="form-group col-md-6">
<div class="required">
{{ form_field_pho(search_form.to, 'Abreise', {required: true}) }}
</div>
</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12 text-center form-bottom">
<button type="submit" class="btn btn-sm btn-primary btn-block">freie Ferienwohnungen suchen</button>
</div>
</form>
</div><!-- end boxwidget -->
</div>

View file

@ -0,0 +1,11 @@
<div id="show_sterntours_video_full" class="col-md-12" style="display: none;">
</div>
{% include 'default/components/sidebar.html.twig' with {
nav_sidebar_widget_block: block('nav_sidebar_widget') ?? null,
search_sidebar_widget_block: block('search_sidebar_widget') ?? null,
travel_guide_sidebar_widget_block: block('travel_guide_sidebar_widget') ?? null,
travel_magazine_sidebar_widget_block: block('travel_magazine_sidebar_widget') ?? null,
offers_sidebar_widget_block: block('offers_sidebar_widget') ?? null,
feedbacks_sidebar_widget_block: block('feedbacks_sidebar_widget') ?? null,
} %}

View file

@ -0,0 +1,8 @@
<div id="show_sterntours_video_sidebar" class="widget clearfix">
<div class="widget-title">
<a class="collapse-widget {{ app.request.get('_open_side_about') }}" href="#about-widget" data-toggle="collapse" aria-expanded="true">{{ widget.name }}</a>
</div><!-- end title -->
<div class="boxwidget collapse in {{ app.request.get('_open_side_about') }} " id="about-widget" aria-expanded="true">
{{ widget.html|raw }}
</div><!-- end boxwidget -->
</div><!-- end widget -->

View file

@ -0,0 +1,4 @@
{% if page is not empty and page.effectiveCountry is not empty and page.effectiveCountry.feedbackPage is not empty %}
{{ render(controller('AppBundle:Component:feedbacksSidebarWidget', {country: page.effectiveCountry ?? null, title:widget.name})) }}
{% endif %}

View file

@ -0,0 +1,64 @@
{% if api.navi is defined %}
<style>
#sidebar #side-navigation .side-menu li.lvl_deep_1 {
padding-left: 10px!important;
}
#sidebar #side-navigation .side-menu li.lvl_deep_2 {
padding-left: 30px!important;
}
#sidebar #side-navigation .side-menu li.lvl_deep_3 {
padding-left: 50px!important;
}
#sidebar #side-navigation .side-menu li.lvl_deep_4 {
padding-left: 70px!important;
}
</style>
<div class="widget clearfix">
<div class="widget-title">
<a class="collapse-widget" href="#side-navigation" data-toggle="collapse">{{ title }}</a>
</div><!-- end title -->
<nav id="side-navigation" class="navbar collapse in" role="navigation" itemscope
itemtype="https://schema.org/SiteNavigationElement"
>
<ul class="side-menu" role="menu">
{% for nav in api.navi %}
{% if nav.lvl == 0 %}
<li {% if nav.active == 1 %} class ="active"{% endif %} role="menuitem" itemprop="name">
<a itemprop="url" href="{{ nav.url }}" title="{{ nav.name }}">
{{ nav.name }}
</a>
</li>
{% else %}
<li class="sub-menu-item{% if nav.active == 1 %} active{% endif %} lvl_deep_{{ nav.lvl }}" role="menuitem" itemprop="name">
<i class="fa fa-star"></i>
<a itemprop="url" href="{{ nav.url }}" title="{{ nav.name }}">
{{ nav.name }}
</a>
</li>
{% endif %}
{#
{% if nav.children is defined %}
{% for child in nav.children %}
<li class="sub-menu-item{% if child.active == 1 %} active{% endif %}" role="menuitem" itemprop="name">
<i class="fa fa-star"></i>
<a itemprop="url" href="{{ child.url }}" title="{{ child.name }}">
{{ child.name }}
</a>
</li>
{% endfor %}
{% endif %}
#}
{% endfor %}
</ul>
</nav>
</div>
{% endif %}

View file

@ -0,0 +1,8 @@
{% if page is not empty %}
{{ render(controller('AppBundle:Component:navSidebarWidget', {page: page, title:widget.name})) }}
{% endif %}
{% if api is not empty %}
{{ render(controller('AppBundle:Component:navSidebarApiWidget', {api: api, title:widget.name})) }}
{% endif %}

View file

@ -0,0 +1,35 @@
{% if nav_pages is defined %}
<div class="widget clearfix">
<div class="widget-title">
<a class="collapse-widget" href="#side-navigation" data-toggle="collapse">{{ slider_title }}</a>
</div><!-- end title -->
<nav id="side-navigation" class="navbar collapse in" role="navigation" itemscope
itemtype="https://schema.org/SiteNavigationElement"
>
<ul class="side-menu" role="menu">
{% for nav_page in nav_pages %}
<li {% if nav_page == nav_open_node or nav_page == page %}class ="active"{% endif %} role="menuitem" itemprop="name">
<a itemprop="url" href="{{ nav_page.urlPath }}" title="{{ nav_page.title }}">
{{ nav_page.title }}
</a>
</li>
{% if nav_page == nav_open_node %}
{% for nav_child_page in nav_child_pages if nav_child_page.status == 1 and nav_child_page.showInNavi == 1 %}
<li class="sub-menu-item{% if nav_child_page == page %} active{% endif %}" role="menuitem" itemprop="name">
<i class="fa fa-star"></i>
<a itemprop="url" href="{{ nav_child_page.urlPath }}" title="{{ nav_child_page.title }}">
{{ nav_child_page.title }}
</a>
</li>
{% endfor %}
{% endif %}
{% endfor %}
</ul>
</nav>
</div>
{% endif %}

View file

@ -0,0 +1,2 @@
{{ render(controller('AppBundle:Component:offersSidebarWidget', {country: page.effectiveCountry ?? null, title:widget.name})) }}

View file

@ -0,0 +1,43 @@
{% if pages is not empty %}
<div class="widget clearfix hidden-xs">
<div class="widget-title">
<a class="collapse-widget" href="#{{ target_widget }}" data-toggle="collapse" aria-expanded="true">{{ slider_title }}</a>
</div><!-- end title -->
<div class="boxwidget collapse in" id="{{ target_widget }}" aria-expanded="true">
<div class="box-slider">
{% for page in pages %}
<div class="travel-wrapper slide{{ loop.first ? ' active' }}">
<a href="{{ page.urlPath|default('javascript:void(0);') }}" class="item text-center">
<div class="item-img">
{% include 'default/components/pageBoxImage.html.twig' %}
</div>
<div class="box_mid">
<div class="hl5">{{ page.title }}</div>
<p>{{ page.boxBody ?? page.description }}</p>
{% if page.travelProgram is not empty and page.travelProgram.lowestPrice > 0 %}
<div class="price">
Für {{ page.travelProgram.lowestPrice|number_format }},- € p.P.
</div>
{% endif %}
</div>
</a>
</div><!-- end travel-wrapper -->
{% endfor %}
<div class="item-switch clearfix">
<a href="javascript:void(0);" class="item-button-prev">zurück</a>
<a href="javascript:void(0);" class="item-button-next">weiter</a>
</div>
</div>
</div>
</div><!-- end widget -->
{% endif %}

View file

@ -0,0 +1,17 @@
{% if search_form is defined %}
{{ include('default/components/sidebar/searchSidebarWidgetInner.html.twig') }}
{# #WORKAROUND Overriding this block doesn't work, probably due to a Symfony bug, see ttSearch.html.twig #}
{% elseif tt_search_form is defined %}
{{ include('default/components/sidebar/ttSearchSidebarWidget.html.twig') }}
{# END WORKAROUND #}
{% elseif page is defined and page is not empty %}
{# #HACK Dont display the search in FEWO #}
{% if page.title != 'Ferienwohnungen' %}
{{ render(controller('AppBundle:Component:searchSidebarWidget', {page:page, title:widget.name})) }}
{% endif %}
{% elseif api is defined and api is not empty %}
{{ render(controller('AppBundle:Component:searchSidebarApiWidget', {api:api, title:widget.name})) }}
{% endif %}

View file

@ -0,0 +1,24 @@
{% form_theme search_form 'default/form/theme.html.twig' %}
<div class="widget clearfix">
<div class="widget-title">
<a class="collapse-widget" href="#search-widget" data-toggle="collapse">Suche</a>
</div><!-- end title -->
<div class="searchwidget collapse in" id="search-widget">
<form action="/suche" method="get" class="searchform row st-search-form">
<div class="form-group col-md-12">
{{ form_field_pho(search_form.c, 'Reiseziel') }}
</div>
<div class="form-group col-md-12">
<label for="b" style="display: none"></label>
{{ form_field_pho(search_form.b, 'Anreise') }}
</div>
<div class="form-group col-md-12 form-bottom">
<label for="e" style="display: none"></label>
{{ form_field_pho(search_form.e, 'Abreise') }}
</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12 text-center form-bottom">
<button type="submit" class="btn btn-primary btn-block">Angebote suchen</button>
</div>
</form>
</div><!-- end boxwidget -->
</div>

View file

@ -0,0 +1,17 @@
{# @var page \AppBundle\Entity\Page #}
<div class="row">
<div class="col-sm-6 col-md-12">
{% for widget in widgets %}
{% if widget.component is defined %}
{% include 'default/components/sidebar/' ~ widget.component ~ '.html.twig' %}
{% if(loop.index == loop_half ) %}
</div>
<div class="col-sm-6 col-md-12">
{% endif %}
{% endif %}
{% endfor %}
</div>
<div class="col-sm-12">
<hr class="visible-sm visible-xs">
</div>
</div>

View file

@ -0,0 +1,27 @@
{% if slides is not empty %}
<div class="widget clearfix hidden-xs">
<div class="widget-title">
<a class="collapse-widget" href="#{{ target_widget }}" data-toggle="collapse" aria-expanded="true">{{ slider_title }}</a>
</div><!-- end title -->
<div class="boxwidget collapse in" id="{{ target_widget }}" aria-expanded="true">
<div class="box-slider newswidget clearfix{{ theme|default('normal') == 'gray-box' ? ' gray-box' }}">
{% for slide in slides %}
<a href="{{ slide.urlPath|default('javascript:void(0);') }}" class="slide{{ loop.first ? ' active' }}">
<div class="hl5">{{ slide.title }}</div>
<p>{{ slide.boxBody|default(slide.description) }}</p>
</a>
{% endfor %}
<div class="item-switch clearfix">
<a href="javascript:void(0);" class="item-button-prev">zurück</a>
<a href="javascript:void(0);" class="item-button-next">weiter</a>
</div>
</div><!-- end newswidget -->
</div>
</div><!-- end widget -->
{% endif %}

View file

@ -0,0 +1,14 @@
<div class="widget clearfix hidden-xs">
<div class="widget-title">
<a class="collapse-widget" href="#top-widget" data-toggle="collapse" aria-expanded="true">{{ widget.name }}</a>
</div><!-- end title -->
<div class="boxwidget collapse in" id="top-widget" aria-expanded="true">
{{ widget.html|raw }}
{% if show_seal_of_approval %}
<div class="boxwidget">
{% image '@AppBundle/Resources/public/images/guetesiegel_R_V.png' %}<img src="{{ asset_url }}"
alt="R+V Reiseversicherungen">{% endimage %}
</div><!-- end boxwidget -->
{% endif %}
</div><!-- end boxwidget -->
</div><!-- end widget -->

View file

@ -0,0 +1,3 @@
{% if page is not empty and page.effectiveCountry is not empty %}
{{ render(controller('AppBundle:Component:travelGuideSidebarWidget', {country: page.effectiveCountry, title:widget.name})) }}
{% endif %}

View file

@ -0,0 +1,3 @@
{% if page is not empty and page.effectiveCountry is not empty %}
{{ render(controller('AppBundle:Component:travelMagazineSidebarWidget', {country: page.effectiveCountry, title:widget.name})) }}
{% endif %}

View file

@ -0,0 +1,21 @@
{% form_theme tt_search_form 'default/form/theme.html.twig' %}
<div class="widget clearfix" style="display:none">
<form action="/tt-suche" method="get" class="searchwidget searchform row st-tt-search-form">
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.termin, 'Früheste Anreise') }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.ruecktermin, 'Späteste Abreise') }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.dauer) }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.topRegion, 'Reiseziel') }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.abflughafen, 'Abflughafen') }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.shotel, 'Hotelname') }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.kategorie) }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.zimmer) }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.t) }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.child0) }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.child1) }}</div>
<div class="form-group col-md-12">{{ form_field_pho(tt_search_form.child2) }}</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12 text-center form-bottom">
<button type="submit" class="btn btn-primary btn-block">Angebote suchen</button>
</div>
</form>
</div>

View file

@ -0,0 +1,18 @@
<ul>
{% for page_node in page_nodes %}
{% set default_url = base_url|default('') ~ '/' ~ page_node.slug %}
<li style="padding-left: 10px;">
<a href="{{ page_node.realUrlPath|default( default_url ) }}">
{{ page_node.title }}
</a>
{% if page_node.__children is not empty %}
{% include 'default/components/sitemap/sitemapNode.html.twig' with {
page_nodes: page_node.__children,
base_url: default_url,
} %}
{% endif %}
</li>
{% endfor %}
</ul>

View file

@ -0,0 +1,15 @@
{% form_theme tt_search_form 'default/form/theme.html.twig' %}
<div style="border: 1px solid #d7d7d7; padding: 15px 10px 0px 10px;">
<form action="/tt-suche" method="get" class="bookform form-inline st-tt-search-form">
<div class="form-group row">
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-6" style="margin-bottom: 12px">{{ form_field_pho(tt_search_form.termin, 'Früheste Anreise') }}</div>
<div class="col-lg-3 col-md-3 col-sm-6 col-xs-6" style="margin-bottom: 12px">{{ form_field_pho(tt_search_form.ruecktermin, 'Späteste Abreise') }}</div>
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-6">{{ form_field_pho(tt_search_form.t) }}</div>
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-6">{{ form_field_pho(tt_search_form.child0) }}</div>
<div class="col-lg-2 col-md-12 col-sm-12 col-xs-12 text-center">
<button type="submit" class="btn btn-primary btn-block" style="margin-bottom: 15px">suchen</button>
</div>
</div>
</form>
</div>

View file

@ -0,0 +1,293 @@
<div class="content-copy">
<div class="tab-content">
<h1>Datenschutzerklärung STERN TOURS GmbH</h1>
<p><strong>I. Name und Anschrift des Verantwortlichen</strong><br>
Der Verantwortliche im Sinne der geltenden datenschutzrechtlichen Bestimmungen ist:<br>
<strong>Firma STERN TOURS GmbH</strong><br>
Emser Str. 3<br>
10719 Berlin<br>
Vertreten d. d. Geschäftsführer Herrn Thomas Stern<br>
Telefon: +49 30 700 94 100<br>
Telefax: +49 30 700 94 1044<br>
E-Mail: <a href="mailto:stern@sterntours.de">stern@sterntours.de</a></p>
<p><strong>II. Allgemeines zur Datenverarbeitung</strong><br>
<em>1. Umfang der Verarbeitung personenbezogener Daten</em><br>
Wir erheben und verwenden personenbezogene Daten (nachfolgend pb. Daten) unserer Nutzer grundsätzlich nur, soweit dies zur Bereitstellung einer funktionsfähigen Website sowie unserer Inhalte und Leistungen erforderlich ist oder eine Einwilligung des Nutzers vorliegt. Eine Ausnahme gilt in solchen Fällen, in denen eine vorherige Einholung einer Einwilligung aus tatsächlichen Gründen nicht möglich und die Verarbeitung der Daten durch gesetzliche Vorschriften gestattet ist.</p>
<p><em>2. Rechtsgrundlage für die Verarbeitung personenbezogener Daten</em><br>
Nachfolgend finden Sie die gesetzlichen Grundlagen, die die DSGVO vorsieht: <br>
Bei der Verarbeitung pb. Daten</p>
<ul>
<li>auf Grundlage einer Einwilligung des Betroffenen ist Art. 6 Abs. 1 lit. a EU-Datenschutzgrundverordnung (DSGVO) Rechtsgrundlage;</li>
<li>die zur Erfüllung eines Vertrages mit der betroffenen Person dient, ist Art. 6 Abs. 1 lit. b DSGVO Rechtsgrundlage. </li>
<li>die zur Durchführung vorvertraglicher Maßnahmen erforderlich sind, ist Art. 6 Abs. 1 lit. b DSGVO Rechtsgrundlage;</li>
<li>die zur Erfüllung einer uns obliegenden rechtlichen Verpflichtung erforderlich ist, dient Art. 6 Abs. 1 lit. c DSGVO als Rechtsgrundlage;</li>
<li>die wegen lebenswichtiger Interessen der betroffenen Person oder anderer natürlicher Personen erforderlich sind, ist Art. 6 Abs. 1 lit. d DSGVO Rechtsgrundlage.</li>
<li>die zur Wahrung eines berechtigten Interesses unseres Unternehmens oder eines Dritten erforderlich sind und den Interessen, Grundrechte und Grundfreiheiten des Betroffenen überwiegen, dient Art. 6 Abs. 1 lit. f DSGVO als Rechtsgrundlage für die Verarbeitung. </li>
</ul>
<p><em>3. Datenlöschung und Speicherdauer</em><br>
Grundsätzlich löschen oder sperren wir pb. Daten, sobald der Zweck der Speicherung entfällt. Sind wir gesetzlich dazu verpflichtet Daten aufzubewahren, erfolgt eine Sperrung oder Löschung erst nach Ablauf der gesetzlichen Aufbewahrungspflicht, es sei denn, eine Erforderlichkeit zur weiteren Speicherung der Daten für einen Vertragsabschluss oder eine Vertragserfüllung besteht.</p>
<p><em>4. Empfänger der erhobenen Daten</em><br>
Empfänger der über die Internetseite erhoben Daten ist der genannte Verantwortliche. Darüber hinaus haben Auftragsverarbeiter (Webhoster, EDV-Betreuer, Softwarenanbieter) Zugriff auf die über die Internetseite erhobenen Daten. Die Einhaltung der gesetzlichen Regelungen ist insoweit jedoch durch Auftragsverarbeitungsverträge, die wir mit unseren in der EU ansässigen Auftragsverarbeitern schließen, gewährleistet. Darüber hinaus erfolgt eine Übermittlung Ihrer Daten an Dritte, derer wir uns zur Durchführung unserer Leistungen bedienen (Fluglinien, Beförderungsunternehmen, Hotels, Mietwagenunternehmen, Zahlungsdienstleister, Kreditinstitute, etc.). Je nach Reiseland können sich diese Empfänger auch in Drittländern, die das Datenschutzniveau der DSGVO nicht einhalten, befinden (bspw. Reisen in den Oman). </p>
<p><em>5. Profiling / automatisierte Entscheidungsfindung</em><br>
Zur Begründung und Durchführung der Geschäftsbeziehung nutzen wir grundsätzlich keine automatisierte Entscheidungsfindung gemäß Art. 22 EU-DSGVO. Sollten wir diese Verfahren in Einzelfällen einsetzen, werden Sie hierüber gesondert informiert, sofern dies gesetzlich vorgegeben ist.</p>
<p><strong>III. Bereitstellung der Website und Erstellung von Logfiles</strong><br>
<em>1. Umfang der Datenverarbeitung</em><br>
Bei jedem Aufruf unserer Internetseite erfasst unser System automatisiert Daten und Informationen vom Computersystem des aufrufenden Rechners.
Folgende Daten werden hierbei erhoben:<br>
(1) Informationen über den Browsertyp und die verwendete Version<br>
(2) Das Betriebssystem des Nutzers<br>
(3) Die IP-Adresse des Nutzers<br>
(4) Datum und Uhrzeit des Zugriffs<br>
(5) Seite, von der aus zugegriffen wird <br>
(6) Name der Datei <br>
(7) Übertragene Datenmenge<br>
(8) Zugriffsstatus (Datei, übertragen, Datei nicht gefunden)</p>
<p>Die Daten werden ebenfalls in den Logfiles (Protokolldateien / Protokoll aller oder bestimmter Prozesse auf einem Computersystem) unseres Systems gespeichert. Nicht hiervon betroffen sind die IP-Adresse des Nutzers oder anderen Daten, die die Zuordnung zu einem Nutzer ermöglichen. Eine Speicherung dieser Daten zusammen mit anderen personenbezogenen Daten des Nutzers findet nicht statt.</p>
<p><em>2. Rechtsgrundlage für die Datenverarbeitung</em><br>
Rechtsgrundlage für die vorübergehende Speicherung der Daten und der Logfiles ist Art. 6 Abs. 1 lit. f DSGVO.</p>
<p><em>3. Zweck der Datenverarbeitung</em><br>
Die vorübergehende Speicherung der IP-Adresse durch das System ist notwendig, um eine Auslieferung der Website an den Rechner des Nutzers zu ermöglichen. Hierfür muss die IP-Adresse des Nutzers für die Dauer der Sitzung gespeichert bleiben.<br>
Die Speicherung in Logfiles erfolgt, um die Funktionsfähigkeit der Website sicherzustellen. Zudem dienen uns die Daten zur Optimierung der Website und zur Sicherstellung der Sicherheit unserer informationstechnischen Systeme.<br>
In diesen Zwecken liegt auch unser berechtigtes Interesse an der Datenverarbeitung nach Art. 6 Abs. 1 lit. f DSGVO. Da für uns ein Rückschluss von IP-Adresse auf eine natürliche Person nicht ohne weiteres möglich ist, es sich ferner bei einer IP-Adresse nicht um ein sensibles Datum handelt, diese umgehend nach Besuch der Internetseite gelöscht wird und wir diese benötigen, um unsere Internetseite anzubieten, überwiegt unser Interesse gegenüber dem Interesse des Betroffenen.</p>
<p><em>4. Dauer der Speicherung</em><br>
Die erhobenen Daten werden gelöscht, sobald sie für die Erreichung des Zweckes ihrer Erhebung (Bereitstellung der Internetseite) nicht mehr erforderlich sind. Im Falle der Speicherung der Daten in Logfiles ist dies nach spätestens sieben Tagen der Fall. </p>
<p><em>5. Widerspruchs- und Beseitigungsmöglichkeit</em><br>
Die Erfassung der Daten zur Bereitstellung der Website und die Speicherung der Daten in Logfiles ist für den Betrieb der Internetseite zwingend erforderlich. Es besteht folglich seitens des Nutzers keine Widerspruchsmöglichkeit.</p>
<p><strong>IV. Verwendung von Cookies</strong><br>
<em>1. Beschreibung und Umfang der Datenverarbeitung</em><br>
<u>a) Technisch notwendige Cookies</u><br>
Unsere Webseite verwendet technisch notwendige Cookies. Bei Cookies handelt es sich um Textdateien, die im Internetbrowser bzw. vom Internetbrowser auf dem Computersystem des Nutzers gespeichert werden. Ruft ein Nutzer eine Website auf, so kann ein Cookie auf dem Betriebssystem des Nutzers gespeichert werden. Dieser Cookie enthält eine charakteristische Zeichenfolge, die eine eindeutige Identifizierung des Browsers beim erneuten Aufrufen der Website ermöglicht. <br>
Es handelt sich dabei um den Cookie PHPSESSID. Dieses Cookie speichert Ihre aktuelle Sitzung mit Bezug auf PHP-Anwendungen und gewährleistet so, dass alle Funktionen der Seite, die auf der PHP-Programmiersprache basieren, vollständig angezeigt werden können.</p>
<p><u>b) Technisch nicht notwendige Cookies</u><br>
aa) StepMap Kartendienst <br>
Um Ihnen Reisen auf Karten anzeigen zu können, nutzen wir Dienstleistungen der StepMap GmbH , Romy-Schneider-Straße 6, 13599 Berlin. Die Firma StepMap GmbH nutzt zur Darstellung der Karten ebenfalls Cookies.
Auf diese Weise können folgende Daten übermittelt werden: <br><br>
(1) IP-Adresse<br>
(2) Datum und Uhrzeit der Anfrage<br>
(3) Zeitzonendifferenz zur Greenwich Mean Time (GMT)<br>
(4) Inhalt der Anforderung (konkrete Seite)<br>
(5) Zugriffsstatus/HTTP-Statuscode<br>
(6) jeweils übertragene Datenmenge<br>
(7) Website, von der die Anforderung kommt<br>
(8) Browser<br>
(9) Betriebssystem und dessen Oberfläche<br>
(10) Sprache und Version der Browsersoftware</p>
<p>Die vorgenannten Informationen werden StepMap weitergegeben. StepMap wird Ihre IP-Adresse jedoch nicht mit anderen von Ihnen gespeicherten Daten zusammenführen. StepMap ist ein deutsches Unternehmen und unterliegt damit ebenfalls der DSGVO und dem BDSG-neu.</p>
<p><u>bb) Microsoft BING Ads</u><br>
Diese Website nutzt das Conversion Tracking von Bing Ads (Microsoft Corporation, One Microsoft Way, Redmond, WA 98052-6399, USA). Wenn Sie auf eine Bing Anzeige geklickt haben, wird ein Cookie auf Ihrem Rechner gesetzt. Sowohl Bing als auch der Websitebetreiber können dadurch erkennen, dass jemand über die Bing Anzeigen zur Website weitergeleitet wurde und eine vorher festgelegte Zielseite (Conversion-Seite) erreicht hat. Wir möchten Sie darauf hinweisen, dass durch dieses Verfahren auch ihre IP-Adresse erfasst wird. Wenn Sie nicht an dem beschriebenen Tracking-Verfahren teilnehmen möchten, kann das hierfür erforderliche Setzen eines Cookies per Browser-Einstellung abgelehnt werden. Die Deaktivierung kann auch über folgenden Link erfolgen: <a href="http://choice.microsoft.com/de/opt-out" target="_blank">http://choice.microsoft.com/de/opt-out</a>
Weitere Informationen zum Datenschutz und zu den eingesetzten Cookies bei Microsoft Bing finden Sie auf der Website von Microsoft: <a href="https://privacy.microsoft.com/de-de/privacystatement" target="_blank">https://privacy.microsoft.com/de-de/privacystatement</a></p>
<p><u>cc) Google Adwords</u><br>
Wir nutzen das Online-Werbeprogramm „Google AdWords“ und im Rahmen von Google AdWords das Conversion-Tracking. Das Google Conversion Tracking ist ein Analysedienst der Google Inc. (1600 Amphitheatre Parkway, Mountain View, CA 94043, USA; „Google“). Wenn Sie auf eine von Google geschaltete Anzeige klicken, wird ein Cookie für das Conversion-Tracking auf Ihrem Rechner abgelegt. Diese Cookies verlieren nach 30 Tagen ihre Gültigkeit, enthalten keine personenbezogenen Daten und dienen somit nicht der persönlichen Identifizierung. Wenn Sie bestimmte Internetseiten unserer Website besuchen und das Cookie noch nicht abgelaufen ist, können Google und wir erkennen, dass Sie auf die Anzeige geklickt haben und zu dieser Seite weitergeleitet wurden. Jeder Google AdWords-Kunde erhält ein anderes Cookie. Somit besteht keine Möglichkeit, dass Cookies über die Websites von AdWords-Kunden nachverfolgt werden können. </p>
<p>Wenn Sie nicht am Tracking teilnehmen möchten, können Sie dieser Nutzung widersprechen, indem Sie die Installation der Cookies durch eine entsprechende Einstellung Ihrer Browser Software verhindern (Deaktivierungsmöglichkeit). Sie werden sodann nicht in die Conversion-Tracking Statistiken aufgenommen. Weiterführende Informationen sowie die Datenschutzerklärung von Google finden Sie unter: <a href="http://www.google.com/policies/technologies/ads/" target="_blank">http://www.google.com/policies/technologies/ads/</a>,<br>
<a href="http://www.google.de/policies/privacy/" target="_blank">http://www.google.de/policies/privacy/</a><br>
<br>
Widerspruchsmöglichkeit (Opt-out):
<a href="https://www.google.com/settings/u/0/ads/anonymous?hl=de&sig=ACi0TCgbJZ82qHPMEYoQJIy26Ljqx57yhP0ScvxTnIVEJBZMdU77SQUCZAYG1XAFfrbRPq9NN6Q3XntWfoR5P_U_AMV-sgbC0vMVzWRy8PoL4UlDPINr8p8" target="_blank">https://www.google.com/settings/u/0/ads/anonymous?hl=de&sig=ACi0TCgbJZ82qHPMEYoQJIy26Ljqx57yhP0ScvxTnIVEJBZMdU77SQUCZAYG1XAFfrbRPq9NN6Q3XntWfoR5P_U_AMV-sgbC0vMVzWRy8PoL4UlDPINr8p8</a>
<p><u>dd) Google Doubleclick</u><br>
Datenschutzinformationen des Anbieters: <a href="https://www.google.de/intl/de/policies/privacy/" target="_blank">https://www.google.de/intl/de/policies/privacy/</a>
Widerspruchsmöglichkeit (Opt-out): <a href="https://www.google.com/settings/u/0/ads/authenticated" target="_blank">https://www.google.com/settings/u/0/ads/authenticated</a>
</p>
<p><em>2. Rechtsgrundlage für die Datenverarbeitung für Cookies</em><br>
Die Rechtsgrundlage für die Verarbeitung personenbezogener Daten unter Verwendung von Cookies ist Art. 6 Abs. 1 lit. f DSGVO.</p>
<p><em>3. Zweck der Datenverarbeitung</em><br>
<u>a) Zweck für technisch notwendige Cookies</u><br>
Der Zweck der Verwendung technisch notwendiger Cookies ist, die Nutzung von Websites für die Nutzer zu vereinfachen. Einige Funktionen unserer Internetseite können ohne den Einsatz von Cookies nicht angeboten werden. Für diese ist es erforderlich, dass der Browser auch nach einem Seitenwechsel wiedererkannt wird.<br>
Für folgende Anwendungen benötigen wir Cookies:<br>
(1) Merken von Suchbegriffen<br>
(2) Übertragen von Formularinhalten<br>
(3) Sprachauswahl <br>
Die durch technisch notwendige Cookies erhobenen Nutzerdaten werden nicht zur Erstellung von Nutzerprofilen verwendet.</p>
<p><u>b) Zweck technisch nicht notwendiger Cookies</u><br>
Die Verwendung der StepMap Cookies erfolgt zu dem Zweck, Ihnen Reiseinformationen anschaulich zu vermitteln. BING ermöglicht uns die Aktivitäten von Nutzern auf unserer Website zu Werbezwecken und Optimierungszwecken nachzuverfolgen, wenn diese über Anzeigen von Bing Ads auf unsere Website gelangt sind. Die Informationen, die mithilfe von Google Adwords eingeholten werden, dienen dazu, Conversion-Statistiken für AdWords-Kunden zu erstellen, die sich für Conversion-Tracking entschieden haben. Hierbei erfahren die Kunden die Gesamtanzahl der Nutzer, die auf ihre Anzeige geklickt haben und zu einer mit einem Conversion-Tracking-Tag versehenen Seite weitergeleitet wurden. Sie erhalten jedoch keine Informationen, mit denen sich Nutzer persönlich identifizieren lassen. In den vorgenannten Zwecken liegt auch unser berechtigtes Interesse in der Verarbeitung der personenbezogenen Daten nach Art. 6 Abs. 1 lit. f DSGVO.</p>
<p><em>4. Dauer der Speicherung, Widerspruchs- und Beseitigungsmöglichkeit</em><br>
Cookies werden auf dem Rechner des Nutzers gespeichert und von diesem an unserer Seite übermittelt. Daher haben Sie als Nutzer auch die volle Kontrolle über die Verwendung von Cookies. Durch eine Änderung der Einstellungen in Ihrem Internetbrowser können Sie die Übertragung von Cookies deaktivieren oder einschränken. Bereits gespeicherte Cookies können jederzeit gelöscht werden. Dies kann auch automatisiert erfolgen. Werden Cookies für unsere Website deaktiviert, können möglicherweise nicht mehr alle Funktionen der Website vollumfänglich genutzt werden. Durch die Nutzung der Website erklären Sie sich mit der Bearbeitung der über Sie erhobenen Daten durch Google in der zuvor beschriebenen Art und Weise und zu dem zuvor benannten Zweck einverstanden.</p>
<p>Durch spezielle Browsereinstellungen können Sie alle oder einige Cookies auf Ihrem Gerät akzeptieren, blockieren oder deaktivieren. Eine entsprechende Anleitung der gängigsten Browser finden Sie hier:
<br>
- <a title="Firefox" target="_blank" href="https://support.mozilla.org/de/kb/cookies-informationen-websites-auf-ihrem-computer/">Firefox</a><br>
- <a title="Chrom" target="_blank" href="https://support.google.com/chrome/answer/95647?hl=de">Chrom</a><br>
- <a title="Internet Explorer" target="_blank" href="https://support.microsoft.com/de-de/help/278835/how-to-delete-cookie-files-in-internet-explorer">Internet Explorer</a><br>
- <a title="Safari" target="_blank" href="https://support.apple.com/kb/ph21411?locale=en_US">Safari</a>
</p>
<p><strong>V. E-Mail-Kontakt / Kontaktformular / Chat</strong><br>
<em>1. Umfang der Datenverarbeitung</em><br>
Auf unserer Internetseite ist eine Kontaktaufnahme über die bereitgestellte E-Mail-Adresse, ein Kontaktformular oder einen Live Chat möglich. Die mit der E-Mail oder dem Kontaktformular übermittelten personenbezogenen Daten des Nutzers werden von uns gespeichert. Zur Kontaktaufnahmen über das Kontaktformular genügt der Nachname und die E-Mailadresse, welches Pflichtfelder sind. Alle anderen im Kontaktformular angegebenen Felder sind freiwillige Felder. Der Chat kann grundsätzlich ohne Angabe von Daten gestartet werden, um mit uns in Kontakt zu treten. Sind wir offline, können Sie uns über den Chat eine Nachricht hinterlassen. Wir benötigen in diesem Fall allerdings zumindest Ihre E-Mailadresse sowie den Inhalt Ihrer Mitteilung, um auf Ihre Anfrage reagieren zu können. Die von Ihnen freiwillig mitgeteilten Daten werden ausschließlich für die Verarbeitung der Konversation oder Buchungsanfrage verwendet.<br>
Bei Nutzung des Kontaktformulars speichern wir zusätzlich aus Sicherheitsgründen noch Ihre IP-Adresse sowie Uhrzeit und Datum der Kontaktaufnahme. Bei Nutzung des Chats wird die IP-Adresse ausschließlich anonymisiert erhoben. </p>
<p><em>2. Rechtsgrundlage für die Datenverarbeitung</em><br>
Rechtsgrundlage für die Verarbeitung der Daten ist Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse). Zielt der Kontakt auf den Abschluss eines Vertrages ab, so ist zusätzliche Rechtsgrundlage für die Verarbeitung Art. 6 Abs. 1 lit. b DSGVO (zur Erfüllung eines Vertrags). </p>
<p><em>3. Zweck der Datenverarbeitung</em><br>
Die Verarbeitung der personenbezogenen Daten der Kontaktaufnahme dient uns allein zur Bearbeitung der Kontaktaufnahme und Ihrem Anliegen. Darin liegt auch unser berechtigtes Interesse. Da die Kontaktaufnahme von Ihnen ausgeht, Ihnen freisteht und wir zuvor darüber informieren, wie wir mit den übermittelten Daten umgehen, überwiegt insoweit unser berechtigtes Interesse gegenüber Ihrem Persönlichkeitsrecht. Die Speicherung von IP-Adresse und Absendezeitpunkt dient dem Schutz vor Missbrauch. Auch insoweit überwiegt unser berechtigtes Interesse. </p>
<p><em>4. Dauer der Speicherung</em><br>
Die Daten werden gelöscht, sobald sie für die Erreichung des Zweckes ihrer Erhebung nicht mehr erforderlich sind. Für die personenbezogenen Daten, die per E-Mail oder per Kontaktformular übersandt wurden, ist dies dann der Fall, wenn die jeweilige Konversation mit dem Nutzer beendet ist. Beendet ist die Konversation dann, wenn sich aus den Umständen entnehmen lässt, dass der betroffene Sachverhalt abschließend geklärt ist. Bei Nutzung der Chat-Funktion löschen wir die Daten unmittelbar nach erfolgreicher Kontaktaufnahme. Sollte eine Kontaktaufnahme scheitern, werden die Daten spätestens innerhalb von einer Woche die Daten gelöscht. </p>
<p><em>5. Widerspruchs- und Beseitigungsmöglichkeit</em><br>
Der Nutzer hat jederzeit die Möglichkeit der Speicherung seiner personenbezogenen Daten zu widersprechen. In einem solchen Fall kann die Konversation nicht fortgeführt werden. Der Widerspruch kann sowohl per E-Mail, per Post oder Telefax erfolgen. <br>
Alle personenbezogenen Daten, die im Zuge der Kontaktaufnahme gespeichert wurden, werden in diesem Fall von uns gelöscht. <br>
Soweit Daten im Rahmen eines Vertragsverhältnisses erhoben werden, besteht die Möglichkeit des Widerspruchs nicht, da diese zwingend zur Durchführung des Vertrags notwendig sind.</p>
<p><strong>VI. Reisebuchung </strong><br>
<em>1. Umfang der Datenverarbeitung</em><br>
Auf unserer Internetseite bieten wir Nutzern die Möglichkeit, sich unter Angabe personenbezogener Daten eine Reise zu buchen. Die Daten werden dabei in eine Eingabemaske eingegeben und an uns über eine Buchungssoftware übermittelt und gespeichert. Folgende Daten werden im Rahmen des Registrierungsprozesses erhoben:<br>
<u>Pflichtfelder:</u> <br>
(1) Anrede, Vor- u. Nachname, Straße, Hausnummer, PLZ, Ort, Land, Telefonnummer,
E-Mailadresse<br>
(2) Zimmertyp<br>
(3) Reiseteilnehmer (Geschlecht / Vor- u. Nachname/ Geburtsdatum) <br>
(4) IP-Adresse des Nutzers / Datum und Uhrzeit der Registrierung<br>
<br>
<u>Freiwillige Angaben:</u> <br>
(5) Faxnummer<br>
(6) Ihre Mitteilung </p>
<p><em>2. Rechtsgrundlage für die Datenverarbeitung</em><br>
Rechtsgrundlagen für die Verarbeitung der Daten ist Art. 6 Abs. 1 lit. b DSGVO (vertragliche / vorvertragliche Durchführung), Ihre im Buchungsvorgang erteilte Einwilligung, Art. 6 Abs. 1 lit.a DSGVO, Art. 6 Abs. 1 lit. c DSGVO (gesetzliche Verpflichtung gemäß BGB, HGB, Fluggastdatengesetz, EU-Pauschalreiserichtlinie, AO, etc.) sowie Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse). </p>
<p><em>3. Zweck der Datenverarbeitung</em><br>
Die Datenverarbeitung ist zur Erfüllung des Reisevertrages und der damit verbundenen Leistungen zwingend notwendig. Dies ist Zweck der Datenverarbeitung. Unser berechtigtes Interesse an der jeweiligen Verarbeitung ergibt sich aus den nachfolgenden Zwecken:</p>
<ul>
<li>Unterstützung unserer Vertriebsorganisation bei der Reiseberatung und -betreuung und dem Vertrieb im Rahmen der Reisebetreuung</li>
<li>Weiterentwicklung von Reisedienstleistungen und Zusatzprodukten </li>
<li>Werbung, der Markt- und der Meinungsforschung </li>
<li>Geltendmachung rechtlicher Ansprüche und Verteidigung bei rechtlichen Streitigkeiten </li>
<li>Prävention und Aufklärung von Straftaten </li>
<li>Gewährleistung der IT-Sicherheit und Verfügbarkeit des IT-Betriebs</li>
</ul>
<p>Unser Interesse an der jeweiligen Verarbeitung ergibt sich aus den jeweiligen Zwecken und ist im Übrigen wirtschaftlicher Natur (effiziente Aufgabenerfüllung, Vertrieb, Vermeidung von Rechtsrisiken).</p>
<p><em>4. Dauer der Speicherung</em><br>
Die Daten werden gelöscht, sobald sie für die Erreichung des Zweckes ihrer Erhebung nicht mehr erforderlich sind, es sei denn wir sind gesetzlich zur Aufbewahrung der Daten, bspw. nach steuerrechtlichen Vorgaben oder aus anderen gesetzlichen Gründen verpflichtet. Die dort vorgegebenen Fristen zur Aufbewahrung bzw. Dokumentation betragen zwei bis maximal zehn Jahre. Schließlich beurteilt sich die Speicherdauer auch nach den gesetzlichen Verjährungsfristen, die zum Beispiel nach den §§ 195 ff. des Bürgerlichen Gesetzbuches (BGB) in der Regel drei Jahre. </p>
<p><em>5. Datenübermittlung</em><br>
Zur Durchführung der Reise ist es notwendig Ihre Daten an Auftragsverabeiter (IT-Dienstleister, Buchungssysteme, Druckdienstleistungen), die Ihre Daten weisungsgebunden für uns verarbeiten sowie Dritte (Fluglinien, Hotels, Autovermietungen, etc.) in der EU / dem EWR, aber je nach Reiseziel auch in Drittländer, in denen keinerlei Datenschutzabkommen gelten (Bsp. Oman, Israel etc.) weiterzugeben. Empfänger der Daten sind insoweit auch Fluglinien, Hotels, Mietwagenunternehmen, öffentliche Stellen und Institutionen (Finanzbehörden, Botschaften des Ziellandes) bei Vorliegen einer gesetzlichen oder behördlichen Verpflichtung (Aufbewahrungspflichten, VISA-Beschaffung, Einholen von Einreisebestimmungen) sowie sonstige Stellen, für die Sie uns Ihre Einwilligung zur Datenübermittlung erteilt haben.
Im Hinblick auf Israel hat die EU-Kommission ein angemessenes Datenschutzniveau durch Angemessenheitsbeschluss 2011/61/EU festgestellt. Im Hinblick auf Reiseländer wie Ägypten, Jordanien, Oman, Usbekistan, Türkei und Marokko besteht kein angemessenes Datenschutzniveau. Wir weisen insoweit darauf hin, dass die Datenübermittlung in diese Länder mit Risiken verbunden ist. Buchen Sie eine Reise in eines der genannten Länder, ist die Übermittlung Ihrer personenbezogenen Daten für uns jedoch zwingend zur Vertragserfüllung notwendig. Wir sind daher gemäß Art. 49 Abs. 1 Unterabschnitt 1 lit. b) und c) berechtigt, Ihre Daten an unsere Dienstleister in dem jeweiligen Drittland zu übermitteln. <br>
Mit der Buchung erklären Sie sich insoweit mit der Datenverarbeitung einverstanden. </p>
<p><em>6. Verpflichtung zur Bereitstellung der Daten</em><br>
Sie sind im Rahmen einer Buchung verpflichtet, die zur Begründung, Durchführung und Beendigung der Geschäftsbeziehung notwendigen Daten zur Verfügung zu stellen. Sofern Sie die Daten nicht zur Verfügung stellen, können Sie über unsere Internetseite keine Reise buchen. </p>
<p><em>7. Widerspruchs- und Beseitigungsmöglichkeit</em><br>
Eine vorzeitige Löschung der Daten ist nur möglich, soweit nicht vertragliche oder gesetzliche Verpflichtungen einer Löschung entgegenstehen. Anderenfalls sind derartige Begehren per E-Mail oder Post an den Verantwortlichen zu richten. </p>
<p><strong>VII. Verwendung von YouTube-Videos</strong><br>
Unsere Website nutzt die YouTube-Einbettungsfunktion zur Anzeige und Wiedergabe von Videos des Anbieters „YouTube“, der zu der Google LLC., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA („Google“) gehört.<br>Hierbei wird der erweiterte Datenschutzmodus verwendet, der nach Anbieterangaben eine Speicherung von Nutzerinformationen erst bei Wiedergabe des/der Videos in Gang setzt. Wird die Wiedergabe eingebetteter YouTube-Videos gestartet, setzt der Anbieter „YouTube“ Cookies ein, um Informationen über das Nutzerverhalten zu sammeln. Hinweisen von „YouTube“ zufolge dienen diese unter anderem dazu, Videostatistiken zu erfassen, die Nutzerfreundlichkeit zu verbessern und missbräuchliche Handlungsweisen zu unterbinden. Wenn Sie bei Google eingeloggt sind, werden Ihre Daten direkt Ihrem Konto zugeordnet, wenn Sie ein Video anklicken. Wenn Sie die Zuordnung mit Ihrem Profil bei YouTube nicht wünschen, müssen Sie sich vor Aktivierung des Buttons ausloggen. Google speichert Ihre Daten (selbst für nicht eingeloggte Nutzer) als Nutzungsprofile und wertet diese aus. <br>
Eine solche Auswertung erfolgt insbesondere gemäß Art. 6 Abs. 1 lit.f DSGVO auf Basis der berechtigten Interessen von Google an der Einblendung personalisierter Werbung, Marktforschung und/oder bedarfsgerechten Gestaltung seiner Website. <br>
Ihnen steht ein Widerspruchsrecht zu gegen die Bildung dieser Nutzerprofile, wobei Sie sich zur Ausübung dessen an YouTube richten müssen.
Unabhängig von einer Wiedergabe der eingebetteten Videos wird bei jedem Aufruf dieser Website eine Verbindung zum Google-Netzwerk „DoubleClick“ aufgenommen, was ohne unseren Einfluss weitere Datenverarbeitungsvorgänge auslösen kann.<br>
Google LLC mit Sitz in den USA ist für das us-europäische Datenschutzübereinkommen „Privacy Shield“ zertifiziert, welches die Einhaltung des in der EU geltenden Datenschutzniveaus gewährleistet.
Weitere Informationen zum Datenschutz bei „YouTube“ finden Sie in der Datenschutzerklärung des Anbieters unter: <a href="https://www.google.de/intl/de/policies/privacy" target="_blank">https://www.google.de/intl/de/policies/privacy</a></p>
<p><strong>VIII. Rechte der betroffenen Person</strong><br>
Werden personenbezogene Daten von Ihnen verarbeitet, sind Sie Betroffener i.S.d. DSGVO und es stehen Ihnen folgende Rechte zu:</p>
<p><em>1. Auskunftsrecht</em><br>
Sie können von uns eine Bestätigung darüber verlangen, ob personenbezogene Daten, die Sie betreffen, von uns verarbeitet werden.
Liegt eine solche Verarbeitung vor, können Sie von uns über folgende Informationen Auskunft verlangen:<br>
(1) die Zwecke, zu denen die personenbezogenen Daten verarbeitet werden;<br>
(2) die Kategorien von personenbezogenen Daten, welche verarbeitet werden;<br>
(3) die Empfänger bzw. die Kategorien von Empfängern, gegenüber denen die Sie betreffenden personenbezogenen Daten offengelegt wurden oder noch offengelegt werden;<br>
(4) die geplante Dauer der Speicherung der Sie betreffenden personenbezogenen Daten oder, falls konkrete Angaben hierzu nicht möglich sind, Kriterien für die Festlegung der Speicherdauer;<br>
(5) das Bestehen eines Rechts auf Berichtigung oder Löschung der Sie betreffenden personenbezogenen Daten, eines Rechts auf Einschränkung der Verarbeitung durch den Verantwortlichen oder eines Widerspruchsrechts gegen diese Verarbeitung; <br>
(6) das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde;<br>
(7) alle verfügbaren Informationen über die Herkunft der Daten, wenn die personenbezogenen Daten nicht bei der betroffenen Person erhoben werden;<br>
(8) das Bestehen einer automatisierten Entscheidungsfindung einschließlich Profiling gemäß Art. 22 Abs. 1 und 4 DSGVO und zumindest in diesen Fällen aussagekräftige Informationen über die involvierte Logik sowie die Tragweite und die angestrebten Auswirkungen einer derartigen Verarbeitung für die betroffene Person.<br>
Ihnen steht das Recht zu, Auskunft darüber zu verlangen, ob die betreffenden personenbezogenen Daten in ein Drittland oder an eine internationale Organisation übermittelt werden. In diesem Zusammenhang können Sie verlangen, über die geeigneten Garantien gem. Art. 46 DSGVO im Zusammenhang mit der Übermittlung unterrichtet zu werden.</p>
<p><em>2. Recht auf Berichtigung</em><br>
Sie haben ein Recht auf Berichtigung und/oder Vervollständigung, sofern die verarbeiteten personenbezogenen Daten, die Sie betreffen, unrichtig oder unvollständig sind. Wir haben die Berichtigung dann unverzüglich vorzunehmen.</p>
<p><em>3. Recht auf Einschränkung der Verarbeitung</em><br>
Unter den folgenden Voraussetzungen können Sie die Einschränkung der Verarbeitung der Sie betreffenden personenbezogenen Daten verlangen:<br>
(1) wenn Sie die Richtigkeit der Sie betreffenden personenbezogenen für eine Dauer bestreiten, die es uns ermöglicht, die Richtigkeit der personenbezogenen Daten zu überprüfen;<br>
(2) die Verarbeitung durch uns unrechtmäßig ist, Sie die Löschung der personenbezogenen Daten durch uns ablehnen und stattdessen die Einschränkung der Nutzung der personenbezogenen Daten von uns verlangen;<br>
(3) wir die personenbezogenen Daten für die Zwecke der Verarbeitung nicht länger benötigen, Sie diese jedoch zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen benötigen, oder<br>
(4) wenn Sie Widerspruch gegen die Verarbeitung gemäß Art. 21 Abs. 1 DSGVO eingelegt haben und noch nicht feststeht, ob unsere berechtigten Gründe gegenüber Ihren Gründen überwiegen.<br>
Wurde die Verarbeitung der Sie betreffenden personenbezogenen Daten eingeschränkt, dürfen diese Daten von ihrer Speicherung abgesehen nur mit Ihrer Einwilligung oder zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen oder zum Schutz der Rechte einer anderen natürlichen oder juristischen Person oder aus Gründen eines wichtigen öffentlichen Interesses der Union oder eines Mitgliedstaats von uns verarbeitet werden.<br>
Wurde die Einschränkung der Verarbeitung nach den o.g. Voraussetzungen eingeschränkt, werden Sie von uns unterrichtet bevor die Einschränkung aufgehoben wird.</p>
<p><em>4. Recht auf Löschung</em><br>
<u>a) Löschungspflicht</u><br>
Sie können von uns verlangen, dass die Sie betreffenden personenbezogenen Daten unverzüglich gelöscht werden. Wir sind verpflichtet, diese Daten unverzüglich zu löschen, sofern einer der folgenden Gründe zutrifft:<br>
(1) Die Sie betreffenden personenbezogenen Daten sind für die Zwecke, für die sie erhoben oder auf sonstige Weise verarbeitet wurden, nicht mehr notwendig.<br>
(2) Sie widerrufen Ihre Einwilligung, auf die sich die Verarbeitung gem. Art. 6 Abs. 1 lit. a oder Art. 9 Abs. 2 lit. a DSGVO stützte, und es fehlt an einer anderweitigen Rechtsgrundlage für die Verarbeitung.<br>
(3) Sie legen gem. Art. 21 Abs. 1 DSGVO Widerspruch gegen die Verarbeitung ein und es liegen keine vorrangigen berechtigten Gründe für die Verarbeitung vor, oder Sie legen gem. Art. 21 Abs. 2 DSGVO Widerspruch gegen die Verarbeitung ein. <br>
(4) Die Sie betreffenden personenbezogenen Daten wurden unrechtmäßig verarbeitet. <br>
(5) Die Löschung der Sie betreffenden personenbezogenen Daten ist zur Erfüllung einer rechtlichen Verpflichtung nach dem Unionsrecht oder dem Recht der Mitgliedstaaten erforderlich, dem wir unterliegen.<br>
(6) Die Sie betreffenden personenbezogenen Daten wurden in Bezug auf angebotene Dienste der Informationsgesellschaft gemäß Art. 8 Abs. 1 DSGVO erhoben.</p>
<p><u>b) Information an Dritte</u><br>
Haben wir die Sie betreffenden personenbezogenen Daten öffentlich gemacht und sind wir gem. Art. 17 Abs. 1 DSGVO zu deren Löschung verpflichtet, so treffen wir angemessene Maßnahmen (auch technischer Art), um Verantwortliche, die die personenbezogenen Daten verarbeiten, darüber zu informieren, dass Sie als betroffene Person die Löschung aller Links zu diesen personenbezogenen Daten oder von Kopien oder Replikationen dieser personenbezogenen Daten verlangt haben. </p>
<p><u>c) Ausnahmen</u><br>
Das Recht auf Löschung besteht nicht, soweit die Verarbeitung erforderlich ist<br>
(1) zur Ausübung des Rechts auf freie Meinungsäußerung und Information;<br>
(2) zur Erfüllung einer rechtlichen Verpflichtung, die die Verarbeitung nach dem Recht der Union oder der Mitgliedstaaten, dem wir unterliegen erfordert, oder zur Wahrnehmung einer Aufgabe, die im öffentlichen Interesse liegt oder in Ausübung öffentlicher Gewalt erfolgt, die uns ggfs. übertragen wurde;<br>
(3) aus Gründen des öffentlichen Interesses im Bereich der öffentlichen Gesundheit gemäß Art. 9 Abs. 2 lit. h und i sowie Art. 9 Abs. 3 DSGVO;<br>
(4) für im öffentlichen Interesse liegende Archivzwecke, wissenschaftliche oder historische Forschungszwecke oder für statistische Zwecke gem. Art. 89 Abs. 1 DSGVO, soweit das unter Abschnitt a) genannte Recht voraussichtlich die Verwirklichung der Ziele dieser Verarbeitung unmöglich macht oder ernsthaft beeinträchtigt, oder<br>
(5) zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.</p>
<p><em>5. Recht auf Unterrichtung</em><br>
Haben Sie das Recht auf Berichtigung, Löschung oder Einschränkung der Verarbeitung uns gegenüber geltend gemacht, sind wir verpflichtet, allen Empfängern, denen Ihre personenbezogenen Daten offengelegt wurden, die Berichtigung, Löschung der Daten oder Einschränkung der Verarbeitung mitzuteilen, es sei denn, dies erweist sich als unmöglich oder ist für uns mit einem unverhältnismäßigen Aufwand verbunden.
Ihnen steht das Recht zu, von uns über diese Empfänger unterrichtet zu werden.</p>
<p><em>6. Recht auf Datenübertragbarkeit</em><br>
Sie haben das Recht, die Sie betreffenden personenbezogenen Daten von uns in einem strukturierten, gängigen und maschinenlesbaren Format zu erhalten. Außerdem haben Sie das Recht diese Daten einem anderen Verantwortlichen ohne Behinderung durch uns zu übermitteln, sofern<br>
(1) die Verarbeitung auf einer Einwilligung gem. Art. 6 Abs. 1 lit. a DSGVO oder Art. 9 Abs. 2 lit. a DSGVO oder auf einem Vertrag gem. Art. 6 Abs. 1 lit. b DSGVO beruht und<br>
(2) die Verarbeitung mithilfe automatisierter Verfahren erfolgt.<br>
Sie haben insoweit auch das Recht, dass wir Ihre Daten einem anderen Verantwortlichen übermitteln, soweit dies technisch machbar ist. Freiheiten und Rechte anderer Personen dürfen hierdurch jedoch nicht beeinträchtigt werden.<br>
Dieses Recht auf Datenübertragbarkeit gilt nicht für eine Verarbeitung personenbezogener Daten, die für die Wahrnehmung einer Aufgabe erforderlich ist, die im öffentlichen Interesse liegt oder in Ausübung öffentlicher Gewalt erfolgt, die uns übertragen wurde.</p>
<p><em>7. Widerspruchsrecht</em><br>
Sie haben das Recht, aus Gründen, die sich aus ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung der Sie betreffenden personenbezogenen Daten, die aufgrund von Art. 6 Abs. 1 lit. e oder f DSGVO erfolgt, Widerspruch einzulegen; dies gilt auch für ein auf diese Bestimmungen gestütztes Profiling. <br>
Wir verarbeiten die Sie betreffenden personenbezogenen Daten nicht mehr, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.</p>
<p><em>8. Recht auf Widerruf der datenschutzrechtlichen Einwilligungserklärung</em><br>
Sie haben das Recht, datenschutzrechtliche Einwilligungserklärungen jederzeit zu widerrufen. Durch den Widerruf der Einwilligung wird die Rechtmäßigkeit der aufgrund der Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt.</p>
<p><em>9. Recht auf Beschwerde bei einer Aufsichtsbehörde</em><br>
Unbeschadet eines anderweitigen verwaltungsrechtlichen oder gerichtlichen Rechtsbehelfs steht Ihnen das Recht auf Beschwerde bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat ihres Aufenthaltsorts, ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes, zu, wenn Sie der Ansicht sind, dass die Verarbeitung der Sie betreffenden personenbezogenen Daten gegen die DSGVO verstößt.
Die Aufsichtsbehörde, bei der die Beschwerde eingereicht wurde, unterrichtet Sie als Beschwerdeführer über den Stand und die Ergebnisse der Beschwerde einschließlich der Möglichkeit eines gerichtlichen Rechtsbehelfs nach Art. 78 DSGVO.</p>
<p><strong>IX. Herausgabe von zwingend benötigten pb. Daten</strong><br>
Im Rahmen unserer Geschäftsbeziehung benötigen wir von Ihnen zwingend folgende personenbezogenen Daten</p>
<ul>
<li>Daten, die für die Aufnahme und die Durchführung der Geschäftsbeziehung gebraucht werden</li>
<li>Daten, die für die Erfüllung der damit verbundenen vertraglichen Pflichten notwendig sind</li>
<li>Daten, zu deren Erhebung wir rechtlich verpflichtet sind.</li>
</ul>
<p>Ohne diese personenbezogenen Daten sind wir in der Regel nicht in der Lage, einen Vertrag mit Ihnen einzugehen oder auszuführen.</p>
<p><strong>X. Transportverschlüsselung</strong><br>
Um Ihre Daten vor unerwünschten Zugriffen zu schützen, setzen wir auf unseren Seiten ein Verschlüsselungsverfahren ein. Ihre Angaben werden dann von Ihrem Rechner zu unserem Server und umgekehrt über das Internet mittels einer 128 Bit TLS-Verschlüsselung (Transport Layer Security) (Hinweis, wir empfehlen mindestens eine TLS 1.2-Verschlüsselung) übertragen. Sie erkennen dies daran, dass auf der Statusleiste Ihres Browsers das Schloss-Symbol geschlossen ist und die Adresszeile mit https:// beginnt. Wir verzichten auf eine Verschlüsselung, wenn sie lediglich allgemein verfügbare Informationen mit uns austauschen.</p>
<p>Stand Mai 2018</p>
</div>
</div>

View file

@ -0,0 +1,11 @@
{# @var booking_request \AppBundle\Entity\BookingRequest #}
Sehr geehrte{{ booking_request.salutation == 1 ? 'r Herr' : ' Frau' }} {{ booking_request.lastName }},
vielen Dank für Ihren verbindlichen Buchungsauftrag. Dieser wird schnellstmöglich bearbeitet und stellt noch keine{#
#} Reisebestätigung dar. Bitte prüfen Sie noch einmal Ihre Angaben und kontaktieren Sie uns bitte, wenn ein Fehler{#
#} enthalten ist.
{% include 'default/email/components/bookingSummary.txt.twig' %}
{% include 'default/email/components/signature.txt.twig' %}

View file

@ -0,0 +1,15 @@
FOLGENDE REISE WURDE GEBUCHT:
Anfrage Nr
{{ lead_id }}
URL
{{ travel_program_url }}
CRM
{{ crm_v1_url }}
{{ crm_v3_url }}
{% include 'default/email/components/bookingSummary.txt.twig' %}

View file

@ -0,0 +1,98 @@
{# @var booking_request \AppBundle\Entity\BookingRequest #}
=====================================================================================
Reisedaten:
=====================================================================================
Reiseprogramm: {{ travel_date.travelProgram.title }} ({{ travel_date.name }})
Kategorie: Standard
Reisezeitraum: {{ travel_date.start|date }} - {{ travel_date.end|date }}
Abfahrts-/Abflugort: {{ booking_request.departure.name }}
------------------------------------------------------------
{% for summary_entry in summary %}
{% if(summary_entry.value != "!") %}
{{ summary_entry.value|number_format(2) }} € : {{ summary_entry.label|striptags }}
{% else %}
{{ summary_entry.label|striptags }}
{% endif %}
{% endfor %}
------------------------------------------------------------
Gesamtpreis: {{ booking_price_info['total']|number_format(2) }}
Anzahlung: {{ booking_price_info.deposit_total|number_format(2) }} € (ist sofort fällig)
{% if( booking_price_info.totalInsurance > 0) %}
Versicherung: {{ booking_price_info.totalInsurance|number_format(2) }} € (ist sofort fällig)
{% endif %}
Restzahlung: {{ booking_price_info.final_payment|number_format(2) }} € (bis zum {{ booking_price_info.final_payment_date}})
=====================================================================================
Reiseleistungen:
=====================================================================================
Eingeschlossene Leistungen:
{% for travel_program_service in travel_date.travelProgram.included|split('\n') %}
[x] {{ travel_program_service|raw }}
{% endfor %}
Nicht eingeschlossene, zubuchbare Leistungen:
{% for travel_program_service in travel_date.travelProgram.excluded|split('\n') %}
[o] {{ travel_program_service|raw }}
{% endfor %}
=====================================================================================
Reiseanmelder{% if booking_request.salutation == 2 %}in{% endif %}
=====================================================================================
Vorname: {{ booking_request.firstName }}
Nachname: {{ booking_request.lastName }}
Adresse: {{ booking_request.streetAddress }}
PLZ: {{ booking_request.zipCode }}
Ort: {{ booking_request.city }}
Telefonnummer: {{ booking_request.phone }}
Handynummer: {{ booking_request.mobile ?? 'keine Angabe' }}
E-Mail: {{ booking_request.email ?? 'keine Angabe' }}
=====================================================================================
Reiseteilnehmer:
Nr., Zimmertyp, Geschlecht, Vorname, Nachname, Geburtsdatum
=====================================================================================
{% set travelerIndex = 0 %}
{% set travelerCollection = booking_request.travelers|slice(0, (booking_request.travelerCount + booking_request.childrenCount)) %}
{% for room in booking_request.occupiedRooms %}
{% if(room.type == 1) %}
{{ loop.index }}. Einzelzimmer Erwachsener, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{% set travelerIndex = travelerIndex + 1 %}
{% if(room.child == 1) %}
{{ loop.index }}. Einzelzimmer Kind, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{% set travelerIndex = travelerIndex + 1 %}
{% endif %}
{% elseif (room.type == 2) %}
{{ loop.index }}. Doppelzimmer Erwachsener, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{{ loop.index }}. Doppelzimmer Erwachsener, {{ travelerCollection[travelerIndex+1].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+1].firstName }}, {{ travelerCollection[travelerIndex+1].lastName -}}, {{ travelerCollection[travelerIndex+1].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{% set travelerIndex = travelerIndex + 2 %}
{% if(room.child == 1) %}
{{ loop.index }}. Doppelzimmer Kind, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{% set travelerIndex = travelerIndex + 1 %}
{% endif %}
{% elseif (room.type == 3) %}
{{ loop.index }}. Dreibettzimmer Erwachsener, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{{ loop.index }}. Dreibettzimmer Erwachsener, {{ travelerCollection[travelerIndex+1].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+1].firstName }}, {{ travelerCollection[travelerIndex+1].lastName -}}, {{ travelerCollection[travelerIndex+1].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{{ loop.index }}. Dreibettzimmer Erwachsener, {{ travelerCollection[travelerIndex+2].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex+2].firstName }}, {{ travelerCollection[travelerIndex+2].lastName -}}, {{ travelerCollection[travelerIndex+2].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{% set travelerIndex = travelerIndex + 3 %}
{% if(room.child == 1) %}
{{ loop.index }}. Dreibettzimmer Kind, {{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}, {{ travelerCollection[travelerIndex].firstName }}, {{ travelerCollection[travelerIndex].lastName -}}, {{ travelerCollection[travelerIndex].birthDate }}, {{ travelerCollection[travelerIndex].nationalityName(nationalities) }}
{% set travelerIndex = travelerIndex + 1 %}
{% endif %}
{% endif %}
{% endfor %}
=====================================================================================
Unverbindliche Anmerkungen:
=====================================================================================
{{ booking_request.notes ?? '-' }}

View file

@ -0,0 +1,43 @@
{# @var fewo_booking_request \AppBundle\Entity\FewoBookingRequest #}
{# @var fewo_lodging \AppBundle\Entity\FewoLodging #}
{# @var fewo_price \AppBundle\Entity\FewoPrice #}
=======================================================
Ihre Reisedaten
Reisezeitraum: {{ fewo_booking_request.fromDate|date }} - {{ fewo_booking_request.toDate|date }}
Ferienwohnung: {{ fewo_lodging.name }}
=======================================================
{% for season, values in priceResult.season %}
* Saison: {{ season }}
* Mindestbelegung: {{ values.minimumStay }} {{ values.minimumStay < 2 ? 'Nacht' : 'Nächte' }}
* Preis: {{ values.price|number_format(2) }} € / {{ values.numberDays }} {{ values.numberDays < 2 ? 'Nacht' : 'Nächte' }} x {{ values.perNight|number_format(2) }}
---------------------------------------------------------------------------
{% endfor %}
* Service-Gebühr: + {{ priceResult.flatPrice|number_format(2) }}
* Kaution: + {{ priceResult.deposit|number_format(2) }}
---------------------------------------------------------------------------
* Gesamtpreis: {{ priceResult.total_price|number_format(2) }}
=======================================================
Reiseanmelder: {% if fewo_booking_request.salutation == 2 %}in{% endif %}
* Vorname: {{ fewo_booking_request.firstName }}
* Nachname: {{ fewo_booking_request.lastName }}
* Adresse: {{ fewo_booking_request.streetAddress }}
* PLZ: {{ fewo_booking_request.zipCode }}
* Ort: {{ fewo_booking_request.city }}
* Telefon: {{ fewo_booking_request.phone }}
* Handynummer: {{ fewo_booking_request.mobile ?? 'keine Angabe' }}
* E-Mail: {{ fewo_booking_request.email ?? 'keine Angabe' }}
=======================================================
Reiseteilnehmer
Erwachsene: {{ fewo_booking_request.travelerCountAdult }}
Kinder: {{ fewo_booking_request.travelerCountChild }}
Gesamt: {{ fewo_booking_request.travelerCount }}
=======================================================
Unverbindliche Anmerkungen:
{{ fewo_booking_request.notes ?? '-' }}
=======================================================

View file

@ -0,0 +1,19 @@
Mit freundlichen Grüßen
Ihr Team von STERN TOURS
--
STERN TOURS GmbH
Emser Straße 3
10719 Berlin
Geschäftsführer: Thomas Stern
E-Mail: stern@stern-tours.de
Tel.: 030 / 700 94 100
Fax: 030 / 700 94 1044
Registergericht: Amtsgericht Charlottenburg
Registernummer: HRB 67111
Steuernummer: 27/545/30703
UST-Ident.-Nr.: DE192609253
Finanzamt: Wilmersdorf

View file

@ -0,0 +1,27 @@
{# @var contact_request \AppBundle\Entity\ContactRequest
#}Neue Kontaktanfrage:
CRM: {{ crm_url }}
Anrede: {{ contact_request.salutation == 1 ? 'Herr' : 'Frau' }}
Vorname: {{ contact_request.firstName|default('-') }}
Nachname: {{ contact_request.lastName|default('-') }}
Adresse: {{ contact_request.streetAddress|default('-') }}
PLZ: {{ contact_request.zipCode|default('-') }}
Ort: {{ contact_request.city|default('-') }}
Telefonnummer: {{ contact_request.phone|default('-') }}
Fax: {{ contact_request.mobilePhone|default('-') }}
E-Mail: {{ contact_request.email|default('-') }}
Abflugort 1: {{ contact_request.departure0|default('-') }}
Abflugort 2: {{ contact_request.departure1|default('-') }}
Abflugort 3: {{ contact_request.departure2|default('-') }}
Reisebeginn: {{ contact_request.start is not empty ? contact_request.start|date }}
Reiseende: {{ contact_request.end is not empty ? contact_request.end|date }}
Dauer: {{ contact_request.duration|default('-') }} Tage
Anzahl d. Reisenden: {{ contact_request.travelerCount|default('-') }}
Kommentar:
{{ contact_request.notes }}

View file

@ -0,0 +1,15 @@
{# @var fewo_booking_request \AppBundle\Entity\FewoBookingRequest #}
Sehr geehrte{{ fewo_booking_request.salutation == 1 ? 'r Herr' : ' Frau' }} {{ fewo_booking_request.lastName }},
vielen Dank für Ihren Auftrag, folgende Ferienwohnung wurde gemietet:
{% include 'default/email/components/fewoBookingSummary.txt.twig' %}
Bitte prüfen Sie noch einmal Ihre Angaben und kontaktieren Sie uns bitte, wenn ein Fehler enthalten ist.
{% include 'default/email/components/signature.txt.twig' %}

View file

@ -0,0 +1,9 @@
Folgende Wohnung wurde gemietet
URL:
{{ lodging_url }}
CRM:
{{ crm_url }}
{% include 'default/email/components/fewoBookingSummary.txt.twig' %}

View file

@ -0,0 +1,22 @@
{%- block form_field -%}
{{- form_label(form, label, opt ?? {}) -}}
{{- form_widget(form, opt ?? {}) -}}
{{- form_errors(form) -}}
{%- endblock form_field -%}
{%- block form_field_pho -%}
{%- if label is empty -%}
{%- set label = form.vars.placeholder -%}
{%- endif -%}
{%- set opt = opt|merge({
label_attr: (opt.label_attr ?? {})|merge({class: (opt.label_attr.class|default('') ~ ' sr-only')|trim}),
attr: (opt.attr ?? {})|merge({placeholder: opt.attr.placeholder|default(
(form.vars.translation_domain is same as(false) ? label : label|trans({}, form.vars.translation_domain)) ~
((opt.required ?? form.vars.required) ? ' *' : '')
)})
}) -%}
{#{%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' sr-only')|trim}) -%}#}
{{- form_label(form, label, opt) -}}
{{- form_widget(form, opt) -}}
{{- form_errors(form, opt) -}}
{%- endblock form_field_pho -%}

View file

@ -0,0 +1,67 @@
{% use 'form_div_layout.html.twig' with
choice_widget_collapsed as base_choice_widget_collapsed,
checkbox_widget as base_checkbox_widget,
radio_widget as base_radio_widget
%}
{% use 'bootstrap_3_layout.html.twig' %}
{% block choice_widget_collapsed -%}
{% set attr = attr|merge({
class: (attr.class|default('') ~ ' selectpicker')|trim,
'data-style': attr['data-style']|default('btn-white'),
'data-dropout': attr['data-dropout']|default('false')
}) %}
<div class="dropdown" data-toggle="dropdown">
{{- block('base_choice_widget_collapsed') -}}
</div>
{%- endblock %}
{% block date_widget -%}
{% set range = 0 %}
{% for attrname, attrvalue in attr %}
{% if attrname == 'data-range' %}
{% set range = 1 %}
{% endif %}
{% endfor %}
{% if range == 1 -%}
{{- parent() -}}
{%- else -%}
{% set attr = attr|merge({class: (attr.class|default('') ~ ' datepicker')|trim}) -%}
<div class="input-group">
<label for="{{ id }}" class="input-group-addon"><i class="fa fa-calendar"></i></label>
{{ parent() -}}
</div>
{%- endif -%}
{%- endblock %}
{% block st_plain_date_widget -%}
<div class="input-group">
{{- block('form_widget_simple') -}}
</div>
{%- endblock %}
{% block checkbox_widget -%}
{{- block('base_checkbox_widget') -}}
{%- endblock checkbox_widget %}
{% block radio_widget -%}
{{- block('base_radio_widget') -}}
{%- endblock radio_widget %}
{% block datalist_widget -%}
{% set attr = attr|merge({list: attr.list|default(id ~ '_list')}) -%}
{{ block('form_widget_simple') -}}
<datalist id="{{ id }}_list">
{% for choice in choices %}
<option value="{{ choice }}"></option>
{% endfor %}
</datalist>
{%- endblock datalist_widget %}
{% block form_label -%}
{%- if required -%}
{%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' st-required')|trim}) -%}
{%- endif -%}
{{- parent() -}}
{%- endblock form_label %}

View file

@ -0,0 +1,5 @@
{% extends 'base.html.twig' %}
{% block body %}
<pre><code>{{ content|raw }}</code></pre>
{% endblock %}

View file

@ -0,0 +1,836 @@
{% extends 'base.html.twig' %}
{% form_theme form 'default/form/theme.html.twig' %}
{% block meta_robots %}
<meta name="robots" content="noindex,nofollow" />
{% if app.debug %}<!-- meta-robots wurde durch das Twig-Seitentemplate festgelegt -->{% endif %}
{% endblock %}
{% block canonical_tag %}{% if app.debug %}<!-- Die canonical URL wird für diese Seite bewusst nicht definiert, da sie vom Suchindex ausgeschlossen wurde (Siehe meta robots) -->{% endif %}{% endblock %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>Buchungsformular</h1>
<div class="pull-right">
<a href="{{ page.urlPath }}" class="btn btn-primary btn-sm"><< zurück zu Termine und Preise</a>
</div>
<div class="clearfix"></div>
<h2 style="margin-top:10px">{{ travel_program.title }}</h2>
<div id="booking_form" class="booking_form">
<form class="st-booking-form" method="post" data-toggle="validator">
{{ form_errors(form) }}
{% spaceless %}
{% if not form.vars.valid %}
<ul>
{% for error in form.vars.errors.form.getErrors(true) %}
<li>{{ error.message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endspaceless %}
{{ form_errors(form.email) }}
<div id="message"></div>
<div class="form-box">
<div class="table-responsive" id="no-more-tables_first">
<table class="table first-table">
<tbody>
<tr>
<td>Reiseprogramm</td>
<td>
{{ travel_program.title }}
{#<br class="visible-xs"><a href="#" data-toggle="modal" data-target="#myModal">(Reisebeschreibung aufrufen)</a>#}
</td>
</tr>
<tr>
<td>Kategorie</td>
<td>Standard {# #TODO #}</td>
</tr>
<tr>
<td>Reisezeitraum</td>
<td>{{ travel_date.start|date }} - {{ travel_date.end|date }} <br class="hidden visible-xs"> ({{ travel_date.name }})</td>
</tr>
<tr>
<td>{{ form_label(form.departure, 'Abflugort') }}</td>
<td>
<div class="form-group" style="margin-bottom: 0px;">
{{ form_widget(form.departure) }}
{{ form_errors(form.departure) }}
<div class="help-block with-errors"></div>
</div>
</td>
</tr>
{# TODO folgendes evtl noch weiter verallgemeinern #}
{% set priceTypeIds = [] %}
{% set priceTypeChildIds = [] %}
{% set extraDays = 0 %}
{% for price in travel_date.prices %}
{% if(price.available == "1") %}
{% set priceTypeIds = priceTypeIds|merge([price.priceTypeId]) %}
{% if(price.priceChildren > 0) %}
{% set priceTypeChildIds = priceTypeChildIds|merge([price.priceTypeId]) %}
{% endif %}
{% if(price.extraPrice > 0) %}
{% set extraDays = 1 %}
{% endif %}
{% if(price.extraPriceComfort > 0) %}
{% set extraDays = 1 %}
{% endif %}
{% if(price.extraPriceChildren > 0) %}
{% set extraDays = 1 %}
{% endif %}
{% endif %}
{% endfor %}
{% if "1" in priceTypeIds %}
<tr>
{% else %}
<tr style="display:none">
{% endif %}
<td>{{ form_label(form.singleRoomCount, 'Einzelzimmer') }}</td>
<td>
{{ form_widget(form.singleRoomCount) }}
{{ form_errors(form.singleRoomCount) }}
</td>
</tr>
{% if "1" in priceTypeChildIds %}
<tr>
{% else %}
<tr style="display:none">
{% endif %}
<td>{{ form_label(form.singleRoomChildCount, 'Einzelzimmer mit Kind') }}</td>
<td>
{{ form_widget(form.singleRoomChildCount) }}
{{ form_errors(form.singleRoomChildCount) }}
</td>
</tr>
{% if "3" in priceTypeIds %}
<tr>
{% else %}
<tr style="display:none">
{% endif %}
<td>{{ form_label(form.doubleRoomCount, 'Doppelzimmer') }}</td>
<td>
{{ form_widget(form.doubleRoomCount) }}
{{ form_errors(form.doubleRoomCount) }}
</td>
</tr>
{% if "3" in priceTypeChildIds %}
<tr>
{% else %}
<tr style="display:none">
{% endif %}
<td>{{ form_label(form.doubleRoomChildCount, 'Doppelzimmer mit Kind') }}</td>
<td>
{{ form_widget(form.doubleRoomChildCount) }}
{{ form_errors(form.doubleRoomChildCount) }}
</td>
</tr>
{% if "5" in priceTypeIds %}
<tr>
{% else %}
<tr style="display:none">
{% endif %}
<td>{{ form_label(form.tripleRoomCount, 'Dreibettzimmer') }}</td>
<td>
{{ form_widget(form.tripleRoomCount) }}
{{ form_errors(form.tripleRoomCount) }}
</td>
</tr>
{% if "5" in priceTypeChildIds %}
<tr>
{% else %}
<tr style="display:none">
{% endif %}
<td>{{ form_label(form.tripleRoomChildCount, 'Dreibettzimmer mit Kind') }}</td>
<td>
{{ form_widget(form.tripleRoomChildCount) }}
{{ form_errors(form.tripleRoomChildCount) }}
</td>
</tr>
<tr>
<td>Zubuchbare Leistungen</td>
<td>
{% if form.comfort is defined %}
<div class="checkbox">
{{ form_widget(form.comfort) }}
<label for="{{ form.comfort.vars.id }}">
Komfort-Kategorie (4 Sterne)
(<a href="#" data-toggle="modal" data-target="#st-comfort-booking-option-modal">Details</a>)
</label>
{% embed "default/components/embed/modal.html.twig" with {
'title': 'Komfort-Kategorie (4 Sterne)',
'id': 'comfort-booking-option'
} %}
{% block body %}
<h4>Aufpreise für Kategorie</h4>
<ul>
{% for price in travel_date.prices %}
{# @var price \AppBundle\Entity\TravelPeriodPrice #}
<li>
p.P. {{ price.effectiveComfortPrice|number_format(2) }}
{{ price_type_by_id[price.priceType.id].name }}
</li>
{% endfor %}
</ul>
{% endblock %}
{% endembed %}
</div>
{% endif %}
{% if form.travelOptions is defined %}
{% for travelOptionForm in form.travelOptions %}
{% include 'default/components/booking/travelOption.html.twig' with {
'travelOptionForm': travelOptionForm,
'travelOption': form.travelOptions.vars.choices[travelOptionForm.vars.value].data
} %}
{% endfor %}
{% endif %}
</td>
</tr>
{% if extraDays == 1 and travel_program.drafts.count() > 0 %}
<tr>
{% else %}
<tr style="display:none;">
{% endif %}
<td>Verlängerung buchen</td>
<td>
{% for country in travel_program.countries %}
<p>{{ country.textBefore }}</p>
{% endfor %}
{{ form_widget(form.extraBookingDaysBefore) }}
{{ form_errors(form.extraBookingDaysBefore) }}
<br>
{% for country in travel_program.countries %}
<p>{{ country.textAfter }}</p>
{% endfor %}
{{ form_widget(form.extraBookingDaysAfter) }}
{{ form_errors(form.extraBookingDaysAfter) }}
</td>
</tr>
<tr style="">
<td>Reiseversicherung</td>
<td>
<div class="radio">
<input id="st-no-insurance-opt" type="radio" value=""
name="{{ form.insurance.vars.full_name }}"
{% if form.insurance.vars.value == '' %}checked{% endif %}
>
<label for="st-no-insurance-opt">keine Reiseversicherung</label>
</div>
{% for insuranceForm in form.insurance %}
{% include 'default/components/booking/insurance.html.twig' with {
'form': insuranceForm,
'insurance': form.insurance.vars.choices[insuranceForm.vars.value].data
} %}
{% endfor %}
{{ form_errors(form.insurance) }}
</td>
</tr>
<tr style="display: none">
<td>Reiseversicherung</td>
<td>
<p style="white-space: normal;">
<br>
{{ getContextBySlug('reise-ruecktrittskosten-empfehlung')|raw }}
</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-xs-12">
<div class="panel">
<div class="panel-body">
<h3>Ihr gewähltes Angebot</h3>
<div class="st-booking-summary">
{% include 'default/components/booking/summary.html.twig' with {
'summary': summary,
'total_price': total_price,
'booking_price_info': booking_price_info,
'show_detail' : true,
} %}
</div>
</div>
</div>
<p>
{{ getContextBySlug('gewuenschte-zahlungsart') }}
{% if(travel_program.category.id != 1) %}
{{ getContextBySlug('abweichende-anzahlungsbedingungen') }}
{% endif %}
</p>
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Flugdaten</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="accordion-toggle-2">
<div class="panel-group" id="accordion_fd">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion_fd" href="#collapse_fd" aria-expanded="true">
<h3><span>Flugdaten einblenden</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse_fd" class="panel-collapse collapse" aria-expanded="true" style="">
<div class="panel-body">
{% for departure in travel_date.departures %}
{# @var departure \AppBundle\Entity\TravelDeparturePoint #}
{% if departure.flightTime[travel_date.startWeekday] is defined %}
{% if departure.flightTime[travel_date.startWeekday] != "" %}
<div class="flight_times_ele" id="flight_time_{{ departure.id }}" style="display: none;">
<h3>Von {{ departure.name }}</h3>
{% for flightTime in departure.flightTime[travel_date.startWeekday]|split('\n') %}
{% if flightTime != "" %}
{{ flightTime|raw }}<br>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endif %}
{% endfor %}
<div class="" id="no_flight_time" style="display: none;">
<p>{{ getContextBySlug('keine-flugdaten') }}</p>
</div>
</div>
</div>
</div>
</div>
</div><!-- accordion -->
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseprogramm mit Anzeige der Reisetage</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
{% set travel_program_dates = travel_program.getTravelProgramDates(travel_date.start) %}
<ul class="c1">
{% for travel_program_date in travel_program_dates if travel_program_date.count < 1 %}
<div id="extraDaysProgramBefore_show" style="display: none;">
<li>
<span id="extraDaysProgramBefore_date" data-org-date="{{ travel_program_date.date }}">{{ travel_program_date.date }}</span> : Reiseverlängerung vor der Reise - {{ travel_program_date.day|raw }}
{% if travel_program_date.night is defined %}
<br> {{ getContextBySlug('uebernachtung-reiseverlaengerung') }}
{% endif %}
</li>
<li>
{{ travel_program_date.date }} : Start {{ travel_program.title }}
{% if travel_program_date.night is defined %}
<br>Übernachtung : {{ travel_program_date['night']|raw }}
{% endif %}
</li>
</div>
<div id="extraDaysProgramBefore_hide">
<li>
{{ travel_program_date.date }} : {{ travel_program_date.day|raw }}
{% if travel_program_date.night is defined %}
<br>Übernachtung : {{ travel_program_date['night']|raw }}
{% endif %}
</li>
</div>
{% endfor %}
<div class="accordion-toggle-2">
<div class="panel-group" id="accordion_pd">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion_pd" href="#collapse_pd" aria-expanded="true">
<h3><span>Reiseablauf mit Reisetagen einblenden</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse_pd" class="panel-collapse collapse" aria-expanded="true" style="">
<div class="panel-body">
{% for travel_program_date in travel_program_dates if travel_program_date.count > 0 %}
{% if travel_program_dates|length != travel_program_date.count +1 %}
<li>
{{ travel_program_date.date }} : {{ travel_program_date.day|raw }}
{% if travel_program_date.night is defined %}
<br>Übernachtung : {{ travel_program_date['night']|raw }}
{% endif %}
</li>
{% else %}
<div id="extraDaysProgramAfter_show" style="display: none;">
<li>
{{ travel_program_date.date }} : Ende {{ travel_program.title }}
<br>{{ getContextBySlug('uebernachtung-reiseverlaengerung') }}
</li>
<li>
<span id="extraDaysProgramAfter_date" data-org-date="{{ travel_program_date.date }}">{{ travel_program_date.date }}</span> : Reiseverlängerung - {{ travel_program_date.day|raw }}
</li>
</div>
<div id="extraDaysProgramAfter_hide">
<li>
{{ travel_program_date.date }} : {{ travel_program_date.day|raw }}
{% if travel_program_date.night is defined %}
<br>Übernachtung : {{ travel_program_date['night']|raw }}
{% endif %}
</li>
</div>
{% endif %}
{% endfor %}
</div>
</div>
</div>
</div>
</ul>
</div><!-- accordion -->
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseleistungen</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="accordion-toggle-2">
<div class="panel-group" id="accordion">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapse1" aria-expanded="true">
<h3><span>Reiseleistungen einblenden</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse1" class="panel-collapse collapse" aria-expanded="true" style="">
<div class="panel-body">
<h3>Eingeschlossene Leistungen</h3>
<ul class="c1">
{% for travel_program_service in travel_program.included|replace({'*': '<img src="/bundles/app/images/star-mini.png" >'})|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
<h3>Nicht eingeschlossene / zubuchbare Leistungen</h3>
<ul class="c1">
{% for travel_program_service in travel_program.excluded|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
{% if (travel_program.advices is not empty) or (travel_program.generalnote is not empty) %}
<h3>Hinweise</h3>
<ul class="c1">
{% if travel_program.generalnote is not empty %}
{% for notes in travel_program.generalnote.text|trim|split('\n') %}
{% if notes is not empty %}
<li>{{ notes|raw }}</li>
{% endif %}
{% endfor %}
{% endif %}
{% for travel_program_advice in travel_program.advices|trim|split('\n') %}
{% if travel_program_advice is not empty %}
<li>{{ travel_program_advice|raw }}</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</div>
</div>
</div><!-- accordion -->
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseanmelder</h5>
</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12">
{{ form_field_pho(form.salutation, 'Anrede', {'label_attr': {class: 'sr-only'}}) }}
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(form.firstName, 'Vorname') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(form.lastName, 'Nachname') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(form.streetAddress, 'Straße, Hausnummer') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(form.zipCode, 'PLZ') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(form.city, 'Ort') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12">
{{ form_field_pho(form.nation, 'Land') }}
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(form.phone, 'Telefon tagsüber') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-6 col-sm-6 col-xs-12">
{{ form_field_pho(form.mobile, 'Handynummer (Bitte angeben)') }}
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="form-group">
<div class="required">
{{ form_field_pho(form.email, 'E-Mail-Adresse') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div><!-- end form-box -->
<style type="text/css">
.form-box-small .form-group {
margin-bottom: 5px;
}
.form-box-small .help-block {
margin-top: 0px;
margin-bottom: 0px;
}
.form-box-small .form-control{
margin-bottom: 8px;
}
.form-box.form-box-small .st-travelers div.required:before {
margin-right: 20px;
right: 0px;
top: 0px;
}
</style>
<div class="form-box form-box-small">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseteilnehmer</h5>
<p>{{ getContextBySlug('namen-reisepass') | raw }}</p>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="hidden">
{% for country in travel_program.countries %}
<input type="hidden" name="travel_program_countries_id[]" value="{{ country.id }}">
{% endfor %}
</div>
<div class="st-travelers">
{% set currentIndex = 0 %}
{% for room in form.rooms %}
{% for traveler in room.travelers %}
{#{{ dump(room.vars.value.roomType) }}#}
{% set currentIndex = currentIndex + 1 %}
<div class="row st-traveler st-traveler-{{ currentIndex }}"
data-st-traveler-index="{{ currentIndex }}"
data-room-index="{{ loop.parent.loop.index }}"
data-room-type="{{ room.vars.value.type }}"
style="display: ; border-bottom:2px solid #ffc926; margin-bottom: 20px; padding-bottom: 10px;">
<div class="col-md-12 col-sm-12 col-xs-12" style="margin-bottom:10px; padding-bottom:10px; border-bottom:1px solid #fff;">
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button">
{% set roomType = "" %}
{% if loop.parent.loop.index is not null %}
{% if room.vars.value.type == "1" %}
{% set roomType = "Einzelzimmer" %}
{% elseif room.vars.value.type == "2" %}
{% set roomType = "Doppelzimmer" %}
{% elseif room.vars.value.type == "3" %}
{% set roomType = "Dreibettzimmer" %}
{% endif %}
{% endif %}
Reiseteilnehmer | {{ roomType }}
</button>
{% if traveler.vars.value.child %}
<br><i>bis einschließlich 11 Jahre</i>
{% endif %}
</div>
<div class="col-md-3 col-sm-12 col-xs-12">
<div class="form-group" style="margin-top:0px;">
<div class="">
{{ form_field_pho(traveler.sex, 'Geschlecht', {
required: false
}) }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-4 col-sm-12 col-xs-12">
<div class="form-group">
<div class="">
{{ form_field_pho(traveler.firstName, 'Vorname') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-5 col-sm-12 col-xs-12">
<div class="form-group">
<div class="">
{{ form_field_pho(traveler.lastName, 'Nachname') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-offset-3 col-md-4 col-sm-12 col-xs-12">
<div class="form-group" style="margin-top:0px;">
<div class="nationality_select" data-toggle="#nationality_entry_{{ currentIndex }}">
{{ form_field_pho(traveler.nationality, 'Nationalität') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-5 col-sm-12 col-xs-12">
<div class="form-group">
<div class="">
{{ form_field_pho(traveler.birthDate, 'Geburtsdatum (04.01.1964)') }}
</div>
<div class="help-block with-errors"></div>
</div>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="accordion-toggle-2" id="nationality_entry_{{ currentIndex }}" style="display:none;">
<div class="panel-group" id="accordion_entry_{{ currentIndex }}">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion_entry_{{ currentIndex }}" href="#collapse_entry_{{ currentIndex }}" aria-expanded="true">
<h3><span>Einreise-, Visabestimmungen und gesundheitspolizeilichen Vorschriften</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse_entry_{{ currentIndex }}" class="panel-collapse collapse acc_nationality_panel" aria-expanded="true" style="">
<div class="panel-body set_nationality_country_text">
<hr>
</div>
</div>
</div>
</div><!-- accordion -->
<div class="form-group" style="margin-bottom: 15px;">
<div class="checkbox">
{{ form_widget(traveler.acceptEntryRequirements) }}
<label for="{{ traveler.acceptEntryRequirements.vars.id }}" style="line-height: 1.2em;">
{{ getContextBySlug('hinweise-einreisebestimmungen')|raw }}
</label>
<span class="checkbox_marker"></span>
{{ form_errors(traveler.acceptEntryRequirements) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div> <!-- row -->
{% endfor %}
{% endfor %}
</div> <!-- st trav -->
<h2>Hinweis</h2>
<p>{{ getContextBySlug('hinweis-staatsbuergerschaft-1') | raw }}
{% for nationalitie in nationalities %}
{{ nationalitie.name }}{% if not loop.last %},{% endif %}
{% endfor %} {{ getContextBySlug('hinweis-staatsbuergerschaft-2')|raw }} </p>
</div> <!-- col -->
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Formblatt</h5>
<div class="well">
{{ travel_program.organizer.legalRights|raw }}
<a href="https://v2.sterntours.de/uploads/{{ travel_program.organizer.fileFormPage }}" target="_blank">
{{ getContextBySlug('informationen-formblatt') }}
</a>
</div>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptLegalRights) }}
<label for="{{ form.acceptLegalRights.vars.id }}" style="line-height: 1.2em;">
{{ getContextBySlug('bestaetigung-formblatt') }}
</label>
<span class="checkbox_marker"></span>
{{ form_errors(form.acceptLegalRights) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>
</div>
<!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reisebedingungen (ARB)</h5>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptTerms) }}
<label for="{{ form.acceptTerms.vars.id }}" style="line-height: 1.2em;">
{{ getContextBySlug('reisebedingungen-check-1') }}
{% if travel_program.isMediated %}
<a href="https://v2.sterntours.de/uploads/{{ travel_program.organizer.fileName }}?t={{ travel_program.organizer.rulesUpdatedTime }}" target="_blank">
{{ getContextBySlug('reisebedingungen-link-1') }}
</a> {{ travel_program.organizer.name }}
{% else %}
<a href="https://v2.sterntours.de/uploads/{{ travel_program.organizer.formArb }}?t={{ travel_program.organizer.rulesUpdatedTime }}" target="_blank">
{{ getContextBySlug('reisebedingungen-link-2') }}
</a> {{ travel_program.organizer.name }}
{% endif %}
{{ getContextBySlug('reisebedingungen-check-2')|raw }}
</label>
<span class="checkbox_marker"></span>
{{ form_errors(form.acceptTerms) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Datenschutzerklärung</h5>
<div class="form-group">
<div class="checkbox">
{{ form_widget(form.acceptPrivacy) }}
<label for="{{ form.acceptPrivacy.vars.id }}" style="line-height: 1.2em;">Ich habe die <a href="/datenschutz" target="_blank">Datenschutzerklärung</a> zur Kenntnis genommen.
</label>
<span class="checkbox_marker"></span>
{{ form_errors(form.acceptPrivacy) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Wichtiger Hinweis</h5>
{{ getContextBySlug('hinweis-bestellung')|raw }}
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Unverbindliche Anmerkungen</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
{{ form_field(form.notes, 'Unverbindliche Anmerkungen', {
'label_attr': {'class': 'sr-only'},
'attr': {'rows': '6'}
}) }}
</div>
</div>
</div><!-- end form-box -->
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit"
class="aligncenter btn btn-primary btn-lg border-radius btn-booking-form">
<span class="btn-booking-submit"><i class="fa fa-angle-double-right" style="margin-bottom:-1px!important;"></i> kostenpflichtig<br class="visible-xs"> buchen</span>
<span class="btn-booking-loading hide"><i class="fa fa-spinner" style="margin-bottom:-1px!important;"></i> Formular <br class="visible-xs"> wird gesendet</span>
</button>
</div>
{{ form_rest(form) }}
</form>
</div><!-- end contact-form -->
</div>
</section>
{% endblock body %}

View file

@ -0,0 +1,378 @@
{% extends 'base.html.twig' %}
{% block canonical_tag %}{% endblock %}
{% block body %}
<style>
.c1.plus li:before {
content: '+';
}
.c1.minus li:before {
content: '-';
}
</style>
<section class="clearfix">
<div class="content-copy">
<h1>Vielen Dank für Ihren Buchungsauftrag!</h1>
<div class="pull-right">
<a href="/" class="btn btn-primary btn-sm"><< Zurück zur Startseite</a>
</div>
<div class="clearfix"></div>
<h2 style="margin-top:10px">{{ travel_program.title }}</h2>
<div id="booking_form" class="booking_form">
<form class="st-booking-form" method="post">
<div id="message"></div>
<div class="form-box">
<div class="table-responsive" id="no-more-tables_first">
<table class="table first-table">
<tbody>
<tr>
<td>Reiseprogramm</td>
<td>
{{ travel_program.title }}
{#<br class="visible-xs"><a href="#" data-toggle="modal" data-target="#myModal">(Reisebeschreibung aufrufen)</a>#}
</td>
</tr>
<tr>
<td>Kategorie</td>
<td>Standard {# #TODO #}</td>
</tr>
<tr>
<td>Reisezeitraum</td>
<td>{{ booking.selectedStartDate|date }} - {{ booking.selectedEndDate|date }}</td>
</tr>
<tr>
<td>Abflugort</td>
<td>
{{ booking.selectedDeparture.name }}
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-xs-12">
<div class="panel">
<div class="panel-body">
<h3>Ihr gewähltes Angebot</h3>
<div class="st-booking-summary">
{% include 'default/components/booking/summary.html.twig' with {
'summary': summary,
'total_price': total_price,
'booking_price_info': booking_price_info,
'show_detail' : false,
} %}
</div>
</div>
</div>
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseleistungen</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="accordion-toggle-2">
<div class="panel-group" id="accordion">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapse1" aria-expanded="true">
<h3><span>Reiseleistungen einblenden</span><i class="indicator pull-right icon-plus"></i></h3>
</a>
<div id="collapse1" class="panel-collapse collapse" aria-expanded="true" style="">
<div class="panel-body">
<h3>Eingeschlossene Leistungen</h3>
<ul class="c1 plus">
{% for travel_program_service in travel_program.included|replace({'*': '<img src="/bundles/app/images/star-mini.png" >'})|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
<h3>Nicht eingeschlossene / zubuchbare Leistungen</h3>
<ul class="c1 minus">
{% for travel_program_service in travel_program.excluded|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
{% if (travel_program.advices is not empty) or (travel_program.generalnote is not empty) %}
<h3>Hinweise</h3>
<ul class="c1">
{% if travel_program.generalnote is not empty %}
{% for notes in travel_program.generalnote.text|trim|split('\n') %}
{% if notes is not empty %}
<li>{{ notes|raw }}</li>
{% endif %}
{% endfor %}
{% endif %}
{% for travel_program_advice in travel_program.advices|trim|split('\n') %}
{% if travel_program_advice is not empty %}
<li>{{ travel_program_advice|raw }}</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</div>
</div>
</div><!-- accordion -->
</div>
</div>
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseanmelder</h5>
</div>
<div class="table-responsive" id="no-more-tables_first">
<table class="table first-table">
<tbody>
<tr>
<td>Anrede</td>
<td>
{% if booking.salutationId == 1 %}
Herr
{% elseif booking.salutationId == 2 %}
Frau
{% endif %}
</td>
</tr>
<tr>
<td>Vorname</td>
<td>{{ booking.firstName }}</td>
</tr>
<tr>
<td>Nachname</td>
<td>{{ booking.lastName }}</td>
</tr>
<tr>
<td>Vorname</td>
<td>{{ booking.firstName }}</td>
</tr>
<tr>
<td>Straße, Hausnummer</td>
<td>{{ booking.street }}</td>
</tr>
<tr>
<td>PLZ</td>
<td>{{ booking.zipCode }}</td>
</tr>
<tr>
<td>Ort</td>
<td>{{ booking.city }}</td>
</tr>
<tr>
<td>Land</td>
<td>{{ booking.countryId }}</td>
</tr>
<tr>
<td>Telefon tagsüber</td>
<td>{{ booking.phone }}</td>
</tr>
<tr>
<td>Handynummer (Bitte angeben)</td>
<td>{{ booking.mobile }}</td>
</tr>
<tr>
<td>E-Mail-Adresse</td>
<td>{{ booking.email }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Reiseteilnehmer</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="table-responsive" id="no-more-tables">
<table class="table">
<thead>
<tr>
<th style="text-align: left;">Nr.</th>
<th style="text-align: left;">Zimmertyp</th>
<th style="text-align: left;">Geschlecht</th>
<th style="text-align: left;">Vorname</th>
<th style="text-align: left;">Nachname</th>
<th style="text-align: left;">Geburtsdatum</th>
<th style="text-align: left;">Nationalität</th>
</tr>
</thead>
<tbody class="st-travelers">
{% set travelerIndex = 0 %}
{% set travelerCollection = booking_request.travelers|slice(0, (booking_request.travelerCount + booking_request.childrenCount)) %}
{% for room in booking_request.occupiedRooms %}
{% if(room.type == 1) %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Einzelzimmer Erwachsener</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
{% if(room.child == 1) %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Einzelzimmer Kind</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td
</tr>
{% set travelerIndex = travelerIndex + 1 %}
{% endif %}
{% elseif (room.type == 2) %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Doppelzimmer Erwachsener</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Doppelzimmer Erwachsener</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
{% if(room.child == 1) %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Doppelzimmer Kind</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
{% endif %}
{% elseif (room.type == 3) %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Dreibettzimmer Erwachsener</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Dreibettzimmer Erwachsener</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Dreibettzimmer Erwachsener</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
{% if(room.child == 1) %}
<tr>
<td>
<button class="btn btn-primary btn-sm border-radius st-traveller-index" type="button" >{{ loop.index ?? '' }} </button>
</td>
<td style="text-align: left;">Dreibettzimmer Kind</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].sex == 1 ? 'männlich' : 'weiblich' }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].firstName }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].lastName -}}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].birthDate }}</td>
<td style="text-align: left;">{{ travelerCollection[travelerIndex].nationalityName(nationalities) }}</td>
</tr>
{% set travelerIndex = travelerIndex + 1 %}
{% endif %}
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<h5>Unverbindliche Anmerkungen</h5>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<p>{{ booking.comments }}</p>
</div>
</div>
</div><!-- end form-box -->
</div><!-- end contact-form -->
<div class="pull-right">
<a href="/" class="btn btn-primary btn-sm"><< Zurück zur Startseite</a>
</div>
</div>
</section>
{% endblock %}

View file

@ -0,0 +1,57 @@
<div class="row">
{% for calendar_month in calendar %}
<div class="col-xs-12 col-sm-6">
<table class="table calendar-table" id="jump-{{ calendar_month['monthNumber'] }}-{{ calendar_month['year'] }}">
<thead>
<tr>
<th colspan="7">
{{ calendar_month['monthNumber'] }} {{ calendar_month['monthName'] }} {{ calendar_month['year'] }}
</th>
</tr>
<tr>
<th>Mo</th>
<th>Di</th>
<th>Mi</th>
<th>Do</th>
<th>Fr</th>
<th>Sa</th>
<th>So</th>
</tr>
</thead>
<tbody>
{% for weekIndex in 0..5 %}
<tr>
{% for dayIndex in 0..6 %}
{# @var dayState \AppBundle\Util\CalendarDayState #}
{% set dayState = calendar_month['data'][(weekIndex * 7) + dayIndex] %}
<td class="{{ dayState.getCssClass }} {% if dayState.isBookable %}active{% endif %}">
{% if dayState.isBookable %}
{% if dayState.isPastDate %}
<div><del style="color:#989898;">{{ dayState.day }}</del></div>
{% else %}
<a href="{{ page.urlPath }}/buchen?pnr={{ dayState.price.id }}&fd={{ dayState.day < 10 ? '0':'' }}{{dayState.day}}{{ calendar_month['monthNumber'] < 10 ? '0':'' }}{{calendar_month['monthNumber']}}{{calendar_month['year']}}"
rel="nofollow" class="table-link"
>
{{ dayState.day }}
</a>
{% endif %}
{% elseif dayState.day == 0 %}
&nbsp;
{% else %}
{% if dayState.isPastDate %}
<div><del style="color:#989898;">{{ dayState.day }}</del></div>
{% else %}
<div>{{ dayState.day }}</div>
{% endif %}
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</div>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,7 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix">
{{ page.content|raw|keywords|lozad }}
</section>
{% endblock %}

View file

@ -0,0 +1,34 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix" style="margin-bottom: 0;">
{{ page.content|raw|keywords|lozad }}
</section>
<section class="clearfix">
{#{% for i in 0..page.children|length//3 %}#}
<div class="row">
{% for child_page in page.children if child_page.status == 1 %}
{% include 'default/components/pageBox.html.twig' %}
{% endfor %}
</div>
</section>
{% endblock %}
{#
402
318
315
UPDATE page SET page.order=page.id*-1 WHERE owner=402
UPDATE page SET page.order=page.id*-1 WHERE owner=315
UPDATE page SET page.order=page.id*-1 WHERE owner=318
Select DATE_FORMAT(page.date, '%Y%m%d')*-1 FROM page WHERE model='feedback'
UPDATE page SET page.order=DATE_FORMAT(page.date, '%Y%m%d')*-1 WHERE model='feedback'
UPDATE page SET page.model='feedback' WHERE owner=402
UPDATE page SET page.model='feedback' WHERE owner=315
UPDATE page SET page.model='feedback' WHERE owner=318
#}

View file

@ -0,0 +1,229 @@
{#{% extends 'admin.html.twig' %}#}
{# @var fewo_lodging \AppBundle\Entity\FewoLodging #}
{% extends get_base_template() %}
{% block stylesheets %}
<style>.box-slider .slide:not(.active) {display: none;}</style>{# TODO Move to custom.css #}
<link rel="stylesheet" href="{{ asset('css/my-fewo.css?v') }}{{ get_file_last_time('css/my-fewo.css') }}">
{% endblock stylesheets %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>{{ fewo_lodging.name }}</h1>
{#
********* SLIDER *********
#}
<section class="section fullscreen background padding-0 margin-bottom-20">
<div id="myCarousel" class="carousel slide fewo">
<!-- Indicators -->
<ol class="carousel-indicators">
{% for lodging_image in slider_imgs %}
<li data-target="#myCarousel" data-slide-to="{{ loop.index-1 }}" {% if loop.first %}class="active"{% endif %}></li>
{% endfor %}
</ol>
<!-- Wrapper for Slides -->
<div class="carousel-inner">
{% for lodging_image in slider_imgs %}
<div class="item{% if loop.first %} active{% endif %}">
<div class="fill" style="background-image:url({{ asset('_uploads/images/' ~ lodging_image.file) }});background-position: center center">
<span class="image-title">{{ lodging_image.fileName }}</span>
</div>
</div>
{% endfor %}
</div>
<!-- Controls -->
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</section><!-- end section -->
{#
********* TAB BAR *********
#}
{% block travel_lodging_program_tab_bar %}
<div class="scroller-nav-tabs scroller-left-nav-tabs"><i class="glyphicon glyphicon-chevron-left"></i></div>
<div class="scroller-nav-tabs scroller-right-nav-tabs"><i class="glyphicon glyphicon-chevron-right"></i></div>
<div class="wrapper-nav-tabs">
<ul class="nav nav-tabs nav-justified list-nav-tabs">
<li class="">
<a href="#travel-description-content-tab" aria-controls="travel-description-content-tab" role="tab" data-toggle="tab">
Beschreibung
</a>
</li>
<li>
<a href="#travel-equipment-content-tab" aria-controls="travel-equipment-content-tab" role="tab" data-toggle="tab">
Ausstattung
</a>
</li>
<li class="active">
<a href="#travel-dates-content-tab" aria-controls="travel-dates-content-tab" role="tab" data-toggle="tab">
Termine <i class="fa fa-star"></i> Preise <i class="fa fa-star"></i> Mieten
</a>
</li>
</ul>
</div>
{% endblock travel_lodging_program_tab_bar %}
<div class="tab-content">
{#
********* BESCHREIBUNG *********
#}
<div role="tabpanel" class="tab-pane " id="travel-description-content-tab">
<h3>Allgemeines</h3>
<div class="table-responsive" id="no-more-tables">
<table class="table">
<thead>
<tr>
<th>Typ</th>
<th>Adresse</th>
<th>PLZ</th>
<th>Ort</th>
<th>Max. Personenanzahl</th>
<th>Kaution</th>
</tr>
</thead>
<tbody>
<tr>
<td data-title="Typ">
{{ fewo_lodging.type }}
</td>
<td data-title="Adresse">
{{ fewo_lodging.adress1 }}
{% if fewo_lodging.adress2 is not empty %}
{{ fewo_lodging.adress2 }}
{% endif %}
</td>
<td data-title="PLZ">
{{ fewo_lodging.zipCode }}
</td>
<td data-title="Ort">
{% if fewo_lodging.city is not empty %}
{{ fewo_lodging.city }}
{% endif %}
</td>
<td data-title="Max. Personenanzahl">
{% if fewo_lodging.maximumPersons is not empty %}
{{ fewo_lodging.maximumPersons }}
{% endif %}
</td>
<td data-title="Kaution">
{% if fewo_lodging.deposit is not empty %}
{{ fewo_lodging.deposit|number_format(2, ',', '.') }}
{% endif %}
</td>
</tr>
</tbody>
</table>
</div>
{% if fewo_lodging.description is not empty %}
<hr>
<div>
{{ fewo_lodging.description|raw }}
</div>
{% endif %}
</div> <!-- END tabpanel -->
{#
********* AUSSTATTUNG *********
#}
<div role="tabpanel" class="tab-pane" id="travel-equipment-content-tab">
<div>
{{ fewo_lodging.equipment|raw }}
</div>
</div> <!-- END tabpanel -->
{#
********* TERMINE UND PREISE *********
#}
<div role="tabpanel" class="tab-pane active" id="travel-dates-content-tab">
<h3>Saisons</h3>
<div class="table-responsive" id="no-more-tables">
{% if fewo_lodging.prices is not empty %}
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Beginn</th>
<th>Ende</th>
<th>Mindestbelegung</th>
<th>Preis pro Nacht</th>
<th>Service-Gebühr</th>
<th>Kaution</th>
</tr>
</thead>
<tbody>
{% for price in fewo_lodging.prices %}
{% if price.season is not empty %}
<tr>
<td data-title="Name">
<strong class="small">
{{ price.season.name }}
</strong>
</td>
<td data-title="Beginn">
<a class="default scroll-to-jump" href="#jump-{{ price.season.fromDate|date("n-Y") }}">
{{ price.season.fromDate|date }}
</a>
</td>
<td data-title="Ende">
<a class="default scroll-to-jump" href="#jump-{{ price.season.toDate|date("n-Y") }}">
{{ price.season.toDate|date }}
</a>
</td>
<td data-title="Mindestbelegung">
{{ price.season.minimumStay }} {{ price.season.minimumStay < 2 ? 'Nacht' : 'Nächte' }}
</td>
<td data-title="Preis p.P pro Nacht">
{{ price.perNight|number_format(2, ',', '.') }}
</td>
<td data-title="Service-Gebühr">
{{ price.flatPrice|number_format(2, ',', '.') }}
</td>
<td data-title="Kaution">
{% if fewo_lodging.deposit is not empty %}
{{ fewo_lodging.deposit|number_format(2, ',', '.') }}
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
{% else %}
Momentan sind für dieses Programm keine Termine verfügbar.
{% endif %}
</div>
<h3>Buchung</h3>
<p>Bitte klicken Sie einen Anreisetermin (grüne Zahl), um zur Buchungsmaske zu gelagen.</p>
{% include 'default/pages/cms/calendarLodgingProgram.html.twig' %}
</div> <!-- END tabpanel -->
</div>
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,104 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix">
{% set site_has_h1 = false %}
{% if(api is defined) %}
{% if api.sites|length > 1 %}
<div class="wrapper-nav-tabs">
<ul class="nav nav-tabs nav-justified list-nav-tabs">
{% for site in api.sites %}
<li class="{% if loop.index==1 %} active {% endif %}">
<a href="#travel_guide_content_{{ site.id }}" aria-controls="travel_guide_content_{{ site.id }}" role="tab" data-toggle="tab">
{% if(site.scope == 0) %}
Zusammenfassung <i class="hidden-xs">für eilige Leser</i>
{% else %}
Ausführliche Darstellung <i class="hidden-xs">für Interessierte</i>
{% endif %}
</a>
</li>
{% endfor %}
</ul>
</div>
<div class="tab-content">
{% for site in api.sites %}
<div role="tabpanel" class="tab-pane {% if loop.index==1 %} active {% endif %}" id="travel_guide_content_{{ site.id }}">
{% if(site_has_h1) %}
<h2 class="h1l">{{ site.name }}</h2>
{% else %}
<h1>{{ site.name }}</h1>
{% set site_has_h1 = true %}
{% endif %}
{{ site.full_text|raw|keywords|lozad }}
</div>
{% endfor %}
</div>
<div class="wrapper-nav-tabs">
<ul class="nav nav-tabs nav-justified list-nav-tabs">
{% for site in api.sites %}
<li class="{% if loop.index==1 %} active {% endif %}">
<a href="#travel_guide_content_{{ site.id }}" aria-controls="travel_guide_content_{{ site.id }}" role="tab" data-toggle="tab">
{% if(site.scope == 0) %}
Zusammenfassung <i class="hidden-xs">für eilige Leser</i>
{% else %}
Ausführliche Darstellung <i class="hidden-xs">für Interessierte</i>
{% endif %}
</a>
</li>
{% endfor %}
</ul>
</div>
{% else %}
{% for site in api.sites %}
{% if(site_has_h1) %}
<h2 class="h1l">{{ site.name }}</h2>
{% else %}
<h1>{{ site.name }}</h1>
{% set site_has_h1 = true %}
{% endif %}
{{ site.full_text|raw|keywords|lozad }}
{% endfor %}
{% endif %}
{% endif %}
</section>
<hr>
{% if(api is defined and api.children is defined and api.children is not empty) %}
<section class="clearfix">
<div class="row">
{% for child_page in api.children %}
{% if(child_page.active) %}
<div class="col-md-4 col-sm-6">
<div class="travel-wrapper get-box-link">
<div class="item text-left">
{% if(false and child_page.box_image_url is defined and child_page.box_image_url is not empty) %}
<div class="item-img" style="height: 220px;">
{% if child_page.box_image_url is defined and child_page.box_image_url is not empty %}
{% set image_url = child_page.box_image_url %}
{% set image_alt = child_page.name %}
{% else %}
{% set image_url = asset('/bundles/app/images/no-picture.png')%}
{% set image_alt = 'Kein Vorschaubild vorhanden' %}
{% endif %}
<div class="img-background lozad" data-background-image="{{ image(image_url|trim('/')).cropResize(960).guess(90) }}" style="background-image:url({{ asset('images/placeholder-image.png') }}); height: 220px;"></div>
<noscript>
<img width="234" height="180" src="{{ image(image_url|trim('/')).cropResize(960).guess(90) }}" class="img-responsiv img-responsiv-item" style="">
</noscript>
</div>
{% endif %}
<div class="box_mid">
<div class="hl5">{{ child_page.name }}</div>
<p>{{ child_page.description }}</p>
</div>
<a class="item-button is-box-link dobble_line" href="{{ child_page.url }}" title="{{ child_page.name }}">
<span>{{ child_page.name }}</span>
</a>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</section>
{% endif %}
{% endblock %}

View file

@ -0,0 +1 @@
{% include 'overview.html.twig' %}

View file

@ -0,0 +1,90 @@
{% extends get_base_template() %}
{% block body %}
<h1>{{ page.pagetitle|default(page.title) }}</h1>
<section class="clearfix">
{#{% for i in 0..page.children|length//3 %}#}
<div class="row">
{% for child_page in page.children if child_page.slug == "nilschiff-ss-sudan" %}
<div class="col-md-12 col-sm-12">
<div class="travel-wrapper get-box-link">
<div class="item text-left">
<div class="item-img" style="height: 220px;">
<div class="lb">
{% if child_page.boxStar is not empty %}
<div class="cstar_left">{{ child_page.boxStar|raw }}</div>
{% endif %}
{% if child_page.travelProgram is not empty and child_page.travelProgram.lowestPrice > 0 %}
<div class="cprice">ab {{ child_page.travelProgram.lowestPrice|number_format }} € p.P.</div>
{% endif %}
{% if child_page.boxDiscount is not empty %}
<div class="cdiscount">{{ child_page.boxDiscount|raw }}</div>
{% endif %}
{% if child_page.model == 'feedback'%}
<div class="cdiscount">{{ child_page.date|date }}</div>
{% endif %}
</div>
{% if child_page.boxImageUrl is not empty %}
{% set image_url = child_page.boxImageUrl %}
{% set image_alt = child_page.travelProgram.title|default(page.title) %}
{% else %}
{% set image_url = asset('/bundles/app/images/no-picture.png')%}
{% set image_alt = 'Kein Vorschaubild vorhanden' %}
{% endif %}
<div class="img-background lozad" data-background-image="{{ image(image_url|trim('/')).cropResize(960).guess(90) }}" style="background-image:url({{ asset('images/placeholder-image.png') }}); height: 220px;"></div>
<noscript>
<img width="234" height="180" src="{{ image(image_url|trim('/')).cropResize(960).guess(90) }}" class="img-responsiv img-responsiv-item" style="">
</noscript>
</div>
<div class="box_mid">
<div class="hl5">{{ child_page.title }}</div>
<p>{{ child_page.boxBody ?? child_page.description }}</p>
</div>
<a class="item-button is-box-link dobble_line" href="{{ child_page.urlPath }}" title="{{ child_page.title }}">
<span>{{ child_page.title }}</span>
</a>
</div>
</div>
</div>
{% endfor %}
</div>
</section>
<section class="clearfix content-pane">
<h2 class="h3 h3l">Unsere beliebtesten Kulturreisen</h2>
{#{% for i in 0..page.children|length//3 %}#}
<div class="row">
{% for child_page in child_pages if child_page.status == 1 and child_page.travelProgram is not empty %}
{% include 'default/components/pageBox.html.twig' %}
{% endfor %}
</div>
{% if mediated_child_pages is not empty %}
<h2 class="h3 h3l">
Vermittelte Rundreisen vom {{ page.country is not empty ? (page.country.name ~ '-') }}Spezialisten
STERN TOURS aus Berlin
</h2>
<div class="row">
{% for child_page in mediated_child_pages %}
{% include 'default/components/pageBox.html.twig' %}
{% endfor %}
</div>
{% endif %}
</section>
<section class="clearfix">
<hr class="primary">
{{ page.content|raw|keywords|lozad }}
</section>
{% endblock %}

View file

@ -0,0 +1,16 @@
{# @var page \AppBundle\Entity\Page #}
{% extends get_base_template() %}
{% block offers_sidebar_widget %}{% endblock %}
{% block body %}
<section class="clearfix">
{{ page.content|raw|keywords|lozad }}
</section>
<section class="clearfix hide-in-modal">
<h3>Unsere beliebtesten Kulturreisen</h3>
{{ render(controller('AppBundle:Component:offersCarousel', {country: page.effectiveCountry})) }}
</section>
{% endblock %}

View file

@ -0,0 +1,42 @@
{% extends get_base_template() %}
{#
{% block nav_sidebar_widget %}
{% include 'default/components/sidebar/navSidebarWidget.html.twig' %}
{% endblock %}
#}
{% block body %}
<h1>{{ page.pagetitle|default(page.title) }}</h1>
<div id="section_order">
<section class="clearfix" id="section_order_second">
{{ page.content|raw|keywords|lozad }}
</section>
<section class="clearfix" id="section_order_first">
{% if(page.slug == "ferienwohnungen")%}
{% if lodgingGroups is not empty %}
{% for lodgingGroup in lodgingGroups %}
<h1>{{ lodgingGroup.name }}</h1>
<div class="row">
{% if lodgingGroup.lodgings is not empty %}
{% for lodging in lodgingGroup.lodgings %}
{% include 'default/components/pageLodgingBox.html.twig' %}
{% endfor %}
{% endif %}
</div>
{% endfor %}
{% endif %}
{% else %}
{#{% for i in 0..page.children|length//3 %}#}
<div class="row">
{% for child_page in page.children if child_page.status == 1 %}
{% include 'default/components/pageBox.html.twig' %}
{% endfor %}
</div>
{% endif %}
</section>
</div>
{% endblock %}

View file

@ -0,0 +1,56 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix">
<h1>{{ page.pagetitle|default(page.title) }}</h1>
{% form_theme search_form 'default/form/theme.html.twig' %}
<div class="widget clearfix">
<div class="widget-title">
<!-- <a class="collapse-widget" href="#search-widget" data-toggle="collapse">Zeitraum</a> -->
</div><!-- end title -->
<div class="searchwidget collapse in" id="search-widget">
<form action="/ferienwohnungen/ferienwohnungen-kalender" method="post" class="searchform row st-search-form">
<div class="form-group col-md-6">
<div class="required">
{{ form_field_pho(search_form.from, 'Anreise', {required: true}) }}
</div>
</div>
<div class="form-group col-md-6">
<div class="required">
{{ form_field_pho(search_form.to, 'Abreise', {required: true}) }}
</div>
</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12 text-center form-bottom">
<button type="submit" class="btn btn-sm btn-primary btn-block">freie Ferienwohnungen suchen</button>
</div>
</form>
</div><!-- end boxwidget -->
</div>
{#{% for i in 0..page.children|length//3 %}#}
<div class="row">
{% for child_page in page.children if child_page.status == 1 %}
{% include 'default/components/pageBox.html.twig' %}
{% endfor %}
</div>
</section>
<section class="clearfix">
{{ page.content|raw|keywords|lozad }}
</section>
{% endblock %}

View file

@ -0,0 +1,167 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix">
{{ page.content|raw|keywords|lozad }}
</section>
<section class="clearfix content-pane">
<h2 class="h3 h3l" style="padding-top:0px;margin-top:0;">Programm Nilkreuzfahrt SS Sudan</h2>
<div class="row">
{% for child_page in box_childs if child_page.status == 1 and child_page.travelProgram is not empty %}
{# @var child_page \AppBundle\Entity\Page #}
<div class="col-md-6 col-sm-6">
<div class="travel-wrapper get-box-link">
<div class="item text-left">
<div class="item-img">
<div class="lb">
{% if child_page.boxStar is not empty %}
<div class="cstar_left">{{ child_page.boxStar|raw }}</div>
{% endif %}
{% if child_page.travelProgram is not empty and child_page.travelProgram.lowestPrice > 0 %}
<div class="cprice">ab {{ child_page.travelProgram.lowestPrice|number_format }}
€ p.P.
</div>
{% endif %}
{% if child_page.boxDiscount is not empty %}
<div class="cdiscount">{{ child_page.boxDiscount|raw }}</div>
{% endif %}
{% if child_page.model == 'feedback' %}
<div class="cdiscount">{{ child_page.date|date }}</div>
{% endif %}
</div>
{% include 'default/components/pageBoxImage.html.twig' with {page: child_page} %}
</div>
<div class="box_mid">
<div class="hl5">{{ child_page.title }}</div>
<p>{{ child_page.boxBody ?? child_page.description }}</p>
</div>
<a class="item-button is-box-link dobble_line" href="{{ child_page.urlPath }}"
title="{{ child_page.title }}">
<span>{{ child_page.title }}</span>
</a>
</div>
</div>
</div>
{% endfor %}
</div>
</section>
{% include 'default/pages/cms/components/ssSudan.html.twig' %}
<div class="content-pane">
<h1>Die SS Sudan</h1>
<p class="ft">
Der sehr elegante Restaurantsaal besteht ebenfalls aus Mobiliar des 19. Jahrhunderts und ist mit
Originalparkettboden ausgestattet. Lassen Sie sich im Restaurant von einer sehr abwechslungsreichen und
raffinierten Kochkunst verwöhnen. Einen Panoramablick bietet Ihnen die Lounge/Bar. Eine große Terrasse auf
dem Oberdeck, mit Liegestühlen und Sesseln bietet Ihnen die Möglichkeit, während die wunderbare Landschaft
an Ihnen vorbeizieht, den Tag Tag sein zu lassen und sich ausgiebig zu erholen.
</p>
<p class="ft"><strong>Hier finden Sie Links zu Informationen zum Preis der SS Sudan, zum Reiseveranstalter STERN
TOURS und zu den letzten Kundenfeedbacks mit der Fahrt auf der SS Sudan:</strong></p>
<ul class="">
<li>Zu <a href="/aegypten_reisen_catalog/ss-sudan-3-naechte-preise.html"
title="Preise 3 Nächte Schiff Sudan">Preise 3 N&auml;chte SS Sudan</a></li>
<li>Zu <a href="/aegypten_reisen_catalog/ss-sudan-4-naechte-preise.html"
title="Preise Nilschiff Sudan 4 Nächte">Preise 4 N&auml;chte SS Sudan</a><br/></li>
<li>Zum <a href="/aegypten_reisen_catalog/ss-sudan-programm-3-nights.html"
title="Besichtigunsprogramm 3 Nächte SS Sudan">Besichtigunsprogramm 3 N&auml;chte SS
Sudan</a><br/></li>
<li>Zum <a href="/aegypten_reisen_catalog/ss-sudan-programm-4-nights.html"
title="Besichtigungsprogramm 4 Nächte Sudan">Besichtigunsprogramm 4 N&auml;chte SS Sudan</a>
<br/></li>
<li>Zum <a href="/aegypten_reisen_catalog/ss-sudan-nilkreuzfahrt.html" title="Nilkreuzfahrt SS Sudan">14 t&auml;gigen
Beispielprogramm SS Sudan - Nilkreuzfahrt mit Kairo und Baden</a><br/></li>
<li>Zum <a href="/docs/169/aegypten-reise-felbinger.html" title="Kundenfeedbakcs">Kundenfeedback - SS Sudan
- Familie Felbinger</a><br/></li>
<li>Zum <a href="/docs/169/aegypten-ss-sudan-old-mena-house.html" title="Kundenfeedbakcs">Kundenfeedback -
SS Sudan - Familie Kreuser</a> <br/></li>
<li>Informationen zu <a href="/aegypten_reisen_catalog/info-aegypten-spezialist.html"
title="Kontakt Ägyptenreisen">STERN TOURS</a><br/></li>
<li>Zu unseren <a href="/aegypten_reisen_catalog/offene-worte.html" title="offenen Worten">Offenen
Worten</a></li>
</ul>
<h2>Das Dampfschiff Sudan & Verantwortungsvoller Tourismus</h2>
<p class="ft">
Das Dampfschiff Sudan wurde in Bezug auf die Umwelt und den Tourismus deutlich verändert. Zunächst wurde der
Verbrauch von Energie gesenkt. Durch die Verbesserung der Triebwerke, durch minimierte Belastung des
Schiffes und durch die Installation von Solarenergie für Wärme, Sanitärwasser, und die Schaufelräder ist es
gelungen, den Kraftstoffverbrauch um 30% zu verringern und damit auch Treibhausgasemissionen. Der Konsum von
CO2 wurde auf eine halbe Tonne pro Passagier pro Fahrt reduziert, was der hohen Achtsamkeit anzurechnen ist.
</p>
<p class="ft">
Das Wasser, welches für die Duschen verwendet wird, stammt vom Nil und wird durch mehrere Filter geführt,
die jeden Monat streng kontrolliert werden. Der erste Filter entfernt den Sand, der zweite Filter bereitet
das Wasser durch eine Kohlenzusammensetzung auf und der Letzte filtert Bakterien durch ultraviolettes Licht
aus.
</p>
<p class="ft">
Tägliche strikte Maßnahmen stellen eine umweltverträgliche und nachhaltige Entwicklung sicher. Das Schiff
nutzt ausschließlich Energiesparlampen und biologisch abbaubares, ökofreundliches Waschmittel (made in
Egypt). Es werden so viele biologische Produkte wie möglich genutzt (mit Ausnahme der antibakteriellen Bade
Waschprodukte, die auf Bleichmittel basieren) und das Papier wird wiederverwendet.
</p>
<p class="ft">
Die Kosmetikprodukte in den Badezimmern sind alle natürlich und basieren auf Olivenöl, welches aus Ägypten
kommt. Um den Verbrauch von Verpackungen zu beschränken, sind alle Produkte in Behälter gefüllt.
</p>
<p class="ft">
Die gesamte Ausstattung auf dem Dampfschiff Sudan ist von ägyptischen Tischlern und Schreinern angefertigt
worden.
</p>
<p class="ft">
Mineralwasser an Bord ist frei.
</p>
<p class="ft">
Seit dem Altertum bezaubert Ägypten jeden, der mit diesem Land in Berührung kommt. Dem Mythos und dieser
Magie der vergangenen Zivilisation dieses atemberaubenden Landes ist bisher jeder erlegen. Die Reise nach
Ägypten wurde mit der Zeit, sei es in kulturellen oder in Kunstkreisen, zu einem absoluten Muss. Mit dem 20.
Jahrhundert wurde Ägypten unausweichlich zu einem Ziel der modernen Reisekultur. Der Nil, der sowohl weite
Teile des Landes bewässert und nährt, als auch als Handels- und Verbindungsroute zwischen Europa und Afrika
dient, ist ohne Zweifel die Lebensader Ägyptens. Den Nil zu bereisen, bedeutet die Geschichte und die
Entwicklung Ägyptens zu verstehen. So trifft man auf den Gewässern des Nils, nebst den traditionellen
Feluken (Küstenfahrzeugen), auch zahlreiche Boote voller interessierter Besucher.
</p>
<p class="ft">
Eine Kreuzfahrt auf dem Nil ist auf den unterschiedlichsten Schiffen zu erkunden. Jedoch haben wir uns
speziell für die SS Sudan entschieden. Die Nillandschaft, auf einem unverwechselbarem antiken
Kreuzfahrtschiff, erbaut 1885, wie zu Zeiten der Könige, zu erkunden, ist und bleibt einzigartig. Es ist die
SS Sudan, auf der Agatha Christie ihre bekannte Romanfigur „Hercule Poirot“ weiterentwickelt hat. Es ist
ebenfalls die SS Sudan, auf der Agatha Christies berühmter Kriminalroman „Tod auf dem Nil“ gedreht wurde.
</p>
<h2>Video zum Rundgang auf dem Nilschiff SS Sudan</h2>
<div class="video-wrap">
<div class="g-absolute-centered">
<a data-type="youtube" data-src="https://www.youtube-nocookie.com/embed/hnjHNzdPJmc"
href="javascript:;">
<div class="u-icon-v3"> Video ansehen <i class="fa fa-play"></i></div>
</a>
</div>
<img src="/images/placeholder-image.png" data-src="https://img.youtube.com/vi/hnjHNzdPJmc/sddefault.jpg"
class="img-responsive lozad" alt="">
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,13 @@
{% extends get_base_template() %}
{% block body %}
{% include 'default/pages/cms/components/ssSudan.html.twig' %}
<div class="content-pane">
<section class="clearfix">
{{ page.content|raw|keywords|lozad }}
</section>
</div>
{% endblock %}

View file

@ -0,0 +1,49 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix">
<h1>{{ page.pagetitle|default(page.title) }}</h1>
{#{% for i in 0..page.children|length//3 %}#}
<div class="row">
{% for tp in sunstar_travel_programs %}
<div class="col-md-4 col-sm-4">
<div class="travel-wrapper get-box-link">
<div class="item text-left">
<div class="item-img">
<div class="lb">
{% if tp.minimumPrice is not empty %}
<div class="cprice">ab {{ tp.minimumPrice }} € p.P.</div>
{% endif %}
{% if tp.minimumAge is not empty and tp.maximumAge is not empty %}
<div class="cdiscount">
{{ tp.minimumAge }} - {{ tp.maximumAge }} Jahre
</div>
{% endif %}
</div>
<div class="img-background" style="background-image: url('{{ tp.imageUrl }}');"></div>
</div>
<div class="box_mid">
<div class="hl5">{{ tp.title }}</div>
<p>{{ tp.description }}</p>
</div>
<a class="item-button is-box-link dobble_line" href="{{ tp.url }}" title="{{ tp.title }}"
rel="nofollow" target="_blank"
>
<span>{{ tp.title }}</span>
</a>
</div>
</div>
</div>
{% endfor %}
</div>
</section>
<section class="clearfix">
{{ page.content|raw|keywords|lozad }}
</section>
{% endblock %}

View file

@ -0,0 +1,88 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix">
{% if(page.travelGuideContentId) %}
<div class="wrapper-nav-tabs">
<ul class="nav nav-tabs nav-justified list-nav-tabs">
<li class="active">
<a href="#travel_guide_long_content" aria-controls="travel_guide_long_content" role="tab" data-toggle="tab">
Ausführliche Darstellung <i class="hidden-xs">für Interessierte</i>
</a>
</li>
<li>
<a href="#travel_guide_short_content" aria-controls="travel_guide_short_content" role="tab" data-toggle="tab">
Zusammenfassung <i class="hidden-xs">für eilige Leser</i>
</a>
</li>
</ul>
</div>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="travel_guide_short_content">
{{ page.content|raw|keywords|lozad }}
</div>
<div role="tabpanel" class="tab-pane" id="travel_guide_long_content">
{{ travel_guide_content.fullText|raw|keywords|lozad }}
</div>
</div>
<div class="wrapper-nav-tabs">
<ul class="nav nav-tabs nav-justified list-nav-tabs">
<li class="active">
<a href="#travel_guide_long_content" aria-controls="travel_guide_long_content" role="tab" data-toggle="tab">
Ausführliche Darstellung <i class="hidden-xs">für Interessierte</i>
</a>
</li>
<li>
<a href="#travel_guide_short_content" aria-controls="travel_guide_short_content" role="tab" data-toggle="tab">
Zusammenfassung <i class="hidden-xs">für eilige Leser</i>
</a>
</li>
</ul>
</div>
{% else %}
{{ page.content|raw|keywords|lozad }}
{% endif %}
</section>
<hr>
{% if( page.children is not empty) %}
<section class="clearfix">
<h2>{{ page.title }}</h2>
<div class="row">
{% for child_page in page.children %}
{% if(child_page.status) %}
<div class="col-md-4 col-sm-6">
<div class="travel-wrapper get-box-link">
<div class="item text-left">
{% if(page.slug == 'reisefuehrer' ) %}
<div class="item-img" style="height: 220px;">
{% if child_page.boxImageUrl is not empty %}
{% set image_url = child_page.boxImageUrl %}
{% set image_alt = child_page.travelProgram.title|default(page.title) %}
{% else %}
{% set image_url = asset('/bundles/app/images/no-picture.png')%}
{% set image_alt = 'Kein Vorschaubild vorhanden' %}
{% endif %}
<div class="img-background lozad" data-background-image="{{ image(image_url|trim('/')).cropResize(960).guess(90) }}" style="background-image:url({{ asset('images/placeholder-image.png') }}); height: 220px;"></div>
<noscript>
<img width="234" height="180" src="{{ image(image_url|trim('/')).cropResize(960).guess(90) }}" class="img-responsiv img-responsiv-item" style="">
</noscript>
</div>
{% endif %}
<div class="box_mid">
<div class="hl5">{{ child_page.title }}</div>
<p>{{ child_page.boxBody ?? child_page.description }}</p>
</div>
<a class="item-button is-box-link dobble_line" href="{{ child_page.urlPath }}" title="{{ child_page.title }}">
<span>{{ child_page.title }}</span>
</a>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</section>
{% endif %}
{% endblock %}

View file

@ -0,0 +1,442 @@
{# @var travel_program \AppBundle\Entity\TravelProgram #}
{% extends get_base_template() %}
{% block javascripts %}
{{ parent() }}
{% javascripts '@AppBundle/Resources/public/js/travelProgram.js' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
{% block body %}
<section class="clearfix">
<div class="content-copy">
<h1>{{ travel_program.title|default(page.pagetitle)|default(page.title) }}</h1>
<section class="section fullscreen background padding-0 margin-bottom-20">
<div class="in-section-holder">
{% if travel_program.lowestPrice > 0 %}
<div class="price-over-slider">
<div class="cprice">ab {{ travel_program.lowestPrice|number_format }} € p.P.</div>
</div>
{% endif %}
{% if travel_program.sliderInfo is not empty %}
<div class="price-over-slider next-over">
<div class="cprice">{{ travel_program.sliderInfo|raw }}</div>
</div>
{% endif %}
{% if travel_program.travelDates is not empty %}
<div class="pull-right btn-over-slider">
<button type="button"
class="btn btn-primary btn-lg border-radius st-slider-booking-btn" id="st-slider-booking-events-scroll">
Termine <i class="fa fa-star faa-burst animated" style="margin-top: -5px"></i> Preise
</button>
</div>
{% endif %}
<div class="pull-right btn-over-slider btn-over-slider-bottom">
<a href="{{ page.slug }}/pdf" title="Reisebeschreibung als PDF herunterladen"
class="btn btn-primary btn-sm border-radius st-slider-booking-btn st-slider-booking-btn-bottom">
<i class="fa fa-print" style="margin-top: -3px;"></i> Katalogseite zum Drucken
</a>
</div>
</div>
<div id="myCarousel" class="carousel slide">
<!-- Indicators -->
<ol class="carousel-indicators">
{% for travel_program_image in travel_program.images %}
<li data-target="#myCarousel" data-slide-to="{{ loop.index-1 }}" {% if loop.first %}class="active"{% endif %}></li>
{% endfor %}
</ol>
<!-- Wrapper for Slides -->
<div class="carousel-inner">
{% for travel_program_image in travel_program.images %}
{# @var image \AppBundle\Entity\TravelProgramImage #}
<div class="item{% if loop.first %} active{% endif %}">
<!-- Set the first background image using inline CSS below. -->
{% set image_url = asset('uploads/travel_program/' ~ travel_program_image.fileNameWithExtension) %}
<div class="fill lozad"
data-background-image="{{ image(image_url|trim('/')).cropResize(848).guess(75) }}"
style="background-image:url({{ asset('images/placeholder-image.png') }});background-position: center {{ travel_program_image.position }}"></div>
<noscript>
<div class="fill"
style="background-image:url({{ image(image_url|trim('/')).cropResize(848).guess(75) }}); background-position: center {{ travel_program_image.position }};"></div>
</noscript>
</div>
{% endfor %}
</div>
<!-- Controls -->
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</section><!-- end section -->
{#
********* TAB BAR *********
#}
{% block travel_program_tab_bar %}
<div class="wrapper-nav-tabs">
<ul class="nav nav-tabs nav-justified list-nav-tabs">
<li class="active">
<a href="#travel-description-content-tab" aria-controls="travel-description-content-tab"
role="tab" data-toggle="tab" class="child-first">
<span>1</span> Reiseablauf
</a>
</li>
{% if travel_program.included is not empty or
travel_program.excluded is not empty or
travel_program.classDescription is not empty %}
<li>
<a href="#travel-service-content-tab" aria-controls="travel-service-content-tab"
role="tab" data-toggle="tab" class="child-sec">
<span>2</span> Leistungen
</a>
</li>
{% endif %}
{% if travel_program.travelDates is not empty %}
<li>
<a href="#travel-dates-content-tab" aria-controls="travel-dates-content-tab" role="tab"
data-toggle="tab" class="child-sec">
<span>3</span> Termine <i class="fa fa-star faa-burst animated"></i> Preise
</a>
</li>
{% endif %}
{% if travel_program.hasMap %}
<li>
<a href="#travel-map-content-tab" aria-controls="travel-map-content-tab" role="tab"
data-toggle="tab">
Karte
</a>
</li>
{% endif %}
<li>
<a href="#travel-info-content-tab" aria-controls="travel-info-content-tab" role="tab"
data-toggle="tab">
Landinfos
</a>
</li>
</ul>
</div>
{% endblock travel_program_tab_bar %}
<div class="tab-content">
<div id="position-scroll-tab"></div>
{#
********* REISEABLAUF *********
#}
<div role="tabpanel" class="tab-pane active" id="travel-description-content-tab">
{{ travel_program.htmlDescription|raw|keywords|lozad }}
<br clear="all">
{% if (travel_program.advices is not empty) or (travel_program.generalnote is not empty) %}
<h3>Hinweise</h3>
<ul>
{% if travel_program.generalnote is not empty %}
{% for notes in travel_program.generalnote.text|trim|split('\n') %}
{% if notes is not empty %}
<li>{{ notes|raw }}</li>
{% endif %}
{% endfor %}
{% endif %}
{% for travel_program_advice in travel_program.advices|trim|split('\n') %}
{% if travel_program_advice is not empty %}
<li>{{ travel_program_advice|raw }}</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</div> <!-- END tabpanel -->
{#
********* LEISTUNGEN *********
#}
<div role="tabpanel" class="tab-pane" id="travel-service-content-tab">
<h2>Eingeschlossene Leistungen</h2>
<ul>
{% for travel_program_service in travel_program.included|replace({'*': '<img src="/bundles/app/images/star-mini.png" >'})|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
{% if travel_program.classDescription is not empty %}
{{ travel_program.classDescription|replace({'*': '<img src="/bundles/app/images/star-mini.png" >'})|raw }}
{% endif %}
{% if travel_program.excluded is not empty %}
<h2>Nicht eingeschlossene / zubuchbare Leistungen</h2>
<ul>
{% for travel_program_service in travel_program.excluded|replace({'*': '<img src="/bundles/app/images/star-mini.png" >'})|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
{% endif %}
</div> <!-- END tabpanel -->
{#
********* TERMINE UND PREISE *********
#}
<div role="tabpanel" class="tab-pane" id="travel-dates-content-tab">
<h2>{{ travel_program.subtitle }}</h2>
<div class="table-responsive" id="no-more-tables">
{% if travel_program.travelDates is not empty %}
{% set has_three_bed_room = (travel_program.travelDates|first).prices[5] is defined %}
{% set has_double_bed_room = (travel_program.travelDates|first).prices[3] is defined %}
{% set has_singel_bed_room = (travel_program.travelDates|first).prices[1] is defined %}
<table class="table">
<thead>
<tr>
<th>Nr.</th>
<th>Beginn <span class="small-table-show">- Ende</span></th>
<th class="small-table-hidden">Ende</th>
{% if has_three_bed_room %}
<th>Preis p.P im Dreibettzimmer</th>{% endif %}
{% if has_double_bed_room %}
<th>Preis p.P im Doppelzimmer</th>{% endif %}
{% if has_singel_bed_room %}
<th>Preis p.P im Einzelzimmer</th>{% endif %}
<th>Abflugorte / Zuschläge</th>
<th>Verfügbarkeit</th>
<th>Buchungsformular</th>
</tr>
</thead>
<tbody>
{% set last_name = "" %}
{% for travel_date in travel_program.travelDates if travel_date.status >= 0 %}
{% if last_name != travel_date.name %}
{% set last_name = travel_date.name %}
{# @var travel_date \AppBundle\Entity\TravelDate #}
<tr>
<td data-title="Nr."><strong class="small">{{ travel_date.name }}</strong>
</td>
<td data-title="Beginn">{{ travel_date.start|date }} <span class="small-table-show">{{ travel_date.end|date }}</span></td>
<td data-title="Ende" class="small-table-hidden">{{ travel_date.end|date }}</td>
{% if has_three_bed_room %}
<td data-title="Preis p.P. im Dreibettzimmer" class="price">
{% if travel_date.prices[5] is defined %}
{% if travel_date.prices[5].available == "1" %}
{% if travel_date.prices[5] is defined %}
<span class="block">
<span class="{% if travel_date.prices[5].effectiveDiscountPrice %}old_price{% endif %}">
{% if travel_date.prices[5].effectiveDiscountPrice %}
<i class="icons-percent"></i>
{% endif %}
ab {{ travel_date.prices[5].effectivePrice|number_format }}
</span>
{% if travel_date.prices[5].effectiveDiscountPrice %}
<span class="new_price">
ab {{ travel_date.prices[5].effectiveDiscountPrice|number_format }}
</span>
{% endif %}
</span>
{% endif %}
{% else %}
nicht verfügbar
{% endif %}
{% endif %}
</td>
{% endif %}
{% if has_double_bed_room %}
<td data-title="Preis p.P im Doppelzimmer" class="price">
{% if travel_date.prices[3] is defined %}
{% if travel_date.prices[3].available == "1" %}
<span class="block">
<span class="{% if travel_date.prices[3].effectiveDiscountPrice %}old_price{% endif %}">
{% if travel_date.prices[3].effectiveDiscountPrice %}
<i class="icons-percent"></i>
{% endif %}
ab {{ travel_date.prices[3].effectivePrice|number_format }}
</span>
{% if travel_date.prices[3].effectiveDiscountPrice %}
<span class="new_price">
ab {{ travel_date.prices[3].effectiveDiscountPrice|number_format }}
</span>
{% endif %}
</span>
{% else %}
nicht verfügbar
{% endif %}
{% endif %}
</td>
{% endif %}
{% if has_singel_bed_room %}
<td data-title="Preis p.P im Einzelzimmer" class="price">
{% if travel_date.prices[1] is defined %}
{% if travel_date.prices[1].available == "1" %}
<span class="block">
<span class="{% if travel_date.prices[1].effectiveDiscountPrice %}old_price{% endif %}">
{% if travel_date.prices[1].effectiveDiscountPrice %}
<i class="icons-percent"></i>
{% endif %}
ab {{ travel_date.prices[1].effectivePrice|number_format }}
</span>
{% if travel_date.prices[1].effectiveDiscountPrice %}
<span class="new_price">
ab {{ travel_date.prices[1].effectiveDiscountPrice|number_format }}
</span>
{% endif %}
</span>
{% else %}
nicht verfügbar
{% endif %}
{% endif %}
</td>
{% endif %}
<td data-title="Abflugorte / Zuschläge">
<a href="#" class="btn btn-primary btn-sm border-radius st-slider-booking-btn" data-toggle="modal"
data-target="#st-departures-modal-{{ loop.index0 }}">
Flughäfen
</a>
{% include 'default/components/departuresModal.html.twig' with {
'departures': travel_date.departures,
'id': loop.index0,
'startWeekday': travel_date.startWeekday,
'travelName': travel_date.name
} %}
</td>
{% if travel_date.effectiveStatus == 0 %}
<td data-title="Verfügbarkeit" colspan="2">
<div style="">
<img src="/images/icons/available-{{ travel_date.effectiveStatus }}.png"
style="height: 24px; width: 24px;vertical-align:middle"
alt="">
AUSGEBUCHT
</div>
</td>
{% else %}
<td data-title="Verfügbarkeit">
<div style="font-size: 0.95em">
<img src="/images/icons/available-{{ travel_date.effectiveStatus }}.png"
style="height: 24px; width: 24px;vertical-align:middle"
alt="">
{% if travel_date.effectiveStatus == 1 %}
BUCHBAR
{% endif %}
{% if travel_date.effectiveStatus == 2 %}
BUCHBAR
{% endif %}
{% if travel_date.effectiveStatus == 3 %}
GARANTIERT
{% endif %}
{% if travel_date.effectiveStatus == 4 %}
WENIGE PLÄTZE
{% endif %}
{% if travel_date.effectiveStatus == 5 %}
NUR NOCH <span style="white-space: nowrap">1 PLATZ</span>
{% endif %}
{% if travel_date.effectiveStatus == 6 %}
NUR NOCH <span style="white-space: nowrap">2 PLÄTZE</span>
{% endif %}
{% if travel_date.effectiveStatus == 7 %}
NUR NOCH <span style="white-space: nowrap">3 PLÄTZE</span>
{% endif %}
{% if travel_date.effectiveStatus == 8 %}
NUR NOCH <span style="white-space: nowrap">4 PLÄTZE</span>
{% endif %}
{% if travel_date.effectiveStatus == 9 %}
NUR NOCH <span style="white-space: nowrap">5 PLÄTZE</span>
{% endif %}
</div>
</td>
<td data-title="">
<a href="{{ page.urlPath ~ '/buchen?nr=' ~ travel_date.name }}"
class="btn btn-primary btn-md border-radius btn-booking-form"
rel="nofollow"
>
<i class="fa fa-angle-double-right"></i> Buchungs-<br class="hidden"><span class="hidden" style="margin-left: 5px;">&nbsp;</span>Formular
</a>
</td>
{% endif %}
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
{% else %}
Momentan sind für dieses Programm keine Termine verfügbar.
{% endif %}
</div>
</div> <!-- END tabpanel -->
{#
********* LANDKARTE *********
#}
{% if travel_program.hasMap %}
<div role="tabpanel" class="tab-pane" id="travel-map-content-tab">
{% if travel_program.mapHtml is not empty %}
{{ travel_program.mapHtml|raw|stripslashes }}
{% else %}
<img src="{{ asset('/images/dummy.png') }}"
data-src="/uploads/maps/{{ travel_program.mapImage ~ travel_program.mapImageExt }}"
alt="Karte zum Reiseablauf" class="img-responsive lozad">
<br clear="all">
{% endif %}
</div> <!-- END tabpanel -->
{% endif %}
{#
********* LANDINFOS *********
#}
<div role="tabpanel" class="tab-pane" id="travel-info-content-tab">
{% for country in travel_program.countries %}
<h2>{{ country.name }}</h2>
{{ country.htmlInformation|raw|lozad }}
{% endfor %}
</div> <!-- END tabpanel -->
</div>
{{ block('travel_program_tab_bar') }}
</div>
</section><!-- end section -->
{% endblock body %}

View file

@ -0,0 +1,37 @@
{% extends get_base_template() %}
{% block body %}
<div id="section_order">
<h1>{{ page.pagetitle|default(page.title) }}</h1>
<section class="clearfix" id="section_order_second">
{{ page.content|keywords|raw|lozad }}
</section>
<section class="clearfix" id="section_order_first">
{#{% for i in 0..page.children|length//3 %}#}
<div class="row">
{% for child_page in child_pages if child_page.status == 1 and child_page.travelProgram is not empty %}
{% include 'default/components/pageBox.html.twig' %}
{% endfor %}
</div>
{% if mediated_child_pages is not empty %}
<h2>
Vermittelte Rundreisen vom {{ page.country is not empty ? (page.country.name ~ '-') }}Spezialisten
STERN TOURS aus Berlin
</h2>
<div class="row">
{% for child_page in mediated_child_pages %}
{% include 'default/components/pageBox.html.twig' %}
{% endfor %}
</div>
{% endif %}
</section>
</div>
{% endblock %}

View file

@ -0,0 +1,42 @@
<h1>{{ travel_program.title|default(page.pagetitle)|default(page.title) }}</h1>
<h2 style="color: #666">{{ travel_program.subtitle }}</h2>
{{ travel_program.htmlDescription|raw|keywords }}
<h2>Eingeschlossene Leistungen</h2>
<ul>
{% for travel_program_service in travel_program.included|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
{% if travel_program.classDescription is not empty %}
{{ travel_program.classDescription|raw }}
{% endif %}
{% if travel_program.excluded is not empty %}
<h2>Nicht eingeschlossene / zubuchbare Leistungen</h2>
<ul>
{% for travel_program_service in travel_program.excluded|split('\n') %}
<li>{{ travel_program_service|raw }}</li>
{% endfor %}
</ul>
{% endif %}
{% if (travel_program.advices is not empty) or (travel_program.generalnote is not empty) %}
<h3>Hinweise</h3>
<ul>
{% if travel_program.generalnote is not empty %}
{% for notes in travel_program.generalnote.text|trim|split('\n') %}
{% if notes is not empty %}
<li>{{ notes|raw }}</li>
{% endif %}
{% endfor %}
{% endif %}
{% for travel_program_advice in travel_program.advices|trim|split('\n') %}
{% if travel_program_advice is not empty %}
<li>{{ travel_program_advice|raw }}</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}

View file

@ -0,0 +1,17 @@
{% extends get_base_template() %}
{% block body %}
<section class="clearfix">
{% embed 'default/components/ttBodySearchForm.html.twig' %}
{% block tt_body_search_form_submit %}
<div class="form-group col-md-12 col-sm-12 col-xs-12 text-center form-bottom">
<button type="submit" class="btn btn-primary">suchen</button>
</div>
{% endblock %}
{% endembed %}
</section>
<section class="clearfix">
{{ page.content|raw|keywords|lozad }}
</section>
{% endblock %}

View file

@ -0,0 +1,141 @@
{% extends get_base_template() %}
{% form_theme contact_form 'default/form/theme.html.twig' %}
{% block body %}
<section class="clearfix">
<h1>Individuelle Reiseplanung</h1>
<p>
Sie haben noch nicht die richtige Reise gefunden? Oder planen Sie einen ganz besonderen Urlaub, den Sie im
Katalog nicht finden? Dann teilen Sie uns doch alle relevanten Informationen für Ihre Wunsch-Reise mit. Wir
werden uns dann umgehend bei Ihnen melden. Ihre Daten (Name, Telefonnummer etc.) werden ausschließlich zur
Bearbeitung Ihrer Anfrage verwendet und nicht an Dritte weitergegeben.
</p>
<script src='https://www.google.com/recaptcha/api.js'></script>
<div id="contact_form" class="contact_form">
<form id="contactform" action="/kontakt" name="contactform" method="post" data-toggle="validator">
{% if re_error != "" %}
<div class="alert alert-danger" style="margin-bottom: 0px;padding: 10px 15px;">
{{ re_error }}
</div>
<br>
{% endif %}
<div class="form-box">
<div class="col-md-12 col-sm-12 col-xs-12">
<h2>Reisedaten</h2>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<h3>Abflughafen</h3>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">{{ form_field_pho(contact_form.departure0, 'Abflughafen 1. Wahl') }}</div>
<div class="col-md-12 col-sm-12 col-xs-12">{{ form_field_pho(contact_form.departure1, 'Abflughafen 2. Wahl') }}</div>
<div class="col-md-12 col-sm-12 col-xs-12">{{ form_field_pho(contact_form.departure2, 'Abflughafen 3. Wahl') }}</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<h3>Reisetermin</h3>
</div>
<div class="form-group col-md-6 col-sm-6 col-xs-12">{{ form_field_pho(contact_form.start, 'Anreise') }}</div>
<div class="form-group col-md-6 col-sm-6 col-xs-12">{{ form_field_pho(contact_form.end, 'Abreise') }}</div>
<div class="col-md-12 col-sm-12 col-xs-12">{{ form_field_pho(contact_form.duration, 'Reisedauer in Tagen') }}</div>
</div><!-- end form-box -->
<div class="form-box">
<div class="col-md-12 col-sm-12 col-xs-12">
<h2>Persönliche Daten</h2>
</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12">
{{ form_field_pho(contact_form.salutation) }}
</div>
<div class="form-group col-md-6 col-sm-6 col-xs-12">
<div class="">
{{ form_field_pho(contact_form.firstName, 'Vorname') }}
</div>
<div class="help-block with-errors"></div>
</div>
<div class="form-group col-md-6 col-sm-6 col-xs-12">
<div class="required">
{{ form_field_pho(contact_form.lastName, 'Nachname') }}
</div>
<div class="help-block with-errors"></div>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">{{ form_field_pho(contact_form.streetAddress, 'Straße, Hausnummer') }}</div>
<div class="col-md-6 col-sm-6 col-xs-12">{{ form_field_pho(contact_form.zipCode, 'Postleitzahl') }}</div>
<div class="col-md-6 col-sm-6 col-xs-12">{{ form_field_pho(contact_form.city, 'Ort') }}</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12">{{ form_field_pho(contact_form.nation) }}</div>
<div class="form-group col-md-6 col-sm-6 col-xs-12">
{{ form_field_pho(contact_form.phone, 'Telefon tagsüber') }}
</div>
<div class="col-md-6 col-sm-6 col-xs-12">{{ form_field_pho(contact_form.mobilePhone, 'Telefon mobil') }}</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12">
{{ form_field_pho(contact_form.email, 'E-Mail-Adresse') }}
</div>
<div class="form-group col-md-12 col-sm-12 col-xs-12">
{{ form_field_pho(contact_form.travelerCount) }}
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
{{ form_field_pho(contact_form.notes, 'Bitte Reiseland und Programmwunsch angeben', {attr: {rows: 8}}) }}
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="form-group">
<div class="checkbox">
{{ form_widget(contact_form.acceptPrivacy) }}
<label for="{{ contact_form.acceptPrivacy.vars.id }}">
Hiermit willige ich in die im Rahmen der
<a href="/datenschutz" target="_blank">
Datenschutzerklärung
</a> genannte Datenverarbeitung ein.
</label>
{{ form_errors(contact_form.acceptPrivacy) }}
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div class="checkbox">
{{ form_widget(contact_form.acceptProcessing) }}
<label for="{{ contact_form.acceptProcessing.vars.id }}" style="line-height: 1.2em;">Einverständniserklärung: Hiermit willige ich in die Verarbeitung der von mir freiwillig
angegebenen personenbezogenen Daten ein.
Ich wurde darüber informiert, dass ich diese Einwilligung jederzeit ohne Nachteile per Mail an
stern@sterntours.de widerrufen kann.
</label>
{{ form_errors(contact_form.acceptProcessing) }}
<div class="help-block with-errors"></div>
</div>
</div>
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
{% if re_error != "" %}
<div class="alert alert-danger" style="margin-bottom: 0px;padding: 10px 15px;">
{{ re_error }}
</div>
<br>
{% endif %}
<div class="g-recaptcha" data-sitekey="6LfjBm8UAAAAAIN68ozw90OctADqjXSv7O-E_epJ"></div>
<br clear="all">
</div>
<div class="col-md-12 col-sm-12 col-xs-12">
<button type="submit" value="SEND" id="submit" class="aligncenter btn btn-primary btn-lg border-radius">Anfrage absenden</button>
</div>
</div><!-- end form-box -->
{{ form_rest(contact_form) }}
</form>
</div><!-- end contact-form -->
</section>
{% endblock body %}

View file

@ -0,0 +1,11 @@
{% extends 'base.html.twig' %}
{% block canonical_tag %}{% endblock %}
{% block body %}
<h1>Vielen Dank, wir haben Ihre Anfrage erhalten!</h1>
<p>
<a href="/">Zurück zur Startseite</a>
</p>
{% endblock %}

Some files were not shown because too many files have changed in this diff Show more