$t) { $texts[$k] = h($t, $double, $charset); } return $texts; } elseif (is_object($text)) { if (method_exists($text, '__toString')) { $text = (string)$text; } else { $text = '(object)' . get_class($text); } } elseif ($text === null || is_scalar($text)) { return $text; } static $defaultCharset = false; if ($defaultCharset === false) { $defaultCharset = mb_internal_encoding(); if ($defaultCharset === null) { $defaultCharset = 'UTF-8'; } } if (is_string($double)) { $charset = $double; } return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, $charset ?: $defaultCharset, $double); } } if (!function_exists('pluginSplit')) { /** * Splits a dot syntax plugin name into its plugin and class name. * If $name does not have a dot, then index 0 will be null. * * Commonly used like * ``` * list($plugin, $name) = pluginSplit($name); * ``` * * @param string $name The name you want to plugin split. * @param bool $dotAppend Set to true if you want the plugin to have a '.' appended to it. * @param string|null $plugin Optional default plugin to use if no plugin is found. Defaults to null. * @return array Array with 2 indexes. 0 => plugin name, 1 => class name. * @link https://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#pluginSplit */ function pluginSplit($name, $dotAppend = false, $plugin = null) { if (strpos($name, '.') !== false) { $parts = explode('.', $name, 2); if ($dotAppend) { $parts[0] .= '.'; } return $parts; } return [$plugin, $name]; } } if (!function_exists('namespaceSplit')) { /** * Split the namespace from the classname. * * Commonly used like `list($namespace, $className) = namespaceSplit($class);`. * * @param string $class The full class name, ie `Cake\Core\App`. * @return array Array with 2 indexes. 0 => namespace, 1 => classname. */ function namespaceSplit($class) { $pos = strrpos($class, '\\'); if ($pos === false) { return ['', $class]; } return [substr($class, 0, $pos), substr($class, $pos + 1)]; } } if (!function_exists('pr')) { /** * print_r() convenience function. * * In terminals this will act similar to using print_r() directly, when not run on cli * print_r() will also wrap
tags around the output of given variable. Similar to debug().
*
* This function returns the same variable that was passed.
*
* @param mixed $var Variable to print out.
* @return mixed the same $var that was passed to this function
* @link https://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#pr
* @see debug()
*/
function pr($var)
{
if (!Configure::read('debug')) {
return $var;
}
$template = (PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg') ? '%s
' : "\n%s\n\n";
printf($template, trim(print_r($var, true)));
return $var;
}
}
if (!function_exists('pj')) {
/**
* json pretty print convenience function.
*
* In terminals this will act similar to using json_encode() with JSON_PRETTY_PRINT directly, when not run on cli
* will also wrap tags around the output of given variable. Similar to pr().
*
* This function returns the same variable that was passed.
*
* @param mixed $var Variable to print out.
* @return mixed the same $var that was passed to this function
* @see pr()
* @link https://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#pj
*/
function pj($var)
{
if (!Configure::read('debug')) {
return $var;
}
$template = (PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg') ? '%s
' : "\n%s\n\n";
printf($template, trim(json_encode($var, JSON_PRETTY_PRINT)));
return $var;
}
}
if (!function_exists('env')) {
/**
* Gets an environment variable from available sources, and provides emulation
* for unsupported or inconsistent environment variables (i.e. DOCUMENT_ROOT on
* IIS, or SCRIPT_NAME in CGI mode). Also exposes some additional custom
* environment information.
*
* @param string $key Environment variable name.
* @param string|null $default Specify a default value in case the environment variable is not defined.
* @return string|bool|null Environment variable setting.
* @link https://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#env
*/
function env($key, $default = null)
{
if ($key === 'HTTPS') {
if (isset($_SERVER['HTTPS'])) {
return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
}
return (strpos((string)env('SCRIPT_URI'), 'https://') === 0);
}
if ($key === 'SCRIPT_NAME') {
if (env('CGI_MODE') && isset($_ENV['SCRIPT_URL'])) {
$key = 'SCRIPT_URL';
}
}
$val = null;
if (isset($_SERVER[$key])) {
$val = $_SERVER[$key];
} elseif (isset($_ENV[$key])) {
$val = $_ENV[$key];
} elseif (getenv($key) !== false) {
$val = getenv($key);
}
if ($key === 'REMOTE_ADDR' && $val === env('SERVER_ADDR')) {
$addr = env('HTTP_PC_REMOTE_ADDR');
if ($addr !== null) {
$val = $addr;
}
}
if ($val !== null) {
return $val;
}
switch ($key) {
case 'DOCUMENT_ROOT':
$name = env('SCRIPT_NAME');
$filename = env('SCRIPT_FILENAME');
$offset = 0;
if (!strpos($name, '.php')) {
$offset = 4;
}
return substr($filename, 0, -(strlen($name) + $offset));
case 'PHP_SELF':
return str_replace(env('DOCUMENT_ROOT'), '', env('SCRIPT_FILENAME'));
case 'CGI_MODE':
return (PHP_SAPI === 'cgi');
}
return $default;
}
}
if (!function_exists('triggerWarning')) {
/**
* Triggers an E_USER_WARNING.
*
* @param string $message The warning message.
* @return void
*/
function triggerWarning($message)
{
$stackFrame = 1;
$trace = debug_backtrace();
if (isset($trace[$stackFrame])) {
$frame = $trace[$stackFrame];
$frame += ['file' => '[internal]', 'line' => '??'];
$message = sprintf(
'%s - %s, line: %s',
$message,
$frame['file'],
$frame['line']
);
}
trigger_error($message, E_USER_WARNING);
}
}
if (!function_exists('deprecationWarning')) {
/**
* Helper method for outputting deprecation warnings
*
* @param string $message The message to output as a deprecation warning.
* @param int $stackFrame The stack frame to include in the error. Defaults to 1
* as that should point to application/plugin code.
* @return void
*/
function deprecationWarning($message, $stackFrame = 1)
{
if (!(error_reporting() & E_USER_DEPRECATED)) {
return;
}
$trace = debug_backtrace();
if (isset($trace[$stackFrame])) {
$frame = $trace[$stackFrame];
$frame += ['file' => '[internal]', 'line' => '??'];
$message = sprintf(
'%s - %s, line: %s' . "\n" .
' You can disable deprecation warnings by setting `Error.errorLevel` to' .
' `E_ALL & ~E_USER_DEPRECATED` in your config/app.php.',
$message,
$frame['file'],
$frame['line']
);
}
trigger_error($message, E_USER_DEPRECATED);
}
}
if (!function_exists('getTypeName')) {
/**
* Returns the objects class or var type of it's not an object
*
* @param mixed $var Variable to check
* @return string Returns the class name or variable type
*/
function getTypeName($var)
{
return is_object($var) ? get_class($var) : gettype($var);
}
}