Completed
Push — branch-7.5 ( c51c1e...fbe6d9 )
by Jeremy
280:08 queued 272:18
created

Modules::get_module()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 3
nop 1
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * simple wrapper that allows enumerating cached static instances
5
 * of sync modules
6
 */
7
8
namespace Automattic\Jetpack\Sync;
9
10
class Modules {
11
12
	const DEFAULT_SYNC_MODULES = array(
13
		'Jetpack_Sync_Modules_Constants',
14
		'Jetpack_Sync_Modules_Callables',
15
		'Jetpack_Sync_Modules_Network_Options',
16
		'Jetpack_Sync_Modules_Options',
17
		'Jetpack_Sync_Modules_Terms',
18
		'Jetpack_Sync_Modules_Menus',
19
		'Jetpack_Sync_Modules_Themes',
20
		'Jetpack_Sync_Modules_Users',
21
		'Jetpack_Sync_Modules_Import',
22
		'Jetpack_Sync_Modules_Posts',
23
		'Jetpack_Sync_Modules_Protect',
24
		'Jetpack_Sync_Modules_Comments',
25
		'Jetpack_Sync_Modules_Updates',
26
		'Jetpack_Sync_Modules_Attachments',
27
		'Jetpack_Sync_Modules_Meta',
28
		'Jetpack_Sync_Modules_Plugins',
29
		'Jetpack_Sync_Modules_Stats',
30
		'Jetpack_Sync_Modules_Full_Sync',
31
	);
32
33
	const LEGACY_SYNC_MODULES_MAP = array(
34
		'Jetpack_Sync_Modules_Constants'       => 'Automattic\\Jetpack\\Sync\\Modules\\Constants',
35
		'Jetpack_Sync_Modules_Callables'       => 'Automattic\\Jetpack\\Sync\\Modules\\Callables',
36
		'Jetpack_Sync_Modules_Network_Options' => 'Automattic\\Jetpack\\Sync\\Modules\\Network_Options',
37
		'Jetpack_Sync_Modules_Options'         => 'Automattic\\Jetpack\\Sync\\Modules\\Options',
38
		'Jetpack_Sync_Modules_Terms'           => 'Automattic\\Jetpack\\Sync\\Modules\\Terms',
39
		'Jetpack_Sync_Modules_Menus'           => 'Automattic\\Jetpack\\Sync\\Modules\\Menus',
40
		'Jetpack_Sync_Modules_Themes'          => 'Automattic\\Jetpack\\Sync\\Modules\\Themes',
41
		'Jetpack_Sync_Modules_Users'           => 'Automattic\\Jetpack\\Sync\\Modules\\Users',
42
		'Jetpack_Sync_Modules_Import'          => 'Automattic\\Jetpack\\Sync\\Modules\\Import',
43
		'Jetpack_Sync_Modules_Posts'           => 'Automattic\\Jetpack\\Sync\\Modules\\Posts',
44
		'Jetpack_Sync_Modules_Protect'         => 'Automattic\\Jetpack\\Sync\\Modules\\Protect',
45
		'Jetpack_Sync_Modules_Comments'        => 'Automattic\\Jetpack\\Sync\\Modules\\Comments',
46
		'Jetpack_Sync_Modules_Updates'         => 'Automattic\\Jetpack\\Sync\\Modules\\Updates',
47
		'Jetpack_Sync_Modules_Attachments'     => 'Automattic\\Jetpack\\Sync\\Modules\\Attachments',
48
		'Jetpack_Sync_Modules_Meta'            => 'Automattic\\Jetpack\\Sync\\Modules\\Meta',
49
		'Jetpack_Sync_Modules_Plugins'         => 'Automattic\\Jetpack\\Sync\\Modules\\Plugins',
50
		'Jetpack_Sync_Modules_Stats'           => 'Automattic\\Jetpack\\Sync\\Modules\\Stats',
51
		'Jetpack_Sync_Modules_Full_Sync'       => 'Automattic\\Jetpack\\Sync\\Modules\\Full_Sync',
52
	);
53
54
	private static $initialized_modules = null;
55
56
	public static function get_modules() {
57
		if ( null === self::$initialized_modules ) {
58
			self::$initialized_modules = self::initialize_modules();
59
		}
60
61
		return self::$initialized_modules;
62
	}
63
64
	public static function set_defaults() {
65
		foreach ( self::get_modules() as $module ) {
66
			$module->set_defaults();
67
		}
68
	}
69
70
	public static function get_module( $module_name ) {
71
		foreach ( self::get_modules() as $module ) {
72
			if ( $module->name() === $module_name ) {
73
				return $module;
74
			}
75
		}
76
77
		return false;
78
	}
79
80
	static function initialize_modules() {
81
		/**
82
		 * Filters the list of class names of sync modules.
83
		 * If you add to this list, make sure any classes implement the
84
		 * Jetpack_Sync_Module interface.
85
		 *
86
		 * @since 4.2.0
87
		 */
88
		$modules = apply_filters( 'jetpack_sync_modules', self::DEFAULT_SYNC_MODULES );
89
90
		$modules = array_map( array( 'Automattic\\Jetpack\\Sync\\Modules', 'map_legacy_modules' ), $modules );
91
92
		$modules = array_map( array( 'Automattic\\Jetpack\\Sync\\Modules', 'load_module' ), $modules );
93
94
		return array_map( array( 'Automattic\\Jetpack\\Sync\\Modules', 'set_module_defaults' ), $modules );
95
	}
96
97
	static function load_module( $module_class ) {
98
		return new $module_class();
99
	}
100
101
	static function map_legacy_modules( $module_class ) {
102
		$legacy_map = self::LEGACY_SYNC_MODULES_MAP;
103
		if ( isset( $legacy_map[ $module_class ] ) ) {
104
			return $legacy_map[ $module_class ];
105
		}
106
		return $module_class;
107
	}
108
109
	static function set_module_defaults( $module ) {
110
		$module->set_defaults();
111
		if ( method_exists( $module, 'set_late_default' ) ) {
112
			add_action( 'init', array( $module, 'set_late_default' ), 90 );
113
		}
114
		return $module;
115
	}
116
117
}
118