* Neues Form-Widget für input + HTML5-datalist (autocomplete)

* Layout head-Bereich: canonical-Tag und title-Tag, sowie robots/noindex,nofollow für einige Seiten
* Abfahrtsorte in der Suchmaske auf der Startseite angepasst
* Traveltainment-Suche: Suchergebnisseite, CMS-Template (mit Suchmaske oben), Sidebar-Widget
* Behoben: Vorschaubild von Reiseprogrammen wird nicht mehr angezeigt
* Bewertung für google-Ergebniseintrag (In der Sidebar)
* E-Mail-Signatur korrigiert
* Eltern-Template wird dynamisch bestimmt / Template ohne "Rahmen" wird für AJAX-Anfragen verwendet
* Termin-Status in Termintabelle auf Reiseprogrammseiten anzeigen
* /create-tree : Reiseführer-Unterseiten mit Reiseführer-Hauptseite verknüpfen
* Behoben: Exception bei Öffnen bestimmter Reisetermine; Bei diesen Terminen fehlen die Abfahrtsorte
* Behoben: Video klappt erst beim 2. Klick aus

git-svn-id: http://78.47.251.156/svn/dev/sterntours-3@3299 f459cee4-fb09-11de-96c3-f9c5f16c3c76
This commit is contained in:
uli 2017-02-21 15:01:28 +00:00
parent d8fcf531ec
commit ff9c159297
27 changed files with 1167 additions and 229 deletions

View file

