This commit is contained in:
Kevin Adametz 2021-12-25 03:11:08 +01:00
parent ebf90ff869
commit 4e71ddabec
17 changed files with 448 additions and 101 deletions

View file

@ -286,7 +286,7 @@ class Page
/**
* @ORM\Column(type="string", length=200, nullable=true, unique=true)
*/
protected $realUrlPath;
protected $realUrlPath;
/**
* @ORM\Column(type="string", length=65535, nullable=true)
@ -1263,6 +1263,15 @@ class Page
return '/'. implode('/', array_reverse($urlParts));
}
public function getUrlPathBefore()
{
$url = explode('/', $this->getUrlPath());
array_pop($url);
return implode('/', $url);
}
/**
* Set boxBody
*

View file

@ -221,7 +221,7 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
* @todo Find a more appropriate name for this method
*/
public function getTrueTravelPeriods(TravelProgram $program, $class = false, $flags =
self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL)
self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL, $start = false)
{
if (!($flags & self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL))
{
@ -229,8 +229,7 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
}
$doQueryVirtualAndNonVirtual = $flags & self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL ==
self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL;
/** @var TravelPeriod[] $periods */
$qb = $this->createQueryBuilder('p');
$qb
@ -262,8 +261,11 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
$startDate = null;
if (!($flags & self::TD_QUERY_OUTDATED))
{
$startDate = new \DateTime('tomorrow');
if($start && $start == 'start_week'){
$startDate = new \DateTime('+3 week');
}else{
$startDate = new \DateTime('tomorrow');
}
}
if ($class)
{
@ -296,7 +298,7 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
;
$entities = $qb->getQuery()->execute();
$flightPeriodByKey = null;
if (!$program->getIsMediated())
{
@ -334,6 +336,7 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
{
$fpKey = $date->getStartDate()->format('Y-m-d') . $date->getEndDate()->format('Y-m-d') .
$program->getTravelArrivalPoint()->getId();
if (isset($flightPeriodByKey[$fpKey]))
{
// #TODO Does this cause performance problems?
@ -342,8 +345,8 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
}
}
}
$this->addTravelDatesToProgram($program, $entities, $flightPeriodByKey, $startDate, null);
return $program->getTravelDates();
$this->addTravelDatesToProgram($program, $entities, $flightPeriodByKey, $startDate, null, $start);
return $program->getTravelDates($start);
}
private $currencyFactor = null;
@ -373,13 +376,14 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
* @throws \Exception
*/
public function addTravelDatesToProgram(TravelProgram &$travelProgram, $travelPeriods, $flightPeriods,
\DateTime $startDate = null, \DateTime $endDate = null)
\DateTime $startDate = null, \DateTime $endDate = null, $header = null)
{
$currencyFactor = $travelProgram->getNettoPricesInEuro() ? 1 : $this->getCurrencyFactor();
$counters = array();
// #TODO Consider adding travelPeriods to travelProgram in the search algorithm
//foreach ($travelProgram->getPeriods() as $travelPeriod)
$counter = 0;
foreach ($travelPeriods as $travelPeriod)
{
if ($travelPeriod->getIsSeason())
@ -406,6 +410,7 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
\DateInterval::createFromDateString('1 day'), $seasonEndDate);
$doTestStartDate = $startDate != null;
/** @var \DateTime $date */
foreach ($dates as $date)
{
@ -424,7 +429,7 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
$travelDateEnd = (clone $date)->modify('+'.$travelProgram->getProgramDuration().' day');
$travelDateKey = $this->createTravelDateKey($date, $travelDateEnd);
if (!$travelProgram->hasTravelDate($travelDateKey))
if (!$travelProgram->hasTravelDate($travelDateKey, $header))
{
$flightPeriod = null;
if (!$travelProgram->getIsMediated())
@ -440,7 +445,8 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
$date,
$travelDateEnd,
$flightPeriod,
$currencyFactor
$currencyFactor,
$header
);
}
}
@ -464,8 +470,8 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
}
// #TODO There is an error in the old backend which causes duplicates
if ($travelProgram->hasTravelDate($travelDateKey) &&
$travelProgram->getTravelDate($travelDateKey)->__getTravelPeriod()->getId() != $travelPeriod->getId())
if ($travelProgram->hasTravelDate($travelDateKey, $header) &&
$travelProgram->getTravelDate($travelDateKey, $header)->__getTravelPeriod()->getId() != $travelPeriod->getId())
{
global $kernel;
if($kernel instanceOf \AppCache) $kernel = $kernel->getKernel();
@ -475,7 +481,7 @@ class TravelPeriodRepository extends \Doctrine\ORM\EntityRepository
else
{
$TravelDate = $travelProgram->addTravelDateFromNonSeasonTravelPeriod($travelDateKey, $travelPeriod, $flightPeriod,
$currencyFactor);
$currencyFactor, $header);
}

View file

