Completed
Pull Request — master (#131)
by
unknown
01:57
created

WP_Update_Php   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 181
Duplicated Lines 26.52 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
dl 48
loc 181
rs 10
c 0
b 0
f 0
wmc 23
lcom 1
cbo 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
B __construct() 20 25 9
A does_it_meet_required_php_version() 8 8 2
A does_it_meet_recommended_php_version() 8 8 2
A version_passes_requirement() 0 3 1
A load_version_notice() 0 6 3
A get_admin_notice() 12 21 4
A minimum_admin_notice() 0 3 1
A recommended_admin_notice() 0 3 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
/**
3
 * WordPress Update PHP Class
4
 *
5
 * @package   WP_Update_Php
6
 * @author    Coen Jacobs, Sébastien Dumont
7
 * @license   GPL-2.0+
8
 */
9
10
class WP_Update_Php {
11
	/**
12
	 * @access private
13
	 * @var    string
14
	 */
15
	private $plugin_name;
16
17
	/**
18
	 * @access private
19
	 * @var    string
20
	 */
21
	private $textdomain;
22
23
	/**
24
	 * @access private
25
	 * @var    string
26
	 */
27
	private $minimum_version;
28
29
	/**
30
	 * @access private
31
	 * @var    string
32
	 */
33
	private $recommended_version;
34
35
	/**
36
	 * @access private
37
	 * @var    string
38
	 */
39
	private $wpupdatephp_site = 'http://www.wpupdatephp.com/update/';
40
41
	/**
42
	 * Constructor
43
	 *
44
	 * @access public
45
	 * @param  array $plugin Plugin Name and Text Domain
46
	 * @param  array $requirements Minimum and Recommended version of PHP.
47
	 */
48
	public function __construct($plugin = array(), $requirements = array()) {
49 View Code Duplication
		if ( is_array($plugin) && !empty($plugin['name']) ) {
50
			$this->plugin_name = $plugin['name'];
51
		} else {
52
			$this->plugin_name = '';
53
		}
54
55 View Code Duplication
		if ( is_array($plugin) && !empty($plugin['textdomain']) ) {
56
			$this->textdomain = $plugin['textdomain'];
57
		} else {
58
			$this->textdomain = 'wpupdatephp';
59
		}
60
61 View Code Duplication
		if ( is_array($requirements) && !empty($requirements['recommended_version']) ) {
62
			$this->minimum_version = $requirements['minimum_version'];
63
		} else {
64
			$this->minimum_version = '5.3.0';
65
		}
66
67 View Code Duplication
		if ( is_array($requirements) && !empty($requirements['recommended_version']) ) {
68
			$this->recommended_version = $requirements['recommended_version'];
69
		} else {
70
			$this->recommended_version = null;
71
		}
72
	} // END __construct()
73
74
	/**
75
	 * Check given PHP version against minimum required version.
76
	 *
77
	 * @access public
78
	 * @param  string $version Optional. PHP version to check against.
79
	 *                        Default is the current PHP version as a string in
80
	 *                        "major.minor.release[extra]" notation.
81
	 * @return bool True if supplied PHP version meets minimum required version.
82
	 */
83 View Code Duplication
	public function does_it_meet_required_php_version($version = PHP_VERSION) {
1 ignored issue
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
84
		if ($this->version_passes_requirement($this->minimum_version, $version)) {
85
			return true;
86
		}
87
88
		$this->load_version_notice(array($this, 'minimum_admin_notice'));
89
		return false;
90
	} // END does_it_meet_required_php_version()
91
92
	/**
93
	 * Check given PHP version against recommended version.
94
	 *
95
	 * @access public
96
	 * @param  string $version Optional. PHP version to check against.
97
	 *                        Default is the current PHP version as a string in
98
	 *                        "major.minor.release[extra]" notation.
99
	 * @return bool True if supplied PHP version meets recommended version.
100
	 */
101 View Code Duplication
	public function does_it_meet_recommended_php_version($version = PHP_VERSION) {
1 ignored issue
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
102
		if ($this->version_passes_requirement($this->recommended_version, $version)) {
103
			return true;
104
		}
105
106
		$this->load_version_notice(array($this, 'recommended_admin_notice'));
107
		return false;
108
	} // END does_it_meet_recommended_php_version()
109
110
	/**
111
	 * Check that one PHP version is less than or equal to another.
112
	 *
113
	 * @access private
114
	 * @param  string $recommended The baseline version of PHP.
115
	 * @param  string $version     The given version of PHP.
116
	 * @return bool True if the requirement is less than or equal to given version.
117
	 */
118
	private function version_passes_requirement($recommended, $version) {
119
		return version_compare($recommended, $version, '<=');
120
	} // END version_passes_requirement()
121
122
	/**
123
	 * Conditionally hook in an admin notice.
124
	 *
125
	 * @access private
126
	 * @param  callable $callback Callable that displays admin notice.
127
	 */
128
	private function load_version_notice($callback) {
129
		if ( is_admin() && ! defined('DOING_AJAX')) {
130
			add_action('admin_notices', $callback);
131
			add_action('network_admin_notices', $callback);
132
		}
133
	} // END load_version_notice()
134
135
	/**
136
	 * Return the string to be shown in the admin notice.
137
	 *
138
	 * This is based on the level (`recommended` or default `minimum`) of the
139
	 * notice. This will also add the plugin name to the notice string, if set.
140
	 *
141
	 * @access public
142
	 * @param  string $level Optional. Admin notice level, `recommended` or `minimum`.
143
	 *                       Default is `minimum`.
144
	 * @return string
145
	 */
146
	public function get_admin_notice($level = 'minimum') {
147
		$notice = '<div class="error is-dismissible">';
148
149 View Code Duplication
		if ('recommended' === $level) {
150
			if ( ! empty($this->plugin_name)) {
151
				$notice .= '<p>'.sprintf(__('%s recommends a PHP version higher than %s. Read more information about <a href="%s" target="_blank">how you can update</a>.', $this->textdomain), $this->plugin_name, $this->recommended_version, $this->wpupdatephp_site).'</p>';
152
			} else {
153
				$notice .= '<p>'.sprintf(__('This plugin recommends a PHP version higher than %s. Read more information about <a href="%s" target="_blank">how you can update</a>.', $this->textdomain), $this->recommended_version, $this->wpupdatephp_site).'</p>';
154
			}
155
		}
156
157 View Code Duplication
		if ( ! empty($this->plugin_name)) {
158
			$notice .= '<p>'.sprintf(__('Unfortunately, %s cannot run on PHP versions older than %s. Read more information about <a href="%s" target="_blank">how you can update</a>.', $this->textdomain), $this->plugin_name, $this->minimum_version, $this->wpupdatephp_site).'</p>';
159
		} else {
160
			$notice .= '<p>'.sprintf(__('Unfortunately, this plugin cannot run on PHP versions older than %s. Read more information about <a href="%s" target="_blank">how you can update</a>.', $this->textdomain), $this->minimum_version, $this->wpupdatephp_site).'</p>';
161
		}
162
163
		$notice .= '</div>';
164
165
		return $notice;
166
	} // END get_admin_notice()
167
168
	/**
169
	 * Method hooked into admin_notices when minimum required PHP version is not
170
	 * available to show this in a notice.
171
	 *
172
	 * @access public
173
	 * @hook   admin_notices
174
	 */
175
	public function minimum_admin_notice() {
176
		echo $this->get_admin_notice('minimum');
177
	} // END minimum_admin_notice()
178
179
	/**
180
	 * Method hooked into admin_notices when recommended PHP version is not
181
	 * available to show this in a notice.
182
	 *
183
	 * @access public
184
	 * @hook   admin_notices
185
	 */
186
	public function recommended_admin_notice() {
187
		echo $this->get_admin_notice('recommended');
188
	} // END recommended_admin_notice()
189
190
} // END Class
191