Initial commit
This commit is contained in:
commit
73c6b816c0
716 changed files with 170045 additions and 0 deletions
36
kirby/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php
vendored
Normal file
36
kirby/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
/**
|
||||
* Whoops - php errors for cool kids
|
||||
* @author Filipe Dobreira <http://github.com/filp>
|
||||
*/
|
||||
|
||||
namespace Whoops\Util;
|
||||
|
||||
/**
|
||||
* Used as output callable for Symfony\Component\VarDumper\Dumper\HtmlDumper::dump()
|
||||
*
|
||||
* @see TemplateHelper::dump()
|
||||
*/
|
||||
class HtmlDumperOutput
|
||||
{
|
||||
private $output;
|
||||
|
||||
public function __invoke($line, $depth)
|
||||
{
|
||||
// A negative depth means "end of dump"
|
||||
if ($depth >= 0) {
|
||||
// Adds a two spaces indentation to the line
|
||||
$this->output .= str_repeat(' ', $depth) . $line . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
public function getOutput()
|
||||
{
|
||||
return $this->output;
|
||||
}
|
||||
|
||||
public function clear()
|
||||
{
|
||||
$this->output = null;
|
||||
}
|
||||
}
|
77
kirby/vendor/filp/whoops/src/Whoops/Util/Misc.php
vendored
Normal file
77
kirby/vendor/filp/whoops/src/Whoops/Util/Misc.php
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
/**
|
||||
* Whoops - php errors for cool kids
|
||||
* @author Filipe Dobreira <http://github.com/filp>
|
||||
*/
|
||||
|
||||
namespace Whoops\Util;
|
||||
|
||||
class Misc
|
||||
{
|
||||
/**
|
||||
* Can we at this point in time send HTTP headers?
|
||||
*
|
||||
* Currently this checks if we are even serving an HTTP request,
|
||||
* as opposed to running from a command line.
|
||||
*
|
||||
* If we are serving an HTTP request, we check if it's not too late.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function canSendHeaders()
|
||||
{
|
||||
return isset($_SERVER["REQUEST_URI"]) && !headers_sent();
|
||||
}
|
||||
|
||||
public static function isAjaxRequest()
|
||||
{
|
||||
return (
|
||||
!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
|
||||
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check, if possible, that this execution was triggered by a command line.
|
||||
* @return bool
|
||||
*/
|
||||
public static function isCommandLine()
|
||||
{
|
||||
return PHP_SAPI == 'cli';
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate ErrorException code into the represented constant.
|
||||
*
|
||||
* @param int $error_code
|
||||
* @return string
|
||||
*/
|
||||
public static function translateErrorCode($error_code)
|
||||
{
|
||||
$constants = get_defined_constants(true);
|
||||
if (array_key_exists('Core', $constants)) {
|
||||
foreach ($constants['Core'] as $constant => $value) {
|
||||
if (substr($constant, 0, 2) == 'E_' && $value == $error_code) {
|
||||
return $constant;
|
||||
}
|
||||
}
|
||||
}
|
||||
return "E_UNKNOWN";
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if an error level is fatal (halts execution)
|
||||
*
|
||||
* @param int $level
|
||||
* @return bool
|
||||
*/
|
||||
public static function isLevelFatal($level)
|
||||
{
|
||||
$errors = E_ERROR;
|
||||
$errors |= E_PARSE;
|
||||
$errors |= E_CORE_ERROR;
|
||||
$errors |= E_CORE_WARNING;
|
||||
$errors |= E_COMPILE_ERROR;
|
||||
$errors |= E_COMPILE_WARNING;
|
||||
return ($level & $errors) > 0;
|
||||
}
|
||||
}
|
144
kirby/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php
vendored
Normal file
144
kirby/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php
vendored
Normal file
|
@ -0,0 +1,144 @@
|
|||
<?php
|
||||
/**
|
||||
* Whoops - php errors for cool kids
|
||||
* @author Filipe Dobreira <http://github.com/filp>
|
||||
*/
|
||||
|
||||
namespace Whoops\Util;
|
||||
|
||||
class SystemFacade
|
||||
{
|
||||
/**
|
||||
* Turns on output buffering.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function startOutputBuffering()
|
||||
{
|
||||
return ob_start();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param callable $handler
|
||||
* @param int $types
|
||||
*
|
||||
* @return callable|null
|
||||
*/
|
||||
public function setErrorHandler(callable $handler, $types = 'use-php-defaults')
|
||||
{
|
||||
// Since PHP 5.4 the constant E_ALL contains all errors (even E_STRICT)
|
||||
if ($types === 'use-php-defaults') {
|
||||
$types = E_ALL;
|
||||
}
|
||||
return set_error_handler($handler, $types);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param callable $handler
|
||||
*
|
||||
* @return callable|null
|
||||
*/
|
||||
public function setExceptionHandler(callable $handler)
|
||||
{
|
||||
return set_exception_handler($handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function restoreExceptionHandler()
|
||||
{
|
||||
restore_exception_handler();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function restoreErrorHandler()
|
||||
{
|
||||
restore_error_handler();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param callable $function
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function registerShutdownFunction(callable $function)
|
||||
{
|
||||
register_shutdown_function($function);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|false
|
||||
*/
|
||||
public function cleanOutputBuffer()
|
||||
{
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getOutputBufferLevel()
|
||||
{
|
||||
return ob_get_level();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function endOutputBuffering()
|
||||
{
|
||||
return ob_end_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function flushOutputBuffer()
|
||||
{
|
||||
flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getErrorReportingLevel()
|
||||
{
|
||||
return error_reporting();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLastError()
|
||||
{
|
||||
return error_get_last();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $httpCode
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function setHttpResponseCode($httpCode)
|
||||
{
|
||||
if (!headers_sent()) {
|
||||
// Ensure that no 'location' header is present as otherwise this
|
||||
// will override the HTTP code being set here, and mask the
|
||||
// expected error page.
|
||||
header_remove('location');
|
||||
}
|
||||
|
||||
return http_response_code($httpCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $exitStatus
|
||||
*/
|
||||
public function stopExecution($exitStatus)
|
||||
{
|
||||
exit($exitStatus);
|
||||
}
|
||||
}
|
352
kirby/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php
vendored
Normal file
352
kirby/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php
vendored
Normal file
|
@ -0,0 +1,352 @@
|
|||
<?php
|
||||
/**
|
||||
* Whoops - php errors for cool kids
|
||||
* @author Filipe Dobreira <http://github.com/filp>
|
||||
*/
|
||||
|
||||
namespace Whoops\Util;
|
||||
|
||||
use Symfony\Component\VarDumper\Caster\Caster;
|
||||
use Symfony\Component\VarDumper\Cloner\AbstractCloner;
|
||||
use Symfony\Component\VarDumper\Cloner\VarCloner;
|
||||
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
|
||||
use Whoops\Exception\Frame;
|
||||
|
||||
/**
|
||||
* Exposes useful tools for working with/in templates
|
||||
*/
|
||||
class TemplateHelper
|
||||
{
|
||||
/**
|
||||
* An array of variables to be passed to all templates
|
||||
* @var array
|
||||
*/
|
||||
private $variables = [];
|
||||
|
||||
/**
|
||||
* @var HtmlDumper
|
||||
*/
|
||||
private $htmlDumper;
|
||||
|
||||
/**
|
||||
* @var HtmlDumperOutput
|
||||
*/
|
||||
private $htmlDumperOutput;
|
||||
|
||||
/**
|
||||
* @var AbstractCloner
|
||||
*/
|
||||
private $cloner;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $applicationRootPath;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// root path for ordinary composer projects
|
||||
$this->applicationRootPath = dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))));
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes a string for output in an HTML document
|
||||
*
|
||||
* @param string $raw
|
||||
* @return string
|
||||
*/
|
||||
public function escape($raw)
|
||||
{
|
||||
$flags = ENT_QUOTES;
|
||||
|
||||
// HHVM has all constants defined, but only ENT_IGNORE
|
||||
// works at the moment
|
||||
if (defined("ENT_SUBSTITUTE") && !defined("HHVM_VERSION")) {
|
||||
$flags |= ENT_SUBSTITUTE;
|
||||
} else {
|
||||
// This is for 5.3.
|
||||
// The documentation warns of a potential security issue,
|
||||
// but it seems it does not apply in our case, because
|
||||
// we do not blacklist anything anywhere.
|
||||
$flags |= ENT_IGNORE;
|
||||
}
|
||||
|
||||
$raw = str_replace(chr(9), ' ', $raw);
|
||||
|
||||
return htmlspecialchars($raw, $flags, "UTF-8");
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes a string for output in an HTML document, but preserves
|
||||
* URIs within it, and converts them to clickable anchor elements.
|
||||
*
|
||||
* @param string $raw
|
||||
* @return string
|
||||
*/
|
||||
public function escapeButPreserveUris($raw)
|
||||
{
|
||||
$escaped = $this->escape($raw);
|
||||
return preg_replace(
|
||||
"@([A-z]+?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@",
|
||||
"<a href=\"$1\" target=\"_blank\" rel=\"noreferrer noopener\">$1</a>",
|
||||
$escaped
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes sure that the given string breaks on the delimiter.
|
||||
*
|
||||
* @param string $delimiter
|
||||
* @param string $s
|
||||
* @return string
|
||||
*/
|
||||
public function breakOnDelimiter($delimiter, $s)
|
||||
{
|
||||
$parts = explode($delimiter, $s);
|
||||
foreach ($parts as &$part) {
|
||||
$part = '<span class="delimiter">' . $part . '</span>';
|
||||
}
|
||||
|
||||
return implode($delimiter, $parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the part of the path that all files have in common.
|
||||
*
|
||||
* @param string $path
|
||||
* @return string
|
||||
*/
|
||||
public function shorten($path)
|
||||
{
|
||||
if ($this->applicationRootPath != "/") {
|
||||
$path = str_replace($this->applicationRootPath, '…', $path);
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
private function getDumper()
|
||||
{
|
||||
if (!$this->htmlDumper && class_exists('Symfony\Component\VarDumper\Cloner\VarCloner')) {
|
||||
$this->htmlDumperOutput = new HtmlDumperOutput();
|
||||
// re-use the same var-dumper instance, so it won't re-render the global styles/scripts on each dump.
|
||||
$this->htmlDumper = new HtmlDumper($this->htmlDumperOutput);
|
||||
|
||||
$styles = [
|
||||
'default' => 'color:#FFFFFF; line-height:normal; font:12px "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace !important; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:99999; word-break: normal',
|
||||
'num' => 'color:#BCD42A',
|
||||
'const' => 'color: #4bb1b1;',
|
||||
'str' => 'color:#BCD42A',
|
||||
'note' => 'color:#ef7c61',
|
||||
'ref' => 'color:#A0A0A0',
|
||||
'public' => 'color:#FFFFFF',
|
||||
'protected' => 'color:#FFFFFF',
|
||||
'private' => 'color:#FFFFFF',
|
||||
'meta' => 'color:#FFFFFF',
|
||||
'key' => 'color:#BCD42A',
|
||||
'index' => 'color:#ef7c61',
|
||||
];
|
||||
$this->htmlDumper->setStyles($styles);
|
||||
}
|
||||
|
||||
return $this->htmlDumper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the given value into a human readable string.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return string
|
||||
*/
|
||||
public function dump($value)
|
||||
{
|
||||
$dumper = $this->getDumper();
|
||||
|
||||
if ($dumper) {
|
||||
// re-use the same DumpOutput instance, so it won't re-render the global styles/scripts on each dump.
|
||||
// exclude verbose information (e.g. exception stack traces)
|
||||
if (class_exists('Symfony\Component\VarDumper\Caster\Caster')) {
|
||||
$cloneVar = $this->getCloner()->cloneVar($value, Caster::EXCLUDE_VERBOSE);
|
||||
// Symfony VarDumper 2.6 Caster class dont exist.
|
||||
} else {
|
||||
$cloneVar = $this->getCloner()->cloneVar($value);
|
||||
}
|
||||
|
||||
$dumper->dump(
|
||||
$cloneVar,
|
||||
$this->htmlDumperOutput
|
||||
);
|
||||
|
||||
$output = $this->htmlDumperOutput->getOutput();
|
||||
$this->htmlDumperOutput->clear();
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
return htmlspecialchars(print_r($value, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the args of the given Frame as a human readable html string
|
||||
*
|
||||
* @param Frame $frame
|
||||
* @return string the rendered html
|
||||
*/
|
||||
public function dumpArgs(Frame $frame)
|
||||
{
|
||||
// we support frame args only when the optional dumper is available
|
||||
if (!$this->getDumper()) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$html = '';
|
||||
$numFrames = count($frame->getArgs());
|
||||
|
||||
if ($numFrames > 0) {
|
||||
$html = '<ol class="linenums">';
|
||||
foreach ($frame->getArgs() as $j => $frameArg) {
|
||||
$html .= '<li>'. $this->dump($frameArg) .'</li>';
|
||||
}
|
||||
$html .= '</ol>';
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string to a slug version of itself
|
||||
*
|
||||
* @param string $original
|
||||
* @return string
|
||||
*/
|
||||
public function slug($original)
|
||||
{
|
||||
$slug = str_replace(" ", "-", $original);
|
||||
$slug = preg_replace('/[^\w\d\-\_]/i', '', $slug);
|
||||
return strtolower($slug);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a template path, render it within its own scope. This
|
||||
* method also accepts an array of additional variables to be
|
||||
* passed to the template.
|
||||
*
|
||||
* @param string $template
|
||||
* @param array $additionalVariables
|
||||
*/
|
||||
public function render($template, array $additionalVariables = null)
|
||||
{
|
||||
$variables = $this->getVariables();
|
||||
|
||||
// Pass the helper to the template:
|
||||
$variables["tpl"] = $this;
|
||||
|
||||
if ($additionalVariables !== null) {
|
||||
$variables = array_replace($variables, $additionalVariables);
|
||||
}
|
||||
|
||||
call_user_func(function () {
|
||||
extract(func_get_arg(1));
|
||||
require func_get_arg(0);
|
||||
}, $template, $variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the variables to be passed to all templates rendered
|
||||
* by this template helper.
|
||||
*
|
||||
* @param array $variables
|
||||
*/
|
||||
public function setVariables(array $variables)
|
||||
{
|
||||
$this->variables = $variables;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a single template variable, by its name:
|
||||
*
|
||||
* @param string $variableName
|
||||
* @param mixed $variableValue
|
||||
*/
|
||||
public function setVariable($variableName, $variableValue)
|
||||
{
|
||||
$this->variables[$variableName] = $variableValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a single template variable, by its name, or
|
||||
* $defaultValue if the variable does not exist
|
||||
*
|
||||
* @param string $variableName
|
||||
* @param mixed $defaultValue
|
||||
* @return mixed
|
||||
*/
|
||||
public function getVariable($variableName, $defaultValue = null)
|
||||
{
|
||||
return isset($this->variables[$variableName]) ?
|
||||
$this->variables[$variableName] : $defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsets a single template variable, by its name
|
||||
*
|
||||
* @param string $variableName
|
||||
*/
|
||||
public function delVariable($variableName)
|
||||
{
|
||||
unset($this->variables[$variableName]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all variables for this helper
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getVariables()
|
||||
{
|
||||
return $this->variables;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the cloner used for dumping variables.
|
||||
*
|
||||
* @param AbstractCloner $cloner
|
||||
*/
|
||||
public function setCloner($cloner)
|
||||
{
|
||||
$this->cloner = $cloner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cloner used for dumping variables.
|
||||
*
|
||||
* @return AbstractCloner
|
||||
*/
|
||||
public function getCloner()
|
||||
{
|
||||
if (!$this->cloner) {
|
||||
$this->cloner = new VarCloner();
|
||||
}
|
||||
return $this->cloner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the application root path.
|
||||
*
|
||||
* @param string $applicationRootPath
|
||||
*/
|
||||
public function setApplicationRootPath($applicationRootPath)
|
||||
{
|
||||
$this->applicationRootPath = $applicationRootPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the application root path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getApplicationRootPath()
|
||||
{
|
||||
return $this->applicationRootPath;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue