609 lines
No EOL
24 KiB
PHP
609 lines
No EOL
24 KiB
PHP
<?php
|
|
|
|
namespace AppBundle\Controller;
|
|
|
|
use AppBundle\Entity\BreadcrumbEntry;
|
|
use AppBundle\Entity\ContactRequest;
|
|
use AppBundle\Entity\Page;
|
|
use AppBundle\Form\ContactRequestType;
|
|
use AppBundle\Form\SearchRequestType;
|
|
use AppBundle\Form\TtSearchRequestType;
|
|
use AppBundle\Util;
|
|
use Doctrine\ORM\EntityManager;
|
|
use Gedmo\Tree\TreeListener;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
|
|
class DefaultController extends Controller
|
|
{
|
|
/**
|
|
* @return EntityManager
|
|
*/
|
|
public function getEntityManager()
|
|
{
|
|
return $this->getDoctrine()->getManager();
|
|
}
|
|
|
|
public function defaultAction(Request $request)
|
|
{
|
|
throw $this->createNotFoundException();
|
|
}
|
|
|
|
/**
|
|
* @Route("/")
|
|
*/
|
|
public function homeAction()
|
|
{
|
|
|
|
$search_request_b = Util::getMySession('search_request_b');
|
|
$search_request_e = Util::getMySession('search_request_e');
|
|
$search_request_c = Util::getMySession('search_request_c');
|
|
|
|
if($search_request_b){
|
|
$timestap_b = strtotime($search_request_b);
|
|
$search_request_b = new \DateTime();
|
|
$search_request_b->setTimestamp($timestap_b);
|
|
}
|
|
if($search_request_e){
|
|
$timestap_e = strtotime($search_request_e);
|
|
$search_request_e = new \DateTime();
|
|
$search_request_e->setTimestamp($timestap_e);
|
|
}
|
|
|
|
if($search_request_c){
|
|
$repo = $this->getEntityManager()->getRepository('AppBundle:TravelCountry');
|
|
$search_request_c = $repo->find($search_request_c);
|
|
}
|
|
|
|
|
|
return $this->render('default/pages/home.html.twig', [
|
|
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
|
|
'site_loading' => 'home',
|
|
'canonical_url' => Util::getBaseUrl(),
|
|
'show_search_sidebar_widget' => false,
|
|
'show_offers_sidebar_widget' => false,
|
|
'search_form' => $this->createForm(SearchRequestType::class, [
|
|
'c' => $search_request_c ? $search_request_c : null,
|
|
'b' => $search_request_b ? $search_request_b : null,
|
|
'e' => $search_request_e ? $search_request_e : null,
|
|
])->createView(),
|
|
'tt_search_form' => $this->createForm(TtSearchRequestType::class)->createView(),
|
|
'country_pages' => $this->getEntityManager()->getRepository('AppBundle:Page')->findCountryPages(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @Route("/dev/seite/startseite")
|
|
*/
|
|
public function devHomepageAction()
|
|
{
|
|
$search_request_b = Util::getMySession('search_request_b');
|
|
$search_request_e = Util::getMySession('search_request_e');
|
|
$search_request_c = Util::getMySession('search_request_c');
|
|
|
|
if($search_request_b){
|
|
$timestap_b = strtotime($search_request_b);
|
|
$search_request_b = new \DateTime();
|
|
$search_request_b->setTimestamp($timestap_b);
|
|
}
|
|
if($search_request_e){
|
|
$timestap_e = strtotime($search_request_e);
|
|
$search_request_e = new \DateTime();
|
|
$search_request_e->setTimestamp($timestap_e);
|
|
}
|
|
|
|
if($search_request_c){
|
|
$repo = $this->getEntityManager()->getRepository('AppBundle:TravelCountry');
|
|
$search_request_c = $repo->find($search_request_c);
|
|
}
|
|
|
|
$pageRepo = $this->getEntityManager()->getRepository('AppBundle:Page');
|
|
$fewoLodgings = [];
|
|
$lodgingGroups = $this->getEntityManager()->getRepository('AppBundle:FewoLodgingGroup')->findAll();
|
|
foreach ($lodgingGroups as $lodgingGroup) {
|
|
foreach ($lodgingGroup->getLodgings() as $lodging) {
|
|
$fewoLodgings[] = $lodging;
|
|
if (count($fewoLodgings) >= 3) {
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->render('default/pages/dev/home.html.twig', [
|
|
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
|
|
'site_loading' => 'home',
|
|
'show_search_sidebar_widget' => false,
|
|
'show_offers_sidebar_widget' => false,
|
|
'search_form' => $this->createForm(SearchRequestType::class, [
|
|
'c' => $search_request_c ? $search_request_c : null,
|
|
'b' => $search_request_b ? $search_request_b : null,
|
|
'e' => $search_request_e ? $search_request_e : null,
|
|
])->createView(),
|
|
'tt_search_form' => $this->createForm(TtSearchRequestType::class)->createView(),
|
|
'homepage_offer_pages' => $pageRepo->findHomepageOffers(),
|
|
'country_pages' => $pageRepo->findHomepageCountryPages(),
|
|
'fewo_lodgings' => $fewoLodgings,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @Route("/suche")
|
|
*/
|
|
public function searchAction(Request $request)
|
|
{
|
|
|
|
$form = $this->createForm(SearchRequestType::class);
|
|
if (empty($request->query->get('b')))
|
|
{
|
|
$request->query->set('b', (new \DateTime('+5 day'))->format('d.m.Y'));
|
|
}
|
|
if (empty($request->query->get('e')))
|
|
{
|
|
$request->query->set('e', (new \DateTime('+31 day'))->format('d.m.Y'));
|
|
}
|
|
//store date form request
|
|
|
|
$session = $request->getSession();
|
|
$session->set('search_request_b', $request->query->get('b'));
|
|
$session->set('search_request_e', $request->query->get('e'));
|
|
$session->set('search_request_c', $request->query->get('c'));
|
|
|
|
$form->handleRequest($request);
|
|
|
|
if ($form->isValid())
|
|
{
|
|
$data = $form->getData();
|
|
|
|
$destinationIds = [];
|
|
if (!empty($data['c']))
|
|
{
|
|
$destinationIds = [$data['c']->getId()];
|
|
}
|
|
if (!empty($destinationIds) && !empty($data['c2']))
|
|
{
|
|
$destinationIds[] = $data['c2']->getId();
|
|
}
|
|
$r = $this->getDoctrine()->getRepository('AppBundle:TravelPeriod')->getTravelProgramsWithTravelDatesForTimePeriod(
|
|
$data['b'], $data['e'], $destinationIds, count($destinationIds) > 1);
|
|
}
|
|
else
|
|
{
|
|
$r = [];
|
|
}
|
|
|
|
return $this->render('default/pages/search.html.twig', [
|
|
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
|
|
'site_loading' => 'search',
|
|
'breadcrumb_entries' => [new BreadcrumbEntry('Suchen')],
|
|
'search_form' => $form->createView(),
|
|
'travel_programs' => $r,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @Route("/tt-suche")
|
|
*/
|
|
public function ttSearchAction(Request $request)
|
|
{
|
|
$form = $this->createForm(TtSearchRequestType::class);
|
|
if (empty($request->query->get('termin')))
|
|
{
|
|
$request->query->set('termin', (new \DateTime('+5 day'))->format('d.m.Y'));
|
|
}
|
|
if (empty($request->query->get('ruecktermin')))
|
|
{
|
|
$request->query->set('ruecktermin', (new \DateTime('+19 day'))->format('d.m.Y'));
|
|
}
|
|
$form->handleRequest($request);
|
|
|
|
if ($form->isValid())
|
|
{
|
|
$data = $form->getData();
|
|
|
|
//$ttUrl = "http://dtps-ibe.traveltainment.de/hotel/?&taid=DRS32"; //ibe=package";
|
|
|
|
/*$requests = "&ibe=package&aidgiata=49720&ddate=".date("Y-m-d", 1523397600)."&depap=TXL&rdate=".date("Y-m-d", 1524002400)."&dur=6,2&brand=FTI&oid=ASW318;PAUS;;DSQF&adult=2";*/
|
|
$ttUrl = "";
|
|
$ttUrl .= '&ddate=' . $data['termin']->format('d.m.Y');
|
|
$ttUrl .= '&rdate=' . $data['ruecktermin']->format('d.m.Y');
|
|
if (!empty($data['dauer'])){
|
|
$ttUrl .= '&dur='.str_replace("_", ",", $data['dauer']);
|
|
}
|
|
$ttUrl .= '&adult=2';
|
|
if (!empty($data['t']))
|
|
{
|
|
$ttUrl .= '&adult='. $data['t'];
|
|
$count = 0;
|
|
for ($i = 0; $i < 3; ++$i)
|
|
{
|
|
if (!empty($data['child'.$i]))
|
|
{
|
|
$count++;
|
|
}
|
|
}
|
|
$ttUrl .= '&child='. $count;
|
|
}
|
|
// $ttUrl .= '&ibes=';
|
|
if (!empty($data['topRegion']))
|
|
{
|
|
if(isset(TtSearchRequestType::$DESTINATION_CHOICES[$data['topRegion']])){
|
|
// $ttUrl .= 'hotel&rgid='. TtSearchRequestType::$DESTINATION_CHOICES[$data['topRegion']];
|
|
$ttUrl .= '&rid='. TtSearchRequestType::$DESTINATION_CHOICES[$data['topRegion']];
|
|
$ttUrl = "https://dtps-ibe.traveltainment.de/hotel/?&taid=DRS32".$ttUrl;
|
|
}else{
|
|
// $ttUrl .= 'package&rgid='. $data['topRegion'];
|
|
$ttUrl .= '&rid='. $data['topRegion'];
|
|
$ttUrl = "https://dtps-ibe.traveltainment.de/offer/?&taid=DRS32".$ttUrl;
|
|
}
|
|
|
|
}
|
|
|
|
//https://dtps-ibe.traveltainment.de/hotel?taid=DRS32&ddate=2018-07-25&rdate=2018-08-08&adult=2&rid=2202
|
|
//http://dtps-ibe.traveltainment.de/hotel?taid=DRS32&ddate=2018-07-25&rdate=2018-08-08&dur=6,14&adult=1&child=0&rgid=2202
|
|
else
|
|
{
|
|
//$ttUrl .= 'package';
|
|
$ttUrl = "https://dtps-ibe.traveltainment.de/offer/?&taid=DRS32".$ttUrl;
|
|
}
|
|
if (!empty($data['abflughafen'])) $ttUrl .= '&depap='. $data['abflughafen'];
|
|
if (!empty($data['shotel'])) $ttUrl .= '&accom='. urlencode($data['shotel']);
|
|
if (!empty($data['kategorie'])) $ttUrl .= '&stars='. $data['kategorie'];
|
|
if (!empty($data['zimmer'])) $ttUrl .= '&room='. $data['zimmer'];
|
|
if (!empty($data['verpflegung'])) $ttUrl .= '&board='. $data['verpflegung'];
|
|
if (!empty($data['hbfges'])) $ttUrl .= '&raavg='. $data['hbfges'];
|
|
if (!empty($data['hbfanz'])) $ttUrl .= '&hbfanz='. $data['hbfanz'];
|
|
if (!empty($data['hbfempf'])) $ttUrl .= '&racnt='. $data['hbfempf'];
|
|
//if ($data['familie_kinder'] ?? false) $ttUrl .= '&familie_kinder=0';
|
|
//if ($data['strand'] ?? false) $ttUrl .= '&beach=0';
|
|
//if ($data['wellness'] ?? false) $ttUrl .= '&wellness=0';
|
|
//if ($data['typ'] ?? false) $ttUrl .= '&typ=0';
|
|
if (!empty($data['sportangebot'])) $ttUrl .= '&sports='. $data['sportangebot'];
|
|
|
|
/*$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'] - 1);
|
|
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'];
|
|
*/
|
|
|
|
}else{
|
|
if(strpos($_SERVER['QUERY_STRING'], 'ttexpedient')){
|
|
|
|
$get_array = array();
|
|
parse_str($_SERVER['QUERY_STRING'], $get_array);
|
|
|
|
if(!empty($get_array['detail'])) { $det=$get_array['detail']; }
|
|
else { $det=""; }
|
|
|
|
if(!empty($get_array['IFF'])) { $iff=$get_array['IFF']; }
|
|
else { $iff=""; }
|
|
|
|
if(!empty($get_array['abflughafen'])) { $airp=$get_array['abflughafen']; }
|
|
else { $airp=""; }
|
|
|
|
if(!empty($get_array['sleistung'])) { $sleist=$get_array['sleistung']; }
|
|
else { $sleist=""; }
|
|
|
|
if(!empty($get_array['showresult'])) { $show=$get_array['showresult']; }
|
|
else { $show=""; }
|
|
|
|
if(!empty($get_array['personen'])) { $pers=$get_array['personen']; }
|
|
else { $pers=""; }
|
|
|
|
if(!empty($get_array['marke'])) { $va=$get_array['marke']; }
|
|
else { $va=""; }
|
|
|
|
if(!empty($get_array['termin'])) { $hin=$get_array['termin']; }
|
|
else { $hin=""; }
|
|
|
|
if(!empty($get_array['ruecktermin'])) { $rueck=$get_array['ruecktermin']; }
|
|
else { $rueck=""; }
|
|
|
|
if(!empty($get_array['dauer'])) { $dau=$get_array['dauer']; }
|
|
else { $dau=""; }
|
|
|
|
if(!empty($get_array['bplink'])) { $bli=$get_array['bplink']; }
|
|
else { $bli=""; }
|
|
|
|
if(!empty($get_array['ttexpedient'])) { $exp=$get_array['ttexpedient']; }
|
|
|
|
|
|
else { $exp=""; }
|
|
if($dau != "" && strpos($dau, "_")){
|
|
$dau = explode("_", $dau);
|
|
asort($dau);
|
|
$dau = implode(",", $dau);
|
|
}
|
|
$adult = substr_count($pers, '25');
|
|
$child = "";
|
|
$ps = explode(';', $pers);
|
|
|
|
foreach ($ps as $p) {
|
|
if($p < 25){
|
|
$child .= $p.",";
|
|
}
|
|
}
|
|
$board = "";
|
|
$room = "";
|
|
|
|
if($sleist != "" && strpos($sleist, ";")) {
|
|
$eleist = explode(';', $sleist);
|
|
$v = end($eleist);
|
|
if(strpos($v, "F") !== false){
|
|
$board = 2;
|
|
}
|
|
if(strpos($v, "H") !== false){
|
|
$board = 3;
|
|
}
|
|
if(strpos($v, "V") !== false){
|
|
$board = 4;
|
|
}
|
|
if(strpos($v, "A") !== false){
|
|
$board = 5;
|
|
}
|
|
if(strpos($v, "EZ") !== false){
|
|
$room = 1;
|
|
}
|
|
if(strpos($v, "DZ") !== false){
|
|
$room = 2;
|
|
}
|
|
if(strpos($v, "FZ") !== false){
|
|
$room = 3;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
$child = rtrim($child, ',');
|
|
$url = "https://dtps-ibe.traveltainment.de/offer?taid=DRS32";
|
|
$url .= '&ibe=package&adult='.$adult.'&ddate='.date("Y-m-d", $hin).'&rdate='.date("Y-m-d", $rueck).'&depap='.$airp.'&aid='.$iff.'&brand='.$va.'&dur='.$dau.'&child='.$child.'&board='.$board.'&room='.$room.'&dur=exact';
|
|
|
|
|
|
|
|
$ttUrl = urldecode($url);
|
|
}
|
|
|
|
}
|
|
|
|
return $this->render('default/pages/ttSearch.html.twig', [
|
|
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
|
|
'site_loading' => 'search',
|
|
'breadcrumb_entries' => [new BreadcrumbEntry('Suchen')],
|
|
'tt_search_form' => $form->createView(),
|
|
'tt_url' => $ttUrl ?? null,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @Route("/kontakt")
|
|
*/
|
|
public function contactAction(Request $request)
|
|
{
|
|
$form = $this->createForm(ContactRequestType::class);
|
|
$breadcrumbEntries = [new BreadcrumbEntry('Kontaktformular')];
|
|
|
|
$re_error = "";
|
|
if ($request->getMethod() == 'POST')
|
|
{
|
|
$error = false;
|
|
|
|
if(empty($request->get('g-recaptcha-response'))){
|
|
$re_error = 'Bitte lösen Sie das reCAPTCHA.';
|
|
$error = true;
|
|
}
|
|
//your site secret key
|
|
$secret = '6LfjBm8UAAAAANKNzGhSiMaoEg9mUswlaZkOHgI4';
|
|
//get verify response data
|
|
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$request->get('g-recaptcha-response'));
|
|
$responseData = json_decode($verifyResponse);
|
|
|
|
|
|
if($responseData->success != true ){
|
|
$re_error = 'Bitte lösen Sie das reCAPTCHA';
|
|
$error = true;
|
|
}
|
|
|
|
|
|
$form->handleRequest($request);
|
|
|
|
if ($form->isValid() && !$error)
|
|
{
|
|
/** @var ContactRequest $contactRequest */
|
|
$contactRequest = $form->getData();
|
|
|
|
$ret = $this->get('app.contact_exporter')->v3process($contactRequest);
|
|
$error_crm = 'CRM Fehler';
|
|
|
|
$this->get('mailer')->send(\Swift_Message::newInstance()
|
|
->setSubject('Kontaktformular (stern-tours.de)')
|
|
->setFrom('stern@stern-tours.de', 'STERN TOURS')
|
|
->setTo('stern@stern-tours.de')
|
|
->setBody(
|
|
$this->renderView('default/email/contactServiceEmail.txt.twig', [
|
|
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
|
|
'crm_v1_url' => isset($ret->url_v1) ? $ret->url_v1 : $error_crm,
|
|
'crm_v3_url' => isset($ret->url_v3) ? $ret->url_v3 : $error_crm,
|
|
'contact_request' => $contactRequest,
|
|
]),
|
|
'text/plain', 'utf-8'
|
|
)
|
|
);
|
|
|
|
// #TODO This will lead to multiple submissions. Redirect instead!
|
|
return $this->render('default/pages/contactConfirmation.html.twig', [
|
|
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
|
|
'breadcrumb_entries' => $breadcrumbEntries,
|
|
]);
|
|
}
|
|
}
|
|
|
|
return $this->render('default/pages/contact.html.twig', [
|
|
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
|
|
'site_loading' => 'default',
|
|
'breadcrumb_entries' => $breadcrumbEntries,
|
|
'contact_form' => $form->createView(),
|
|
're_error' => $re_error,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @Route("/sitemap")
|
|
*/
|
|
public function sitemapAction()
|
|
{
|
|
$repo = $this->getDoctrine()->getRepository('AppBundle:Page');
|
|
$rootNodes = $repo->getRootNodesQueryBuilder()
|
|
->andWhere('node.status = 1')
|
|
->andWhere('node.lvl = 0')
|
|
->getQuery()
|
|
->execute()
|
|
;
|
|
/** @var Page[] $pageNodes Actually no entity objects but associative arrays representing page entities */
|
|
$pageNodes = [];
|
|
foreach ($rootNodes as $rootNode)
|
|
{
|
|
$pageNodes[] = $repo->buildTree($repo->getNodesHierarchyQueryBuilder($rootNode, false, [], true)
|
|
->leftJoin('node.travelProgram', 'tp')
|
|
->andWhere('(tp.id IS NULL OR tp.status = 1)')
|
|
->andWhere('node.status = 1')
|
|
->getQuery()
|
|
->getArrayResult()
|
|
)[0];
|
|
}
|
|
return $this->render('default/pages/sitemap.html.twig', [
|
|
'breadcrumb_entries' => [new BreadcrumbEntry('Sitemap')],
|
|
'site_loading' => 'default',
|
|
'page_nodes' => $pageNodes
|
|
]);
|
|
}
|
|
|
|
/*
|
|
Suche Kindknoten
|
|
Für jeden Kindknoten
|
|
++LFT
|
|
Setze LFT
|
|
f()
|
|
++LFT
|
|
RGT = LFT
|
|
Setze RGT
|
|
*/
|
|
|
|
/**
|
|
* @Route("/create-tree")
|
|
*/
|
|
public function createTreeAction()
|
|
{
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '2048M');
|
|
|
|
$em = $this->getEntityManager();
|
|
|
|
$em->getConnection()->executeUpdate(
|
|
'UPDATE page SET lvl = NULL, lft = NULL, rgt = NULL, parent_id = NULL, tree_root = NULL');
|
|
|
|
foreach ($em->getEventManager()->getListeners() as $event => $listeners) {
|
|
foreach ($listeners as $hash => $listener) {
|
|
if ($listener instanceof TreeListener)
|
|
{
|
|
$em->getEventManager()->removeEventListener($event, $listener);
|
|
}
|
|
}
|
|
}
|
|
|
|
$em->beginTransaction();
|
|
|
|
// Add missing owner relation for catalog root pages (e.g. children of 'aegypten-reisen')
|
|
$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);
|
|
$em->flush();
|
|
|
|
// Reset the owner field to avoid problems in the old website
|
|
$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();
|
|
|
|
die("DONE.");
|
|
}
|
|
|
|
private function createTree($owner, &$lft, $lvl, $root = null)
|
|
{
|
|
$em = $this->getEntityManager();
|
|
|
|
$qb = $em->createQueryBuilder()->from('AppBundle:Page', 'p')->select('p');
|
|
$qb->where($qb->expr()->eq('p.owner', $owner));
|
|
if ($owner == 0)
|
|
{
|
|
$qb->orWhere('p.owner IS NULL');
|
|
}
|
|
$qb->orderBy('p.order');
|
|
$qb->addOrderBy('p.title');
|
|
$pages = $qb->getQuery()->execute();
|
|
foreach ($pages as $page)
|
|
{
|
|
/** @var Page $page */
|
|
|
|
if ($owner == 0)
|
|
{
|
|
$root = $page->getId();
|
|
}
|
|
|
|
++$lft;
|
|
$page->setLft($lft);
|
|
$page->setLvl($lvl);
|
|
$page->setRoot($em->getReference('AppBundle:Page', $root));
|
|
if ($owner != 0)
|
|
{
|
|
$page->setParent($em->getReference('AppBundle:Page', $owner));
|
|
}
|
|
|
|
$this->createTree($page->getId(), $lft, $lvl + 1, $root);
|
|
|
|
++$lft;
|
|
$page->setRgt($lft);
|
|
|
|
$em->persist($page);
|
|
}
|
|
}
|
|
} |