1: <?php
2: /**
3: * PHPWord
4: *
5: * Copyright (c) 2013 PHPWord
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 PHPWord
22: * @package PHPWord
23: * @copyright Copyright (c) 2013 PHPWord
24: * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25: * @version 0.7.0
26: */
27:
28: /**
29: * Class PHPWord_IOFactory
30: */
31: class PHPWord_IOFactory
32: {
33:
34: /**
35: * Search locations
36: *
37: * @var array
38: */
39: private static $_searchLocations = array(
40: array('type' => 'IWriter', 'path' => 'PHPWord/Writer/{0}.php', 'class' => 'PHPWord_Writer_{0}')
41: );
42:
43: /**
44: * Autoresolve classes
45: *
46: * @var array
47: */
48: private static $_autoResolveClasses = array(
49: 'Serialized'
50: );
51:
52: /**
53: * Private constructor for PHPWord_IOFactory
54: */
55: private function __construct()
56: {
57: }
58:
59: /**
60: * Get search locations
61: *
62: * @return array
63: */
64: public static function getSearchLocations()
65: {
66: return self::$_searchLocations;
67: }
68:
69: /**
70: * Set search locations
71: *
72: * @param array $value
73: * @throws Exception
74: */
75: public static function setSearchLocations($value)
76: {
77: if (is_array($value)) {
78: self::$_searchLocations = $value;
79: } else {
80: throw new Exception('Invalid parameter passed.');
81: }
82: }
83:
84: /**
85: * Add search location
86: *
87: * @param string $type Example: IWriter
88: * @param string $location Example: PHPWord/Writer/{0}.php
89: * @param string $classname Example: PHPWord_Writer_{0}
90: */
91: public static function addSearchLocation($type = '', $location = '', $classname = '')
92: {
93: self::$_searchLocations[] = array('type' => $type, 'path' => $location, 'class' => $classname);
94: }
95:
96: /**
97: * Create PHPWord_Writer_IWriter
98: *
99: * @param PHPWord $PHPWord
100: * @param string $writerType Example: Word2007
101: * @return PHPWord_Writer_IWriter
102: */
103: public static function createWriter(PHPWord $PHPWord, $writerType = '')
104: {
105: $searchType = 'IWriter';
106:
107: foreach (self::$_searchLocations as $searchLocation) {
108: if ($searchLocation['type'] == $searchType) {
109: $className = str_replace('{0}', $writerType, $searchLocation['class']);
110: $classFile = str_replace('{0}', $writerType, $searchLocation['path']);
111:
112: $instance = new $className($PHPWord);
113: if (!is_null($instance)) {
114: return $instance;
115: }
116: }
117: }
118:
119: throw new Exception("No $searchType found for type $writerType");
120: }
121: }
122: