[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 ##VERSION##, ##DATE## 26 */ 27 28 29 /** PHPExcel root directory */ 30 if (!defined('PHPEXCEL_ROOT')) { 31 /** 32 * @ignore 33 */ 34 define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../'); 35 require (PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); 36 } 37 38 /** 39 * PHPExcel_IOFactory 40 * 41 * @category PHPExcel 42 * @package PHPExcel 43 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) 44 */ 45 class PHPExcel_IOFactory 46 { 47 /** 48 * Search locations 49 * 50 * @var array 51 * @access private 52 * @static 53 */ 54 private static $_searchLocations = array( 55 array( 'type' => 'IWriter', 'path' => 'PHPExcel/Writer/{0}.php', 'class' => 'PHPExcel_Writer_{0}' ), 56 array( 'type' => 'IReader', 'path' => 'PHPExcel/Reader/{0}.php', 'class' => 'PHPExcel_Reader_{0}' ) 57 ); 58 59 /** 60 * Autoresolve classes 61 * 62 * @var array 63 * @access private 64 * @static 65 */ 66 private static $_autoResolveClasses = array( 67 'Excel2007', 68 'Excel5', 69 'Excel2003XML', 70 'OOCalc', 71 'SYLK', 72 'Gnumeric', 73 'HTML', 74 'CSV', 75 ); 76 77 /** 78 * Private constructor for PHPExcel_IOFactory 79 */ 80 private function __construct() { } 81 82 /** 83 * Get search locations 84 * 85 * @static 86 * @access public 87 * @return array 88 */ 89 public static function getSearchLocations() { 90 return self::$_searchLocations; 91 } // function getSearchLocations() 92 93 /** 94 * Set search locations 95 * 96 * @static 97 * @access public 98 * @param array $value 99 * @throws PHPExcel_Reader_Exception 100 */ 101 public static function setSearchLocations($value) { 102 if (is_array($value)) { 103 self::$_searchLocations = $value; 104 } else { 105 throw new PHPExcel_Reader_Exception('Invalid parameter passed.'); 106 } 107 } // function setSearchLocations() 108 109 /** 110 * Add search location 111 * 112 * @static 113 * @access public 114 * @param string $type Example: IWriter 115 * @param string $location Example: PHPExcel/Writer/{0}.php 116 * @param string $classname Example: PHPExcel_Writer_{0} 117 */ 118 public static function addSearchLocation($type = '', $location = '', $classname = '') { 119 self::$_searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname ); 120 } // function addSearchLocation() 121 122 /** 123 * Create PHPExcel_Writer_IWriter 124 * 125 * @static 126 * @access public 127 * @param PHPExcel $phpExcel 128 * @param string $writerType Example: Excel2007 129 * @return PHPExcel_Writer_IWriter 130 * @throws PHPExcel_Reader_Exception 131 */ 132 public static function createWriter(PHPExcel $phpExcel, $writerType = '') { 133 // Search type 134 $searchType = 'IWriter'; 135 136 // Include class 137 foreach (self::$_searchLocations as $searchLocation) { 138 if ($searchLocation['type'] == $searchType) { 139 $className = str_replace('{0}', $writerType, $searchLocation['class']); 140 141 $instance = new $className($phpExcel); 142 if ($instance !== NULL) { 143 return $instance; 144 } 145 } 146 } 147 148 // Nothing found... 149 throw new PHPExcel_Reader_Exception("No $searchType found for type $writerType"); 150 } // function createWriter() 151 152 /** 153 * Create PHPExcel_Reader_IReader 154 * 155 * @static 156 * @access public 157 * @param string $readerType Example: Excel2007 158 * @return PHPExcel_Reader_IReader 159 * @throws PHPExcel_Reader_Exception 160 */ 161 public static function createReader($readerType = '') { 162 // Search type 163 $searchType = 'IReader'; 164 165 // Include class 166 foreach (self::$_searchLocations as $searchLocation) { 167 if ($searchLocation['type'] == $searchType) { 168 $className = str_replace('{0}', $readerType, $searchLocation['class']); 169 170 $instance = new $className(); 171 if ($instance !== NULL) { 172 return $instance; 173 } 174 } 175 } 176 177 // Nothing found... 178 throw new PHPExcel_Reader_Exception("No $searchType found for type $readerType"); 179 } // function createReader() 180 181 /** 182 * Loads PHPExcel from file using automatic PHPExcel_Reader_IReader resolution 183 * 184 * @static 185 * @access public 186 * @param string $pFilename The name of the spreadsheet file 187 * @return PHPExcel 188 * @throws PHPExcel_Reader_Exception 189 */ 190 public static function load($pFilename) { 191 $reader = self::createReaderForFile($pFilename); 192 return $reader->load($pFilename); 193 } // function load() 194 195 /** 196 * Identify file type using automatic PHPExcel_Reader_IReader resolution 197 * 198 * @static 199 * @access public 200 * @param string $pFilename The name of the spreadsheet file to identify 201 * @return string 202 * @throws PHPExcel_Reader_Exception 203 */ 204 public static function identify($pFilename) { 205 $reader = self::createReaderForFile($pFilename); 206 $className = get_class($reader); 207 $classType = explode('_',$className); 208 unset($reader); 209 return array_pop($classType); 210 } // function identify() 211 212 /** 213 * Create PHPExcel_Reader_IReader for file using automatic PHPExcel_Reader_IReader resolution 214 * 215 * @static 216 * @access public 217 * @param string $pFilename The name of the spreadsheet file 218 * @return PHPExcel_Reader_IReader 219 * @throws PHPExcel_Reader_Exception 220 */ 221 public static function createReaderForFile($pFilename) { 222 223 // First, lucky guess by inspecting file extension 224 $pathinfo = pathinfo($pFilename); 225 226 $extensionType = NULL; 227 if (isset($pathinfo['extension'])) { 228 switch (strtolower($pathinfo['extension'])) { 229 case 'xlsx': // Excel (OfficeOpenXML) Spreadsheet 230 case 'xlsm': // Excel (OfficeOpenXML) Macro Spreadsheet (macros will be discarded) 231 case 'xltx': // Excel (OfficeOpenXML) Template 232 case 'xltm': // Excel (OfficeOpenXML) Macro Template (macros will be discarded) 233 $extensionType = 'Excel2007'; 234 break; 235 case 'xls': // Excel (BIFF) Spreadsheet 236 case 'xlt': // Excel (BIFF) Template 237 $extensionType = 'Excel5'; 238 break; 239 case 'ods': // Open/Libre Offic Calc 240 case 'ots': // Open/Libre Offic Calc Template 241 $extensionType = 'OOCalc'; 242 break; 243 case 'slk': 244 $extensionType = 'SYLK'; 245 break; 246 case 'xml': // Excel 2003 SpreadSheetML 247 $extensionType = 'Excel2003XML'; 248 break; 249 case 'gnumeric': 250 $extensionType = 'Gnumeric'; 251 break; 252 case 'htm': 253 case 'html': 254 $extensionType = 'HTML'; 255 break; 256 case 'csv': 257 // Do nothing 258 // We must not try to use CSV reader since it loads 259 // all files including Excel files etc. 260 break; 261 default: 262 break; 263 } 264 265 if ($extensionType !== NULL) { 266 $reader = self::createReader($extensionType); 267 // Let's see if we are lucky 268 if (isset($reader) && $reader->canRead($pFilename)) { 269 return $reader; 270 } 271 } 272 } 273 274 // If we reach here then "lucky guess" didn't give any result 275 // Try walking through all the options in self::$_autoResolveClasses 276 foreach (self::$_autoResolveClasses as $autoResolveClass) { 277 // Ignore our original guess, we know that won't work 278 if ($autoResolveClass !== $extensionType) { 279 $reader = self::createReader($autoResolveClass); 280 if ($reader->canRead($pFilename)) { 281 return $reader; 282 } 283 } 284 } 285 286 throw new PHPExcel_Reader_Exception('Unable to identify a reader for this file'); 287 } // function createReaderForFile() 288 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |