<?php
declare(strict_types=1);
use Airship\Engine\{
Gears,
State,
Translation
};
/**
* These functions are defined in the global scope.
*/
/**
* I. GENERAL FUNCTIONS
*/
/**
* Returns true if every member of an array is NOT another array
*
* @param array $source
* @return bool
*/
function is1DArray(array $source): bool
{
return \count($source) === \count($source, \COUNT_RECURSIVE);
}
/**
* Returns true if every member of an array is a 1-dimensional array.
*
* @param array $source
* @param bool $allow1D Permit non-array children?
* @param bool $constantTime Don't exit early
* @return bool
*/
function is2DArray(array $source, bool $allow1D = false, bool $constantTime = false): bool
{
$ret = !empty($source);
foreach ($source as $row) {
if (!\is_array($row)) {
if ($allow1D) {
continue;
}
if (!$constantTime) {
return false;
}
$ret = false;
}
if (!\is1DArray($row)) {
if (!$constantTime) {
return false;
}
$ret = false;
}
}
return $ret;
}
/**
* II. TRANSLATION FUNCTIONS
*/
if (!\function_exists('__')) {
/**
* Translate this string.
*
* @param string $text
* @param string $domain
* @param string[] ...$params
* @return string
*/
function __(string $text, string $domain = 'default', ...$params)
{
static $gear = null;
if ($gear === null) {
$gear = Gears::get('Translation');
}
if (!empty($params)) {
\array_walk($params, '\\Airship\ViewFunctions\\get_purified');
}
return @\sprintf(
$gear->literal($text, $domain),
...$params
);
}
}
if (!\function_exists('_e')) {
/**
* Translate and echo a string of text
*
* @param string $text String to translate
* @param string[] ...$params
* @return void
*/
function _e(string $text, ...$params)
{
if (!empty($params)) {
\array_walk($params, '\\Airship\ViewFunctions\\get_purified');
}
/** @noinspection PhpStrictTypeCheckingInspection */
echo __($text, ...$params);
}
}
if (!\function_exists('_n')) {
/**
* Print a number (great for handling plurals)
*
* @param string $text Text for a singular value
* @param string $pltext Text for a plural value
* @param int $arg The argument that decides which string
* @param mixed ...$params
* @return string
*/
function _n(string $text, string $pltext, int $arg, ...$params) : string
{
if (!empty($params)) {
\array_walk($params, '\\Airship\ViewFunctions\\get_purified');
}
if (abs($arg) == 1) {
/** @noinspection PhpStrictTypeCheckingInspection */
return __($text, ...$params);
} else {
/** @noinspection PhpStrictTypeCheckingInspection */
return __($pltext, ...$params);
}
}
}
if (!\function_exists('trk')) {
/**
* Translation (lookup table based on a key)
*
* @param string $key
* @param array<int, string> ...$params
* @return string
* @throws TypeError
*/
function trk(string $key, ...$params): string
{
static $gear = null;
if ($gear === null) {
$gear = Gears::get('Translation');
}
if (!$gear instanceof Translation) {
throw new TypeError('Translation object is the wrong type');
}
if (!empty($params)) {
\array_walk($params, '\\Airship\ViewFunctions\\get_purified');
}
$state = State::instance();
return $gear->lookup(
$key,
(string) ($state->lang ?? 'en-us'),
...$params
);
}
}
|