getHeaderAndFlags($id); $this->rawHeader = $data['header']; $this->flagList = $data['flags']; } $this->id = $id; $this->storage = $storage; $this->parser = $parser; $this->fullRawContent = $fullRawContent; if ( !$storage && $this->fullRawContent ) { $rawHeader = null; $rawBody = null; if (strpos($this->fullRawContent, "\r\n\r\n") !== false) { [$rawHeader, $rawBody] = explode("\r\n\r\n", $this->fullRawContent, 2); } else if (strpos($this->fullRawContent, "\n\n") !== false) { [$rawHeader, $rawBody] = explode("\n\n", $this->fullRawContent, 2); } $this->rawHeader = $rawHeader; $this->rawContent = $rawBody; } } public function getRawHeader(): string { return $this->rawHeader ?? ''; } public function getParser(): ?Parser { return $this->parser; } public function hasHeader(string $name): bool { if (!$this->parser) { throw new RuntimeException(); } return $this->parser->hasHeader($this, $name); } public function getHeader(string $attribute): ?string { if (!$this->parser) { throw new RuntimeException(); } return $this->parser->getHeader($this, $attribute); } public function getRawContent(): string { if (is_null($this->rawContent)) { if (!$this->storage) { throw new RuntimeException(); } $this->rawContent = $this->storage->getRawContent($this->id); } return $this->rawContent ?? ''; } public function getFullRawContent(): string { if ($this->fullRawContent) { return $this->fullRawContent; } return $this->getRawHeader() . "\n" . $this->getRawContent(); } /** * @return string[] */ public function getFlags(): array { return $this->flagList ?? []; } public function isFetched(): bool { return (bool) $this->rawHeader; } /** * @return Part[] */ public function getPartList(): array { if (!$this->parser) { throw new RuntimeException(); } return $this->parser->getPartList($this); } }