Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php

namespace PhpOffice\PhpSpreadsheet\Cell;

use DateTimeInterface;
use PhpOffice\PhpSpreadsheet\RichText\RichText;
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;

class DefaultValueBinder implements IValueBinder
{
    /**
     * Bind value to a cell.
     *
     * @param Cell $cell Cell to bind value to
     * @param mixed $value Value to bind in cell
     *
     * @return bool
     */
    public function bindValue(Cell $cell, $value)
    {
        // sanitize UTF-8 strings
        if (is_string($value)) {
            $value = StringHelper::sanitizeUTF8($value);
        } elseif (is_object($value)) {
            // Handle any objects that might be injected
            if ($value instanceof DateTimeInterface) {
                $value = $value->format('Y-m-d H:i:s');
            } elseif (!($value instanceof RichText)) {
> // Attempt to cast any unexpected objects to string
$value = (string) $value; } } // Set value explicit $cell->setValueExplicit($value, static::dataTypeForValue($value)); // Done! return true; } /** * DataType for value. *
< * @param mixed $pValue
> * @param mixed $value
* * @return string */
< public static function dataTypeForValue($pValue)
> public static function dataTypeForValue($value)
{ // Match the value against a few data types
< if ($pValue === null) {
> if ($value === null) {
return DataType::TYPE_NULL;
< } elseif (is_float($pValue) || is_int($pValue)) {
> } elseif (is_float($value) || is_int($value)) {
return DataType::TYPE_NUMERIC;
< } elseif (is_bool($pValue)) {
> } elseif (is_bool($value)) {
return DataType::TYPE_BOOL;
< } elseif ($pValue === '') {
> } elseif ($value === '') {
return DataType::TYPE_STRING;
< } elseif ($pValue instanceof RichText) {
> } elseif ($value instanceof RichText) {
return DataType::TYPE_INLINE;
< } elseif (is_string($pValue) && $pValue[0] === '=' && strlen($pValue) > 1) {
> } elseif (is_string($value) && strlen($value) > 1 && $value[0] === '=') {
return DataType::TYPE_FORMULA;
< } elseif (preg_match('/^[\+\-]?(\d+\\.?\d*|\d*\\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $pValue)) { < $tValue = ltrim($pValue, '+-'); < if (is_string($pValue) && $tValue[0] === '0' && strlen($tValue) > 1 && $tValue[1] !== '.') {
> } elseif (preg_match('/^[\+\-]?(\d+\\.?\d*|\d*\\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $value)) { > $tValue = ltrim($value, '+-'); > if (is_string($value) && strlen($tValue) > 1 && $tValue[0] === '0' && $tValue[1] !== '.') {
return DataType::TYPE_STRING;
< } elseif ((strpos($pValue, '.') === false) && ($pValue > PHP_INT_MAX)) {
> } elseif ((strpos($value, '.') === false) && ($value > PHP_INT_MAX)) {
return DataType::TYPE_STRING;
< } elseif (!is_numeric($pValue)) {
> } elseif (!is_numeric($value)) {
return DataType::TYPE_STRING; } return DataType::TYPE_NUMERIC;
< } elseif (is_string($pValue)) {
> } elseif (is_string($value)) {
$errorCodes = DataType::getErrorCodes();
< if (isset($errorCodes[$pValue])) {
> if (isset($errorCodes[$value])) {
return DataType::TYPE_ERROR; } } return DataType::TYPE_STRING; } }