system/modules/hideaway/classes/Hideaway.php line 706

Open in your IDE?
  1. <?php
  2. /**
  3. * Contao Open Source CMS
  4. *
  5. * Copyright (c) 2005-2014 Leo Feyer
  6. *
  7. * @package hideaway
  8. * @author hideaway
  9. * @license hideaway
  10. * @copyright hideaway
  11. */
  12. /**
  13. * Namespace
  14. */
  15. namespace hideaway;
  16. /**
  17. * Class Hideaway
  18. *
  19. * @copyright hideaway
  20. * @author hideaway
  21. * @package Devtools
  22. */
  23. class Hideaway extends \Backend
  24. {
  25. /**
  26. * Template
  27. * @var string
  28. */
  29. protected $strTemplate = '';
  30. public function __construct()
  31. {
  32. parent::__construct();
  33. }
  34. public function generateAlias($varValue, \DataContainer $dc)
  35. {
  36. $autoAlias = false;
  37. // Generate an alias if there is none
  38. if ($varValue == '')
  39. {
  40. $autoAlias = true;
  41. $varValue = standardize(\StringUtil::restoreBasicEntities($dc->activeRecord->title));
  42. }
  43. $objAlias = $this->Database->prepare("SELECT id FROM ".$dc->table." WHERE alias=?")
  44. ->execute($varValue);
  45. // Check whether the page alias exists
  46. if ($objAlias->numRows > 1)
  47. {
  48. $varValue .= '-' . $dc->id;
  49. }
  50. return $varValue;
  51. }
  52. public function getCombiOptions()
  53. {
  54. $ret = array('0'=>'');
  55. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_hotel WHERE published=1 ORDER BY title")
  56. ->execute();
  57. while($obj->next())
  58. {
  59. $ret['h_'.$obj->id] = 'Hotel: '.$obj->title;
  60. }
  61. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_travel WHERE published=1 ORDER BY title")
  62. ->execute();
  63. while($obj->next())
  64. {
  65. $ret['t_'.$obj->id] = 'Reise: '.$obj->title;
  66. }
  67. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_trip WHERE published=1 ORDER BY title")
  68. ->execute();
  69. while($obj->next())
  70. {
  71. $ret['tr_'.$obj->id] = 'Ausflug: '.$obj->title;
  72. }
  73. return $ret;
  74. }
  75. public function getNavigation($countryPage, $regionPage)
  76. {
  77. $ret = array();
  78. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_country WHERE published=1 ORDER BY sorting")
  79. ->execute();
  80. $objParent = \PageModel::findById($countryPage);
  81. while ($obj->next())
  82. {
  83. $row = $obj->row();
  84. $t = array(
  85. 'row' => $row,
  86. // 'url' => $this->generateFrontendUrl($objParent->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language),
  87. 'url' => '/reisen/'.$row['alias'].'/',
  88. 'regions' => $this->getRegionNavigation($regionPage, $row['id'], $row['alias'])
  89. );
  90. if($obj->single_region > 0)
  91. $t['regions'] = array();
  92. array_push($ret, $t);
  93. }
  94. return $ret;
  95. }
  96. public function getFilter()
  97. {
  98. $regions = array();
  99. $types = array();
  100. /*
  101. if(!$this->Input->cookie('ceFilterBaseUri'))
  102. \System::setCookie('ceFilterBaseUri', $this->Environment->requestUri, 86400000);
  103. */
  104. $objRegion = $this->Database->prepare(" SELECT region.*, country.title as country_title
  105. FROM tl_hideaway_region as region, tl_hideaway_country as country
  106. WHERE country.id=region.country AND region.published=1
  107. ORDER BY region.country, region.title")
  108. ->execute();
  109. while ($objRegion->next())
  110. {
  111. $row = $objRegion->row();
  112. array_push($regions, array(
  113. 'row' => $row,
  114. 'url' => $this->Input->cookie('ceFilterBaseUri').($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'].'/',
  115. 'data-filter' => 'region_id_'.$row['id']
  116. )
  117. );
  118. }
  119. foreach ($GLOBALS['hideaway']['types'] as $key => $value )
  120. {
  121. array_push($types, array(
  122. 'title' => $value['title'],
  123. 'url' => $this->Input->cookie('ceFilterBaseUri').'type/'.$key.'/',
  124. 'data-filter' => $key
  125. )
  126. );
  127. }
  128. $ret['regions'] = $regions;
  129. $ret['types'] = $types;
  130. return $ret;
  131. }
  132. public function getNavigationExperience($jumpToPage, $filter_target=false)
  133. {
  134. $ret = array();
  135. if ($filter_target)
  136. {
  137. // Get target alias for prefiltering
  138. $obj = $this->Database->prepare("SELECT alias FROM tl_hideaway_target WHERE id=?")
  139. ->execute($filter_target);
  140. $row = $obj->row();
  141. $targetAlias = $row['alias'];
  142. }
  143. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_experience WHERE published=1 ORDER BY title")
  144. ->execute();
  145. $objParent = \PageModel::findById($jumpToPage);
  146. while ($obj->next())
  147. {
  148. $row = $obj->row();
  149. $preview_image = \FilesModel::findByUuid($row['preview_image']);
  150. $page_image = \FilesModel::findByUuid($row['pageimage']);
  151. if ($targetAlias)
  152. {
  153. $url = $this->generateFrontendUrl($objParent->row(), '/erlebnis/'.$row['alias'].'/gruppe/'.$targetAlias, $objParent->language);
  154. $url = '/reiseerlebnis/'.$row['alias'].'/gruppe/'.$targetAlias.'/';
  155. }
  156. else
  157. {
  158. $url = $this->generateFrontendUrl($objParent->row(), '/erlebnis/'.$row['alias'], $objParent->language);
  159. $url = '/reiseerlebnis/'.$row['alias'].'/';
  160. }
  161. array_push($ret, array(
  162. 'row' => $row,
  163. 'url' => $url,
  164. 'preview_image_path'=>$preview_image->path,
  165. 'preview_image_meta' => unserialize($preview_image->meta),
  166. 'page_image_path'=>$page_image->path,
  167. 'page_image_meta' => unserialize($page_image->meta)
  168. )
  169. );
  170. }
  171. return $ret;
  172. }
  173. public function getRegionNavigation($regionPage, $countryId, $countryAlias)
  174. {
  175. $ret = array();
  176. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_region WHERE published=1 AND country=? ORDER BY title")
  177. ->execute($countryId);
  178. $objParentRegion = \PageModel::findById($regionPage);
  179. while ($obj->next())
  180. {
  181. $row = $obj->row();
  182. array_push($ret, array(
  183. 'row' => $row,
  184. // 'url' => $this->generateFrontendUrl($objParentRegion->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language)
  185. 'url' => '/reisen/'.$countryAlias.'/'.$row['alias'].'/'
  186. )
  187. );
  188. }
  189. return $ret;
  190. }
  191. public function getCountryList($jumpToPage)
  192. {
  193. $ret = array();
  194. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_country WHERE published=1 ORDER BY sorting")
  195. ->execute();
  196. $objParent = \PageModel::findById($jumpToPage);
  197. while ($obj->next())
  198. {
  199. $row = $obj->row();
  200. $preview_image = \FilesModel::findByUuid($row['preview_image']);
  201. $page_image = \FilesModel::findByUuid($row['pageimage']);
  202. array_push($ret, array(
  203. 'row' => $row,
  204. // 'url' => $this->generateFrontendUrl($objParent->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language),
  205. 'url' => '/reisen/'.$row['alias'].'/',
  206. 'preview_image_path'=>$preview_image->path,
  207. 'preview_image_meta' => unserialize($preview_image->meta),
  208. 'page_image_path'=>$page_image->path,
  209. 'page_image_meta' => unserialize($page_image->meta)
  210. )
  211. );
  212. }
  213. return $ret;
  214. }
  215. public function getTargetList($jumpToPage)
  216. {
  217. $ret = array();
  218. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_target WHERE published=1 ORDER BY title")
  219. ->execute();
  220. $objParent = \PageModel::findById($jumpToPage);
  221. while ($obj->next())
  222. {
  223. $row = $obj->row();
  224. if ($row['jumpto_target'])
  225. {
  226. $objParent = \PageModel::findById($row['jumpto_target']);
  227. $url = $this->generateFrontendUrl($objParent->row(), false, $objParent->language);
  228. }
  229. else
  230. {
  231. $url = $this->generateFrontendUrl($objParent->row(), '/gruppe/'.$row['alias'], $objParent->language);
  232. }
  233. $preview_image = \FilesModel::findByUuid($row['preview_image']);
  234. $page_image = \FilesModel::findByUuid($row['pageimage']);
  235. array_push($ret, array(
  236. 'row' => $row,
  237. 'url' => $url,
  238. 'preview_image_path'=>$preview_image->path,
  239. 'preview_image_meta' => unserialize($preview_image->meta),
  240. 'page_image_path'=>$page_image->path,
  241. 'page_image_meta' => unserialize($page_image->meta)
  242. )
  243. );
  244. }
  245. return $ret;
  246. }
  247. public function getList($page=1,$limit=5, $types=array(), $targets=array(), $region=false, $feature=false, $target=false, $experience=false, $highlight=false)
  248. {
  249. //var_dump($GLOBALS['hideaway']['hotel_reader_id']);
  250. $ret = array();
  251. $cnt = 0;
  252. $pages = 1;
  253. /*$obj = $this->Database->prepare("SELECT COUNT(id) as cnt FROM tl_admk_event WHERE published=1")
  254. ->execute();
  255. if($obj->next())
  256. {
  257. $r = $obj->row();
  258. $cnt = $r['cnt'];
  259. $pages = ceil($cnt/$limit);
  260. }*/
  261. // HOTELS
  262. if(in_array('hotel', $types))
  263. {
  264. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_hotel WHERE published=1 ORDER BY title")
  265. ->execute();
  266. $objParent = \PageModel::findById($GLOBALS['hideaway']['hotel_reader_id']);
  267. while ($obj->next())
  268. {
  269. $row = $obj->row();
  270. $t = array('row'=>$row, 'type'=>'hotel');
  271. $objModel = \FilesModel::findByUuid($row['image']);
  272. $t['image_path'] = $objModel->path;
  273. $t['image_meta'] = unserialize($objModel->meta);
  274. // $t['url'] = $this->generateFrontendUrl($objParent->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language);
  275. $t['url'] = $this->generateUrl($row, 'hotel');
  276. if ($targets)
  277. {
  278. foreach ($targets as $target)
  279. {
  280. if ($highlight)
  281. {
  282. $highlight_targets = unserialize($row['highlight']);
  283. if ($highlight_targets)
  284. {
  285. if (in_array($target, $highlight_targets))
  286. {
  287. $ret[] = $t;
  288. break;
  289. }
  290. }
  291. }
  292. else
  293. {
  294. if (in_array($target, unserialize($row['targets'])))
  295. {
  296. $ret[] = $t;
  297. break;
  298. }
  299. }
  300. }
  301. }
  302. else $ret[] = $t;
  303. }
  304. }
  305. // TRAVELS
  306. if(in_array('travel', $types))
  307. {
  308. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_travel WHERE published=1 ORDER BY title")
  309. ->execute();
  310. $objParent = \PageModel::findById($GLOBALS['hideaway']['travel_reader_id']);
  311. while ($obj->next())
  312. {
  313. $row = $obj->row();
  314. $t = array('row'=>$row, 'type'=>'travel');
  315. $objModel = \FilesModel::findByUuid($row['image']);
  316. $t['image_path'] = $objModel->path;
  317. $t['image_meta'] = unserialize($objModel->meta);
  318. // $t['url'] = $this->generateFrontendUrl($objParent->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language);
  319. $t['url'] = $this->generateUrl($row, 'travel');
  320. if ($targets)
  321. {
  322. foreach ($targets as $target)
  323. {
  324. if ($highlight)
  325. {
  326. $highlight_targets = unserialize($row['highlight']);
  327. if ($highlight_targets)
  328. {
  329. if (in_array($target, $highlight_targets))
  330. {
  331. $ret[] = $t;
  332. break;
  333. }
  334. }
  335. }
  336. else
  337. {
  338. if (in_array($target, unserialize($row['targets'])))
  339. {
  340. $ret[] = $t;
  341. break;
  342. }
  343. }
  344. }
  345. }
  346. else $ret[] = $t;
  347. }
  348. }
  349. // TRIPS
  350. if(in_array('trip', $types))
  351. {
  352. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_trip WHERE published=1 ORDER BY title")
  353. ->execute();
  354. $objParent = \PageModel::findById($GLOBALS['hideaway']['trip_reader_id']);
  355. while ($obj->next())
  356. {
  357. $row = $obj->row();
  358. $t = array('row'=>$row, 'type'=>'trip');
  359. $objModel = \FilesModel::findByUuid($row['image']);
  360. $t['image_path'] = $objModel->path;
  361. $t['image_meta'] = unserialize($objModel->meta);
  362. // $t['url'] = $this->generateFrontendUrl($objParent->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language);
  363. $t['url'] = $this->generateUrl($row, 'trip');
  364. if ($targets)
  365. {
  366. foreach ($targets as $target)
  367. {
  368. if ($highlight)
  369. {
  370. $highlight_targets = unserialize($row['highlight']);
  371. if ($highlight_targets)
  372. {
  373. if (in_array($target, $highlight_targets))
  374. {
  375. $ret[] = $t;
  376. break;
  377. }
  378. }
  379. }
  380. else
  381. {
  382. if (in_array($target, unserialize($row['targets'])))
  383. {
  384. $ret[] = $t;
  385. break;
  386. }
  387. }
  388. }
  389. }
  390. else $ret[] = $t;
  391. }
  392. }
  393. // COMBIS
  394. if(in_array('combi', $types))
  395. {
  396. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_combis WHERE published=1 ORDER BY title")
  397. ->execute();
  398. $objParent = \PageModel::findById($GLOBALS['hideaway']['combi_reader_id']);
  399. while ($obj->next())
  400. {
  401. $row = $obj->row();
  402. $t = array('row'=>$row, 'type'=>'combi');
  403. $objModel = \FilesModel::findByUuid($row['image']);
  404. $t['image_path'] = $objModel->path;
  405. $t['image_meta'] = unserialize($objModel->meta);
  406. $t['url'] = $this->generateFrontendUrl($objParent->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language);
  407. if ($targets)
  408. {
  409. foreach ($targets as $target)
  410. {
  411. if ($highlight)
  412. {
  413. $highlight_targets = unserialize($row['highlight']);
  414. if ($highlight_targets)
  415. {
  416. if (in_array($target, $highlight_targets))
  417. {
  418. $ret[] = $t;
  419. break;
  420. }
  421. }
  422. }
  423. else
  424. {
  425. if (in_array($target, unserialize($row['targets'])))
  426. {
  427. $ret[] = $t;
  428. break;
  429. }
  430. }
  431. }
  432. }
  433. else $ret[] = $t;
  434. }
  435. }
  436. if($feature)
  437. {
  438. $features = explode(",", $feature);
  439. foreach($features as $feature)
  440. {
  441. $feat = $this->getFeature($feature);
  442. foreach($ret as $k=>$val)
  443. {
  444. $fs = unserialize($val['row']['features']);
  445. if(is_array($fs))
  446. {
  447. if(!in_array($feat['id'], $fs))
  448. {
  449. unset($ret[$k]);
  450. }
  451. }
  452. else unset($ret[$k]);
  453. }
  454. }
  455. }
  456. if($experience)
  457. {
  458. $experiences = explode(",", $experience);
  459. foreach($experiences as $experience)
  460. {
  461. $feat = $this->getExperience($experience);
  462. foreach($ret as $k=>$val)
  463. {
  464. $fs = unserialize($val['row']['experiences']);
  465. if(is_array($fs))
  466. {
  467. if(!in_array($feat['id'], $fs))
  468. {
  469. unset($ret[$k]);
  470. }
  471. }
  472. else unset($ret[$k]);
  473. }
  474. }
  475. }
  476. if($region)
  477. {
  478. $regions = explode(",", $region);
  479. foreach($regions as $region)
  480. {
  481. $feat = $this->getRegion($region);
  482. foreach($ret as $k=>$val)
  483. {
  484. // echo $val['row']['title'].' / '.$val['row']['region'].' !== '.$feat.'<br>';
  485. if($val['row']['region'] !== $feat['id']) unset($ret[$k]);
  486. }
  487. }
  488. }
  489. if($target)
  490. {
  491. $targets = explode(",", $target);
  492. foreach($targets as $target)
  493. {
  494. $feat = $this->getTarget($target);
  495. foreach($ret as $k=>$val)
  496. {
  497. $fs = unserialize($val['row']['targets']);
  498. if(is_array($fs))
  499. {
  500. if(!in_array($feat['id'], $fs))
  501. {
  502. unset($ret[$k]);
  503. }
  504. }
  505. else unset($ret[$k]);
  506. }
  507. }
  508. }
  509. return array('objs'=>$ret, 'cnt'=>1, 'pages'=>1, 'page'=>1);
  510. }
  511. public function getFeature($id=0)
  512. {
  513. $ret = array();
  514. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_feature WHERE published=1 AND id = ? OR alias = ?")
  515. ->execute($id, $id);
  516. if ($obj->next())
  517. {
  518. $row = $obj->row();
  519. return $row;
  520. }
  521. return false;
  522. }
  523. public function getTarget($id=0)
  524. {
  525. $ret = array();
  526. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_target WHERE published=1 AND id = ? OR alias = ?")
  527. ->execute($id, $id);
  528. if ($obj->next())
  529. {
  530. $row = $obj->row();
  531. return $row;
  532. }
  533. return false;
  534. }
  535. public function getTargetIdByInternalAlias($alias='')
  536. {
  537. $obj = $this->Database->prepare("SELECT id FROM tl_hideaway_target WHERE internal_alias=?")
  538. ->execute($alias);
  539. if ($obj->next())
  540. {
  541. $row = $obj->row();
  542. return $row['id'];
  543. }
  544. return false;
  545. }
  546. public function getRegion($id=0)
  547. {
  548. $ret = array();
  549. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_region WHERE published=1 AND id = ? OR alias = ?")
  550. ->execute($id, $id);
  551. if ($obj->next())
  552. {
  553. $row = $obj->row();
  554. return $row;
  555. }
  556. return false;
  557. }
  558. public function getExperience($id=0)
  559. {
  560. $ret = array();
  561. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_experience WHERE published=1 AND id = ? OR alias = ?")
  562. ->execute($id, $id);
  563. if ($obj->next())
  564. {
  565. $row = $obj->row();
  566. return $row;
  567. }
  568. return false;
  569. }
  570. public function getHotelEntry($id=0, $bGallery = false)
  571. {
  572. $obj = $this->Database->prepare("SELECT * FROM tl_page WHERE id = ?")
  573. ->execute($GLOBALS['hideaway']['hotel_reader_id']);
  574. $obj->next();
  575. $url = $obj->alias;
  576. $ret = array();
  577. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_hotel WHERE published=1 AND id = ? OR alias = ?")
  578. ->execute($id, $id);
  579. if ($obj->next())
  580. {
  581. $row = $obj->row();
  582. $objModel = \FilesModel::findByUuid($row['image']);
  583. $ret = array(
  584. 'row' => $row,
  585. 'image_path' => $objModel->path,
  586. 'image_meta' => unserialize($objModel->meta),
  587. // 'url' => $url.($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$obj->alias.'/',
  588. 'url' => $this->generateUrl($row, 'hotel'),
  589. 'gallery' => false,
  590. 'breadcrumb' => $this->getBreadcrumb($row)
  591. );
  592. if($bGallery && $row['images'])
  593. {
  594. $ret['gallery'] = $this->getGallery($row);
  595. }
  596. return $ret;
  597. }
  598. return false;
  599. }
  600. private function getGallery($row)
  601. {
  602. $a = unserialize($row['images']);
  603. $gal = array();
  604. foreach($a as $i=>$im)
  605. {
  606. $fi = \FilesModel::findByUuid($im);
  607. if($fi->path)
  608. {
  609. //var_dump($fi->path);
  610. array_push($gal, array(
  611. 'uuid'=>$im,
  612. 'path' => $fi->path,
  613. 'meta' => unserialize($fi->meta)
  614. )
  615. );
  616. }
  617. }
  618. $tmp = deserialize($row['orderSRC']);
  619. if(is_array($tmp))
  620. {
  621. $tmpGal = array();
  622. foreach($tmp as $tid)
  623. {
  624. foreach($gal as $k=>$v)
  625. {
  626. if($v['uuid']==$tid)
  627. {
  628. $tmpGal[] = $v;
  629. }
  630. }
  631. }
  632. $gal = $tmpGal;//$gal;
  633. }
  634. return $gal;
  635. }
  636. public function getCombiEntry($id=0, $bGallery = false)
  637. {
  638. $obj = $this->Database->prepare("SELECT * FROM tl_page WHERE id = ?")
  639. ->execute($GLOBALS['hideaway']['combi_reader_id']);
  640. $obj->next();
  641. $url = $obj->alias;
  642. $ret = array();
  643. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_combis WHERE published=1 AND id = ? OR alias = ?")
  644. ->execute($id, $id);
  645. if ($obj->next())
  646. {
  647. $row = $obj->row();
  648. $row['regions'] = unserialize($row['regions']);
  649. $objModel = \FilesModel::findByUuid($row['image']);
  650. $ret = array(
  651. 'row' => $row,
  652. 'image_path' => $objModel->path,
  653. 'image_meta' => unserialize($objModel->meta),
  654. 'url' => $url.($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$obj->alias.'/',
  655. 'breadcrumb' => $this->getBreadcrumb($row)
  656. );
  657. if($bGallery && $row['images'])
  658. {
  659. $ret['gallery'] = $this->getGallery($row);
  660. }
  661. return $ret;
  662. }
  663. return false;
  664. }
  665. public function getTravelEntry($id=0, $bGallery = false)
  666. {
  667. $obj = $this->Database->prepare("SELECT * FROM tl_page WHERE id = ?")
  668. ->execute($GLOBALS['hideaway']['travel_reader_id']);
  669. $obj->next();
  670. $url = $obj->alias;
  671. $ret = array();
  672. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_travel WHERE published=1 AND id = ? OR alias = ?")
  673. ->execute($id, $id);
  674. if ($obj->next())
  675. {
  676. $row = $obj->row();
  677. $row['regions'] = unserialize($row['regions']);
  678. $objModel = \FilesModel::findByUuid($row['image']);
  679. $ret = array(
  680. 'row' => $row,
  681. 'image_path' => $objModel->path,
  682. 'image_meta' => unserialize($objModel->meta),
  683. // 'url' => $url.($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$obj->alias.'/',
  684. 'url' => $this->generateUrl($row, 'travel'),
  685. 'breadcrumb' => $this->getBreadcrumb($row)
  686. );
  687. if($bGallery && $row['images'])
  688. {
  689. $ret['gallery'] = $this->getGallery($row);
  690. }
  691. return $ret;
  692. }
  693. return false;
  694. }
  695. public function iEntry($id=0, $bGallery = false)
  696. {
  697. $obj = $this->Database->prepare("SELECT * FROM tl_page WHERE id = ?")
  698. ->execute($GLOBALS['hideaway']['combi_reader_id']);
  699. $obj->next();
  700. $url = $obj->alias;
  701. $ret = array();
  702. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_combis WHERE published=1 AND id = ? OR alias = ?")
  703. ->execute($id, $id);
  704. if ($obj->next())
  705. {
  706. $row = $obj->row();
  707. $row['regions'] = unserialize($row['regions']);
  708. $objModel = \FilesModel::findByUuid($row['image']);
  709. $ret = array(
  710. 'row' => $row,
  711. 'image_path' => $objModel->path,
  712. 'image_meta' => unserialize($objModel->meta),
  713. 'url' => $url.($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$obj->alias.'/',
  714. 'breadcrumb' => $this->getBreadcrumb($row)
  715. );
  716. if($bGallery && $row['images'])
  717. {
  718. $ret['gallery'] = $this->getGallery($row);
  719. }
  720. return $ret;
  721. }
  722. return false;
  723. }
  724. public function getTripEntry($id=0, $bGallery = false)
  725. {
  726. $obj = $this->Database->prepare("SELECT * FROM tl_page WHERE id = ?")
  727. ->execute($GLOBALS['hideaway']['trip_reader_id']);
  728. $obj->next();
  729. $url = $obj->alias;
  730. $ret = array();
  731. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_trip WHERE published=1 AND id = ? OR alias = ?")
  732. ->execute($id, $id);
  733. if ($obj->next())
  734. {
  735. $row = $obj->row();
  736. $row['regions'] = unserialize($row['regions']);
  737. $objModel = \FilesModel::findByUuid($row['image']);
  738. $ret = array(
  739. 'row' => $row,
  740. 'image_path' => $objModel->path,
  741. 'image_meta' => unserialize($objModel->meta),
  742. // 'url' => $url.($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$obj->alias.'/',
  743. 'url' => $this->generateUrl($row, 'trip'),
  744. 'breadcrumb' => $this->getBreadcrumb($row)
  745. );
  746. if($bGallery && $row['images'])
  747. {
  748. $ret['gallery'] = $this->getGallery($row);
  749. }
  750. return $ret;
  751. }
  752. return false;
  753. }
  754. public function getCountryEntry($id=0)
  755. {
  756. $ret = array();
  757. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_country WHERE published=1 AND id = ?")
  758. ->execute($id);
  759. if ($obj->next())
  760. {
  761. $row = $obj->row();
  762. $objModel = \FilesModel::findByUuid($row['pageimage']);
  763. $ret = array(
  764. 'row' => $row,
  765. 'image_path' => $objModel->path,
  766. 'image_meta' => unserialize($objModel->meta),
  767. );
  768. return $ret;
  769. }
  770. return false;
  771. }
  772. public function getRegionEntry($id=0)
  773. {
  774. $ret = array();
  775. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_region WHERE published=1 AND id = ?")
  776. ->execute($id, $id);
  777. if ($obj->next())
  778. {
  779. $row = $obj->row();
  780. $objModel = \FilesModel::findByUuid($row['pageimage']);
  781. $ret = array(
  782. 'row' => $row,
  783. 'image_path' => $objModel->path,
  784. 'image_meta' => unserialize($objModel->meta)
  785. );
  786. return $ret;
  787. }
  788. return false;
  789. }
  790. public function getRegionByUrl()
  791. {
  792. $alias = $this->Input->get('items');
  793. $ret = array();
  794. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_region WHERE published=1 AND alias = ?")
  795. ->execute($alias);
  796. if ($obj->next())
  797. {
  798. $row = $obj->row();
  799. $map = \FilesModel::findByUuid($row['map']);
  800. $image = \FilesModel::findByUuid($row['pageimage']);
  801. $ret = array(
  802. 'row' => $row,
  803. 'map_path' => $map->path,
  804. 'map_meta' => unserialize($map->meta),
  805. 'image_path' => $image->path,
  806. 'image_meta' => unserialize($image->meta),
  807. 'breadcrumb' => $this->getRegionBreadcrumb($row)
  808. );
  809. return $ret;
  810. }
  811. return false;
  812. }
  813. public function getCountryByUrl()
  814. {
  815. $alias = $this->Input->get('items');
  816. $ret = array();
  817. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_country WHERE published=1 AND alias = ?")
  818. ->execute($alias);
  819. if ($obj->next())
  820. {
  821. $row = $obj->row();
  822. $map = \FilesModel::findByUuid($row['map']);
  823. $image = \FilesModel::findByUuid($row['pageimage']);
  824. $ret = array(
  825. 'row' => $row,
  826. 'map_path' => $map->path,
  827. 'map_meta' => unserialize($map->meta),
  828. 'image_path'=>$image->path,
  829. 'image_meta' => unserialize($image->meta),
  830. 'breadcrumb' => $this->getCountryBreadcrumb($row)
  831. );
  832. return $ret;
  833. }
  834. return false;
  835. }
  836. public function getExperienceByUrl()
  837. {
  838. $alias = $this->Input->get('erlebnis');
  839. $ret = array();
  840. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_experience WHERE published=1 AND alias = ?")
  841. ->execute($alias);
  842. if ($obj->next())
  843. {
  844. $row = $obj->row();
  845. $page_image = \FilesModel::findByUuid($row['pageimage']);
  846. $preview_image = \FilesModel::findByUuid($row['preview_image']);
  847. $ret = array(
  848. 'row' => $row,
  849. 'map_path' => $map->path,
  850. 'map_meta' => unserialize($map->meta),
  851. 'page_image_path' => $page_image->path,
  852. 'page_image_meta' => unserialize($page_image->meta),
  853. 'preview_image_path' => $preview_image->path,
  854. 'preview_image_meta' => unserialize($preview_image->meta),
  855. );
  856. return $ret;
  857. }
  858. return false;
  859. }
  860. public function getTargetByUrl()
  861. {
  862. $alias = $this->Input->get('gruppe');
  863. $ret = array();
  864. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_target WHERE published=1 AND alias = ?")
  865. ->execute($alias);
  866. if ($obj->next())
  867. {
  868. $row = $obj->row();
  869. $page_image = \FilesModel::findByUuid($row['pageimage']);
  870. $preview_image = \FilesModel::findByUuid($row['preview_image']);
  871. $ret = array(
  872. 'row' => $row,
  873. 'map_path' => $map->path,
  874. 'map_meta' => unserialize($map->meta),
  875. 'page_image_path' => $page_image->path,
  876. 'page_image_meta' => unserialize($page_image->meta),
  877. 'preview_image_path' => $preview_image->path,
  878. 'preview_image_meta' => unserialize($preview_image->meta),
  879. );
  880. return $ret;
  881. }
  882. return false;
  883. }
  884. public function getHotelsByRegionId($id)
  885. {
  886. if ($_COOKIE['target']) $targetId = $this->getTargetIdByInternalAlias($_COOKIE['target']);
  887. $ret = array();
  888. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_hotel WHERE published=1 AND region = ?")
  889. ->execute($id);
  890. while ($obj->next())
  891. {
  892. if ($targetId)
  893. {
  894. $targets = unserialize($obj->targets);
  895. if ($targets)
  896. {
  897. if (in_array($targetId, $targets))
  898. {
  899. $ret[] = $this->getHotelEntry($obj->id);
  900. }
  901. }
  902. }
  903. else $ret[] = $this->getHotelEntry($obj->id);
  904. }
  905. return $ret;
  906. }
  907. public function getTravelsByRegionId($id)
  908. {
  909. if ($_COOKIE['target']) $targetId = $this->getTargetIdByInternalAlias($_COOKIE['target']);
  910. $ret = array();
  911. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_travel WHERE published=1 AND regions LIKE ?")
  912. ->execute('%"'.$id.'"%');
  913. while ($obj->next())
  914. {
  915. $addEntry = false;
  916. if ($targetId)
  917. {
  918. $targets = unserialize($obj->targets);
  919. if ($targets && in_array($targetId, $targets))
  920. {
  921. $addEntry = true;
  922. }
  923. }
  924. else $addEntry = true;
  925. if ($addEntry)
  926. {
  927. $entry = $this->getTravelEntry($obj->id);
  928. $stations = array();
  929. for ($i = 1; $i <= 21; $i++)
  930. {
  931. if ($entry['row']['day_'.$i.'_location'] != '')
  932. {
  933. $stations[] = array(
  934. 'pos' => $i,
  935. 'location' => $entry['row']['day_'.$i.'_location'],
  936. 'teaser' => $entry['row']['day_'.$i.'_teaser'],
  937. );
  938. }
  939. }
  940. $entry['stations'] = $stations;
  941. $ret[] = $entry;
  942. }
  943. }
  944. return $ret;
  945. }
  946. public function getTripsByRegionId($id)
  947. {
  948. if ($_COOKIE['target']) $targetId = $this->getTargetIdByInternalAlias($_COOKIE['target']);
  949. $ret = array();
  950. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_trip WHERE published=1 AND regions LIKE ?")
  951. ->execute('%"'.$id.'"%');
  952. while ($obj->next())
  953. {
  954. if ($targetId)
  955. {
  956. $targets = unserialize($obj->targets);
  957. if ($targets)
  958. {
  959. if (in_array($targetId, $targets))
  960. {
  961. $ret[] = $this->getTripEntry($obj->id);
  962. }
  963. }
  964. }
  965. else $ret[] = $this->getTripEntry($obj->id);
  966. }
  967. return $ret;
  968. }
  969. public function getTripsByCountryId($id)
  970. {
  971. $regionObj = $this->Database->prepare("SELECT id FROM tl_hideaway_region WHERE published=1 AND country = ?")
  972. ->execute($id);
  973. $tripsByCountry = array();
  974. while ($regionObj->next())
  975. {
  976. $trips = $this->getTripsByRegionId($regionObj->id);
  977. if ($trips)
  978. {
  979. foreach ($trips as $trip)
  980. {
  981. $inList = false;
  982. foreach ($tripsByCountry as $t)
  983. {
  984. if ($t['row']['id'] == $trip['row']['id'])
  985. {
  986. $inList = true;
  987. break;
  988. }
  989. }
  990. if (!$inList)
  991. $tripsByCountry[] = $trip;
  992. }
  993. }
  994. }
  995. return count($tripsByCountry) ? $tripsByCountry : false;
  996. }
  997. public function getCombisByCountryId($id)
  998. {
  999. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_region WHERE published=1 AND country = ?")
  1000. ->execute($id);
  1001. $combisByCountry = array();
  1002. while ($obj->next())
  1003. {
  1004. // Get Combis by Region and check if not already in combisByCountry-list
  1005. if ($this->getCombisByRegionId($obj->id))
  1006. {
  1007. // echo "getCombisByRegionId fired!";
  1008. foreach ($this->getCombisByRegionId($obj->id) as $combi)
  1009. {
  1010. if (count($combisByCountry))
  1011. {
  1012. $in_list = false;
  1013. foreach ($combisByCountry as $c)
  1014. {
  1015. if ($c['row']['id'] == $combi['row']['id'])
  1016. $in_list = true;
  1017. }
  1018. if ($in_list == false)
  1019. array_push($combisByCountry, $combi);
  1020. }
  1021. else
  1022. {
  1023. array_push($combisByCountry, $combi);
  1024. }
  1025. }
  1026. }
  1027. }
  1028. // var_dump($combisByCountry); exit;
  1029. return $combisByCountry;
  1030. }
  1031. public function getCombisByRegionId($id)
  1032. {
  1033. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_combis WHERE published=1 ORDER BY title")
  1034. ->execute();
  1035. $objParent = \PageModel::findById($GLOBALS['hideaway']['combi_reader_id']);
  1036. while ($obj->next())
  1037. {
  1038. $regions = unserialize($obj->regions);
  1039. if (!in_array($id, $regions)) continue;
  1040. $row = $obj->row();
  1041. $t = array('row'=>$row, 'type'=>'combi');
  1042. $objModel = \FilesModel::findByUuid($row['image']);
  1043. $t['image_path'] = $objModel->path;
  1044. $t['image_meta'] = unserialize($objModel->meta);
  1045. $t['url'] = $this->generateFrontendUrl($objParent->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'], $objParent->language);
  1046. if ($targets)
  1047. {
  1048. foreach ($targets as $target)
  1049. {
  1050. if ($highlight)
  1051. {
  1052. $highlight_targets = unserialize($row['highlight']);
  1053. if ($highlight_targets)
  1054. {
  1055. if (in_array($target, $highlight_targets))
  1056. {
  1057. $ret[] = $t;
  1058. break;
  1059. }
  1060. }
  1061. }
  1062. else
  1063. {
  1064. if (in_array($target, unserialize($row['targets'])))
  1065. {
  1066. $ret[] = $t;
  1067. break;
  1068. }
  1069. }
  1070. }
  1071. }
  1072. else $ret[] = $t;
  1073. }
  1074. return $ret;
  1075. }
  1076. public function getRegionsByCountryId($id, $reader_id = 0)
  1077. {
  1078. $ret = array();
  1079. $url = false;
  1080. if($reader_id > 0)
  1081. {
  1082. $obj = $this->Database->prepare("SELECT * FROM tl_page WHERE id = ?")
  1083. ->execute($reader_id);
  1084. $obj->next();
  1085. $url = $obj->alias;
  1086. }
  1087. $obj = $this->Database->prepare("SELECT * FROM tl_hideaway_region WHERE published=1 AND country = ?")
  1088. ->execute($id);
  1089. while ($obj->next())
  1090. {
  1091. $row = $obj->row();
  1092. $image = \FilesModel::findByUuid($row['pageimage']);
  1093. $row['image_path'] = $image->path;
  1094. $row['image_meta'] = unserialize($image->meta);
  1095. $row['url'] = false;
  1096. $country = $this->getCountryEntry($row['country']);
  1097. //die($country['row']['alias']);
  1098. if($url)
  1099. {
  1100. // $row['url'] = $url.($GLOBALS['TL_CONFIG']['useAutoItem'] ? '/' : '/items/').$row['alias'].'/';
  1101. $row['url'] = '/reisen/'.$country['row']['alias'].'/'.$row['alias'].'/';
  1102. }
  1103. $ret[] = $row;
  1104. }
  1105. return $ret;
  1106. }
  1107. public function getCountryAndRegionByReference($row)
  1108. {
  1109. if ($row['main_region'])
  1110. {
  1111. $regid = $row['main_region'];
  1112. }
  1113. else
  1114. {
  1115. if ($row['region'] > 0)
  1116. $regid = $row['region'];
  1117. else if (is_array($row['regions']))
  1118. $regid = $row['regions'][0];
  1119. }
  1120. $region = $this->getRegionEntry($regid);
  1121. $country = $this->getCountryEntry($region['row']['country']);
  1122. return array(
  1123. 'region' => $region,
  1124. 'country' => $country
  1125. );
  1126. }
  1127. public function generateUrl($row, $type='hotel')
  1128. {
  1129. $arr = $this->getCountryAndRegionByReference($row);
  1130. $region = $arr['region'];
  1131. $country = $arr['country'];
  1132. if((int)$country['row']['single_region'] > 0)
  1133. {
  1134. switch ($type) {
  1135. case 'hotel':
  1136. $url = '/reisen/'.$country['row']['alias'].'/'.'hotels-'.str_replace(array('-urlaub','-reisen'), '', $country['row']['alias']).'/'.$row['alias'].'/';
  1137. break;
  1138. case 'trip':
  1139. $url = '/reisen/'.$country['row']['alias'].'/'.str_replace(array('-urlaub','-reisen'), '', $country['row']['alias']).'-ausfluege'.'/'.$row['alias'].'/';
  1140. break;
  1141. case 'travel':
  1142. $url = '/reisen/'.$country['row']['alias'].'/'.str_replace(array('-urlaub','-reisen'), '', $country['row']['alias']).'-rundreise'.'/'.$row['alias'].'/';
  1143. break;
  1144. default:
  1145. # code...
  1146. break;
  1147. }
  1148. //die($url);
  1149. }
  1150. else
  1151. {
  1152. switch ($type) {
  1153. case 'hotel':
  1154. $url = '/reisen/'.$country['row']['alias'].'/'.$region['row']['alias'].'/'.'hotels-'.str_replace('-urlaub', '', $region['row']['alias']).'/'.$row['alias'].'/';
  1155. break;
  1156. case 'trip':
  1157. $url = '/reisen/'.$country['row']['alias'].'/'.$region['row']['alias'].'/'.str_replace('-urlaub', '', $region['row']['alias']).'-ausfluege'.'/'.$row['alias'].'/';
  1158. break;
  1159. case 'travel':
  1160. $url = '/reisen/'.$country['row']['alias'].'/'.$region['row']['alias'].'/'.str_replace('-urlaub', '', $region['row']['alias']).'-rundreise'.'/'.$row['alias'].'/';
  1161. break;
  1162. default:
  1163. # code...
  1164. break;
  1165. }
  1166. }
  1167. return $url;
  1168. }
  1169. private function getCountryBreadcrumb($row)
  1170. {
  1171. $country = $this->getCountryEntry($row['country']);
  1172. $ret = array(
  1173. array(
  1174. 'title' => 'Reiseziele',
  1175. 'url' => '/reisen-suedostasien/'
  1176. )
  1177. );
  1178. return $ret;
  1179. }
  1180. private function getRegionBreadcrumb($row)
  1181. {
  1182. $country = $this->getCountryEntry($row['country']);
  1183. $ret = array(
  1184. array(
  1185. 'title' => 'Reiseziele',
  1186. 'url' => '/reisen-suedostasien/'
  1187. ),
  1188. array(
  1189. 'title' => $country['row']['title'],
  1190. 'url' => '/reisen/'.$country['row']['alias'].'/'
  1191. )
  1192. );
  1193. return $ret;
  1194. }
  1195. private function getBreadcrumb($row)
  1196. {
  1197. global $GLOBALS;
  1198. $arr = $this->getCountryAndRegionByReference($row);
  1199. $region = $arr['region'];
  1200. $country = $arr['country'];
  1201. //var_dump($country);
  1202. if($country['row']['single_region'] > 0)
  1203. {
  1204. $ret = array(
  1205. array(
  1206. 'title' => 'Reiseziele',
  1207. 'url' => '/reisen-suedostasien/'
  1208. ),
  1209. array(
  1210. 'title' => $country['row']['title'],
  1211. 'url' => '/reisen/'.$country['row']['alias'].'/'
  1212. )
  1213. );
  1214. }
  1215. else
  1216. {
  1217. $ret = array(
  1218. array(
  1219. 'title' => 'Reiseziele',
  1220. 'url' => '/reisen-suedostasien/'
  1221. ),
  1222. array(
  1223. 'title' => $country['row']['title'],
  1224. 'url' => '/reisen/'.$country['row']['alias'].'/'
  1225. ),
  1226. array(
  1227. 'title' => $region['row']['title'],
  1228. 'url' => '/reisen/'.$country['row']['alias'].'/'.$region['row']['alias'].'/'
  1229. )
  1230. );
  1231. }
  1232. return $ret;
  1233. }
  1234. }