@ -5,6 +5,12 @@
<!--[if (gte IE 9)|!(IE)]><!--><html lang="de"><!--<![endif]-->
<head>
<title>
{% block page_title %}
{{ page is defined ? page.pagetitle : '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">
@ -19,6 +25,22 @@
<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" />
{% block canonical_tag %}
{% block canonical_url %}
{% 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 %}
{% else %}
{% set canonical_url = get_base_url() ~ page.urlPath %}
{% endif %}
{% endif %}
{% endblock %}
{% if canonical_url is defined %}
<link rel="canonical" href="{{ canonical_url }}" />
<link rel="alternate" hreflang="de-de" href="{{ canonical_url }}" />
{% endif %}
{% endblock %}
{% block stylesheets %}
{% stylesheets
'bundles/app/css/bootstrap-3.3.7.css'

View file

@ -0,0 +1,124 @@
{% form_theme search_form 'default/form/theme.html.twig' %}
<section class="section fullscreen background start-slider">
<div class="absolute-section">
<div class="container">
<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">
<a id="eKomiSeal_BBBA4ECJTK29MA5_eKomiSeal_default" href="https://www.ekomi.de/bewertungen-stern-tours.html" title="eKomi - The Feedback Company: "><img border="0" src="https://connect.ekomi.de/seal/BBBA4ECJTK29MA5-70x70.png" alt="eKomi - The Feedback Company: "></a>
</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" style="background-image:url('/bundles/app/images/travel/header-top-image.jpg');"></div>
</div>
<div class="item">
<!-- Set the second background image using inline CSS below. -->
<div class="fill" style="background-image:url('/bundles/app/images/travel/header-top-image1.jpg');"></div>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. -->
<div class="fill" style="background-image:url('/bundles/app/images/travel/header-top-image2.jpg');"></div>
</div>
</div>
</div>
</section><!-- end section -->
<section class="nopadding absolute-sectionss">
<div class="container-full absolute">
<div class="container 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.
-->
<ul class="nav nav-tabs nav-justified" role="tablist">
<li class="active"><a href="#tab_01" aria-controls="tab_01" role="tab" data-toggle="tab">Kulturreisen</a></li>
<li><a href="#tab_02" aria-controls="tab_02" role="tab" data-toggle="tab">Pauschalreisen weltweit</a></li>
<li><a href="/docs/jugendreisen.html" aria-controls="tab_03" role="tab" data-toggle="tab">Jugendreisen</a></li>
</ul>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="tab_01">
<form class="bookform form-inline row" action="/suche" method="get">
<div class="form-group col-md-3 col-sm-6 col-xs-12">
{{ form_field_pho(search_form.c) }}
</div>
<div class="form-group col-md-2 col-sm-6 col-xs-12">
{{ form_field_pho(search_form.b, 'Anreise') }}
</div>
<div class="form-group col-md-2 col-sm-6 col-xs-12">
{{ form_field_pho(search_form.e, 'Abreise') }}
</div>
<div class="form-group col-md-3 col-sm-6 col-xs-12">
<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>beliebiger Abfahrtsort</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-md-2 col-sm-6 col-xs-12">
<button type="submit" class="btn btn-primary btn-block">suchen</button>
</div>
</form>
</div><!-- end tab-pane -->
<div role="tabpanel" class="tab-pane" id="tab_02">
{% include 'default/components/ttBodySearchForm.html.twig' %}
</div><!-- end tab-pane -->
</div><!-- end tab-content -->
</div><!-- end homeform -->
</div>
</div><!-- end container -->
</section><!-- end section -->

View file

@ -18,7 +18,7 @@
{% if child_page.boxImageUrl is not empty %}
{% set image_url = child_page.boxImageUrl %}
{% set image_alt = child_page.travelProgram.title|default(child_page.title) %}
{% elseif child_page.boxImageUrl is not empty %}
{% elseif child_page.travelProgram is not empty and child_page.travelProgram.previewImage is not empty %}
{% set image_url = '/uploads/travel_program/' ~ child_page.travelProgram.previewImage.fileNameWithExtension %}
{% set image_alt = child_page.title %}
{% else %}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,21 @@
{% form_theme tt_search_form 'default/form/theme.html.twig' %}
<div class="widget clearfix">
<form action="/tt-suche" method="get" class="searchwidget searchform row">
<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

@ -1,188 +0,0 @@
<section class="section fullscreen background start-slider">
<div class="absolute-section">
<div class="container">
<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">
<a id="eKomiSeal_BBBA4ECJTK29MA5_eKomiSeal_default" href="https://www.ekomi.de/bewertungen-stern-tours.html" title="eKomi - The Feedback Company: "><img border="0" src="https://connect.ekomi.de/seal/BBBA4ECJTK29MA5-70x70.png" alt="eKomi - The Feedback Company: "></a>
</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" style="background-image:url('/bundles/app/images/travel/header-top-image.jpg');"></div>
</div>
<div class="item">
<!-- Set the second background image using inline CSS below. -->
<div class="fill" style="background-image:url('/bundles/app/images/travel/header-top-image1.jpg');"></div>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. -->
<div class="fill" style="background-image:url('/bundles/app/images/travel/header-top-image2.jpg');"></div>
</div>
</div>
</div>
</section><!-- end section -->
<section class="nopadding absolute-sectionss">
<div class="container-full absolute">
<div class="container 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.
-->
<ul class="nav nav-tabs nav-justified" role="tablist">
<li class="active"><a href="#tab_01" aria-controls="tab_01" role="tab" data-toggle="tab">Kulturreisen</a></li>
<li><a href="#tab_02" aria-controls="tab_02" role="tab" data-toggle="tab">Pauschalreisen weltweit</a></li>
<li><a href="#tab_03" aria-controls="tab_03" role="tab" data-toggle="tab">Jugendreisen</a></li>
</ul>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="tab_01">
<form class="bookform form-inline row" action="/suche" method="get">
<div class="form-group col-md-3 col-sm-6 col-xs-12">
<div class="dropdown">
<select class="selectpicker" data-style="btn-white" data-dropup-auto="false" name="c">
<option value="">beliebiges Reiseziel</option>
{% for destination in destinations %}
<option value="{{ destination.id }}">{{ destination.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group col-md-2 col-sm-6 col-xs-12">
<div class="input-group">
<input id="" name="b" value="{{ startDate|date }}"
type="text" class="form-control datepicker" placeholder="Anreise"
>
<div class="input-group-addon"><i class="fa fa-calendar"></i></div>
</div>
</div>
<div class="form-group col-md-2 col-sm-6 col-xs-12">
<div class="input-group">
<input id="" name="e" value="{{ endDate|date }}"
type="text" class="form-control datepicker" placeholder="Abreise"
>
<div class="input-group-addon"><i class="fa fa-calendar"></i></div>
</div>
</div>
<div class="form-group col-md-3 col-sm-6 col-xs-12">
<div class="dropdown form-bottom">
<select name="RW" class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Abflughafen</option><option value="5000">Nord</option><option value="5001">Süd</option><option value="5002">West</option><option value="5003">Ost</option><option value="1">Amsterdam (NL)</option><option value="3">Basel-Mulhouse (CH)</option><option value="141">Berlin Brandenburg</option><option value="4">Berlin-Schönefeld</option><option value="5">Berlin-Tegel</option><option value="8">Bremen</option><option value="9">Brüssel (B)</option><option value="67">Brüssel Charleroi (B)</option><option value="10">Dortmund</option><option value="11">Dresden</option><option value="12">Düsseldorf</option><option value="73">Eindhoven (NL)</option><option value="13">Enschede (NL)</option><option value="14">Erfurt-Weimar</option><option value="15">Frankfurt</option><option value="16">Frankfurt-Hahn</option><option value="17">Friedrichshafen</option><option value="18">Genf (CH)</option><option value="19">Graz (A)</option><option value="81">Groningen (NL)</option><option value="20">Hamburg</option><option value="21">Hannover</option><option value="23">Innsbruck (A)</option><option value="24">Karlsruhe</option><option value="25">Kassel-Calden</option><option value="27">Klagenfurt (A)</option><option value="28">Köln-Bonn</option><option value="29">Leipzig/Halle</option><option value="30">Linz (A)</option><option value="31">Lübeck</option><option value="32">Lüttich (B)</option><option value="33">Luxemburg</option><option value="34">Maastricht - Aachen (NL)</option><option value="139">Magdeburg Cochstedt</option><option value="90">Memmingen</option><option value="36">München</option><option value="37">Münster-Osnabrück</option><option value="49">Niederrhein (Weeze)</option><option value="38">Nürnberg</option><option value="39">Paderborn</option><option value="40">Rostock</option><option value="41">Saarbrücken</option><option value="42">Salzburg (A)</option><option value="43">Schwerin</option><option value="44">Strasbourg (F)</option><option value="45">Stuttgart</option><option value="77">Warschau (PL)</option><option value="46">Wien (A)</option><option value="47">Zürich (CH)</option><option value="48">Zweibrücken</option></select>
</div>
</div>
<div class="form-group col-md-2 col-sm-6 col-xs-12">
<button type="submit" class="btn btn-primary btn-block">suchen</button>
</div>
</form>
</div><!-- end tab-pane -->
<div role="tabpanel" class="tab-pane" id="tab_02">
<form class="bookform form-inline row">
<div class="form-group col-md-3 col-sm-6 col-xs-12">
<div class="input-group form-bottom">
<input type="text" class="form-control datepicker" placeholder="Anreise" id="">
<div class="input-group-addon"><i class="fa fa-calendar"></i></div>
</div>
<div class="dropdown form-bottom">
<select name="RW" class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Abflughafen</option><option value="5000">Nord</option><option value="5001">Süd</option><option value="5002">West</option><option value="5003">Ost</option><option value="1">Amsterdam (NL)</option><option value="3">Basel-Mulhouse (CH)</option><option value="141">Berlin Brandenburg</option><option value="4">Berlin-Schönefeld</option><option value="5">Berlin-Tegel</option><option value="8">Bremen</option><option value="9">Brüssel (B)</option><option value="67">Brüssel Charleroi (B)</option><option value="10">Dortmund</option><option value="11">Dresden</option><option value="12">Düsseldorf</option><option value="73">Eindhoven (NL)</option><option value="13">Enschede (NL)</option><option value="14">Erfurt-Weimar</option><option value="15">Frankfurt</option><option value="16">Frankfurt-Hahn</option><option value="17">Friedrichshafen</option><option value="18">Genf (CH)</option><option value="19">Graz (A)</option><option value="81">Groningen (NL)</option><option value="20">Hamburg</option><option value="21">Hannover</option><option value="23">Innsbruck (A)</option><option value="24">Karlsruhe</option><option value="25">Kassel-Calden</option><option value="27">Klagenfurt (A)</option><option value="28">Köln-Bonn</option><option value="29">Leipzig/Halle</option><option value="30">Linz (A)</option><option value="31">Lübeck</option><option value="32">Lüttich (B)</option><option value="33">Luxemburg</option><option value="34">Maastricht - Aachen (NL)</option><option value="139">Magdeburg Cochstedt</option><option value="90">Memmingen</option><option value="36">München</option><option value="37">Münster-Osnabrück</option><option value="49">Niederrhein (Weeze)</option><option value="38">Nürnberg</option><option value="39">Paderborn</option><option value="40">Rostock</option><option value="41">Saarbrücken</option><option value="42">Salzburg (A)</option><option value="43">Schwerin</option><option value="44">Strasbourg (F)</option><option value="45">Stuttgart</option><option value="77">Warschau (PL)</option><option value="46">Wien (A)</option><option value="47">Zürich (CH)</option><option value="48">Zweibrücken</option></select>
</div>
<div class="dropdown form-bottom">
<select class="selectpicker" data-style="btn-white" data-dropup-auto="false">
<option>1 Erwachsener</option>
<option>2 Erwachsener</option>
<option>3 Erwachsener</option>
<option>4 Erwachsener</option>
<option>5 Erwachsener</option>
</select>
</div>
</div>
<div class="form-group col-md-3 col-sm-6 col-xs-12">
<div class="input-group form-bottom">
<input type="text" class="form-control datepicker" placeholder="Abreise" id="">
<div class="input-group-addon"><i class="fa fa-calendar"></i></div>
</div>
<div class="dropdown form-bottom">
<select id="selectDestination" name="ZIEL" class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Reiseziel - beliebig</option><option value="10010">Ägypten</option><option value="2202">- Nilkreuzfahrten</option><option value="2204">- Rundreisen &amp; Badeurlaub</option><option value="350">- Hurghada &amp; Safaga</option><option value="330">- Marsa Alam &amp; Quseir</option><option value="349">- Luxor &amp; Assuan</option><option value="351">- Sharm el Sheikh / Nuweiba / Taba</option><option value="348">- Kairo &amp; Gizeh &amp; Memphis &amp; Ismailia</option><option value="2500">- weitere Angebote Ägypten</option><option value="4144">- Marsa Matruh &amp; Alexandria</option><option value="510">Israel - Tel Aviv &amp; Umgebung</option><option value="727">Israel- Totes Meer</option><option value="515">Jordanien</option><option value="10008">Marroko, Tunesien</option><option value="2237">- Rundreisen Marokko</option><option value="959">- Rundreisen Tunesien</option><option value="126">- Marokko - Marrakesch</option><option value="125">- Marokko - Atlantikküste: Agadir / Safi / Tiznit</option><option value="4200">- Marokko - Atlantikküste: Casablanca / El Jadida / Rabat</option><option value="705">- Marokko - Inland</option><option value="614">- Tunesien - Monastir</option><option value="132">- Tunesien - Hammamet</option><option value="133">- Tunesien - Insel Djerba</option><option value="135">- Tunesien - Oase Zarzis</option><option value="131">- Tunesien - Norden</option><option value="136">- Tunesien - Inland</option><option value="134">- Tunesien - Oase Tozeur / Tamerza / Nefta</option><option value="10004">Türkei</option><option value="946">- Rundreisen</option><option value="643">- Side &amp; Alanya</option><option value="434">- Antalya &amp; Belek</option><option value="644">- Kemer &amp; Beldibi</option><option value="373">- Istanbul &amp; Umgebung</option><option value="651">- Kusadasi &amp; Didyma</option><option value="646">- Dalaman - Fethiye - Ölüdeniz</option><option value="647">- Marmaris &amp; Icmeler &amp; Datca</option><option value="652">- Ayvalik, Cesme &amp; Izmir</option><option value="648">- Bodrum</option><option value="2511">- Schwarzmeerküste Türkei</option><option value="2273">Rundreise Arabische Halbinsel</option><option value="2164">Rundreise Oman</option><option value="10032">Glückshotels</option></select>
</div>
<div class="dropdown form-bottom">
<select name="KA1" class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Kind 1</option><option value="1">&lt; 2 Jahre</option><option value="2">2 Jahre</option><option value="3">3 Jahre</option><option value="4">4 Jahre</option><option value="5">5 Jahre</option><option value="6">6 Jahre</option><option value="7">7 Jahre</option><option value="8">8 Jahre</option><option value="9">9 Jahre</option><option value="10">10 Jahre</option><option value="11">11 Jahre</option><option value="12">12 Jahre</option><option value="13">13 Jahre</option><option value="14">14 Jahre</option><option value="15">15 Jahre</option><option value="16">16 Jahre</option></select>
</div>
</div>
<div class="form-group col-md-3 col-sm-6 col-xs-12">
<div class="dropdown form-bottom">
<select class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Reisedauer</option><option value="9">1 - 4 Tage</option><option value="10">5 - 8 Tage</option><option value="6_7">1 Woche</option><option value="7">9 - 12 Tage</option><option value="3">13 - 15 Tage</option><option value="6_14">2 Wochen</option><option value="12">16 - 22 Tage</option><option value="6_21">3 Wochen</option><option value="13">&gt; 22 Tage</option></select>
</div>
<input type="text" class="form-control" placeholder="Hotelname">
<div class="dropdown form-bottom">
<select name="KA1" class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Kind 2</option><option value="1">&lt; 2 Jahre</option><option value="2">2 Jahre</option><option value="3">3 Jahre</option><option value="4">4 Jahre</option><option value="5">5 Jahre</option><option value="6">6 Jahre</option><option value="7">7 Jahre</option><option value="8">8 Jahre</option><option value="9">9 Jahre</option><option value="10">10 Jahre</option><option value="11">11 Jahre</option><option value="12">12 Jahre</option><option value="13">13 Jahre</option><option value="14">14 Jahre</option><option value="15">15 Jahre</option><option value="16">16 Jahre</option></select>
</div>
</div>
<div class="form-group col-md-3 col-sm-6 col-xs-12">
<input type="text" class="form-control" placeholder="Ort / Region / Land">
<div class="dropdown form-bottom">
<select name="HCAT" class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Hotelkategorie</option>
<option value="0">2 Sterne</option>
<option value="1">3 Sterne</option>
<option value="2">4 Sterne</option>
<option value="3">5 Sterne</option></select>
</div>
<div class="dropdown form-bottom">
<select name="KA1" class="selectpicker" data-style="btn-white" data-dropup-auto="false"><option value="-1">Kind 3</option><option value="1">&lt; 2 Jahre</option><option value="2">2 Jahre</option><option value="3">3 Jahre</option><option value="4">4 Jahre</option><option value="5">5 Jahre</option><option value="6">6 Jahre</option><option value="7">7 Jahre</option><option value="8">8 Jahre</option><option value="9">9 Jahre</option><option value="10">10 Jahre</option><option value="11">11 Jahre</option><option value="12">12 Jahre</option><option value="13">13 Jahre</option><option value="14">14 Jahre</option><option value="15">15 Jahre</option><option value="16">16 Jahre</option></select>
</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-primary">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,30 @@
{% form_theme tt_search_form 'default/form/theme.html.twig' %}
<form action="/tt-suche" method="get" class="bookform form-inline">
<div class="form-group row">
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.termin, 'Früheste Anreise') }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.ruecktermin, 'Späteste Abreise') }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.dauer) }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.topRegion, 'Reiseziel') }}</div>
</div>
<div class="form-group row">
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.abflughafen, 'Abflughafen') }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.shotel, 'Hotelname') }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.kategorie) }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.zimmer) }}</div>
</div>
<div class="form-group row">
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.t) }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.child0) }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.child1) }}</div>
<div class="col-md-3 col-sm-6 col-xs-12">{{ form_field_pho(tt_search_form.child2) }}</div>
</div>
{% 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 %}
</form>

