X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FSystem.php;h=e84fcb5737733f649f13bf3ed4c2a3e34c51e4fe;hb=8126947b90cc3e547646df4f4d640cd0a9fc3393;hp=87abfdf8ed55d45f64bd7c25f08575dfe93c1193;hpb=5d169a4098633b8e1a5212472700243d790f5bc4;p=friendica.git diff --git a/src/Core/System.php b/src/Core/System.php index 87abfdf8ed..e84fcb5737 100644 --- a/src/Core/System.php +++ b/src/Core/System.php @@ -33,32 +33,35 @@ class System /** * Returns a string with a callstack. Can be used for logging. * - * @param integer $depth optional, default 4 + * @param integer $depth How many calls to include in the stacks after filtering + * @param int $offset How many calls to shave off the top of the stack, for example if + * this is called from a centralized method that isn't relevant to the callstack * @return string */ - public static function callstack($depth = 4) + public static function callstack(int $depth = 4, int $offset = 0) { $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - // We remove the first two items from the list since they contain data that we don't need. - array_shift($trace); - array_shift($trace); + // We remove at least the first two items from the list since they contain data that we don't need. + $trace = array_slice($trace, 2 + $offset); $callstack = []; - $previous = ['class' => '', 'function' => '']; + $previous = ['class' => '', 'function' => '', 'database' => false]; // The ignore list contains all functions that are only wrapper functions - $ignore = ['fetchUrl', 'call_user_func_array']; + $ignore = ['call_user_func_array']; while ($func = array_pop($trace)) { if (!empty($func['class'])) { - // Don't show multiple calls from the "dba" class to show the essential parts of the callstack - if ((($previous['class'] != $func['class']) || ($func['class'] != 'Friendica\Database\DBA')) && ($previous['function'] != 'q')) { + // Don't show multiple calls from the Database classes to show the essential parts of the callstack + $func['database'] = in_array($func['class'], ['Friendica\Database\DBA', 'Friendica\Database\Database']); + if (!$previous['database'] || !$func['database']) { $classparts = explode("\\", $func['class']); $callstack[] = array_pop($classparts).'::'.$func['function']; $previous = $func; } } elseif (!in_array($func['function'], $ignore)) { + $func['database'] = ($func['function'] == 'q'); $callstack[] = $func['function']; $func['class'] = ''; $previous = $func; @@ -134,12 +137,13 @@ class System * and adds an application/json HTTP header to the output. * After finishing the process is getting killed. * - * @param mixed $x The input content. - * @param string $content_type Type of the input (Default: 'application/json'). + * @param mixed $x The input content. + * @param string $content_type Type of the input (Default: 'application/json'). + * @param integer $options JSON options */ - public static function jsonExit($x, $content_type = 'application/json') { + public static function jsonExit($x, $content_type = 'application/json', int $options = 0) { header("Content-type: $content_type"); - echo json_encode($x); + echo json_encode($x, $options); exit(); } @@ -299,18 +303,6 @@ class System */ public static function htmlUpdateExit($o) { - if (DI::pConfig()->get(local_user(), "system", "bandwidth_saver")) { - $replace = "
".DI::l10n()->t("[Embedded content - reload page to view]")."
"; - $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; - $o = preg_replace($pattern, $replace, $o); - $pattern = "/<\s*video[^>]*>(.*?)<\s*\/\s*video>/i"; - $o = preg_replace($pattern, $replace, $o); - $pattern = "/<\s*embed[^>]*>(.*?)<\s*\/\s*embed>/i"; - $o = preg_replace($pattern, $replace, $o); - $pattern = "/<\s*iframe[^>]*>(.*?)<\s*\/\s*iframe>/i"; - $o = preg_replace($pattern, $replace, $o); - } - header("Content-type: text/html"); echo "\r\n"; // We can remove this hack once Internet Explorer recognises HTML5 natively