[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/phpexcel/PHPExcel/ -> IOFactory.php (source)

   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  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1