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 bool */ public function isCustomPropertySet($propertyName) { return isset($this->customProperties[$propertyName]); } /** * Get a Custom Property Value * * @param string $propertyName * @return mixed */ public function getCustomPropertyValue($propertyName) { if ($this->isCustomPropertySet($propertyName)) { return $this->customProperties[$propertyName]['value']; } 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']; } 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; } elseif ($propertyValue instanceof \DateTime) { $propertyType = self::PROPERTY_TYPE_DATE; } 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) { $conversion = self::getConversion($propertyType); switch ($conversion) { case 'empty': // Empty return ''; case 'null': // Null return null; case 'int': // Signed integer return (int) $propertyValue; case 'uint': // Unsigned integer return abs((int) $propertyValue); case 'float': // Float return (float) $propertyValue; case 'date': // Date return strtotime($propertyValue); case 'bool': // Boolean return $propertyValue == 'true'; } 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 ($value === null || $value == '') { $value = $default; } return $value; } /** * Get conversion model depending on property type * * @param string $propertyType * @return string */ private static function getConversion($propertyType) { $conversions = array( 'empty' => array('empty'), 'null' => array('null'), 'int' => array('i1', 'i2', 'i4', 'i8', 'int'), 'uint' => array('ui1', 'ui2', 'ui4', 'ui8', 'uint'), 'float' => array('r4', 'r8', 'decimal'), 'bool' => array('bool'), 'date' => array('date', 'filetime'), ); foreach ($conversions as $conversion => $types) { if (in_array($propertyType, $types)) { return $conversion; } } return 'string'; } }