public function filter_trace(array $trace)
{
if (!self::$filtered and function_exists('did_action') and did_action('plugins_loaded')) {
# Only run apply_filters on these once
self::$ignore_class = apply_filters('qm/trace/ignore_class', self::$ignore_class);
self::$ignore_method = apply_filters('qm/trace/ignore_method', self::$ignore_method);
self::$ignore_func = apply_filters('qm/trace/ignore_func', self::$ignore_func);
self::$show_args = apply_filters('qm/trace/show_args', self::$show_args);
self::$filtered = true;
}
$return = $trace;
if (isset($trace['class'])) {
if (isset(self::$ignore_class[$trace['class']])) {
$return = null;
} else {
if (isset(self::$ignore_method[$trace['class']][$trace['function']])) {
$return = null;
} else {
if (0 === strpos($trace['class'], 'QM_')) {
$return = null;
} else {
$return['id'] = $trace['class'] . $trace['type'] . $trace['function'] . '()';
$return['display'] = $trace['class'] . $trace['type'] . $trace['function'] . '()';
}
}
}
} else {
if (isset(self::$ignore_func[$trace['function']])) {
$return = null;
} else {
if (isset(self::$show_args[$trace['function']])) {
$show = self::$show_args[$trace['function']];
if ('dir' === $show) {
if (isset($trace['args'][0])) {
$arg = QM_Util::standard_dir($trace['args'][0], '~/');
$return['id'] = $trace['function'] . '()';
$return['display'] = $trace['function'] . "('{$arg}')";
}
} else {
$args = array();
for ($i = 0; $i < $show; $i++) {
if (isset($trace['args'][$i])) {
$args[] = '\'' . $trace['args'][$i] . '\'';
}
}
$return['id'] = $trace['function'] . '()';
$return['display'] = $trace['function'] . '(' . implode(',', $args) . ')';
}
} else {
$return['id'] = $trace['function'] . '()';
$return['display'] = $trace['function'] . '()';
}
}
}
if ($return) {
$return['calling_file'] = $this->calling_file;
$return['calling_line'] = $this->calling_line;
}
if (isset($trace['line'])) {
$this->calling_line = $trace['line'];
}
if (isset($trace['file'])) {
$this->calling_file = $trace['file'];
}
return $return;
}