@ -402,8 +402,10 @@ class TravelProgram
* @var array|TravelDate[]
*/
private $travelDateByKey = [];
private $headerTravelDateByKey = [];
private $isTravelDateMapTainted = true;
private $isHeaderTravelDateMapTainted = true;
/**
* Set profitMargin
@ -1475,6 +1477,7 @@ class TravelProgram
$this->countries = new \Doctrine\Common\Collections\ArrayCollection();
$this->departures = new \Doctrine\Common\Collections\ArrayCollection();
$this->travelDateByKey = [];
$this->headerTravelDateByKey = [];
}
/**
@ -1680,16 +1683,25 @@ class TravelProgram
return $this->images;
}
private function assertTravelDateNotDefinedYet($key)
private function assertTravelDateNotDefinedYet($key, $header = null)
{
if($header){
if (isset($this->headerTravelDateByKey[$key]))
{
return true; //throw new \Exception('Travel period with key '. $key .' already exists');
}
return false;
}
if (isset($this->travelDateByKey[$key]))
{
throw new \Exception('Travel period with key '. $key .' already exists');
return true; //throw new \Exception('Travel period with key '. $key .' already exists');
}
return false;
}
public function addTravelDateFromNonSeasonTravelPeriod($key, TravelPeriod $travelPeriod,
FlightPeriod $flightPeriod = null, $currencyFactor)
FlightPeriod $flightPeriod = null, $currencyFactor, $header = null)
{
$now = new \DateTime();
@ -1697,48 +1709,80 @@ class TravelProgram
if($travelPeriod->getStartDate() <= $now){
return false;
}
$this->assertTravelDateNotDefinedYet($key);
$this->travelDateByKey[$key] = TravelDate::createForNonSeasonTravelPeriod($key, $travelPeriod, $flightPeriod,
$currencyFactor);
if($header){
if(!$this->assertTravelDateNotDefinedYet($key, $header)){
$this->headerTravelDateByKey[$key] = TravelDate::createForNonSeasonTravelPeriod($key, $travelPeriod, $flightPeriod, $currencyFactor);
}
return $this->headerTravelDateByKey[$key];;
}
if(!$this->assertTravelDateNotDefinedYet($key)){
$this->travelDateByKey[$key] = TravelDate::createForNonSeasonTravelPeriod($key, $travelPeriod, $flightPeriod, $currencyFactor);
}
return $this->travelDateByKey[$key];
}
public function addTravelDateFromSeasonTravelPeriod($key, TravelPeriod $travelPeriod, $index, \DateTime $start,
\DateTime $end = null, FlightPeriod $flightPeriod = null, $currencyFactor)
\DateTime $end = null, FlightPeriod $flightPeriod = null, $currencyFactor, $header = null)
{
$this->assertTravelDateNotDefinedYet($key);
$this->isTravelDateMapTainted = true;
$this->travelDateByKey[$key] = TravelDate::createForSeasonTravelPeriod($key, $travelPeriod, $index, $start,
$end, $flightPeriod, $currencyFactor);
if($header){
if(!$this->assertTravelDateNotDefinedYet($key, $header)){
$this->isHeaderTravelDateMapTainted = true;
$this->headerTravelDateByKey[$key] = TravelDate::createForSeasonTravelPeriod($key, $travelPeriod, $index, $start,
$end, $flightPeriod, $currencyFactor);
}
return;
}
if(!$this->assertTravelDateNotDefinedYet($key)){
$this->isTravelDateMapTainted = true;
$this->travelDateByKey[$key] = TravelDate::createForSeasonTravelPeriod($key, $travelPeriod, $index, $start,
$end, $flightPeriod, $currencyFactor);
}
}
public function addTravelDate($key, TravelPeriod $travelPeriod, FlightPeriod $flightPeriod = null, $currencyFactor,
\DateTime $start = null, \DateTime $end = null, $index = null)
{
$this->assertTravelDateNotDefinedYet($key);
if(!$this->assertTravelDateNotDefinedYet($key)){
$this->isTravelDateMapTainted = true;
$this->travelDateByKey[$key] = new TravelDate($key, $travelPeriod, $flightPeriod, $currencyFactor, $start, $end,
$index);
}
}
public function hasTravelDate($key)
public function hasTravelDate($key, $header = null)
{
if($header){
return isset($this->headerTravelDateByKey[$key]);
}
return isset($this->travelDateByKey[$key]);
}
public function getTravelDate($key)
public function getTravelDate($key, $header = null)
{
if($header){
return $this->headerTravelDateByKey[$key] ?? null;
}
return $this->travelDateByKey[$key] ?? null;
}
/**
* @return TravelDate[]|array
*/
public function getTravelDates()
public function getTravelDates($header = null)
{
if($header){
if ($this->isHeaderTravelDateMapTainted)
{
ksort($this->headerTravelDateByKey);
$this->isHeaderTravelDateMapTainted = false;
}
return $this->headerTravelDateByKey;
}
if ($this->isTravelDateMapTainted)
{
ksort($this->travelDateByKey);
@ -1747,11 +1791,16 @@ class TravelProgram
return $this->travelDateByKey;
}
public function hasTravelDates()
public function hasTravelDates($header = null)
{
if($header){
return !empty($this->headerTravelDateByKey);
}
return !empty($this->travelDateByKey);
}
public function getIsPossibleStartDate(\DateTime $startDate)
{
return $this->getIsAvailWeekday(intval($startDate->format('w')));