Completed
Push — renovate/slack-web-api-5.x ( f1014a...4f2b74 )
by
unknown
30:35 queued 23:31
created

Modules::map_legacy_modules()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Simple wrapper that allows enumerating cached static instances
4
 * of sync modules.
5
 *
6
 * @package automattic/jetpack-sync
7
 */
8
9
namespace Automattic\Jetpack\Sync;
10
11
use Automattic\Jetpack\Sync\Modules\Module;
12
13
/**
14
 * A class to handle loading of sync modules.
15
 */
16
class Modules {
17
18
	/**
19
	 * Lists classnames of sync modules we load by default.
20
	 *
21
	 * @access public
22
	 *
23
	 * @var array
24
	 */
25
	const DEFAULT_SYNC_MODULES = array(
26
		'Automattic\\Jetpack\\Sync\\Modules\\Constants',
27
		'Automattic\\Jetpack\\Sync\\Modules\\Callables',
28
		'Automattic\\Jetpack\\Sync\\Modules\\Network_Options',
29
		'Automattic\\Jetpack\\Sync\\Modules\\Options',
30
		'Automattic\\Jetpack\\Sync\\Modules\\Terms',
31
		'Automattic\\Jetpack\\Sync\\Modules\\Menus',
32
		'Automattic\\Jetpack\\Sync\\Modules\\Themes',
33
		'Automattic\\Jetpack\\Sync\\Modules\\Users',
34
		'Automattic\\Jetpack\\Sync\\Modules\\Import',
35
		'Automattic\\Jetpack\\Sync\\Modules\\Posts',
36
		'Automattic\\Jetpack\\Sync\\Modules\\Protect',
37
		'Automattic\\Jetpack\\Sync\\Modules\\Comments',
38
		'Automattic\\Jetpack\\Sync\\Modules\\Updates',
39
		'Automattic\\Jetpack\\Sync\\Modules\\Attachments',
40
		'Automattic\\Jetpack\\Sync\\Modules\\Meta',
41
		'Automattic\\Jetpack\\Sync\\Modules\\Plugins',
42
		'Automattic\\Jetpack\\Sync\\Modules\\Stats',
43
		'Automattic\\Jetpack\\Sync\\Modules\\Full_Sync_Immediately',
44
		'Automattic\\Jetpack\\Sync\\Modules\\Term_Relationships',
45
	);
46
47
	/**
48
	 * Keeps track of initialized sync modules.
49
	 *
50
	 * @access private
51
	 * @static
52
	 *
53
	 * @var null|array
54
	 */
55
	private static $initialized_modules = null;
56
57
	/**
58
	 * Gets a list of initialized modules.
59
	 *
60
	 * @access public
61
	 * @static
62
	 *
63
	 * @return Module[]
64
	 */
65
	public static function get_modules() {
66
		if ( null === self::$initialized_modules ) {
67
			self::$initialized_modules = self::initialize_modules();
68
		}
69
70
		return self::$initialized_modules;
71
	}
72
73
	/**
74
	 * Sets defaults for all initialized modules.
75
	 *
76
	 * @access public
77
	 * @static
78
	 */
79
	public static function set_defaults() {
80
		foreach ( self::get_modules() as $module ) {
81
			$module->set_defaults();
82
		}
83
	}
84
85
	/**
86
	 * Gets the name of an initialized module. Returns false if given module has not been initialized.
87
	 *
88
	 * @access public
89
	 * @static
90
	 *
91
	 * @param string $module_name A module name.
92
	 *
93
	 * @return bool|Automattic\Jetpack\Sync\Modules\Module
94
	 */
95
	public static function get_module( $module_name ) {
96
		foreach ( self::get_modules() as $module ) {
97
			if ( $module->name() === $module_name ) {
98
				return $module;
99
			}
100
		}
101
102
		return false;
103
	}
104
105
	/**
106
	 * Loads and sets defaults for all declared modules.
107
	 *
108
	 * @access public
109
	 * @static
110
	 *
111
	 * @return array
112
	 */
113
	public static function initialize_modules() {
114
		/**
115
		 * Filters the list of class names of sync modules.
116
		 * If you add to this list, make sure any classes implement the
117
		 * Jetpack_Sync_Module interface.
118
		 *
119
		 * @since 4.2.0
120
		 */
121
		$modules = apply_filters( 'jetpack_sync_modules', self::DEFAULT_SYNC_MODULES );
122
123
		$modules = array_map( array( __CLASS__, 'load_module' ), $modules );
124
125
		return array_map( array( __CLASS__, 'set_module_defaults' ), $modules );
126
	}
127
128
	/**
129
	 * Returns an instance of the given module class.
130
	 *
131
	 * @access public
132
	 * @static
133
	 *
134
	 * @param string $module_class The classname of a Jetpack sync module.
135
	 *
136
	 * @return Automattic\Jetpack\Sync\Modules\Module
137
	 */
138
	public static function load_module( $module_class ) {
139
		return new $module_class();
140
	}
141
142
	/**
143
	 * Sets defaults for the given instance of a Jetpack sync module.
144
	 *
145
	 * @access public
146
	 * @static
147
	 *
148
	 * @param Automattic\Jetpack\Sync\Modules\Module $module Instance of a Jetpack sync module.
149
	 *
150
	 * @return Automattic\Jetpack\Sync\Modules\Module
151
	 */
152
	public static function set_module_defaults( $module ) {
153
		$module->set_defaults();
154
		if ( method_exists( $module, 'set_late_default' ) ) {
155
			add_action( 'init', array( $module, 'set_late_default' ), 90 );
156
		}
157
		return $module;
158
	}
159
}
160