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

143 lines
3.6 KiB
PHP

<?php
namespace Xentral\Widgets\DataTable\Column;
use Closure;
use DateTime;
use Exception;
class ColumnFormatter
{
/**
* @param mixed $ifEmpty
*
* @return Closure
*/
public static function ifEmpty($ifEmpty)
{
return static function ($value) use ($ifEmpty) {
if (empty($value)) {
return $ifEmpty;
}
return $value;
};
}
/**
* @example Format::sprintf('row_id_%s') %s will be replaced with the current value
*
* @param mixed $sprintf
*
* @return Closure
*/
public static function sprintf($sprintf)
{
return static function ($value) use ($sprintf) {
return sprintf($sprintf, $value);
};
}
/**
* @param string $template
*
* @return Closure
*/
public static function template($template)
{
return static function ($value, $rowAssoc) use ($template) {
$templateVars = [];
foreach ($rowAssoc as $assocKey => $assocValue) {
$templateVar = '{' . strtoupper($assocKey) . '}';
$templateVar = str_replace('-', '_', $templateVar);
$templateVars[$templateVar] = $assocValue;
}
return strtr($template, $templateVars);
};
}
/**
* @param int $decimals
* @param string $decimalSeperator
* @param string $thousandsSeperator
*
* @return Closure
*/
public static function number($decimals = 2, $decimalSeperator = ',', $thousandsSeperator = '.')
{
return static function ($value) use ($decimals, $decimalSeperator, $thousandsSeperator) {
return number_format($value, $decimals, $decimalSeperator, $thousandsSeperator);
};
}
/**
* @param int $decimals
* @param string $decimalSeperator
* @param string $thousandsSeperator
*
* @return Closure
*/
public static function bytes($decimals = 1, $decimalSeperator = ',', $thousandsSeperator = '.')
{
return static function ($bytes) use ($decimals, $decimalSeperator, $thousandsSeperator) {
$bytes = (float)$bytes;
$base = log($bytes, 1024);
$suffixes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
$suffixIndex = (int)floor($base);
$suffix = $suffixes[$suffixIndex];
$number = pow(1024, $base - floor($base));
return number_format($number, $decimals, $decimalSeperator, $thousandsSeperator) . ' ' . $suffix;
};
}
/**
* @param string $dateFormat https://www.php.net/manual/de/function.date.php
*
* @return Closure
*/
public static function date($dateFormat)
{
return static function ($dateString) use ($dateFormat) {
try {
$date = new DateTime($dateString);
return $date->format($dateFormat);
} catch (Exception $exception) {
return $exception->getMessage();
}
};
}
/**
* @return Closure
*/
public static function htmlEscape()
{
return static function ($value) {
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
};
}
/**
* @todo Fixen
*
* @return Closure
*/
public static function dump()
{
return static function ($value, $row) {
$data = [
'value' => $value,
'row' => $row,
];
return sprintf(
'<pre class="dump">%s</pre>',
htmlspecialchars(var_export($data, true))
);
};
}
}