/** * Sends a notice about deprecated use of a function, view, etc. * * @param string $msg Message to log / display. * @param string $dep_version Human-readable *release* version: 1.7, 1.8, ... * @param int $backtrace_level How many levels back to display the backtrace. * Useful if calling from functions that are called * from other places (like elgg_view()). Set to -1 * for a full backtrace. * @return bool */ function sendNotice($msg, $dep_version, $backtrace_level = 1) { // if it's a major release behind, visual and logged // if it's a 1 minor release behind, visual and logged // if it's for current minor release, logged. // bugfixes don't matter because we are not deprecating between them if (!$dep_version) { return false; } $elgg_version = elgg_get_version(true); $elgg_version_arr = explode('.', $elgg_version); $elgg_major_version = (int) $elgg_version_arr[0]; $elgg_minor_version = (int) $elgg_version_arr[1]; $dep_version_arr = explode('.', (string) $dep_version); $dep_major_version = (int) $dep_version_arr[0]; $dep_minor_version = (int) $dep_version_arr[1]; $visual = false; if ($dep_major_version < $elgg_major_version || $dep_minor_version < $elgg_minor_version) { $visual = true; } $msg = "Deprecated in {$dep_major_version}.{$dep_minor_version}: {$msg}"; if ($visual && $this->session->isAdminLoggedIn()) { register_error($msg); } // Get a file and line number for the log. Never show this in the UI. // Skip over the function that sent this notice and see who called the deprecated // function itself. $msg .= " Called from "; $stack = array(); $backtrace = debug_backtrace(); // never show this call. array_shift($backtrace); $i = count($backtrace); foreach ($backtrace as $trace) { $stack[] = "[#{$i}] {$trace['file']}:{$trace['line']}"; $i--; if ($backtrace_level > 0) { if ($backtrace_level <= 1) { break; } $backtrace_level--; } } $msg .= implode("<br /> -> ", $stack); $this->logger->warn($msg); return true; }