DeprecationService::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 2
dl 0
loc 4
ccs 0
cts 4
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
namespace Elgg;
3
4
/**
5
 * WARNING: API IN FLUX. DO NOT USE DIRECTLY.
6
 *
7
 * Use the elgg_* versions instead.
8
 *
9
 * @access private
10
 *
11
 * @package    Elgg.Core
12
 * @subpackage Deprecation
13
 * @since      1.11.0
14
 */
15
class DeprecationService {
16
17
	/**
18
	 * @var \ElggSession
19
	 */
20
	protected $session;
21
22
	/**
23
	 * @var Logger
24
	 */
25
	protected $logger;
26
27
	/**
28
	 * Constructor
29
	 *
30
	 * @param \ElggSession $session Session service
31
	 * @param Logger       $logger  Logger service
32
	 */
33
	public function __construct(\ElggSession $session, Logger $logger) {
34
		$this->session = $session;
35
		$this->logger = $logger;
36
	}
37
38
	/**
39
	 * Sends a notice about deprecated use of a function, view, etc.
40
	 *
41
	 * @param string $msg             Message to log
42
	 * @param string $dep_version     Human-readable *release* version: 1.7, 1.8, ...
43
	 * @param int    $backtrace_level How many levels back to display the backtrace.
44
	 *                                Useful if calling from functions that are called
45
	 *                                from other places (like elgg_view()). Set to -1
46
	 *                                for a full backtrace.
47
	 * @return bool
48
	 */
49
	function sendNotice($msg, $dep_version, $backtrace_level = 1) {
50
		if (!$dep_version) {
51
			return false;
52
		}
53
54
		$elgg_version = elgg_get_version(true);
55
		$elgg_version_arr = explode('.', $elgg_version);
56
		$elgg_major_version = (int)$elgg_version_arr[0];
57
		$elgg_minor_version = (int)$elgg_version_arr[1];
58
59
		$dep_version_arr = explode('.', (string)$dep_version);
60
		$dep_major_version = (int)$dep_version_arr[0];
61
		$dep_minor_version = (int)$dep_version_arr[1];
62
63
		$msg = "Deprecated in $dep_major_version.$dep_minor_version: $msg Called from ";
64
65
		// Get a file and line number for the log. Skip over the function that
66
		// sent this notice and see who called the deprecated function itself.
67
		$stack = array();
68
		$backtrace = debug_backtrace();
69
		// never show this call.
70
		array_shift($backtrace);
71
		$i = count($backtrace);
72
73
		foreach ($backtrace as $trace) {
74
			$stack[] = "[#$i] {$trace['file']}:{$trace['line']}";
75
			$i--;
76
77
			if ($backtrace_level > 0) {
78
				if ($backtrace_level <= 1) {
79
					break;
80
				}
81
				$backtrace_level--;
82
			}
83
		}
84
85
		$msg .= implode("<br /> -> ", $stack);
86
87
		$this->logger->warn($msg);
88
89
		return true;
90
	}
91
}
92