Completed
Push — update/sync-modules-set-defaul... ( 9160c3 )
by
unknown
10:27
created

Jetpack_Sync_Modules::initialize_module()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 3
rs 10
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
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module.php';
9
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-posts.php';
10
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-comments.php';
11
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-constants.php';
12
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-callables.php';
13
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-options.php';
14
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-network-options.php';
15
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-updates.php';
16
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-users.php';
17
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-themes.php';
18
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-attachments.php';
19
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-meta.php';
20
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-terms.php';
21
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-plugins.php';
22
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-protect.php';
23
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-full-sync.php';
24
require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-stats.php';
25
26
class Jetpack_Sync_Modules {
27
28
	private static $default_sync_modules = array(
29
		'Jetpack_Sync_Module_Constants',
30
		'Jetpack_Sync_Module_Callables',
31
		'Jetpack_Sync_Module_Options',
32
		'Jetpack_Sync_Module_Network_Options',
33
		'Jetpack_Sync_Module_Terms',
34
		'Jetpack_Sync_Module_Themes',
35
		'Jetpack_Sync_Module_Users',
36
		'Jetpack_Sync_Module_Posts',
37
		'Jetpack_Sync_Module_Comments',
38
		'Jetpack_Sync_Module_Updates',
39
		'Jetpack_Sync_Module_Attachments',
40
		'Jetpack_Sync_Module_Meta',
41
		'Jetpack_Sync_Module_Plugins',
42
		'Jetpack_Sync_Module_Protect',
43
		'Jetpack_Sync_Module_Full_Sync',
44
		'Jetpack_Sync_Module_Stats',
45
	);
46
47
	private static $initialized_modules = null;
48
49
	public static function get_modules() {
50
		if ( null === self::$initialized_modules ) {
51
			self::$initialized_modules = self::initialize_modules();
52
		}
53
54
		return self::$initialized_modules;
55
	}
56
57
	public static function set_defaults() {
58
		foreach ( self::get_modules() as $module ) {
59
			$module->set_defaults();
60
		}
61
	}
62
63
	public static function get_module( $module_name ) {
64
		foreach ( self::get_modules() as $module ) {
65
			if ( $module->name() === $module_name ) {
66
				return $module;
67
			}
68
		}
69
70
		return false;
71
	}
72
73
	static function initialize_modules() {
74
		/**
75
		 * Filters the list of class names of sync modules.
76
		 * If you add to this list, make sure any classes implement the
77
		 * Jetpack_Sync_Module interface.
78
		 *
79
		 * @since 4.2.0
80
		 */
81
		$modules = apply_filters( 'jetpack_sync_modules', self::$default_sync_modules );
82
83
		$modules = array_map( array( 'Jetpack_Sync_Modules', 'initialize_module' ), $modules );
84
85
		return array_map( array( 'Jetpack_Sync_Modules', 'set_module_defaults' ), $modules );
86
	}
87
88
	static function initialize_module( $module_name ) {
89
		return new $module_name;
90
	}
91
92
	static function set_module_defaults( $module ) {
93
		$module->set_defaults();
94
		if ( method_exists( $module, 'set_late_default' ) ) {
95
			add_action( 'init', array( $module, 'set_late_default' ), 90 );
96
		}
97
		return $module;
98
	}
99
100
}
101