1: <?php
2: /**
3: * PHPExcel
4: *
5: * Copyright (c) 2006 - 2014 PHPExcel
6: *
7: * This library is free software; you can redistribute it and/or
8: * modify it under the terms of the GNU Lesser General Public
9: * License as published by the Free Software Foundation; either
10: * version 2.1 of the License, or (at your option) any later version.
11: *
12: * This library is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this library; if not, write to the Free Software
19: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20: *
21: * @category PHPExcel
22: * @package PHPExcel
23: * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24: * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25: * @version 1.8.0, 2014-03-02
26: */
27:
28:
29: /**
30: * PHPExcel_DocumentProperties
31: *
32: * @category PHPExcel
33: * @package PHPExcel
34: * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
35: */
36: class PHPExcel_DocumentProperties
37: {
38: /** constants */
39: const PROPERTY_TYPE_BOOLEAN = 'b';
40: const PROPERTY_TYPE_INTEGER = 'i';
41: const PROPERTY_TYPE_FLOAT = 'f';
42: const PROPERTY_TYPE_DATE = 'd';
43: const PROPERTY_TYPE_STRING = 's';
44: const PROPERTY_TYPE_UNKNOWN = 'u';
45:
46: /**
47: * Creator
48: *
49: * @var string
50: */
51: private $_creator = 'Unknown Creator';
52:
53: /**
54: * LastModifiedBy
55: *
56: * @var string
57: */
58: private $_lastModifiedBy;
59:
60: /**
61: * Created
62: *
63: * @var datetime
64: */
65: private $_created;
66:
67: /**
68: * Modified
69: *
70: * @var datetime
71: */
72: private $_modified;
73:
74: /**
75: * Title
76: *
77: * @var string
78: */
79: private $_title = 'Untitled Spreadsheet';
80:
81: /**
82: * Description
83: *
84: * @var string
85: */
86: private $_description = '';
87:
88: /**
89: * Subject
90: *
91: * @var string
92: */
93: private $_subject = '';
94:
95: /**
96: * Keywords
97: *
98: * @var string
99: */
100: private $_keywords = '';
101:
102: /**
103: * Category
104: *
105: * @var string
106: */
107: private $_category = '';
108:
109: /**
110: * Manager
111: *
112: * @var string
113: */
114: private $_manager = '';
115:
116: /**
117: * Company
118: *
119: * @var string
120: */
121: private $_company = 'Microsoft Corporation';
122:
123: /**
124: * Custom Properties
125: *
126: * @var string
127: */
128: private $_customProperties = array();
129:
130:
131: /**
132: * Create a new PHPExcel_DocumentProperties
133: */
134: public function __construct()
135: {
136: // Initialise values
137: $this->_lastModifiedBy = $this->_creator;
138: $this->_created = time();
139: $this->_modified = time();
140: }
141:
142: /**
143: * Get Creator
144: *
145: * @return string
146: */
147: public function getCreator() {
148: return $this->_creator;
149: }
150:
151: /**
152: * Set Creator
153: *
154: * @param string $pValue
155: * @return PHPExcel_DocumentProperties
156: */
157: public function setCreator($pValue = '') {
158: $this->_creator = $pValue;
159: return $this;
160: }
161:
162: /**
163: * Get Last Modified By
164: *
165: * @return string
166: */
167: public function getLastModifiedBy() {
168: return $this->_lastModifiedBy;
169: }
170:
171: /**
172: * Set Last Modified By
173: *
174: * @param string $pValue
175: * @return PHPExcel_DocumentProperties
176: */
177: public function setLastModifiedBy($pValue = '') {
178: $this->_lastModifiedBy = $pValue;
179: return $this;
180: }
181:
182: /**
183: * Get Created
184: *
185: * @return datetime
186: */
187: public function getCreated() {
188: return $this->_created;
189: }
190:
191: /**
192: * Set Created
193: *
194: * @param datetime $pValue
195: * @return PHPExcel_DocumentProperties
196: */
197: public function setCreated($pValue = null) {
198: if ($pValue === NULL) {
199: $pValue = time();
200: } elseif (is_string($pValue)) {
201: if (is_numeric($pValue)) {
202: $pValue = intval($pValue);
203: } else {
204: $pValue = strtotime($pValue);
205: }
206: }
207:
208: $this->_created = $pValue;
209: return $this;
210: }
211:
212: /**
213: * Get Modified
214: *
215: * @return datetime
216: */
217: public function getModified() {
218: return $this->_modified;
219: }
220:
221: /**
222: * Set Modified
223: *
224: * @param datetime $pValue
225: * @return PHPExcel_DocumentProperties
226: */
227: public function setModified($pValue = null) {
228: if ($pValue === NULL) {
229: $pValue = time();
230: } elseif (is_string($pValue)) {
231: if (is_numeric($pValue)) {
232: $pValue = intval($pValue);
233: } else {
234: $pValue = strtotime($pValue);
235: }
236: }
237:
238: $this->_modified = $pValue;
239: return $this;
240: }
241:
242: /**
243: * Get Title
244: *
245: * @return string
246: */
247: public function getTitle() {
248: return $this->_title;
249: }
250:
251: /**
252: * Set Title
253: *
254: * @param string $pValue
255: * @return PHPExcel_DocumentProperties
256: */
257: public function setTitle($pValue = '') {
258: $this->_title = $pValue;
259: return $this;
260: }
261:
262: /**
263: * Get Description
264: *
265: * @return string
266: */
267: public function getDescription() {
268: return $this->_description;
269: }
270:
271: /**
272: * Set Description
273: *
274: * @param string $pValue
275: * @return PHPExcel_DocumentProperties
276: */
277: public function setDescription($pValue = '') {
278: $this->_description = $pValue;
279: return $this;
280: }
281:
282: /**
283: * Get Subject
284: *
285: * @return string
286: */
287: public function getSubject() {
288: return $this->_subject;
289: }
290:
291: /**
292: * Set Subject
293: *
294: * @param string $pValue
295: * @return PHPExcel_DocumentProperties
296: */
297: public function setSubject($pValue = '') {
298: $this->_subject = $pValue;
299: return $this;
300: }
301:
302: /**
303: * Get Keywords
304: *
305: * @return string
306: */
307: public function getKeywords() {
308: return $this->_keywords;
309: }
310:
311: /**
312: * Set Keywords
313: *
314: * @param string $pValue
315: * @return PHPExcel_DocumentProperties
316: */
317: public function setKeywords($pValue = '') {
318: $this->_keywords = $pValue;
319: return $this;
320: }
321:
322: /**
323: * Get Category
324: *
325: * @return string
326: */
327: public function getCategory() {
328: return $this->_category;
329: }
330:
331: /**
332: * Set Category
333: *
334: * @param string $pValue
335: * @return PHPExcel_DocumentProperties
336: */
337: public function setCategory($pValue = '') {
338: $this->_category = $pValue;
339: return $this;
340: }
341:
342: /**
343: * Get Company
344: *
345: * @return string
346: */
347: public function getCompany() {
348: return $this->_company;
349: }
350:
351: /**
352: * Set Company
353: *
354: * @param string $pValue
355: * @return PHPExcel_DocumentProperties
356: */
357: public function setCompany($pValue = '') {
358: $this->_company = $pValue;
359: return $this;
360: }
361:
362: /**
363: * Get Manager
364: *
365: * @return string
366: */
367: public function getManager() {
368: return $this->_manager;
369: }
370:
371: /**
372: * Set Manager
373: *
374: * @param string $pValue
375: * @return PHPExcel_DocumentProperties
376: */
377: public function setManager($pValue = '') {
378: $this->_manager = $pValue;
379: return $this;
380: }
381:
382: /**
383: * Get a List of Custom Property Names
384: *
385: * @return array of string
386: */
387: public function getCustomProperties() {
388: return array_keys($this->_customProperties);
389: }
390:
391: /**
392: * Check if a Custom Property is defined
393: *
394: * @param string $propertyName
395: * @return boolean
396: */
397: public function isCustomPropertySet($propertyName) {
398: return isset($this->_customProperties[$propertyName]);
399: }
400:
401: /**
402: * Get a Custom Property Value
403: *
404: * @param string $propertyName
405: * @return string
406: */
407: public function getCustomPropertyValue($propertyName) {
408: if (isset($this->_customProperties[$propertyName])) {
409: return $this->_customProperties[$propertyName]['value'];
410: }
411:
412: }
413:
414: /**
415: * Get a Custom Property Type
416: *
417: * @param string $propertyName
418: * @return string
419: */
420: public function getCustomPropertyType($propertyName) {
421: if (isset($this->_customProperties[$propertyName])) {
422: return $this->_customProperties[$propertyName]['type'];
423: }
424:
425: }
426:
427: /**
428: * Set a Custom Property
429: *
430: * @param string $propertyName
431: * @param mixed $propertyValue
432: * @param string $propertyType
433: * 'i' : Integer
434: * 'f' : Floating Point
435: * 's' : String
436: * 'd' : Date/Time
437: * 'b' : Boolean
438: * @return PHPExcel_DocumentProperties
439: */
440: public function setCustomProperty($propertyName,$propertyValue='',$propertyType=NULL) {
441: if (($propertyType === NULL) || (!in_array($propertyType,array(self::PROPERTY_TYPE_INTEGER,
442: self::PROPERTY_TYPE_FLOAT,
443: self::PROPERTY_TYPE_STRING,
444: self::PROPERTY_TYPE_DATE,
445: self::PROPERTY_TYPE_BOOLEAN)))) {
446: if ($propertyValue === NULL) {
447: $propertyType = self::PROPERTY_TYPE_STRING;
448: } elseif (is_float($propertyValue)) {
449: $propertyType = self::PROPERTY_TYPE_FLOAT;
450: } elseif(is_int($propertyValue)) {
451: $propertyType = self::PROPERTY_TYPE_INTEGER;
452: } elseif (is_bool($propertyValue)) {
453: $propertyType = self::PROPERTY_TYPE_BOOLEAN;
454: } else {
455: $propertyType = self::PROPERTY_TYPE_STRING;
456: }
457: }
458:
459: $this->_customProperties[$propertyName] = array('value' => $propertyValue, 'type' => $propertyType);
460: return $this;
461: }
462:
463: /**
464: * Implement PHP __clone to create a deep clone, not just a shallow copy.
465: */
466: public function __clone() {
467: $vars = get_object_vars($this);
468: foreach ($vars as $key => $value) {
469: if (is_object($value)) {
470: $this->$key = clone $value;
471: } else {
472: $this->$key = $value;
473: }
474: }
475: }
476:
477: public static function convertProperty($propertyValue,$propertyType) {
478: switch ($propertyType) {
479: case 'empty' : // Empty
480: return '';
481: break;
482: case 'null' : // Null
483: return NULL;
484: break;
485: case 'i1' : // 1-Byte Signed Integer
486: case 'i2' : // 2-Byte Signed Integer
487: case 'i4' : // 4-Byte Signed Integer
488: case 'i8' : // 8-Byte Signed Integer
489: case 'int' : // Integer
490: return (int) $propertyValue;
491: break;
492: case 'ui1' : // 1-Byte Unsigned Integer
493: case 'ui2' : // 2-Byte Unsigned Integer
494: case 'ui4' : // 4-Byte Unsigned Integer
495: case 'ui8' : // 8-Byte Unsigned Integer
496: case 'uint' : // Unsigned Integer
497: return abs((int) $propertyValue);
498: break;
499: case 'r4' : // 4-Byte Real Number
500: case 'r8' : // 8-Byte Real Number
501: case 'decimal' : // Decimal
502: return (float) $propertyValue;
503: break;
504: case 'lpstr' : // LPSTR
505: case 'lpwstr' : // LPWSTR
506: case 'bstr' : // Basic String
507: return $propertyValue;
508: break;
509: case 'date' : // Date and Time
510: case 'filetime' : // File Time
511: return strtotime($propertyValue);
512: break;
513: case 'bool' : // Boolean
514: return ($propertyValue == 'true') ? True : False;
515: break;
516: case 'cy' : // Currency
517: case 'error' : // Error Status Code
518: case 'vector' : // Vector
519: case 'array' : // Array
520: case 'blob' : // Binary Blob
521: case 'oblob' : // Binary Blob Object
522: case 'stream' : // Binary Stream
523: case 'ostream' : // Binary Stream Object
524: case 'storage' : // Binary Storage
525: case 'ostorage' : // Binary Storage Object
526: case 'vstream' : // Binary Versioned Stream
527: case 'clsid' : // Class ID
528: case 'cf' : // Clipboard Data
529: return $propertyValue;
530: break;
531: }
532: return $propertyValue;
533: }
534:
535: public static function convertPropertyType($propertyType) {
536: switch ($propertyType) {
537: case 'i1' : // 1-Byte Signed Integer
538: case 'i2' : // 2-Byte Signed Integer
539: case 'i4' : // 4-Byte Signed Integer
540: case 'i8' : // 8-Byte Signed Integer
541: case 'int' : // Integer
542: case 'ui1' : // 1-Byte Unsigned Integer
543: case 'ui2' : // 2-Byte Unsigned Integer
544: case 'ui4' : // 4-Byte Unsigned Integer
545: case 'ui8' : // 8-Byte Unsigned Integer
546: case 'uint' : // Unsigned Integer
547: return self::PROPERTY_TYPE_INTEGER;
548: break;
549: case 'r4' : // 4-Byte Real Number
550: case 'r8' : // 8-Byte Real Number
551: case 'decimal' : // Decimal
552: return self::PROPERTY_TYPE_FLOAT;
553: break;
554: case 'empty' : // Empty
555: case 'null' : // Null
556: case 'lpstr' : // LPSTR
557: case 'lpwstr' : // LPWSTR
558: case 'bstr' : // Basic String
559: return self::PROPERTY_TYPE_STRING;
560: break;
561: case 'date' : // Date and Time
562: case 'filetime' : // File Time
563: return self::PROPERTY_TYPE_DATE;
564: break;
565: case 'bool' : // Boolean
566: return self::PROPERTY_TYPE_BOOLEAN;
567: break;
568: case 'cy' : // Currency
569: case 'error' : // Error Status Code
570: case 'vector' : // Vector
571: case 'array' : // Array
572: case 'blob' : // Binary Blob
573: case 'oblob' : // Binary Blob Object
574: case 'stream' : // Binary Stream
575: case 'ostream' : // Binary Stream Object
576: case 'storage' : // Binary Storage
577: case 'ostorage' : // Binary Storage Object
578: case 'vstream' : // Binary Versioned Stream
579: case 'clsid' : // Class ID
580: case 'cf' : // Clipboard Data
581: return self::PROPERTY_TYPE_UNKNOWN;
582: break;
583: }
584: return self::PROPERTY_TYPE_UNKNOWN;
585: }
586:
587: }
588: