LDAPAccountManager/lam/lib/3rdParty/composer/pear-pear.horde.org/Horde_Mime/Horde/Mime/Headers/ContentParam/ContentType.php

199 lines
5.0 KiB
PHP

<?php
/**
* Copyright 2015-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @category Horde
* @copyright 2015-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Mime
*/
/**
* This class represents a Content-Type MIME header (RFC 2045).
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2015-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Mime
* @since 2.8.0
*
* @property-read string $ptype The primary type.
* @property-read string $stype The sub type.
* @property-read string $type_charset The MIME type with the charset
* parameter added (if this is a text/*
* part).
*/
class Horde_Mime_Headers_ContentParam_ContentType
extends Horde_Mime_Headers_ContentParam
{
const DEFAULT_CONTENT_TYPE = 'application/octet-stream';
/**
* Creates a default Content-Type header, conforming to the MIME
* specification as detailed in RFC 2045.
*
* @return Horde_Mime_Headers_ContentParam_ContentType Content-Type
* header object.
*/
public static function create()
{
$ob = new stdClass;
$ob->value = self::DEFAULT_CONTENT_TYPE;
return new self(null, $ob);
}
/**
*/
public function __construct($name, $value)
{
parent::__construct('Content-Type', $value);
}
/**
*/
public function __get($name)
{
switch ($name) {
case 'params':
$params = new Horde_Support_CaseInsensitiveArray(
parent::__get($name)
);
foreach ($params as $key => $val) {
if (!isset($this[$key])) {
unset($params[$key]);
}
}
return $params->getArrayCopy();
case 'ptype':
$val = $this->value;
return substr($val, 0, strpos($val, '/'));
case 'stype':
$val = $this->value;
return substr($val, strpos($val, '/') + 1);
case 'type_charset':
$val = $this->value;
foreach ($this->_escapeParams(array_filter(array('charset' => $this['charset']))) as $k2 => $v2) {
$val .= '; ' . $k2 . '=' . $v2;
}
return $val;
}
return parent::__get($name);
}
/**
*/
public function setContentParamValue($data)
{
/* Set the value first, since it will handle any sanity checking. */
parent::setContentParamValue(Horde_String::lower($data));
$val = $this->value;
if (strpos($val, '/') === false) {
parent::setContentParamValue(self::DEFAULT_CONTENT_TYPE);
} else {
switch ($this->ptype) {
case 'multipart':
if (!isset($this['boundary'])) {
$this['boundary'] = '=_' . new Horde_Support_Randomid();
}
break;
case 'application':
case 'audio':
case 'image':
case 'message':
case 'model':
case 'text':
case 'video':
// No-op
break;
default:
if (substr($val, 0, 2) !== 'x-') {
/* Append 'x-' for any unknown primary MIME type. */
parent::setContentParamValue('x-' . $val);
}
break;
}
}
}
/**
*/
public function isDefault()
{
return ($this->full_value === 'text/plain');
}
/**
*/
public static function getHandles()
{
return array(
'content-type'
);
}
/* ArrayAccess methods. */
/**
*/
public function offsetExists($offset)
{
if (!parent::offsetExists($offset)) {
return false;
}
if (strcasecmp($offset, 'boundary') === 0) {
return ($this->ptype === 'multipart');
} elseif (strcasecmp($offset, 'charset') === 0) {
return (($this->ptype === 'text') &&
(parent::offsetGet($offset) !== 'us-ascii'));
}
return true;
}
/**
*/
public function offsetGet($offset)
{
return isset($this[$offset])
? parent::offsetGet($offset)
: null;
}
/**
*/
public function offsetSet($offset, $value)
{
/* Store character set as lower case value. */
if (strcasecmp($offset, 'charset') === 0) {
$value = Horde_String::lower($value);
}
parent::offsetSet($offset, $value);
}
/**
*/
public function offsetUnset($offset)
{
if (($this->ptype !== 'multipart') ||
(strcasecmp($offset, 'boundary') !== 0)) {
parent::offsetUnset($offset);
}
}
}