File: /var/www/html/wpmuhibbah/wp-content/plugins/give/src/Framework/Http/Response/Types/JsonResponse.php
<?php
namespace Give\Framework\Http\Response\Types;
use Give\Framework\Http\Response\Traits\ResponseTrait;
use Give\Framework\Support\Contracts\Arrayable;
use Give\Framework\Support\Contracts\Jsonable;
use InvalidArgumentException;
use JsonSerializable;
use Give\Vendors\Symfony\Component\HttpFoundation\JsonResponse as BaseJsonResponse;
/**
* @since 2.18.0
*/
class JsonResponse extends BaseJsonResponse
{
use ResponseTrait;
/**
* Constructor.
*
* @since 2.18.0
*
* @param mixed $data
* @param int $status
* @param array $headers
* @param int $options
* @return void
*/
public function __construct($data = null, $status = 200, $headers = [], $options = 0)
{
$this->encodingOptions = $options;
parent::__construct($data, $status, $headers);
}
/**
* Sets the JSONP callback.
*
* @since 2.18.0
*
* @param string|null $callback
* @return $this
*/
public function withCallback($callback = null)
{
return $this->setCallback($callback);
}
/**
* Get the json_decoded data from the response.
*
* @since 2.18.0
*
* @param bool $assoc
* @param int $depth
* @return mixed
*/
public function getData($assoc = false, $depth = 512)
{
return json_decode($this->data, $assoc, $depth);
}
/**
* Sets the data to be sent as JSON.
*
* @since 2.18.0
*
* @param mixed $data
*
* @return $this
*
* @throws InvalidArgumentException
*/
public function setData($data = [])
{
$this->original = $data;
if ($data instanceof Jsonable) {
$this->data = $data->toJson($this->encodingOptions);
} elseif ($data instanceof JsonSerializable) {
$this->data = json_encode($data->jsonSerialize(), $this->encodingOptions);
} elseif ($data instanceof Arrayable) {
$this->data = json_encode($data->toArray(), $this->encodingOptions);
} else {
$this->data = json_encode($data, $this->encodingOptions);
}
if (!$this->hasValidJson(json_last_error())) {
throw new InvalidArgumentException(json_last_error_msg());
}
return $this->update();
}
/**
* Determine if an error occurred during JSON encoding.
*
* @since 2.18.0
*
* @param int $jsonError
* @return bool
*/
protected function hasValidJson($jsonError)
{
if ($jsonError === JSON_ERROR_NONE) {
return true;
}
return $this->hasEncodingOption(JSON_PARTIAL_OUTPUT_ON_ERROR) &&
in_array($jsonError, [
JSON_ERROR_RECURSION,
JSON_ERROR_INF_OR_NAN,
JSON_ERROR_UNSUPPORTED_TYPE,
], true);
}
/**
* Sets options used while encoding data to JSON.
*
* @since 2.18.0
*
* @param int $encodingOptions
*
* @return $this
*/
public function setEncodingOptions($encodingOptions)
{
$this->encodingOptions = (int)$encodingOptions;
return $this->setData($this->getData());
}
/**
* Determine if a JSON encoding option is set.
*
* @since 2.18.0
*
* @param int $option
* @return bool
*/
public function hasEncodingOption($option)
{
return (bool)($this->encodingOptions & $option);
}
}