Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.

Differences Between: [Versions 310 and 401] [Versions 39 and 401]

   1  <?php
   2  
   3  namespace Box\Spout\Common\Entity;
   4  
   5  use Box\Spout\Common\Entity\Style\Style;
   6  use Box\Spout\Common\Helper\CellTypeHelper;
   7  
   8  /**
   9   * Class Cell
  10   */
  11  class Cell
  12  {
  13      /**
  14       * Numeric cell type (whole numbers, fractional numbers, dates)
  15       */
  16      const TYPE_NUMERIC = 0;
  17  
  18      /**
  19       * String (text) cell type
  20       */
  21      const TYPE_STRING = 1;
  22  
  23      /**
  24       * Formula cell type
  25       * Not used at the moment
  26       */
  27      const TYPE_FORMULA = 2;
  28  
  29      /**
  30       * Empty cell type
  31       */
  32      const TYPE_EMPTY = 3;
  33  
  34      /**
  35       * Boolean cell type
  36       */
  37      const TYPE_BOOLEAN = 4;
  38  
  39      /**
  40       * Date cell type
  41       */
  42      const TYPE_DATE = 5;
  43  
  44      /**
  45       * Error cell type
  46       */
  47      const TYPE_ERROR = 6;
  48  
  49      /**
  50       * The value of this cell
  51       * @var mixed|null
  52       */
  53      protected $value;
  54  
  55      /**
  56       * The cell type
  57       * @var int|null
  58       */
  59      protected $type;
  60  
  61      /**
  62       * The cell style
  63       * @var Style
  64       */
  65      protected $style;
  66  
  67      /**
  68       * @param mixed|null $value
  69       * @param Style|null $style
  70       */
  71      public function __construct($value, Style $style = null)
  72      {
  73          $this->setValue($value);
  74          $this->setStyle($style);
  75      }
  76  
  77      /**
  78       * @param mixed|null $value
  79       */
  80      public function setValue($value)
  81      {
  82          $this->value = $value;
  83          $this->type = $this->detectType($value);
  84      }
  85  
  86      /**
  87       * @return mixed|null
  88       */
  89      public function getValue()
  90      {
  91          return !$this->isError() ? $this->value : null;
  92      }
  93  
  94      /**
  95       * @return mixed
  96       */
  97      public function getValueEvenIfError()
  98      {
  99          return $this->value;
 100      }
 101  
 102      /**
 103       * @param Style|null $style
 104       */
 105      public function setStyle($style)
 106      {
 107          $this->style = $style ?: new Style();
 108      }
 109  
 110      /**
 111       * @return Style
 112       */
 113      public function getStyle()
 114      {
 115          return $this->style;
 116      }
 117  
 118      /**
 119       * @return int|null
 120       */
 121      public function getType()
 122      {
 123          return $this->type;
 124      }
 125  
 126      /**
 127       * @param int $type
 128       */
 129      public function setType($type)
 130      {
 131          $this->type = $type;
 132      }
 133  
 134      /**
 135       * Get the current value type
 136       *
 137       * @param mixed|null $value
 138       * @return int
 139       */
 140      protected function detectType($value)
 141      {
 142          if (CellTypeHelper::isBoolean($value)) {
 143              return self::TYPE_BOOLEAN;
 144          }
 145          if (CellTypeHelper::isEmpty($value)) {
 146              return self::TYPE_EMPTY;
 147          }
 148          if (CellTypeHelper::isNumeric($value)) {
 149              return self::TYPE_NUMERIC;
 150          }
 151          if (CellTypeHelper::isDateTimeOrDateInterval($value)) {
 152              return self::TYPE_DATE;
 153          }
 154          if (CellTypeHelper::isNonEmptyString($value)) {
 155              return self::TYPE_STRING;
 156          }
 157  
 158          return self::TYPE_ERROR;
 159      }
 160  
 161      /**
 162       * @return bool
 163       */
 164      public function isBoolean()
 165      {
 166          return $this->type === self::TYPE_BOOLEAN;
 167      }
 168  
 169      /**
 170       * @return bool
 171       */
 172      public function isEmpty()
 173      {
 174          return $this->type === self::TYPE_EMPTY;
 175      }
 176  
 177      /**
 178       * @return bool
 179       */
 180      public function isNumeric()
 181      {
 182          return $this->type === self::TYPE_NUMERIC;
 183      }
 184  
 185      /**
 186       * @return bool
 187       */
 188      public function isString()
 189      {
 190          return $this->type === self::TYPE_STRING;
 191      }
 192  
 193      /**
 194       * @return bool
 195       */
 196      public function isDate()
 197      {
 198          return $this->type === self::TYPE_DATE;
 199      }
 200  
 201      /**
 202       * @return bool
 203       */
 204      public function isError()
 205      {
 206          return $this->type === self::TYPE_ERROR;
 207      }
 208  
 209      /**
 210       * @return string
 211       */
 212      public function __toString()
 213      {
 214          return (string) $this->getValue();
 215      }
 216  }