Passed
Push — master ( fa0560...6b8bc5 )
by Mike
04:54 queued 31s
created

PluginInformation   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 134
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 45
dl 0
loc 134
rs 10
c 0
b 0
f 0
wmc 14

8 Methods

Rating   Name   Duplication   Size   Complexity  
A get_inactive_plugin_data() 0 2 1
A get_plugin_data() 0 4 1
A __construct() 0 6 1
A get_active_plugins() 0 9 2
A get_active_plugin_data() 0 2 1
A get_inactive_plugins() 0 13 3
A format_plugin_data() 0 17 2
A get_dropin_and_mu_plugin_data() 0 17 3
1
<?php
2
/**
3
 * Plugin information for status report.
4
 *
5
 * @package WooCommerce/Utilities
6
 */
7
8
namespace WooCommerce\RestApi\Controllers\Version4\Utilities;
9
10
/**
11
 * PluginInformation class.
12
 */
13
class PluginInformation {
14
15
	/**
16
	 * Use WP API to lookup latest updates for plugins. WC_Helper injects updates for premium plugins.
17
	 *
18
	 * @var array
19
	 */
20
	protected $available_updates;
21
22
	/**
23
	 * Constructor.
24
	 */
25
	public function __construct() {
26
		require_once ABSPATH . 'wp-admin/includes/plugin.php';
27
		require_once ABSPATH . 'wp-admin/includes/update.php';
28
29
		// Use WP API to lookup latest updates for plugins. WC_Helper injects updates for premium plugins.
30
		$this->available_updates = get_plugin_updates();
31
	}
32
33
	/**
34
	 * Get formatted active plugin data.
35
	 *
36
	 * @return array
37
	 */
38
	public function get_active_plugin_data() {
39
		return array_map( [ $this, 'format_plugin_data' ], array_map( [ $this, 'get_plugin_data' ], $this->get_active_plugins() ) );
40
	}
41
42
	/**
43
	 * Get formatted inactive plugin data.
44
	 *
45
	 * @return array
46
	 */
47
	public function get_inactive_plugin_data() {
48
		return array_map( [ $this, 'format_plugin_data' ], array_map( [ $this, 'get_plugin_data' ], $this->get_inactive_plugins() ) );
49
	}
50
51
	/**
52
	 * Get a list of Dropins and MU plugins.
53
	 *
54
	 * @since 3.6.0
55
	 * @return array
56
	 */
57
	public function get_dropin_and_mu_plugin_data() {
58
		$plugins               = [
59
			'dropins'    => [],
60
			'mu_plugins' => [],
61
		];
62
63
		foreach ( get_dropins() as $plugin => $data ) {
64
			$data['plugin_file']  = $plugin;
65
			$plugins['dropins'][] = $this->format_plugin_data( $data );
66
		}
67
68
		foreach ( get_mu_plugins() as $plugin => $data ) {
69
			$data['plugin_file']     = $plugin;
70
			$plugins['mu_plugins'][] = $this->format_plugin_data( $data );
71
		}
72
73
		return $plugins;
74
	}
75
76
	/**
77
	 * Get a list of plugins active on the site.
78
	 *
79
	 * @return array
80
	 */
81
	protected function get_active_plugins() {
82
		$active_plugins = (array) get_option( 'active_plugins', array() );
83
84
		if ( is_multisite() ) {
85
			$network_activated_plugins = array_keys( get_site_option( 'active_sitewide_plugins', array() ) );
86
			$active_plugins            = array_merge( $active_plugins, $network_activated_plugins );
87
		}
88
89
		return $active_plugins;
90
	}
91
92
	/**
93
	 * Get a list of inplugins active on the site.
94
	 *
95
	 * @return array
96
	 */
97
	protected function get_inactive_plugins() {
98
		$plugins          = get_plugins();
99
		$active_plugins   = $this->get_active_plugins();
100
		$inactive_plugins = [];
101
102
		foreach ( $plugins as $plugin => $data ) {
103
			if ( in_array( $plugin, $active_plugins, true ) ) {
104
				continue;
105
			}
106
			$inactive_plugins[] = $plugin;
107
		}
108
109
		return $inactive_plugins;
110
	}
111
112
	/**
113
	 * Undocumented function
114
	 *
115
	 * @param string $plugin Plugin directory/file.
116
	 * @return array Data.
117
	 */
118
	protected function get_plugin_data( $plugin ) {
119
		$data                = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
120
		$data['plugin_file'] = $plugin;
121
		return $data;
122
	}
123
124
	/**
125
	 * Format plugin data, including data on updates, into a standard format.
126
	 *
127
	 * @param array $data Plugin data.
128
	 * @return array Formatted data.
129
	 */
130
	protected function format_plugin_data( $data ) {
131
		$version_latest = $data['Version'];
132
133
		// Find latest version.
134
		if ( isset( $this->available_updates[ $data['plugin_file'] ]->update->new_version ) ) {
135
			$version_latest = $this->available_updates[ $data['plugin_file'] ]->update->new_version;
136
		}
137
138
		return array(
139
			'plugin'            => $data['plugin_file'],
140
			'name'              => $data['Name'],
141
			'version'           => $data['Version'],
142
			'version_latest'    => $version_latest,
143
			'url'               => $data['PluginURI'],
144
			'author_name'       => $data['AuthorName'],
145
			'author_url'        => esc_url_raw( $data['AuthorURI'] ),
146
			'network_activated' => $data['Network'],
147
		);
148
	}
149
}
150