You are here

OpenDocument.php in Loft Data Grids 6.2

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/OpenDocument.php
View source
<?php

/**
 * PHPExcel
 *
 * Copyright (c) 2006 - 2014 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_Writer_OpenDocument
 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
 * @version    ##VERSION##, ##DATE##
 */

/**
 * PHPExcel_Writer_OpenDocument
 *
 * @category   PHPExcel
 * @package    PHPExcel_Writer_OpenDocument
 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @author     Alexander Pervakov <frost-nzcr4@jagmort.com>
 * @link       http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os.html
 */
class PHPExcel_Writer_OpenDocument extends PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter {

  /**
   * Private writer parts
   *
   * @var PHPExcel_Writer_OpenDocument_WriterPart[]
   */
  private $_writerParts = array();

  /**
   * Private PHPExcel
   *
   * @var PHPExcel
   */
  private $_spreadSheet;

  /**
   * Create a new PHPExcel_Writer_OpenDocument
   *
   * @param PHPExcel $pPHPExcel
   */
  public function __construct(PHPExcel $pPHPExcel = null) {
    $this
      ->setPHPExcel($pPHPExcel);
    $writerPartsArray = array(
      'content' => 'PHPExcel_Writer_OpenDocument_Content',
      'meta' => 'PHPExcel_Writer_OpenDocument_Meta',
      'meta_inf' => 'PHPExcel_Writer_OpenDocument_MetaInf',
      'mimetype' => 'PHPExcel_Writer_OpenDocument_Mimetype',
      'settings' => 'PHPExcel_Writer_OpenDocument_Settings',
      'styles' => 'PHPExcel_Writer_OpenDocument_Styles',
      'thumbnails' => 'PHPExcel_Writer_OpenDocument_Thumbnails',
    );
    foreach ($writerPartsArray as $writer => $class) {
      $this->_writerParts[$writer] = new $class($this);
    }
  }

  /**
   * Get writer part
   *
   * @param  string  $pPartName  Writer part name
   * @return PHPExcel_Writer_Excel2007_WriterPart
   */
  public function getWriterPart($pPartName = '') {
    if ($pPartName != '' && isset($this->_writerParts[strtolower($pPartName)])) {
      return $this->_writerParts[strtolower($pPartName)];
    }
    else {
      return null;
    }
  }

  /**
   * Save PHPExcel to file
   *
   * @param  string  $pFilename
   * @throws PHPExcel_Writer_Exception
   */
  public function save($pFilename = NULL) {
    if (!$this->_spreadSheet) {
      throw new PHPExcel_Writer_Exception('PHPExcel object unassigned.');
    }

    // garbage collect
    $this->_spreadSheet
      ->garbageCollect();

    // If $pFilename is php://output or php://stdout, make it a temporary file...
    $originalFilename = $pFilename;
    if (strtolower($pFilename) == 'php://output' || strtolower($pFilename) == 'php://stdout') {
      $pFilename = @tempnam(PHPExcel_Shared_File::sys_get_temp_dir(), 'phpxltmp');
      if ($pFilename == '') {
        $pFilename = $originalFilename;
      }
    }
    $objZip = $this
      ->_createZip($pFilename);
    $objZip
      ->addFromString('META-INF/manifest.xml', $this
      ->getWriterPart('meta_inf')
      ->writeManifest());
    $objZip
      ->addFromString('Thumbnails/thumbnail.png', $this
      ->getWriterPart('thumbnails')
      ->writeThumbnail());
    $objZip
      ->addFromString('content.xml', $this
      ->getWriterPart('content')
      ->write());
    $objZip
      ->addFromString('meta.xml', $this
      ->getWriterPart('meta')
      ->write());
    $objZip
      ->addFromString('mimetype', $this
      ->getWriterPart('mimetype')
      ->write());
    $objZip
      ->addFromString('settings.xml', $this
      ->getWriterPart('settings')
      ->write());
    $objZip
      ->addFromString('styles.xml', $this
      ->getWriterPart('styles')
      ->write());

    // Close file
    if ($objZip
      ->close() === false) {
      throw new PHPExcel_Writer_Exception("Could not close zip file {$pFilename}.");
    }

    // If a temporary file was used, copy it to the correct file stream
    if ($originalFilename != $pFilename) {
      if (copy($pFilename, $originalFilename) === false) {
        throw new PHPExcel_Writer_Exception("Could not copy temporary zip file {$pFilename} to {$originalFilename}.");
      }
      @unlink($pFilename);
    }
  }

  /**
   * Create zip object
   *
   * @param string $pFilename
   * @throws PHPExcel_Writer_Exception
   * @return ZipArchive
   */
  private function _createZip($pFilename) {

    // Create new ZIP file and open it for writing
    $zipClass = PHPExcel_Settings::getZipClass();
    $objZip = new $zipClass();

    // Retrieve OVERWRITE and CREATE constants from the instantiated zip class
    // This method of accessing constant values from a dynamic class should work with all appropriate versions of PHP
    $ro = new ReflectionObject($objZip);
    $zipOverWrite = $ro
      ->getConstant('OVERWRITE');
    $zipCreate = $ro
      ->getConstant('CREATE');
    if (file_exists($pFilename)) {
      unlink($pFilename);
    }

    // Try opening the ZIP file
    if ($objZip
      ->open($pFilename, $zipOverWrite) !== true) {
      if ($objZip
        ->open($pFilename, $zipCreate) !== true) {
        throw new PHPExcel_Writer_Exception("Could not open {$pFilename} for writing.");
      }
    }
    return $objZip;
  }

  /**
   * Get PHPExcel object
   *
   * @return PHPExcel
   * @throws PHPExcel_Writer_Exception
   */
  public function getPHPExcel() {
    if ($this->_spreadSheet !== null) {
      return $this->_spreadSheet;
    }
    else {
      throw new PHPExcel_Writer_Exception('No PHPExcel assigned.');
    }
  }

  /**
   * Set PHPExcel object
   *
   * @param  PHPExcel  $pPHPExcel  PHPExcel object
   * @throws PHPExcel_Writer_Exception
   * @return PHPExcel_Writer_Excel2007
   */
  public function setPHPExcel(PHPExcel $pPHPExcel = null) {
    $this->_spreadSheet = $pPHPExcel;
    return $this;
  }

}

Classes

Namesort descending Description
PHPExcel_Writer_OpenDocument PHPExcel_Writer_OpenDocument