12.21
This commit is contained in:
parent
ebf90ff869
commit
4e71ddabec
17 changed files with 448 additions and 101 deletions
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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')));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue