public function testToISO8601UTC() { $newTZ = new DateTimeZone("America/New_York"); $d = new DateTime('2012-01-01T12:12:12', $newTZ); $s = DateTimeHelper::toISO8601UTC($d); $this->assertEquals("2012-01-01T12:12:12", $s); }
/** * * Pre-processes the data before sending it to `json_encode()`. * @param mixed $data the data to be processed * @return mixed the processed data * */ protected static function processData($data) { if (is_object($data)) { if ($data instanceof DateTime) { $data = DateTimeHelper::toISO8601UTC($data); } elseif ($data instanceof JsonSerializable) { $data = $data->jsonSerialize(); } else { $result = []; foreach ($data as $name => $value) { $result[$name] = $value; } $data = $result; } if ($data === []) { return new stdClass(); } } if (is_array($data)) { foreach ($data as $key => $value) { if (is_array($value) || is_object($value)) { $data[$key] = static::processData($value); } } } return $data; }
/** * Get configured serialize data of the original data. * @param $data * @param $config * @return array */ public function getSerializeData($data, $config) { if (is_null($config) || !is_array($config)) { return null; } elseif (isset($config['serializeDelegateFunction'])) { $delegate = $config['serializeDelegateFunction']; if (is_string($delegate)) { if (is_object($data) && method_exists($data, $delegate)) { return (array) call_user_func([$data, $delegate], $config); } return null; } return (array) call_user_func($delegate, $data, $config); } elseif (is_string($data)) { return $data; } if (isset($config['serializeAttributes'])) { $serializeAttributes = $config['serializeAttributes']; } if (isset($config['notSerializeAttributes'])) { $notSerializeAttributes = $config['notSerializeAttributes']; } if (!isset($serializeAttributes) && !isset($notSerializeAttributes)) { $serializeData = $data; } else { $serializeData = []; if (isset($serializeAttributes)) { foreach ($serializeAttributes as $attChain) { $attChain = explode('.', $attChain); if (!isset($notSerializeAttributes) || !in_array($attChain[0], $notSerializeAttributes)) { $cnt = count($attChain); $dt = $data; $sd =& $serializeData; $i = 0; while ($i < $cnt - 1) { $att = $attChain[$i]; if (is_object($dt) && property_exists($dt, $att)) { if (!isset($sd[$att])) { if (empty($dt->{$att})) { $sd[$att] = null; break; } $sd[$att] = []; } $dt = $dt->{$att}; } elseif (is_array($dt) && array_key_exists($att, $dt)) { if (!isset($sd[$att])) { $sd[$att] = []; } $dt = $dt[$att]; } else { break; } $sd =& $sd[$att]; $i++; } if ($i == $cnt - 1) { $att = $attChain[$i]; if (is_object($dt) && property_exists($dt, $att)) { $sd[$att] = $dt->{$att}; } elseif (is_array($dt) && array_key_exists($att, $dt)) { $sd[$att] = $dt[$att]; } if ($sd[$att] instanceof \DateTime) { /** @var \DateTime $date */ $date = $sd[$att]; $sd[$att] = DateTimeHelper::toISO8601UTC($date); } } } else { $serializeData[$attChain[0]] = null; } } } else { if (is_object($data)) { if (isset($this->getSerializableAttributesFunction)) { $properties = call_user_func($this->getSerializableAttributesFunction, $this, $data); } else { $properties = $this->getSerializableAttributes($data); } foreach ($properties as $key => $prop) { if ($prop instanceof ReflectionProperty) { $att = $prop->name; } else { $att = $key; } if (!in_array($att, $notSerializeAttributes)) { $serializeData[$att] = $data->{$att}; } else { $serializeData[$att] = null; } } } elseif (is_array($data)) { foreach ($data as $att => $value) { if (!in_array($att, $notSerializeAttributes)) { $serializeData[$att] = $value; } else { $serializeData[$att] = null; } } } } } return $serializeData; }