$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)) { deprecationWarning( 'Passing charset string for 2nd argument is deprecated. ' . 'Use the 3rd argument instead.' ); $charset = $double; $double = true; } 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/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/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/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|bool|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/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' && 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); } }