Spaces:
No application file
No application file
File size: 2,013 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<?php
declare(strict_types=1);
namespace Mautic\CoreBundle\Doctrine\GeneratedColumn;
final class GeneratedColumns implements GeneratedColumnsInterface
{
private int $position = 0;
/**
* Simple array of generated columns.
*/
private array $generatedColumns = [];
/**
* Array structure holding the generated columns that allows to
* search by date column and unit without need for a loop.
*/
private array $dateColumnIndex = [];
public function add(GeneratedColumn $generatedColumn): void
{
$this->generatedColumns[] = $generatedColumn;
if ($generatedColumn->getOriginalDateColumn() && $generatedColumn->getTimeUnit()) {
if (!isset($this->dateColumnIndex[$generatedColumn->getOriginalDateColumn()])) {
$this->dateColumnIndex[$generatedColumn->getOriginalDateColumn()] = [];
}
$this->dateColumnIndex[$generatedColumn->getOriginalDateColumn()][$generatedColumn->getTimeUnit()] = $generatedColumn;
}
}
public function getForOriginalDateColumnAndUnit(string $originalDateColumn, string $unit): GeneratedColumnInterface
{
if (isset($this->dateColumnIndex[$originalDateColumn][$unit])) {
return $this->dateColumnIndex[$originalDateColumn][$unit];
}
throw new \UnexpectedValueException("Generated column for original date column {$originalDateColumn} with unit {$unit} does not exist.");
}
public function rewind(): void
{
$this->position = 0;
}
public function current(): mixed
{
return $this->generatedColumns[$this->position];
}
public function key(): mixed
{
return $this->position;
}
public function next(): void
{
++$this->position;
}
public function valid(): bool
{
return isset($this->generatedColumns[$this->position]);
}
public function count(): int
{
return count($this->generatedColumns);
}
}
|