PHPWord/src/PhpWord/DocumentProperties.php
2014-05-14 19:41:44 +07:00

579 lines
12 KiB
PHP

<?php
/**
* This file is part of PHPWord - A pure PHP library for reading and writing
* word processing documents.
*
* PHPWord is free software distributed under the terms of the GNU Lesser
* General Public License version 3 as published by the Free Software Foundation.
*
* For the full copyright and license information, please read the LICENSE
* file that was distributed with this source code. For the full list of
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
*
* @link https://github.com/PHPOffice/PHPWord
* @copyright 2010-2014 PHPWord contributors
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
*/
namespace PhpOffice\PhpWord;
/**
* Document properties
*/
class DocumentProperties
{
/** Constants */
const PROPERTY_TYPE_BOOLEAN = 'b';
const PROPERTY_TYPE_INTEGER = 'i';
const PROPERTY_TYPE_FLOAT = 'f';
const PROPERTY_TYPE_DATE = 'd';
const PROPERTY_TYPE_STRING = 's';
const PROPERTY_TYPE_UNKNOWN = 'u';
/**
* Creator
*
* @var string
*/
private $creator;
/**
* LastModifiedBy
*
* @var string
*/
private $lastModifiedBy;
/**
* Created
*
* @var int
*/
private $created;
/**
* Modified
*
* @var int
*/
private $modified;
/**
* Title
*
* @var string
*/
private $title;
/**
* Description
*
* @var string
*/
private $description;
/**
* Subject
*
* @var string
*/
private $subject;
/**
* Keywords
*
* @var string
*/
private $keywords;
/**
* Category
*
* @var string
*/
private $category;
/**
* Company
*
* @var string
*/
private $company;
/**
* Manager
*
* @var string
*/
private $manager;
/**
* Custom Properties
*
* @var array
*/
private $customProperties = array();
/**
* Create new DocumentProperties
*/
public function __construct()
{
$this->creator = '';
$this->lastModifiedBy = $this->creator;
$this->created = time();
$this->modified = time();
$this->title = '';
$this->subject = '';
$this->description = '';
$this->keywords = '';
$this->category = '';
$this->company = '';
$this->manager = '';
}
/**
* Get Creator
*
* @return string
*/
public function getCreator()
{
return $this->creator;
}
/**
* Set Creator
*
* @param string $value
* @return self
*/
public function setCreator($value = '')
{
$this->creator = $this->setValue($value, '');
return $this;
}
/**
* Get Last Modified By
*
* @return string
*/
public function getLastModifiedBy()
{
return $this->lastModifiedBy;
}
/**
* Set Last Modified By
*
* @param string $value
* @return self
*/
public function setLastModifiedBy($value = '')
{
$this->lastModifiedBy = $this->setValue($value, $this->creator);
return $this;
}
/**
* Get Created
*
* @return int
*/
public function getCreated()
{
return $this->created;
}
/**
* Set Created
*
* @param int $value
* @return self
*/
public function setCreated($value = null)
{
$this->created = $this->setValue($value, time());
return $this;
}
/**
* Get Modified
*
* @return int
*/
public function getModified()
{
return $this->modified;
}
/**
* Set Modified
*
* @param int $value
* @return self
*/
public function setModified($value = null)
{
$this->modified = $this->setValue($value, time());
return $this;
}
/**
* Get Title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set Title
*
* @param string $value
* @return self
*/
public function setTitle($value = '')
{
$this->title = $this->setValue($value, '');
return $this;
}
/**
* Get Description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Set Description
*
* @param string $value
* @return self
*/
public function setDescription($value = '')
{
$this->description = $this->setValue($value, '');
return $this;
}
/**
* Get Subject
*
* @return string
*/
public function getSubject()
{
return $this->subject;
}
/**
* Set Subject
*
* @param string $value
* @return self
*/
public function setSubject($value = '')
{
$this->subject = $this->setValue($value, '');
return $this;
}
/**
* Get Keywords
*
* @return string
*/
public function getKeywords()
{
return $this->keywords;
}
/**
* Set Keywords
*
* @param string $value
* @return self
*/
public function setKeywords($value = '')
{
$this->keywords = $this->setValue($value, '');
return $this;
}
/**
* Get Category
*
* @return string
*/
public function getCategory()
{
return $this->category;
}
/**
* Set Category
*
* @param string $value
* @return self
*/
public function setCategory($value = '')
{
$this->category = $this->setValue($value, '');
return $this;
}
/**
* Get Company
*
* @return string
*/
public function getCompany()
{
return $this->company;
}
/**
* Set Company
*
* @param string $value
* @return self
*/
public function setCompany($value = '')
{
$this->company = $this->setValue($value, '');
return $this;
}
/**
* Get Manager
*
* @return string
*/
public function getManager()
{
return $this->manager;
}
/**
* Set Manager
*
* @param string $value
* @return self
*/
public function setManager($value = '')
{
$this->manager = $this->setValue($value, '');
return $this;
}
/**
* Get a List of Custom Property Names
*
* @return array of string
*/
public function getCustomProperties()
{
return array_keys($this->customProperties);
}
/**
* Check if a Custom Property is defined
*
* @param string $propertyName
* @return boolean
*/
public function isCustomPropertySet($propertyName)
{
return isset($this->customProperties[$propertyName]);
}
/**
* Get a Custom Property Value
*
* @param string $propertyName
* @return string
*/
public function getCustomPropertyValue($propertyName)
{
if ($this->isCustomPropertySet($propertyName)) {
return $this->customProperties[$propertyName]['value'];
} else {
return null;
}
}
/**
* Get a Custom Property Type
*
* @param string $propertyName
* @return string
*/
public function getCustomPropertyType($propertyName)
{
if ($this->isCustomPropertySet($propertyName)) {
return $this->customProperties[$propertyName]['type'];
} else {
return null;
}
}
/**
* Set a Custom Property
*
* @param string $propertyName
* @param mixed $propertyValue
* @param string $propertyType
* 'i': Integer
* 'f': Floating Point
* 's': String
* 'd': Date/Time
* 'b': Boolean
* @return self
*/
public function setCustomProperty($propertyName, $propertyValue = '', $propertyType = null)
{
$propertyTypes = array(
self::PROPERTY_TYPE_INTEGER,
self::PROPERTY_TYPE_FLOAT,
self::PROPERTY_TYPE_STRING,
self::PROPERTY_TYPE_DATE,
self::PROPERTY_TYPE_BOOLEAN
);
if (($propertyType === null) || (!in_array($propertyType, $propertyTypes))) {
if ($propertyValue === null) {
$propertyType = self::PROPERTY_TYPE_STRING;
} elseif (is_float($propertyValue)) {
$propertyType = self::PROPERTY_TYPE_FLOAT;
} elseif (is_int($propertyValue)) {
$propertyType = self::PROPERTY_TYPE_INTEGER;
} elseif (is_bool($propertyValue)) {
$propertyType = self::PROPERTY_TYPE_BOOLEAN;
} else {
$propertyType = self::PROPERTY_TYPE_STRING;
}
}
$this->customProperties[$propertyName] = array(
'value' => $propertyValue,
'type' => $propertyType
);
return $this;
}
/**
* Convert document property based on type
*
* @param string $propertyValue
* @param string $propertyType
* @return mixed
*/
public static function convertProperty($propertyValue, $propertyType)
{
switch ($propertyType) {
case 'empty': // Empty
return '';
case 'null': // Null
return null;
case 'i1': // 1-Byte Signed Integer
case 'i2': // 2-Byte Signed Integer
case 'i4': // 4-Byte Signed Integer
case 'i8': // 8-Byte Signed Integer
case 'int': // Integer
return (int) $propertyValue;
case 'ui1': // 1-Byte Unsigned Integer
case 'ui2': // 2-Byte Unsigned Integer
case 'ui4': // 4-Byte Unsigned Integer
case 'ui8': // 8-Byte Unsigned Integer
case 'uint': // Unsigned Integer
return abs((int) $propertyValue);
case 'r4': // 4-Byte Real Number
case 'r8': // 8-Byte Real Number
case 'decimal': // Decimal
return (float) $propertyValue;
case 'date': // Date and Time
case 'filetime': // File Time
return strtotime($propertyValue);
case 'bool': // Boolean
return ($propertyValue == 'true') ? true : false;
case 'lpstr': // LPSTR
case 'lpwstr': // LPWSTR
case 'bstr': // Basic String
case 'cy': // Currency
case 'error': // Error Status Code
case 'vector': // Vector
case 'array': // Array
case 'blob': // Binary Blob
case 'oblob': // Binary Blob Object
case 'stream': // Binary Stream
case 'ostream': // Binary Stream Object
case 'storage': // Binary Storage
case 'ostorage': // Binary Storage Object
case 'vstream': // Binary Versioned Stream
case 'clsid': // Class ID
case 'cf': // Clipboard Data
return $propertyValue;
}
return $propertyValue;
}
/**
* Convert document property type
*
* @param string $propertyType
* @return string
*/
public static function convertPropertyType($propertyType)
{
$typeGroups = array(
self::PROPERTY_TYPE_INTEGER => array('i1', 'i2', 'i4', 'i8', 'int', 'ui1', 'ui2', 'ui4', 'ui8', 'uint'),
self::PROPERTY_TYPE_FLOAT => array('r4', 'r8', 'decimal'),
self::PROPERTY_TYPE_STRING => array('empty', 'null', 'lpstr', 'lpwstr', 'bstr'),
self::PROPERTY_TYPE_DATE => array('date', 'filetime'),
self::PROPERTY_TYPE_BOOLEAN => array('bool'),
);
foreach ($typeGroups as $groupId => $groupMembers) {
if (in_array($propertyType, $groupMembers)) {
return $groupId;
}
}
return self::PROPERTY_TYPE_UNKNOWN;
}
/**
* Set default for null and empty value
*
* @param mixed $value
* @param mixed $default
* @return mixed
*/
private function setValue($value, $default)
{
if (is_null($value) || $value == '') {
$value = $default;
}
return $value;
}
}