OpenXE/classes/Widgets/DataTable/Result/DataTableDataResult.php
2021-05-21 08:49:41 +02:00

202 lines
4.7 KiB
PHP

<?php
namespace Xentral\Widgets\DataTable\Result;
use JsonSerializable;
use Xentral\Widgets\DataTable\Exception\InvalidArgumentException;
/**
* @see https://datatables.net/manual/server-side
*/
final class DataTableDataResult implements JsonSerializable
{
/** @var int $drawCounter The draw counter */
private $drawCounter;
/** @var int $recordsTotal Total number of records, before filtering */
private $recordsTotal;
/** @var int $recordsFiltered Total number of records, after filtering */
private $recordsFiltered;
/** @var array $data */
private $data;
/** @var string|null $errorMessage */
private $errorMessage;
/** @var array|null $debugInfo */
private $debugInfo;
/**
* @param int $drawCounter
* @param int $recordsTotal
* @param int $recordsFiltered
* @param array $data
*
* @throws InvalidArgumentException
*/
public function __construct(
$drawCounter = 1,
$recordsTotal = 0,
$recordsFiltered = 0,
$data = []
) {
if (!is_int($drawCounter)) {
throw new InvalidArgumentException(sprintf(
'Invalid argument. Draw counter must be an integer. Given type: %s',
strtolower(gettype($drawCounter))
));
}
if (!is_int($recordsTotal)) {
throw new InvalidArgumentException(sprintf(
'Invalid argument. Total records count must be an integer. Given type: %s',
strtolower(gettype($recordsTotal))
));
}
if (!is_int($recordsFiltered)) {
throw new InvalidArgumentException(sprintf(
'Invalid argument. Filtered records count be an integer. Given type: %s',
strtolower(gettype($recordsFiltered))
));
}
if (!is_array($data)) {
throw new InvalidArgumentException(sprintf(
'Invalid argument. Data parameter must be an array. Given type: %s',
strtolower(gettype($data))
));
}
$this->drawCounter = $drawCounter;
$this->recordsTotal = $recordsTotal;
$this->recordsFiltered = $recordsFiltered;
$this->data = $data;
}
/**
* @return array
*/
public function getResult()
{
$result = [
'draw' => $this->drawCounter,
'recordsTotal' => $this->recordsTotal,
'recordsFiltered' => $this->recordsFiltered,
'data' => $this->data,
];
if ($this->debugInfo !== null) {
$result['debug'] = $this->debugInfo;
}
if ($this->errorMessage !== null) {
$result['error'] = $this->errorMessage;
}
return $result;
}
/**
* @return int
*/
public function getDrawCounter()
{
return $this->drawCounter;
}
/**
* @return int
*/
public function getRecordsTotal()
{
return $this->recordsTotal;
}
/**
* @return int
*/
public function getRecordsFiltered()
{
return $this->recordsFiltered;
}
/**
* @return array
*/
public function getData()
{
return $this->data;
}
/**
* @return array|null
*/
public function getDebugInfo()
{
return $this->debugInfo;
}
/**
* @param array $debugInfo
*/
public function setDebugInfo($debugInfo)
{
if (!is_array($debugInfo)) {
throw new InvalidArgumentException(sprintf(
'Invalid argument. Debug information must be an array. Given type: %s',
strtolower(gettype($debugInfo))
));
}
$this->debugInfo = $debugInfo;
}
/**
* @return bool
*/
public function hasError()
{
return $this->errorMessage !== null;
}
/**
* @return string|null
*/
public function getErrorMessage()
{
return $this->errorMessage;
}
/**
* @param string $errorMessage
*
* @throws InvalidArgumentException
*/
public function setErrorMessage($errorMessage)
{
if (!is_string($errorMessage)) {
throw new InvalidArgumentException(sprintf(
'Invalid argument. Error message must be a string. Given type: %s',
strtolower(gettype($errorMessage))
));
}
$this->errorMessage = $errorMessage;
}
/**
* @return array
*/
public function toArray()
{
return $this->getResult();
}
/**
* @return array
*/
public function jsonSerialize()
{
return $this->toArray();
}
}