View file

@ -3,7 +3,7 @@ Ihr Team von STERN TOURS
--
STERN TOURS Travelservice GmbH
STERN TOURS GmbH
Uhlandstr. 137
10717 Berlin
@ -14,6 +14,6 @@ Fax: 030 / 700 94 1044
Registergericht: Amtsgericht Charlottenburg
Registernummer: HRB 67111
Steuernummer: 27/016/10728
Steuernummer: 27/545/30703
UST-Ident.-Nr.: DE192609253
Finanzamt: Wilmersdorf

View file

@ -5,6 +5,9 @@
{%- 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(

View file

@ -32,6 +32,16 @@
{{- 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}) -%}

View file

@ -3,8 +3,9 @@
{% block metatags %}
{{ parent() }}
<meta name="robots" content="noindex" />
<meta name="robots" content="noindex,nofollow" />
{% endblock %}
{% block canonical_tag %}{% endblock %}
{% block stylesheets %}
{{ parent() }}

View file

@ -1,5 +1,7 @@
{% extends 'base.html.twig' %}
{% block canonical_tag %}{% endblock %}
{% block body %}
<h1>Vielen Dank für Ihren Buchungsauftrag!</h1>
{% endblock %}

View file

@ -1,7 +1,11 @@
{% extends 'base.html.twig' %}
{% block canonical_url %}
{% set canonical_url = get_base_url() ~ '/' %}
{% endblock %}
{% block header2 %}
{% include 'default/components/slider.html.twig' %}
{% include 'default/components/home/slider.html.twig' %}
{% endblock %}
{% block breadcrumb %}{% endblock %}

View file

@ -27,9 +27,11 @@
</div>
<div class="description col-md-9">
<span class="pull-right">
{# #TODO
<a href="https://www.sterntours.de/travel_program/pdf/22/" class="btn btn-default btn-sm border-radius">
<i class="fa fa-file-pdf-o"></i> Druckversion
</a>
#}
</span>
<div class="title clearfix">{{ travel_program.title }}</div>
@ -92,7 +94,7 @@
</td>
<td data-title="Verfügbarkeit">
<img src="https://www.sterntours.de/images/icons/available-{{ travel_date.status }}.png"
<img src="/images/icons/available-{{ travel_date.status }}.png"
alt="Verfügbarkeit">
</td>

View file

@ -182,7 +182,8 @@
<th>Preis p.P im Doppelzimmer</th>
<th>Preis p.P im Einzelzimmer</th>
<th>Abflugorte / Zuschläge</th>
<th>Buchung</th>
<th>Status</th>
<th>Buchungsformular</th>
</tr>
</thead>
<tbody>
@ -251,12 +252,16 @@
'id': loop.index0
} %}
</td>
<td data-title="Verfügbarkeit">
<img src="/images/icons/available-{{ travel_date.status }}.png"
alt="Verfügbarkeit">
</td>
<td data-title="">
<a href="{{ page.urlPath ~ '/buchen?nr=' ~ travel_date.name }}"
class="btn btn-primary"
rel="nofollow"
>
Buchungsformular
Weiter
</a>
</td>
</tr>

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 }}
</section>
{% endblock %}

View file

@ -0,0 +1,20 @@
{% extends get_base_template() %}
{% block metatags %}
{{ parent() }}
<meta name="robots" content="noindex,nofollow" />
{% endblock %}
{% block search_sidebar_widget %}
{{ include('default/components/sidebar/ttSearchSidebarWidget.html.twig') }}
{% endblock %}
{% block body %}
{% if tt_url is defined %}
<iframe src="{{ tt_url }}" scrolling="no" width="100%" height="13500"
onload="window.parent.parent.scrollTo(0,0);"
></iframe>
{% else %}
<p>Es konnten leider keine Ergebnisse gefunden werden.</p>
{% endif %}
{% endblock body %}

