| <?php |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| namespace Eluceo\iCal; |
|
|
| use Eluceo\iCal\Util\ComponentUtil; |
|
|
| |
| |
| |
| abstract class Component |
| { |
| |
| |
| |
| |
| |
| protected $components = []; |
|
|
| |
| |
| |
| |
| |
| |
| |
| private $componentsBuildOrder = ['VTIMEZONE', 'DAYLIGHT', 'STANDARD']; |
|
|
| |
| |
| |
| |
| |
| |
| |
| abstract public function getType(); |
|
|
| |
| |
| |
| |
| |
| |
| |
| abstract public function buildPropertyBag(); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function addComponent(self $component, $key = null) |
| { |
| if (null == $key) { |
| $this->components[] = $component; |
| } else { |
| $this->components[$key] = $component; |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function setComponents(array $components) |
| { |
| $this->components = $components; |
|
|
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| public function build() |
| { |
| $lines = []; |
|
|
| $lines[] = sprintf('BEGIN:%s', $this->getType()); |
|
|
| |
| foreach ($this->buildPropertyBag() as $property) { |
| foreach ($property->toLines() as $l) { |
| $lines[] = $l; |
| } |
| } |
|
|
| $this->buildComponents($lines); |
|
|
| $lines[] = sprintf('END:%s', $this->getType()); |
|
|
| $ret = []; |
|
|
| foreach ($lines as $line) { |
| foreach (ComponentUtil::fold($line) as $l) { |
| $ret[] = $l; |
| } |
| } |
|
|
| return $ret; |
| } |
|
|
| |
| |
| |
| |
| |
| public function render() |
| { |
| return implode("\r\n", $this->build()); |
| } |
|
|
| |
| |
| |
| |
| |
| public function __toString() |
| { |
| return $this->render(); |
| } |
|
|
| |
| |
| |
| |
| |
| private function buildComponents(array &$lines) |
| { |
| $componentsByType = []; |
|
|
| |
| foreach ($this->components as $component) { |
| $type = $component->getType(); |
| if (!isset($componentsByType[$type])) { |
| $componentsByType[$type] = []; |
| } |
| $componentsByType[$type][] = $component; |
| } |
|
|
| |
| foreach ($this->componentsBuildOrder as $type) { |
| if (!isset($componentsByType[$type])) { |
| continue; |
| } |
| foreach ($componentsByType[$type] as $component) { |
| $this->addComponentLines($lines, $component); |
| } |
| unset($componentsByType[$type]); |
| } |
|
|
| |
| foreach ($componentsByType as $components) { |
| foreach ($components as $component) { |
| $this->addComponentLines($lines, $component); |
| } |
| } |
| } |
|
|
| |
| |
| |
| private function addComponentLines(array &$lines, self $component) |
| { |
| foreach ($component->build() as $l) { |
| $lines[] = $l; |
| } |
| } |
| } |
|
|