* @author Dennis Eichhorn * @copyright 2013 Dennis Eichhorn * @license OMS License 1.0 * @version 1.0.0 * @link http://orange-management.com */ namespace phpOMS\Message\Http; use phpOMS\Message\HeaderAbstract; /** * Response class. * * @category Framework * @package phpOMS\Response * @author OMS Development Team * @author Dennis Eichhorn * @license OMS License 1.0 * @link http://orange-management.com * @since 1.0.0 */ class Header extends HeaderAbstract { /** * Header. * * @var string[][] * @since 1.0.0 */ private $header = []; /** * Constructor. * * @since 1.0.0 * @author Dennis Eichhorn */ public function __construct() { $this->set('Content-Type', 'text/html; charset=utf-8'); } /** * Returns all headers. * * @return array * * @since 1.0.0 * @author Dennis Eichhorn */ public function getHeaders() : array { return getallheaders(); } /** * {@inheritdoc} */ public function getHeader(string $name) : string { return getallheaders()[$name]; } /** * Remove header by ID. * * @param int $key Header key * * @return bool * * @throws \Exception * * @since 1.0.0 * @author Dennis Eichhorn */ public function remove(int $key) : bool { if (self::$isLocked) { throw new \Exception('Already locked'); } if (isset($this->header[$key])) { unset($this->header[$key]); return true; } return false; } /** * {@inheritdoc} */ public function get(string $key) : array { return $this->header[$key] ?? []; } /** * {@inheritdoc} */ public function has(string $key) : bool { return array_key_exists($key, $this->header); } /** * {@inheritdoc} */ public function set(string $key, string $header, bool $overwrite = false) : bool { if (self::$isLocked) { throw new \Exception('Already locked'); } if (!$overwrite && isset($this->header[$key])) { return false; } elseif ($overwrite) { unset($this->header[$key]); } if (!isset($this->header[$key])) { $this->header[$key] = []; } $this->header[$key][] = $header; return true; } /** * Push all headers. * * @since 1.0.0 * @author Dennis Eichhorn */ public function push() { if (self::$isLocked) { throw new \Exception('Already locked'); } foreach ($this->header as $name => $arr) { foreach ($arr as $ele => $value) { header($name . ': ' . $value); } } $this->lock(); } /** * {@inheritdoc} */ public function generate(string $code) { switch ($code) { case RequestStatus::R_403: $this->generate403(); break; case RequestStatus::R_406: $this->generate406(); break; case RequestStatus::R_407: $this->generate407(); break; case RequestStatus::R_503: $this->generate503(); break; default: throw new \Exception('Unexpected header code'); } } /** * Generate predefined header. * * @return void * * @since 1.0.0 * @author Dennis Eichhorn */ private function generate403() { $this->set('HTTP', 'HTTP/1.0 403 Forbidden'); $this->set('Status', 'Status: HTTP/1.0 403 Forbidden'); } /** * Generate predefined header. * * @return void * * @since 1.0.0 * @author Dennis Eichhorn */ private function generate406() { $this->set('HTTP', 'HTTP/1.0 406 Not acceptable'); $this->set('Status', 'Status: 406 Not acceptable'); } /** * Generate predefined header. * * @return void * * @since 1.0.0 * @author Dennis Eichhorn */ private function generate503() { $this->set('HTTP', 'HTTP/1.0 503 Service Temporarily Unavailable'); $this->set('Status', 'Status: 503 Service Temporarily Unavailable'); $this->set('Retry-After', 'Retry-After: 300'); } /** * Generate predefined header. * * @return void * * @since 1.0.0 * @author Dennis Eichhorn */ private function generate407() { } }