View file

@ -26,6 +26,11 @@ services:
tags:
- { name: twig.extension }
form.type.datalist_type:
class: AppBundle\Form\DatalistType
tags:
- { name: form.type, alias: datalist }
app.booking_exporter:
class: AppBundle\Export\SternToursCrmBookingExporter
arguments:

View file

@ -6,6 +6,7 @@ use AppBundle\Entity\BreadcrumbEntry;
use AppBundle\Entity\Page;
use AppBundle\Entity\TravelProgram;
use AppBundle\Form\SearchRequestType;
use AppBundle\Form\TtSearchRequestType;
use AppBundle\Util;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query\Expr;
@ -27,8 +28,7 @@ class DefaultController extends Controller
public function defaultAction(Request $request)
{
// #TODO 404
die ("caught");
throw new $this->createNotFoundException();
}
/**
@ -36,14 +36,12 @@ class DefaultController extends Controller
*/
public function homeAction()
{
//$departures = $this->getEntityManager()->getRepository('AppBundle:TravelDeparturePoint')->findAll();
$destinations = $this->getEntityManager()->getRepository('AppBundle:TravelCountry')->findAll();
return $this->render('default/pages/home.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'destinations' => $destinations,
'startDate' => new \DateTime('+5 day'),
'endDate' => new \DateTime('+19 day')
'canonical_url' => Util::getBaseUrl() .'/',
'show_search_sidebar_widget' => false,
'search_form' => $this->createForm(SearchRequestType::class)->createView(),
'tt_search_form' => $this->createForm(TtSearchRequestType::class)->createView(),
]);
}
@ -51,7 +49,7 @@ class DefaultController extends Controller
{
return $this->render('default/pages/default.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'page' => $page
'page' => $page,
]);
}
@ -60,14 +58,6 @@ class DefaultController extends Controller
return $this->render('default/pages/overview.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'page' => $page,
// #WORKAROUND Special navigation logic here adapted from the old website: Don't show child entries
// #TODO Only applies at level 0
/*
'nav_pages' => $page->getChildren(),
'nav_child_pages' => [],
'nav_open_node' => null
*/
]);
}
@ -108,6 +98,17 @@ class DefaultController extends Controller
]);
}
public function cmsTraveltainmentAction(Page $page)
{
$form = $this->createForm(TtSearchRequestType::class);
return $this->render('default/pages/traveltainment.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'page' => $page,
'tt_search_form' => $form->createView(),
]);
}
public function cmsTravelProgramAction(Page $page)
{
$this->getDoctrine()->getRepository('AppBundle:TravelPeriod')->getTrueTravelPeriods($page->getTravelProgram());
@ -160,6 +161,69 @@ class DefaultController extends Controller
]);
}
/**
* @Route("/tt-suche")
*/
public function ttSearchAction(Request $request)
{
$form = $this->createForm(TtSearchRequestType::class);
$form->handleRequest($request);
if ($form->isValid())
{
$data = $form->getData();
$ttUrl = 'http://www.vidado.com/booking/ibe_bp2/index.php?CID=8ce65750ce5af9d9a6b22c9b04772ea7&formular=4&engine=pauschal&showresult=1';
$ttUrl .= '&termin=' . $data['termin']->format('d.m.Y');
$ttUrl .= '&ruecktermin=' . $data['ruecktermin']->format('d.m.Y');
if (!empty($data['dauer'])) $ttUrl .= '&dauer='. $data['dauer'];
if (!empty($data['t']))
{
$ttUrl .= '&personen=25'. str_repeat(';25', $data['t']);
for ($i = 0; $i < 3; ++$i)
{
if (!empty($data['child'.$i]))
{
$ttUrl .= ';'. $data['child'. $i];
}
}
}
$ttUrl .= '&detail=';
if (!empty($data['topRegion']) && isset(TtSearchRequestType::$DESTINATION_CHOICES[$data['topRegion']]))
{
$ttUrl .= 'hotel&topRegion='. TtSearchRequestType::$DESTINATION_CHOICES[$data['topRegion']];
}
else
{
$ttUrl .= 'zielgebiet';
}
if (!empty($data['abflughafen'])) $ttUrl .= '&abflughafen='. $data['abflughafen'];
if (!empty($data['shotel'])) $ttUrl .= '&shotel='. urlencode($data['shotel']);
if (!empty($data['kategorie'])) $ttUrl .= '&kategorie='. $data['kategorie'];
if (!empty($data['zimmer'])) $ttUrl .= '&zimmer='. $data['zimmer'];
if (!empty($data['verpflegung'])) $ttUrl .= '&verpflegung='. $data['verpflegung'];
if (!empty($data['hbfges'])) $ttUrl .= '&hbfges='. $data['hbfges'];
if (!empty($data['hbfanz'])) $ttUrl .= '&hbfanz='. $data['hbfanz'];
if (!empty($data['hbfempf'])) $ttUrl .= '&hbfempf='. $data['hbfempf'];
if ($data['familie_kinder'] ?? false) $ttUrl .= '&familie_kinder=0';
if ($data['strand'] ?? false) $ttUrl .= '&strand=0';
if ($data['wellness'] ?? false) $ttUrl .= '&wellness=0';
if ($data['typ'] ?? false) $ttUrl .= '&typ=0';
if (!empty($data['sportangebot'])) $ttUrl .= '&sportangebot='. $data['sportangebot'];
//die($ttUrl);
//http://www.vidado.com/booking/ibe_bp2/index.php?CID=8ce65750ce5af9d9a6b22c9b04772ea7&formular=4&engine=pauschal&detail=hotel&showresult=1&termin=26.02.2017&ruecktermin=12.03.2017&dauer=6_14&personen=25;25&abflughafen=-1&topRegion=727
//http://www.vidado.com/booking/ibe_bp2/index.php?CID=8ce65750ce5af9d9a6b22c9b04772ea7&formular=4&engine=pauschal&detail=zielgebiet&showresult=1&termin=26.02.2017&ruecktermin=12.03.2017&dauer=6_14&personen=25;25&abflughafen=-1&topRegion=
}
return $this->render('default/pages/ttSearch.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'breadcrumb_entries' => [new BreadcrumbEntry('Suchen')],
'tt_search_form' => $form->createView(),
'tt_url' => $ttUrl ?? null,
]);
}
public function headerAction()
{
$qb = $this->getEntityManager()->createQueryBuilder();
@ -255,8 +319,6 @@ class DefaultController extends Controller
}
return $this->render('default/components/sidebar/searchSidebarWidget.html.twig', [
'search_form' => $this->createForm(SearchRequestType::class, [
'b' => new \DateTime('+5 day'),
'e' => new \DateTime('+19 day'),
'c' => $destination,
'c2' => $combinedDestination,
])->createView()
@ -302,6 +364,8 @@ class DefaultController extends Controller
$em->getConnection()->executeUpdate('UPDATE page SET owner = 47 WHERE catalog_id = 3 AND owner = 0');
$em->getConnection()->executeUpdate('UPDATE page SET owner = 66 WHERE catalog_id = 6 AND owner = 0');
$em->getConnection()->executeUpdate('UPDATE page SET owner = 2803 WHERE catalog_id = 14 AND owner = 0');
// Add missing owner relation
$em->getConnection()->executeUpdate('UPDATE page SET owner = 13 WHERE id in (1314,1426,1472,1548)');
$lft = 0;
$this->createTree(0, $lft, 0);
@ -311,6 +375,7 @@ class DefaultController extends Controller
$em->getConnection()->executeUpdate('UPDATE page SET owner = 0 WHERE parent_id = 47 AND catalog_id = 3');
$em->getConnection()->executeUpdate('UPDATE page SET owner = 0 WHERE parent_id = 66 AND catalog_id = 6');
$em->getConnection()->executeUpdate('UPDATE page SET owner = 0 WHERE parent_id = 2803 AND catalog_id = 14');
$em->getConnection()->executeUpdate('UPDATE page SET owner = 0 WHERE id in (1314,1426,1472,1548)');
$em->commit();

View file

@ -78,9 +78,6 @@ class BookingRequest
*/
private $email;
/*
* @ Assert\Valid()
*/
private $travelers = [];
private $notes;

View file

@ -182,7 +182,7 @@ final class TravelDate
$departures = $this->flightPeriod === null ? [] : $this->flightPeriod->getDepartures();
}
$defaultDepartures = DepartureUtil::filterDeparturesByPeriod($defaultDepartures, $this->start, $this->end, true);
$this->departures = DepartureUtil::mergeDeparturesWithDefaults($defaultDepartures, $departures, true);
$this->departures = DepartureUtil::mergeDeparturesWithDefaults($departures, $defaultDepartures, true);
}
return $this->departures;
}

