Subversion Repositories eFlore/Applications.cel

Rev

Blame | Last modification | View Log | RSS feed

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


/**
 * PHPExcel_Chart_DataSeriesValues
 *
 * @category    PHPExcel
 * @package             PHPExcel_Chart
 * @copyright   Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
 */
class PHPExcel_Chart_DataSeriesValues
{

        const DATASERIES_TYPE_STRING    = 'String';
        const DATASERIES_TYPE_NUMBER    = 'Number';

        private static $_dataTypeValues = array(
                self::DATASERIES_TYPE_STRING,
                self::DATASERIES_TYPE_NUMBER,
        );

        /**
         * Series Data Type
         *
         * @var string
         */
        private $_dataType = null;

        /**
         * Series Data Source
         *
         * @var string
         */
        private $_dataSource = null;

        /**
         * Format Code
         *
         * @var string
         */
        private $_formatCode = null;

        /**
         * Series Point Marker
         *
         * @var string
         */
        private $_marker = null;

        /**
         * Point Count (The number of datapoints in the dataseries)
         *
         * @var integer
         */
        private $_pointCount = 0;

        /**
         * Data Values
         *
         * @var array of mixed
         */
        private $_dataValues = array();

        /**
         * Create a new PHPExcel_Chart_DataSeriesValues object
         */
        public function __construct($dataType = self::DATASERIES_TYPE_NUMBER, $dataSource = null, $formatCode = null, $pointCount = 0, $dataValues = array(), $marker = null)
        {
                $this->setDataType($dataType);
                $this->_dataSource = $dataSource;
                $this->_formatCode = $formatCode;
                $this->_pointCount = $pointCount;
                $this->_dataValues = $dataValues;
                $this->_marker = $marker;
        }

        /**
         * Get Series Data Type
         *
         * @return      string
         */
        public function getDataType() {
                return $this->_dataType;
        }

        /**
         * Set Series Data Type
         *
         * @param       string  $dataType       Datatype of this data series
         *                                                              Typical values are:
         *                                                                      PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_STRING
         *                                                                              Normally used for axis point values
         *                                                                      PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_NUMBER
         *                                                                              Normally used for chart data values
         * @return      PHPExcel_Chart_DataSeriesValues
         */
        public function setDataType($dataType = self::DATASERIES_TYPE_NUMBER) {
                if (!in_array($dataType, self::$_dataTypeValues)) {
                throw new PHPExcel_Chart_Exception('Invalid datatype for chart data series values');
                }
                $this->_dataType = $dataType;

                return $this;
        }

        /**
         * Get Series Data Source (formula)
         *
         * @return      string
         */
        public function getDataSource() {
                return $this->_dataSource;
        }

        /**
         * Set Series Data Source (formula)
         *
         * @param       string  $dataSource
         * @return      PHPExcel_Chart_DataSeriesValues
         */
        public function setDataSource($dataSource = null, $refreshDataValues = true) {
                $this->_dataSource = $dataSource;

                if ($refreshDataValues) {
                        //      TO DO
                }

                return $this;
        }

        /**
         * Get Point Marker
         *
         * @return string
         */
        public function getPointMarker() {
                return $this->_marker;
        }

        /**
         * Set Point Marker
         *
         * @param       string  $marker
         * @return      PHPExcel_Chart_DataSeriesValues
         */
        public function setPointMarker($marker = null) {
                $this->_marker = $marker;

                return $this;
        }

        /**
         * Get Series Format Code
         *
         * @return      string
         */
        public function getFormatCode() {
                return $this->_formatCode;
        }

        /**
         * Set Series Format Code
         *
         * @param       string  $formatCode
         * @return      PHPExcel_Chart_DataSeriesValues
         */
        public function setFormatCode($formatCode = null) {
                $this->_formatCode = $formatCode;

                return $this;
        }

        /**
         * Get Series Point Count
         *
         * @return      integer
         */
        public function getPointCount() {
                return $this->_pointCount;
        }

        /**
         * Identify if the Data Series is a multi-level or a simple series
         *
         * @return      boolean
         */
        public function isMultiLevelSeries() {
                if (count($this->_dataValues) > 0) {
                        return is_array($this->_dataValues[0]);
                }
                return null;
        }

        /**
         * Return the level count of a multi-level Data Series
         *
         * @return      boolean
         */
        public function multiLevelCount() {
                $levelCount = 0;
                foreach($this->_dataValues as $dataValueSet) {
                        $levelCount = max($levelCount,count($dataValueSet));
                }
                return $levelCount;
        }

        /**
         * Get Series Data Values
         *
         * @return      array of mixed
         */
        public function getDataValues() {
                return $this->_dataValues;
        }

        /**
         * Get the first Series Data value
         *
         * @return      mixed
         */
        public function getDataValue() {
                $count = count($this->_dataValues);
                if ($count == 0) {
                        return null;
                } elseif ($count == 1) {
                        return $this->_dataValues[0];
                }
                return $this->_dataValues;
        }

        /**
         * Set Series Data Values
         *
         * @param       array   $dataValues
         * @param       boolean $refreshDataSource
         *                                      TRUE - refresh the value of _dataSource based on the values of $dataValues
         *                                      FALSE - don't change the value of _dataSource
         * @return      PHPExcel_Chart_DataSeriesValues
         */
        public function setDataValues($dataValues = array(), $refreshDataSource = TRUE) {
                $this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($dataValues);
                $this->_pointCount = count($dataValues);

                if ($refreshDataSource) {
                        //      TO DO
                }

                return $this;
        }

        private function _stripNulls($var) {
                return $var !== NULL;
        }

        public function refresh(PHPExcel_Worksheet $worksheet, $flatten = TRUE) {
        if ($this->_dataSource !== NULL) {
                $calcEngine = PHPExcel_Calculation::getInstance($worksheet->getParent());
                        $newDataValues = PHPExcel_Calculation::_unwrapResult(
                            $calcEngine->_calculateFormulaValue(
                                '='.$this->_dataSource,
                                NULL,
                                $worksheet->getCell('A1')
                            )
                        );
                        if ($flatten) {
                                $this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues);
                                foreach($this->_dataValues as &$dataValue) {
                                        if ((!empty($dataValue)) && ($dataValue[0] == '#')) {
                                                $dataValue = 0.0;
                                        }
                                }
                                unset($dataValue);
                        } else {
                                $cellRange = explode('!',$this->_dataSource);
                                if (count($cellRange) > 1) {
                                        list(,$cellRange) = $cellRange;
                                }

                                $dimensions = PHPExcel_Cell::rangeDimension(str_replace('$','',$cellRange));
                                if (($dimensions[0] == 1) || ($dimensions[1] == 1)) {
                                        $this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues);
                                } else {
                                        $newArray = array_values(array_shift($newDataValues));
                                        foreach($newArray as $i => $newDataSet) {
                                                $newArray[$i] = array($newDataSet);
                                        }

                                        foreach($newDataValues as $newDataSet) {
                                                $i = 0;
                                                foreach($newDataSet as $newDataVal) {
                                                        array_unshift($newArray[$i++],$newDataVal);
                                                }
                                        }
                                        $this->_dataValues = $newArray;
                                }
                        }
                        $this->_pointCount = count($this->_dataValues);
                }

        }

}