<?php

/** PHPExcel root directory */
if (! defined ( 'PHPEXCEL_ROOT' ))
{
  /**
   *
   * @ignore
   *
   */
  define ( 'PHPEXCEL_ROOT', dirname ( __FILE__ ) . '/../' );
  require (PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}

/**
 * PHPExcel_Settings
 *
 * Copyright (c) 2006 - 2015 PHPExcel
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *
 * @category PHPExcel
 * @package PHPExcel_Settings
 * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
 * @version ##VERSION##, ##DATE##
 */
class PHPExcel_Settings
{
  /**
   * constants
   */
  /**
   * Available Zip library classes
   */
  const PCLZIP = 'PHPExcel_Shared_ZipArchive';
  const ZIPARCHIVE = 'ZipArchive';
  
  /**
   * Optional Chart Rendering libraries
   */
  const CHART_RENDERER_JPGRAPH = 'jpgraph';
  
  /**
   * Optional PDF Rendering libraries
   */
  const PDF_RENDERER_TCPDF = 'tcPDF';
  const PDF_RENDERER_DOMPDF = 'DomPDF';
  const PDF_RENDERER_MPDF = 'mPDF';
  private static $chartRenderers = array (
      self::CHART_RENDERER_JPGRAPH 
  );
  private static $pdfRenderers = array (
      self::PDF_RENDERER_TCPDF,
      self::PDF_RENDERER_DOMPDF,
      self::PDF_RENDERER_MPDF 
  );
  
  /**
   * Name of the class used for Zip file management
   * e.g.
   * ZipArchive
   *
   * @var string
   */
  private static $zipClass = self::ZIPARCHIVE;
  
  /**
   * Name of the external Library used for rendering charts
   * e.g.
   * jpgraph
   *
   * @var string
   */
  private static $chartRendererName;
  
  /**
   * Directory Path to the external Library used for rendering charts
   *
   * @var string
   */
  private static $chartRendererPath;
  
  /**
   * Name of the external Library used for rendering PDF files
   * e.g.
   * mPDF
   *
   * @var string
   */
  private static $pdfRendererName;
  
  /**
   * Directory Path to the external Library used for rendering PDF files
   *
   * @var string
   */
  private static $pdfRendererPath;
  
  /**
   * Default options for libxml loader
   *
   * @var int
   */
  private static $libXmlLoaderOptions = null;
  
  /**
   * Set the Zip handler Class that PHPExcel should use for Zip file management (PCLZip or ZipArchive)
   *
   * @param string $zipClass
   *          The Zip handler class that PHPExcel should use for Zip file management
   *          e.g. PHPExcel_Settings::PCLZip or PHPExcel_Settings::ZipArchive
   * @return boolean Success or failure
   */
  public static function setZipClass($zipClass)
  {
    if (($zipClass === self::PCLZIP) || ($zipClass === self::ZIPARCHIVE))
    {
      self::$zipClass = $zipClass;
      return true;
    }
    return false;
  }
  
  /**
   * Return the name of the Zip handler Class that PHPExcel is configured to use (PCLZip or ZipArchive)
   * or Zip file management
   *
   * @return string Name of the Zip handler Class that PHPExcel is configured to use
   *         for Zip file management
   *         e.g. PHPExcel_Settings::PCLZip or PHPExcel_Settings::ZipArchive
   */
  public static function getZipClass()
  {
    return self::$zipClass;
  }
  
  /**
   * Return the name of the method that is currently configured for cell cacheing
   *
   * @return string Name of the cacheing method
   */
  public static function getCacheStorageMethod()
  {
    return PHPExcel_CachedObjectStorageFactory::getCacheStorageMethod ();
  }
  
  /**
   * Return the name of the class that is currently being used for cell cacheing
   *
   * @return string Name of the class currently being used for cacheing
   */
  public static function getCacheStorageClass()
  {
    return PHPExcel_CachedObjectStorageFactory::getCacheStorageClass ();
  }
  
  /**
   * Set the method that should be used for cell cacheing
   *
   * @param string $method
   *          Name of the cacheing method
   * @param array $arguments
   *          Optional configuration arguments for the cacheing method
   * @return boolean Success or failure
   */
  public static function setCacheStorageMethod($method = PHPExcel_CachedObjectStorageFactory::cache_in_memory, $arguments = array())
  {
    return PHPExcel_CachedObjectStorageFactory::initialize ( $method, $arguments );
  }
  
  /**
   * Set the locale code to use for formula translations and any special formatting
   *
   * @param string $locale
   *          The locale code to use (e.g. "fr" or "pt_br" or "en_uk")
   * @return boolean Success or failure
   */
  public static function setLocale($locale = 'en_us')
  {
    return PHPExcel_Calculation::getInstance ()->setLocale ( $locale );
  }
  
  /**
   * Set details of the external library that PHPExcel should use for rendering charts
   *
   * @param string $libraryName
   *          Internal reference name of the library
   *          e.g. PHPExcel_Settings::CHART_RENDERER_JPGRAPH
   * @param string $libraryBaseDir
   *          Directory path to the library's base folder
   *          
   * @return boolean Success or failure
   */
  public static function setChartRenderer($libraryName, $libraryBaseDir)
  {
    if (! self::setChartRendererName ( $libraryName ))
    {
      return false;
    }
    return self::setChartRendererPath ( $libraryBaseDir );
  }
  
  /**
   * Identify to PHPExcel the external library to use for rendering charts
   *
   * @param string $libraryName
   *          Internal reference name of the library
   *          e.g. PHPExcel_Settings::CHART_RENDERER_JPGRAPH
   *          
   * @return boolean Success or failure
   */
  public static function setChartRendererName($libraryName)
  {
    if (! in_array ( $libraryName, self::$chartRenderers ))
    {
      return false;
    }
    self::$chartRendererName = $libraryName;
    
    return true;
  }
  
  /**
   * Tell PHPExcel where to find the external library to use for rendering charts
   *
   * @param string $libraryBaseDir
   *          Directory path to the library's base folder
   * @return boolean Success or failure
   */
  public static function setChartRendererPath($libraryBaseDir)
  {
    if ((file_exists ( $libraryBaseDir ) === false) || (is_readable ( $libraryBaseDir ) === false))
    {
      return false;
    }
    self::$chartRendererPath = $libraryBaseDir;
    
    return true;
  }
  
  /**
   * Return the Chart Rendering Library that PHPExcel is currently configured to use (e.g.
   * jpgraph)
   *
   * @return string|NULL Internal reference name of the Chart Rendering Library that PHPExcel is
   *         currently configured to use
   *         e.g. PHPExcel_Settings::CHART_RENDERER_JPGRAPH
   */
  public static function getChartRendererName()
  {
    return self::$chartRendererName;
  }
  
  /**
   * Return the directory path to the Chart Rendering Library that PHPExcel is currently configured to use
   *
   * @return string|NULL Directory Path to the Chart Rendering Library that PHPExcel is
   *         currently configured to use
   */
  public static function getChartRendererPath()
  {
    return self::$chartRendererPath;
  }
  
  /**
   * Set details of the external library that PHPExcel should use for rendering PDF files
   *
   * @param string $libraryName
   *          Internal reference name of the library
   *          e.g. PHPExcel_Settings::PDF_RENDERER_TCPDF,
   *          PHPExcel_Settings::PDF_RENDERER_DOMPDF
   *          or PHPExcel_Settings::PDF_RENDERER_MPDF
   * @param string $libraryBaseDir
   *          Directory path to the library's base folder
   *          
   * @return boolean Success or failure
   */
  public static function setPdfRenderer($libraryName, $libraryBaseDir)
  {
    if (! self::setPdfRendererName ( $libraryName ))
    {
      return false;
    }
    return self::setPdfRendererPath ( $libraryBaseDir );
  }
  
  /**
   * Identify to PHPExcel the external library to use for rendering PDF files
   *
   * @param string $libraryName
   *          Internal reference name of the library
   *          e.g. PHPExcel_Settings::PDF_RENDERER_TCPDF,
   *          PHPExcel_Settings::PDF_RENDERER_DOMPDF
   *          or PHPExcel_Settings::PDF_RENDERER_MPDF
   *          
   * @return boolean Success or failure
   */
  public static function setPdfRendererName($libraryName)
  {
    if (! in_array ( $libraryName, self::$pdfRenderers ))
    {
      return false;
    }
    self::$pdfRendererName = $libraryName;
    
    return true;
  }
  
  /**
   * Tell PHPExcel where to find the external library to use for rendering PDF files
   *
   * @param string $libraryBaseDir
   *          Directory path to the library's base folder
   * @return boolean Success or failure
   */
  public static function setPdfRendererPath($libraryBaseDir)
  {
    if ((file_exists ( $libraryBaseDir ) === false) || (is_readable ( $libraryBaseDir ) === false))
    {
      return false;
    }
    self::$pdfRendererPath = $libraryBaseDir;
    
    return true;
  }
  
  /**
   * Return the PDF Rendering Library that PHPExcel is currently configured to use (e.g.
   * dompdf)
   *
   * @return string|NULL Internal reference name of the PDF Rendering Library that PHPExcel is
   *         currently configured to use
   *         e.g. PHPExcel_Settings::PDF_RENDERER_TCPDF,
   *         PHPExcel_Settings::PDF_RENDERER_DOMPDF
   *         or PHPExcel_Settings::PDF_RENDERER_MPDF
   */
  public static function getPdfRendererName()
  {
    return self::$pdfRendererName;
  }
  
  /**
   * Return the directory path to the PDF Rendering Library that PHPExcel is currently configured to use
   *
   * @return string|NULL Directory Path to the PDF Rendering Library that PHPExcel is
   *         currently configured to use
   */
  public static function getPdfRendererPath()
  {
    return self::$pdfRendererPath;
  }
  
  /**
   * Set default options for libxml loader
   *
   * @param int $options
   *          Default options for libxml loader
   */
  public static function setLibXmlLoaderOptions($options = null)
  {
    if (is_null ( $options ) && defined ( LIBXML_DTDLOAD ))
    {
      $options = LIBXML_DTDLOAD | LIBXML_DTDATTR;
    }
    if (version_compare ( PHP_VERSION, '5.2.11' ) >= 0)
    {
      @libxml_disable_entity_loader ( $options == (LIBXML_DTDLOAD | LIBXML_DTDATTR) );
    }
    self::$libXmlLoaderOptions = $options;
  }
  
  /**
   * Get default options for libxml loader.
   * Defaults to LIBXML_DTDLOAD | LIBXML_DTDATTR when not set explicitly.
   *
   * @return int Default options for libxml loader
   */
  public static function getLibXmlLoaderOptions()
  {
    if (is_null ( self::$libXmlLoaderOptions ) && defined ( LIBXML_DTDLOAD ))
    {
      self::setLibXmlLoaderOptions ( LIBXML_DTDLOAD | LIBXML_DTDATTR );
    }
    if (version_compare ( PHP_VERSION, '5.2.11' ) >= 0)
    {
      @libxml_disable_entity_loader ( self::$libXmlLoaderOptions == (LIBXML_DTDLOAD | LIBXML_DTDATTR) );
    }
    return self::$libXmlLoaderOptions;
  }
}