View file

@ -0,0 +1,37 @@
<?php
/**
* @author Ulrich Hecht <ulrich.hecht@hecht-software.de>
* @date 02/20/2017
*/
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;
class DatalistType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired(['choices']);
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['choices'] = $options['choices'];
}
public function getName()
{
return 'datalist';
}
public function getParent()
{
return TextType::class;
}
}

View file

@ -22,8 +22,14 @@ class SearchRequestType extends AbstractType
{
$builder->setMethod('GET');
$builder
->add('b', StDateType::class, ['required' => false])
->add('e', StDateType::class, ['required' => false])
->add('b', StDateType::class, [
'required' => false,
'data' => new \DateTime('+5 day'),
])
->add('e', StDateType::class, [
'required' => false,
'data' => new \DateTime('+19 day'),
])
->add('c', EntityType::class, [
'required' => false,
'placeholder' => 'beliebiges Reiseziel',

View file

@ -0,0 +1,732 @@
<?php
/**
* @author Ulrich Hecht <ulrich.hecht@hecht-software.de>
* @date 02/17/2017
*/
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TtSearchRequestType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$childChoices = ['< 2 Jahre' => 1];
for ($i = 2; $i <= 16; ++$i)
{
$childChoices[$i .' Jahre'] = $i;
}
$defaultStartDate = new \DateTime('+5 day');
$defaultEndDate = new \DateTime('+19 day');
$builder->setMethod('GET');
$builder
->add('termin', StDateType::class, [
'required' => false,
'empty_data' => $defaultStartDate->format('d.m.Y'),
'data' => $defaultStartDate,
])
->add('ruecktermin', StDateType::class, [
'required' => false,
'empty_data' => $defaultEndDate->format('d.m.Y'),
'data' => $defaultEndDate,
])
->add('dauer', ChoiceType::class, [
'required' => false,
'empty_data' => '6_14',
'placeholder' => 'beliebige Reisedauer',
'choices' => self::$DURATION_CHOICES,
])
->add('topRegion', DatalistType::class, [
'required' => false,
'choices' => array_keys(self::$DESTINATION_CHOICES),
])
->add('t', ChoiceType::class, [
'choices' => self::$TRAVELER_CHOICES,
])
;
for ($i = 0; $i < 3; ++$i)
{
$builder->add('child'. $i, ChoiceType::class, [
'required' => false,
'placeholder' => 'Kind '. ($i + 1) .' - nicht vorhanden',
'choices' => $childChoices
]);
}
$builder
->add('abflughafen', ChoiceType::class, [
'required' => false,
'placeholder' => 'Abflughafen - beliebig',
'choices' => self::$DEPARTURE_CHOICES,
])
->add('shotel', TextType::class, ['required' => false])
->add('kategorie', ChoiceType::class, [
'required' => false,
'placeholder' => 'Hotel - beliebig',
'choices' => self::$HOTEL_CATEGORY_CHOICES,
])
->add('zimmer', ChoiceType::class, [
'required' => false,
'placeholder' => 'Zimmertyp - beliebig',
'choices' => self::$ROOM_TYPE_CHOICES,
])
->add('verpflegung', ChoiceType::class, [
'required' => false,
'placeholder' => 'Verpflegung - beliebig',
'choices' => self::$FARE_CHOICES
])
->add('hbfges', ChoiceType::class, [
'required' => false,
'placeholder' => 'Bewertung - beliebig',
'choices' => self::$HOTEL_RATING_CHOICES,
])
->add('hbfanz', ChoiceType::class, [
'required' => false,
'placeholder' => 'Anzahl Bewertungen - beliebig',
'choices' => self::$HOTEL_RATING_COUNT_CHOICES,
])
->add('hbfempf', ChoiceType::class, [
'required' => false,
'placeholder' => 'Weiterempfehlungen - beliebig',
'choices' => self::$HOTEL_RECOMM_CHOICES,
])
->add('familie_kinder', CheckboxType::class, ['required' => false])
->add('strand', CheckboxType::class, ['required' => false])
->add('wellness', CheckboxType::class, ['required' => false])
->add('typ', CheckboxType::class, ['required' => false])
->add('sportangebot', ChoiceType::class, [
'required' => false,
'placeholder' => 'Sportangebot - beliebig',
'choices' => self::$SPORT_CHOICES,
])
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
));
}
public function getBlockPrefix()
{
return null;
}
private static $TRAVELER_CHOICES = [
'1 Erwachsene(r)' => 1,
'2 Erwachsene' => 2,
'3 Erwachsene' => 3,
'4 Erwachsene' => 4,
];
private static $DURATION_CHOICES = [
'1 - 4 Tage' => '9',
'5 - 8 Tage' => '10',
'1 Woche' => '6_7',
'9 - 12 Tage' => '7',
'13 - 15 Tage' => '3',
'2 Wochen' => '6_14',
'16 - 22 Tage' => '12',
'3 Wochen' => '6_21',
'> 22 Tage oder länger' => '13',
];
private static $HOTEL_CATEGORY_CHOICES = [
'2 Sterne' => 0,
'3 Sterne' => 1,
'4 Sterne' => 2,
'5 Sterne' => 3,
];
private static $ROOM_TYPE_CHOICES = [
'Einzelzimmer' => 5,
'Doppelzimmer' => 6,
'Familienzimmer' => 2,
'Bungalow' => 0,
'Appartment' => 7,
];
private static $FARE_CHOICES = [
'nur Übernachtung' => 0,
'Frühstück' => 1,
'Halbpension' => 2,
'Vollpension' => 3,
'All Inclusive' => 4,
];
private static $HOTEL_RATING_CHOICES = [
'min. 3.0 von 6.0' => 30,
'min. 4.0 von 6.0' => 40,
'min. 5.0 von 6.0' => 50,
'6.0 von 6.0' => 60,
];
private static $HOTEL_RATING_COUNT_CHOICES = [
'min. 5' => 5,
'min. 10' => 10,
'min. 25' => 25,
'min. 50' => 50,
'min. 100' => 100,
];
private static $HOTEL_RECOMM_CHOICES = [
'min. 80%' => 800,
'min. 90%' => 900,
'100%' => 1000,
];
private static $SPORT_CHOICES = [
'großes Sportangebot' => 10,
'Tennis' => 0,
'Golf' => 1,
'Squash' => 2,
'Radsport' => 3,
'Wassersport' => 4,
'Tauchen' => 5,
'Reiten' => 6,
'Wandern' => 7,
'Surfen' => 8,
];
private static $DEPARTURE_CHOICES = [
'Nord' => 5000,
'S\xFCd' => 5001,
'West' => 5002,
'Ost' => 5003,
'Amsterdam (NL)' => 1,
'Basel-Mulhouse (CH)' => 3,
'Berlin Brandenburg' => 141,
'Berlin-Sch\xF6nefeld' => 4,
'Berlin-Tegel' => 5,
'Bremen' => 8,
'Br\xFCssel (B)' => 9,
'Br\xFCssel Charleroi (B)' => 67,
'Dortmund' => 10,
'Dresden' => 11,
'D\xFCsseldorf' => 12,
'Eindhoven (NL)' => 73,
'Enschede (NL)' => 13,
'Erfurt-Weimar' => 14,
'Frankfurt' => 15,
'Frankfurt-Hahn' => 16,
'Friedrichshafen' => 17,
'Genf (CH)' => 18,
'Graz (A)' => 19,
'Groningen (NL)' => 81,
'Hamburg' => 20,
'Hannover' => 21,
'Innsbruck (A)' => 23,
'Karlsruhe' => 24,
'Kassel-Calden' => 25,
'Klagenfurt (A)' => 27,
'K\xF6ln-Bonn' => 28,
'Leipzig/Halle' => 29,
'Linz (A)' => 30,
'L\xFCbeck' => 31,
'L\xFCttich (B)' => 32,
'Luxemburg' => 33,
'Maastricht - Aachen (NL)' => 34,
'Magdeburg Cochstedt' => 139,
'Memmingen' => 90,
'M\xFCnchen' => 36,
'M\xFCnster-Osnabr\xFCck' => 37,
'Niederrhein (Weeze)' => 49,
'N\xFCrnberg' => 38,
'Paderborn' => 39,
'Rostock' => 40,
'Saarbr\xFCcken' => 41,
'Salzburg (A)' => 42,
'Schwerin' => 43,
'Strasbourg (F)' => 44,
'Stuttgart' => 45,
'Warschau (PL)' => 77,
'Wien (A)' => 46,
'Z\xFCrich (CH)' => 47,
'Zweibr\xFCcken' => 48,
];
public static $DESTINATION_CHOICES = [
'Balearen' => 10000,
'- Formentera' => 627,
'- Ibiza' => 32,
'- Mallorca' => 35,
'- Menorca' => 630,
'Kanaren' => 10001,
'- Fuerteventura' => 832,
'- Teneriffa' => 56,
'- La Palma' => 675,
'- Lanzarote' => 676,
'- Gran Canaria' => 345,
'- La Gomera' => 50,
'- El Hierro' => 59,
'- Graciosa' => 670,
'Portugal' => 10002,
'- Faro & Algarve' => 637,
'- Lissabon & Umgebung' => 674,
'- Costa da Caparica (Setúbal)' => 636,
'- Alentejo - Beja / Setubal / Evora / Santarem / Portalegre' => 339,
'- Porto' => 467,
'- Costa do Estoril (Lissabon)' => 695,
'- Costa de Prata (Leira / Coimbra / Aveiro)' => 457,
'- Costa Verde (Braga / Viana do Castelo)' => 494,
'- Madeira' => 639,
'- Madeira Rundreisen' => 2244,
'- Coimbra / Leiria / Castello Branco' => 338,
'- Azoren' => 664,
'- Azoren Rundreisen' => 2246,
'- Porto Santo' => 2662,
'- Braga / Vila Real / Viano do Castelo / Branganca' => 2660,
'- Aveiro / Guarda / Viseu' => 2659,
'- Costa Azul (Setubal / Beja)' => 2658,
'Spanisches Festland' => 10003,
'- Spanien Rundreise' => 2068,
'- Barcelona & Umgebung' => 2068,
'- Golf von Almeria' => 63,
'- Costa del Sol & Costa Tropical' => 62,
'- Costa Blanca & Costa Calida' => 64,
'- Costa Brava' => 2013,
'- Madrid & Umgebung' => 794,
'- Andalusien Inland' => 229,
'- Andalusien Rundreisen' => 2253,
'- Costa Barcelona' => 931,
'- Costa Dorada' => 2054,
'- Costa de la Luz' => 61,
'- Nordspanien - Atlantikküste' => 505,
'- Costa Azahar' => 2014,
'- Zentral Spanien' => 793,
'- Provinz Murcia Inland' => 2661,
'- Provinz Valencia Inland' => 4202,
'- Spanien Nordosten & Pyrenäen' => 65,
'- Ceuta' => 4203,
'- Melilla' => 4204,
'Türkei' => 10004,
'- Rundreisen' => 946,
'- Side & Alanya' => 643,
'- Kemer & Beldibi' => 644,
'- Istanbul & Umgebung' => 373,
'- Antalya & Belek' => 434,
'- Kusadasi & Didyma' => 651,
'- Dalaman - Fethiye - Ölüdeniz' => 646,
'- Ayvalik, Cesme & Izmir' => 652,
'- Marmaris & Icmeler & Datca' => 647,
'- Bodrum' => 648,
'- Ost-Thrakien & Marmarameer' => 4108,
'- Schwarzmeerküste Türkei' => 2511,
'- Türkei Inland' => 526,
'- Mersin - Adana - Antakya' => 542,
'Griechische Inseln' => 10005,
'- Kreta' => 616,
'- Rhodos' => 655,
'- Kos' => 7,
'- Santorin' => 12,
'- Korfu & Paxi' => 6,
'- Mykonos' => 9,
'- Zakynthos' => 14,
'- Euböa (Evia)' => 383,
'- Karpathos & Kasos' => 15,
'- Lesbos & Lemnos' => 8,
'- Poros' => 546,
'Griechische Festland' => 10006,
'- Athen & Umgebung' => 18,
'- Thessaloniki' => 625,
'- Olympische Riviera' => 733,
'- Chalkidiki' => 534,
'- Peloponnes' => 382,
'- Epirus & Westgriechenland' => 553,
'- Pilion' => 734,
'- Thessalien & Mittelgriechenland' => 4103,
'Italien, Malta' => 10007,
'- Italien Rundreise' => 2235,
'- Malta Rundreise' => 2513,
'- Venetien' => 82,
'- Malta' => 595,
'- Rom & Umgebung' => 560,
'- Toskana' => 537,
'- Emilia Romagna' => 81,
'- Aostatal & Piemont & Lombardei' => 845,
'- Neapel & Umgebung' => 76,
'- Sizilien' => 77,
'- Sizilien Rundreisen' => 2222,
'- Apulien' => 464,
'- Latium' => 3005,
'- Trentino & Südtirol' => 844,
'- Oberitalienische Seen' => 2012,
'- Friaul - Julisch Venetien' => 297,
'- Ligurien' => 818,
'- Ischia' => 75,
'- Sardinien' => 78,
'- Gardasee' => 2048,
'- Kalabrien' => 536,
'- Umbrien' => 817,
'- Basilikata' => 291,
'- Dolomiten' => 2046,
'- Italienische Alpen' => 2047,
'- Capri' => 79,
'Marroko, Tunesien Pauschalreisen' => 10008,
'- Marokko Rundreisen' => 2237,
'- Tunesien Rundreisen' => 959,
'- Marokko - Marrakesch' => 126,
'- Marokko - Atlantikküste: Agadir / Safi / Tiznit' => 125,
'- Marokko - Atlantikküste: Casablanca / El Jadida / Rabat' => 4200,
'- Marokko - Inland' => 705,
'- Tunesien - Monastir' => 614,
'- Tunesien - Hammamet' => 132,
'- Tunesien - Insel Djerba' => 133,
'- Tunesien - Oase Zarzis' => 135,
'- Tunesien - Norden' => 131,
'- Tunesien - Inland & Gabès & Sfax' => 136,
'- Tunesien - Oase Tozeur / Tamerza / Nefta' => 134,
'Ägypten Pauschalreisen' => 10010,
'- Nilkreuzfahrten' => 2202,
'- Rundreisen & Badeurlaub' => 2204,
'- Hurghada & Safaga' => 350,
'- Marsa Alam & Quseir' => 330,
'- Luxor & Assuan' => 349,
'- Sharm el Sheikh / Nuweiba / Taba' => 351,
'- Kairo & Gizeh & Memphis & Ismailia' => 348,
'- weitere Angebote Ägypten' => 2500,
'- Marsa Matruh & Alexandria' => 4144,
'Afrika' => 10011,
'- Kap Verde - Sal' => 585,
'- Kap Verde - Boavista' => 280,
'- Kenia - Nairobi & Inland' => 174,
'- Gambia' => 137,
'- Kenia - Südküste' => 359,
'- Kenia - Nordküste' => 358,
'- Namibia' => 453,
'- Western Cape (Kapstadt)' => 873,
'- Senegal' => 139,
'- Tansania - Sansibar' => 454,
'- Eastern Cape (Port Elizabeth)' => 4109,
'- Northern Cape (Kimberley)' => 875,
'- Gauteng (Johannesburg)' => 883,
'- KwaZulu-Natal (Durban)' => 881,
'- Limpopo (Polokwane)' => 879,
'- Northwest (Mahikeng)' => 876,
'- Äthiopien' => 4112,
'- Madagaskar' => 161,
'- Botswana' => 842,
'- Malawi' => 1019,
'Kuba' => 10012,
'- Kuba - Havanna & Varadero' => 369,
'- Kuba - Holguin' => 371,
'- weitere Angebote Kuba' => 2522,
'Dom. Republik' => 10013,
'- Dom. Republik - Süden (Santo Domingo)' => 368,
'- Dom. Republik - Norden (Puerto Plata & Samana)' => 366,
'- Dom. Republik - Osten (Punta Cana)' => 367,
'Karibik' => 10014,
'- Jamaika' => 247,
'- Curacao' => 582,
'- Martinique' => 571,
'- Guadeloupe' => 572,
'- Barbados' => 245,
'- Saint-Martin (frz.)' => 4098,
'- Grenada' => 377,
'- Puerto Rico' => 251,
'- Aruba' => 4197,
'- Tobago' => 378,
'- Sint Maarten (nl.)' => 4198,
'- Antigua & Barbuda' => 250,
'- Bonaire, Sint Eustatius & Saba' => 4110,
'- Bahamas' => 566,
'- Saint Kitts & Nevis' => 578,
'- Cayman Islands' => 581,
'- St.Lucia' => 249,
'- Bermuda' => 437,
'- Saint-Barthélemy' => 2648,
'- Virgin Islands British' => 680,
'- Turks & Caicosinseln' => 574,
'- St. Vincent & Grenadinen' => 747,
'- Virgin Islands USA' => 4199,
'USA' => 10015,
'- New York' => 697,
'- Illinois & Wisconsin' => 759,
'- New Jersey & Delaware' => 782,
'- Florida Ostküste' => 521,
'- Nevada' => 692,
'- Florida Orlando & Inland' => 524,
'- Florida Westküste' => 522,
'- Florida Südspitze' => 523,
'- Kalifornien' => 688,
'- New England' => 886,
'- Pennsylvania' => 758,
'- Texas' => 755,
'- Arizona' => 484,
'- Georgia' => 757,
'- Tennessee' => 773,
'- Louisiana & Mississippi' => 756,
'- Michigan' => 762,
'Mexiko' => 10016,
'- Mexiko: Yucatan / Cancun' => 282,
'- Mexiko Stadt' => 541,
'- Mexiko: Acapulco / Oaxaca' => 701,
'- Mexiko: Pazifikküste' => 704,
'- Mexiko: Karibikküste' => 2241,
'- Mexiko: Inland' => 438,
'Asien' => 10017,
'- Sri Lanka' => 361,
'- Malaysia' => 452,
'- Hongkong & Kowloon & Hongkong Island' => 474,
'- China - Peking (Beijing)' => 439,
'- China - Hubei / Shaanxi / Shanxi / Henan' => 2654,
'- China - Shanghai' => 4141,
'- Singapur' => 473,
'- Neu Delhi / Rajasthan / Uttar Pradesh / Madhya Pradesh' => 488,
'- Vietnam' => 448,
'- Karnataka / Kerala / A. Pradesh / T. Nadu / Lakkadiven' => 197,
'- Indonesien: Bali' => 311,
'- Nepal' => 461,
'- Punjab / Uttarakhand / Himachal Pradesh & Hoher Norden' => 2629,
'- Indonesien: Java' => 470,
'- Indien: Goa' => 360,
'- Kambodscha' => 843,
'- Taipeh & Umgebung' => 489,
'- Bihar / Jharkhand / West Bengal / Odisha & Ostindien' => 2630,
'- China - Hainan / Guangdong / Hunan / Jiangxi' => 2653,
'- Indonesien: Insel Bintan & Batam' => 871,
'- Indonesien: Kleine Sundainseln' => 528,
'- Laos' => 847,
'- Myanmar' => 645,
'- Indien: Maharashtra - Mumbai / Gujarat' => 4201,
'- Macao' => 708,
'- Indonesien: Nordosten' => 4166,
'- Tokio, Osaka, Hiroshima, Japan. Inseln' => 469,
'Zypern' => 10019,
'- Zypern Rundreisen' => 2276,
'- Republik Zypern - Süden' => 620,
'- Nordzypern' => 99,
'Dubai, Arabische Halbinsel' => 10020,
'- Oman Rundreisen' => 2164,
'- Arabische Halbinsel Rundreisen' => 2273,
'- Oman' => 532,
'- Ras Al-Khaimah' => 723,
'- Dubai' => 353,
'- Sharjah / Khorfakkan' => 352,
'- Abu Dhabi' => 354,
'- Fujairah' => 722,
'- Ajman' => 724,
'- Al Ain' => 884,
'- Bahrain' => 721,
'- Umm Al Quwain' => 725,
'- Katar' => 720,
'Frankreich' => 10021,
'- Côte d\'Azur' => 2055,
'- Paris & Umgebung' => 495,
'- Pays de la Loire' => 4188,
'- Aquitanien' => 25,
'- Disneyland Paris' => 2041,
'- Normandie & Picardie & Nord-Pas-de-Calais' => 1023,
'- Burgund & Centre' => 2017,
'- Provence-Alpes-Côte d\'Azur' => 2056,
'- Languedoc Roussillon' => 2057,
'- Monaco' => 880,
'- Franche-Comté & Champagne-Ardenne' => 200,
'- Korsika' => 23,
'- Rhone Alpes' => 2042,
'Nordeuropa' => 10022,
'- Schweden' => 851,
'- Dänemark' => 902,
'- Norwegen' => 813,
'- Finnland' => 490,
'- Island' => 449,
'Südamerika' => 10023,
'- Brasilien: Distrito Federal (Brasilia)' => 2599,
'- Brasilien: Ceara (Fortaleza)' => 4170,
'- Brasilien: Rio Grande de Norte (Natal)' => 4169,
'- Brasilien: Alagoas (Maceio)' => 4172,
'- Brasilien: Rio de Janeiro & Umgebung' => 375,
'- Brasilien: Parana (Curitiba)' => 2592,
'- Brasilien: Bahia (Salvador da Bahia)' => 4167,
'- Brasilien: Amazonas (Manaus)' => 4171,
'- Brasilien: Sergipe (Aracaju)' => 2594,
'- Brasilien: Rio Grande do Sul (Porto Alegre)' => 2590,
'- Kolumbien' => 376,
'- Brasilien: Pernambuco (Recife)' => 374,
'- Ecuador' => 783,
'- Peru' => 787,
'- Venezuela - Isla Margarita' => 440,
'- Uruguay' => 785,
'- Argentinien' => 450,
'- Chile' => 784,
'- Venezuela - Küste & Inland & Los Roques Archipel' => 293,
'- Brasilien: Paraiba (Joao Pessoa)' => 2595,
'Kanada' => 10024,
'- Ontario' => 766,
'- Alberta' => 767,
'- Quebec' => 765,
'- British Columbia' => 768,
'Naher Osten' => 10026,
'- Israel - Tel Aviv & Umgebung' => 510,
'- Israel- Eilat' => 225,
'- Israel- Totes Meer' => 727,
'- Israel' => 511,
'- Jordanien' => 515,
'- Israel - Jerusalem & Umgebung' => 509,
'- Iran' => 2580,
'Thailand' => 10027,
'- Bangkok & Umgebung' => 321,
'- Insel Phuket' => 322,
'- Insel Ko Samui' => 325,
'- Nordthailand (Chiang Mai, Chiang Rai, Sukhothai)' => 4128,
'- Südostthailand (Pattaya, Jomtien)' => 4131,
'- Khao Lak & Umgebung' => 846,
'- Krabi & Umgebung' => 4133,
'- Westthailand (Hua Hin, Cha Am, River Kwai)' => 4130,
'- Südthailand (Surat Thani, Trang)' => 4132,
'- Inseln im Golf von Thailand (Koh Chang, Koh Phangan)' => 323,
'- Inseln in der Andaman See (Koh Pee Pee, Koh Lanta)' => 327,
'- Nordostthailand (Issan)' => 4129,
'- sonstige Angebote Thailand' => 2535,
'Mitteleuropa' => 10028,
'- Niederlande' => 854,
'- Irland' => 503,
'- London & Südengland' => 178,
'- Wien & Umgebung' => 958,
'- Salzburg - Salzburger Land' => 2007,
'- Schottland' => 901,
'- Belgien' => 855,
'- Kärnten' => 951,
'- Österreich Rundreisen' => 2243,
'- Niederösterreich' => 952,
'- Wallis' => 934,
'- Tirol - Osttirol' => 2018,
'- Salzburg - Salzburg' => 954,
'- Bern & Berner Oberland' => 916,
'- Tirol - Innsbruck, Mittel- und Nordtirol' => 956,
'- Steiermark' => 955,
'- Graubünden' => 920,
'- Mittel- & Nordengland' => 179,
'- Tirol - Westtirol & Ötztal' => 2009,
'- Oberösterreich' => 953,
'- Genf' => 918,
'- Tirol - Region Seefeld' => 2001,
'- Zürich' => 936,
'- Luzern & Aargau' => 922,
'- Uri & Glarus' => 932,
'- Nordirland' => 905,
'- Salzkammergut - Salzburg' => 2006,
'- Burgenland' => 950,
'- Waadt & Jura & Neuenburg' => 933,
'- Tirol - Zillertal' => 2004,
'- St.Gallen & Thurgau' => 926,
'- Jersey - Kanalinsel' => 962,
'- Tirol - Paznaun' => 1003,
'- Bodensee (Österreich)' => 4190,
'- Tessin' => 930,
'Deutschland' => 10029,
'- Allgäu' => 2026,
'- Baden-Württemberg' => 104,
'- Bayerisch-Schwaben' => 4196,
'- Bayerische Alpen' => 2058,
'- Bayerischer Wald' => 2025,
'- Berchtesgadener Land' => 2069,
'- Berlin' => 106,
'- Bodensee (Deutschland)' => 2028,
'- Borkum' => 2078,
'- Brandenburg' => 107,
'- Bremen' => 112,
'- Düsseldorf & Umgebung' => 2019,
'- Eifel & Westerwald' => 2052,
'- Elbsandsteingebirge' => 2051,
'- Emsland' => 2037,
'- Erzgebirge' => 2050,
'- Fichtelgebirge' => 2030,
'- Franken' => 2060,
'- Hamburg' => 113,
'- Harz' => 2031,
'- Hessen' => 114,
'- Hessisches Bergland' => 2072,
'- Hochschwarzwald' => 4111,
'- Hunsrück / Taunus' => 2061,
'- Insel Rügen' => 2032,
'- Insel Usedom' => 2033,
'- Köln & Umgebung' => 2020,
'- Lausitz' => 2071,
'- Lüneburger Heide' => 2024,
'- Mecklenburg Ostseeküste' => 2035,
'- Mecklenburg-Vorpommern' => 115,
'- Mecklenburgische Seenplatte' => 2034,
'- Mosel' => 2062,
'- München' => 264,
'- Münsterland' => 2074,
'- Niederbayern' => 2063,
'- Niedersachsen' => 116,
'- Nordfriesland & Inseln' => 127,
'- Nordrhein-Westfalen' => 117,
'- Nordseeküste und Inseln - sonstige Angebote' => 2036,
'- Oberbayern' => 2008,
'- Oberpfalz' => 105,
'- Ostseeküste' => 2039,
'- Pfalz' => 2053,
'- Radtouren und andere Specials' => 3001,
'- Rheingau' => 2022,
'- Rheinland' => 2065,
'- Rheinland-Pfalz' => 118,
'- Rhön' => 2029,
'- Ruhrgebiet' => 2059,
'- Rundreise Deutschland & sonstige Angebote' => 2501,
'- Saarland' => 119,
'- Sachsen' => 121,
'- Sachsen-Anhalt' => 123,
'- Sauerland' => 2038,
'- Schleswig-Holstein' => 4102,
'- Schwarzwald' => 2002,
'- Schwäbische Alb' => 2066,
'- Spessart - Odenwald' => 2070,
'- Teutoburger Wald' => 2021,
'- Thüringen' => 128,
'- Thüringer Wald' => 2067,
'Kroatien, Bulgarien, Osteuropa' => 10030,
'- Estland' => 838,
'- Georgien' => 837,
'- Angebote Rad- und Schiff Kroatien' => 3014,
'- Insel Brac' => 501,
'- Insel Hvar' => 500,
'- Insel Krk' => 507,
'- Istrien' => 483,
'- Kroatische Inseln' => 504,
'- Kvarner Bucht' => 480,
'- Mitteldalmatien' => 877,
'- Mittelkroatien' => 301,
'- Norddalmatien' => 2011,
'- Slavonien' => 302,
'- Süddalmatien' => 635,
'- Lettland' => 836,
'- Litauen' => 316,
'- Mazedonien' => 909,
'- Moldavien' => 835,
'- Montenegro' => 455,
'- Polen' => 852,
'- Bukarest & Umgebung' => 816,
'- Rumänien' => 110,
'- Baikalsee' => 892,
'- Moskau & Umgebung' => 820,
'- Sankt Petersburg & Russland Nordwest (Murmansk)' => 821,
'- Serbien' => 2579,
'- Slowakei' => 850,
'- Slowenien Inland' => 497,
'- slowenische Adria' => 628,
'- Tschechien' => 853,
'- Ukraine & Krim' => 751,
'- Plattensee / Balaton' => 2016,
'- Ungarn' => 849,
'- Weißrussland' => 834,
];
}

