<?php

/**
 * PHPExcel_Cell_DataValidation
 *
 * 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_Cell
 * @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_Cell_DataValidation
{
  /* Data validation types */
  const TYPE_NONE = 'none';
  const TYPE_CUSTOM = 'custom';
  const TYPE_DATE = 'date';
  const TYPE_DECIMAL = 'decimal';
  const TYPE_LIST = 'list';
  const TYPE_TEXTLENGTH = 'textLength';
  const TYPE_TIME = 'time';
  const TYPE_WHOLE = 'whole';
  
  /* Data validation error styles */
  const STYLE_STOP = 'stop';
  const STYLE_WARNING = 'warning';
  const STYLE_INFORMATION = 'information';
  
  /* Data validation operators */
  const OPERATOR_BETWEEN = 'between';
  const OPERATOR_EQUAL = 'equal';
  const OPERATOR_GREATERTHAN = 'greaterThan';
  const OPERATOR_GREATERTHANOREQUAL = 'greaterThanOrEqual';
  const OPERATOR_LESSTHAN = 'lessThan';
  const OPERATOR_LESSTHANOREQUAL = 'lessThanOrEqual';
  const OPERATOR_NOTBETWEEN = 'notBetween';
  const OPERATOR_NOTEQUAL = 'notEqual';
  
  /**
   * Formula 1
   *
   * @var string
   */
  private $formula1;
  
  /**
   * Formula 2
   *
   * @var string
   */
  private $formula2;
  
  /**
   * Type
   *
   * @var string
   */
  private $type = PHPExcel_Cell_DataValidation::TYPE_NONE;
  
  /**
   * Error style
   *
   * @var string
   */
  private $errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP;
  
  /**
   * Operator
   *
   * @var string
   */
  private $operator;
  
  /**
   * Allow Blank
   *
   * @var boolean
   */
  private $allowBlank;
  
  /**
   * Show DropDown
   *
   * @var boolean
   */
  private $showDropDown;
  
  /**
   * Show InputMessage
   *
   * @var boolean
   */
  private $showInputMessage;
  
  /**
   * Show ErrorMessage
   *
   * @var boolean
   */
  private $showErrorMessage;
  
  /**
   * Error title
   *
   * @var string
   */
  private $errorTitle;
  
  /**
   * Error
   *
   * @var string
   */
  private $error;
  
  /**
   * Prompt title
   *
   * @var string
   */
  private $promptTitle;
  
  /**
   * Prompt
   *
   * @var string
   */
  private $prompt;
  
  /**
   * Create a new PHPExcel_Cell_DataValidation
   */
  public function __construct()
  {
    // Initialise member variables
    $this->formula1 = '';
    $this->formula2 = '';
    $this->type = PHPExcel_Cell_DataValidation::TYPE_NONE;
    $this->errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP;
    $this->operator = '';
    $this->allowBlank = false;
    $this->showDropDown = false;
    $this->showInputMessage = false;
    $this->showErrorMessage = false;
    $this->errorTitle = '';
    $this->error = '';
    $this->promptTitle = '';
    $this->prompt = '';
  }
  
  /**
   * Get Formula 1
   *
   * @return string
   */
  public function getFormula1()
  {
    return $this->formula1;
  }
  
  /**
   * Set Formula 1
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setFormula1($value = '')
  {
    $this->formula1 = $value;
    return $this;
  }
  
  /**
   * Get Formula 2
   *
   * @return string
   */
  public function getFormula2()
  {
    return $this->formula2;
  }
  
  /**
   * Set Formula 2
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setFormula2($value = '')
  {
    $this->formula2 = $value;
    return $this;
  }
  
  /**
   * Get Type
   *
   * @return string
   */
  public function getType()
  {
    return $this->type;
  }
  
  /**
   * Set Type
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setType($value = PHPExcel_Cell_DataValidation::TYPE_NONE)
  {
    $this->type = $value;
    return $this;
  }
  
  /**
   * Get Error style
   *
   * @return string
   */
  public function getErrorStyle()
  {
    return $this->errorStyle;
  }
  
  /**
   * Set Error style
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setErrorStyle($value = PHPExcel_Cell_DataValidation::STYLE_STOP)
  {
    $this->errorStyle = $value;
    return $this;
  }
  
  /**
   * Get Operator
   *
   * @return string
   */
  public function getOperator()
  {
    return $this->operator;
  }
  
  /**
   * Set Operator
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setOperator($value = '')
  {
    $this->operator = $value;
    return $this;
  }
  
  /**
   * Get Allow Blank
   *
   * @return boolean
   */
  public function getAllowBlank()
  {
    return $this->allowBlank;
  }
  
  /**
   * Set Allow Blank
   *
   * @param boolean $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setAllowBlank($value = false)
  {
    $this->allowBlank = $value;
    return $this;
  }
  
  /**
   * Get Show DropDown
   *
   * @return boolean
   */
  public function getShowDropDown()
  {
    return $this->showDropDown;
  }
  
  /**
   * Set Show DropDown
   *
   * @param boolean $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setShowDropDown($value = false)
  {
    $this->showDropDown = $value;
    return $this;
  }
  
  /**
   * Get Show InputMessage
   *
   * @return boolean
   */
  public function getShowInputMessage()
  {
    return $this->showInputMessage;
  }
  
  /**
   * Set Show InputMessage
   *
   * @param boolean $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setShowInputMessage($value = false)
  {
    $this->showInputMessage = $value;
    return $this;
  }
  
  /**
   * Get Show ErrorMessage
   *
   * @return boolean
   */
  public function getShowErrorMessage()
  {
    return $this->showErrorMessage;
  }
  
  /**
   * Set Show ErrorMessage
   *
   * @param boolean $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setShowErrorMessage($value = false)
  {
    $this->showErrorMessage = $value;
    return $this;
  }
  
  /**
   * Get Error title
   *
   * @return string
   */
  public function getErrorTitle()
  {
    return $this->errorTitle;
  }
  
  /**
   * Set Error title
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setErrorTitle($value = '')
  {
    $this->errorTitle = $value;
    return $this;
  }
  
  /**
   * Get Error
   *
   * @return string
   */
  public function getError()
  {
    return $this->error;
  }
  
  /**
   * Set Error
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setError($value = '')
  {
    $this->error = $value;
    return $this;
  }
  
  /**
   * Get Prompt title
   *
   * @return string
   */
  public function getPromptTitle()
  {
    return $this->promptTitle;
  }
  
  /**
   * Set Prompt title
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setPromptTitle($value = '')
  {
    $this->promptTitle = $value;
    return $this;
  }
  
  /**
   * Get Prompt
   *
   * @return string
   */
  public function getPrompt()
  {
    return $this->prompt;
  }
  
  /**
   * Set Prompt
   *
   * @param string $value          
   * @return PHPExcel_Cell_DataValidation
   */
  public function setPrompt($value = '')
  {
    $this->prompt = $value;
    return $this;
  }
  
  /**
   * Get hash code
   *
   * @return string Hash code
   */
  public function getHashCode()
  {
    return md5 ( $this->formula1 . $this->formula2 . $this->type = PHPExcel_Cell_DataValidation::TYPE_NONE . $this->errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP . $this->operator . ($this->allowBlank ? 't' : 'f') . ($this->showDropDown ? 't' : 'f') . ($this->showInputMessage ? 't' : 'f') . ($this->showErrorMessage ? 't' : 'f') . $this->errorTitle . $this->error . $this->promptTitle . $this->prompt . __CLASS__ );
  }
  
  /**
   * Implement PHP __clone to create a deep clone, not just a shallow copy.
   */
  public function __clone()
  {
    $vars = get_object_vars ( $this );
    foreach ( $vars as $key => $value )
    {
      if (is_object ( $value ))
      {
        $this->$key = clone $value;
      }
      else
      {
        $this->$key = $value;
      }
    }
  }
}