View file

@ -25,11 +25,11 @@ jQuery(document).ready(function($) {
allowfullscreen: true,
'data-st-video': this.id
})
.addClass('st-collapsed')
.hide()
.insertAfter(this)
;
el$
.addClass('st-collapsed')
.css('background-image', 'url(/images/st2/icons/arrowup.gif)')
.text(caption + ' einblenden')
.attr('href', 'javascript:void(0);')

View file

@ -8,6 +8,7 @@ namespace AppBundle\Twig;
use AppBundle\Service\KeywordService;
use AppBundle\Util;
use Symfony\Component\HttpFoundation\RequestStack;
class AppExtension extends \Twig_Extension
@ -46,6 +47,7 @@ class AppExtension extends \Twig_Extension
'is_safe' => ['html']
]),
'get_base_template' => new \Twig_SimpleFunction('get_base_template', [$this, 'getBaseTemplate']),
'get_base_url' => new \Twig_SimpleFunction('get_base_url', [$this, 'getBaseUrl']),
];
}
@ -64,6 +66,11 @@ class AppExtension extends \Twig_Extension
return ($this->requestStack->getCurrentRequest()->isXmlHttpRequest() ? 'ajax' : 'base') .'.html.twig';
}
public function getBaseUrl()
{
return Util::getBaseUrl();
}
public function formField($form, $label = null, $opt = null)
{
$this->template = $this->environment->loadTemplate( '::default/form/helpers.html.twig' );

View file

@ -8,6 +8,7 @@ namespace AppBundle\Util;
use AppBundle\Entity\TravelDeparturePoint;
use Doctrine\Common\Collections\Collection;
class DepartureUtil
{
@ -118,6 +119,10 @@ class DepartureUtil
$departures[] = $defaultDeparture;
}
}
if ($departures instanceof Collection)
{
$departures = $departures->toArray();
}
return DepartureUtil::sortDepartures($departures);
}