PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 12.3.2
Jetpack – WP Security, Backup, Speed, & Growth v12.3.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 All 500 releases
jetpack / jetpack_vendor / automattic / jetpack-sync / src / class-modules.php
class-modules.php
161 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 1.6.3
120 * @since-jetpack 4.2.0
121 */
122 $modules = apply_filters( 'jetpack_sync_modules', self::DEFAULT_SYNC_MODULES );
123
124 $modules = array_map( array( __CLASS__, 'load_module' ), $modules );
125
126 return array_map( array( __CLASS__, 'set_module_defaults' ), $modules );
127 }
128
129 /**
130 * Returns an instance of the given module class.
131 *
132 * @access public
133 * @static
134 *
135 * @param string $module_class The classname of a Jetpack sync module.
136 *
137 * @return Automattic\Jetpack\Sync\Modules\Module
138 */
139 public static function load_module( $module_class ) {
140 return new $module_class();
141 }
142
143 /**
144 * Sets defaults for the given instance of a Jetpack sync module.
145 *
146 * @access public
147 * @static
148 *
149 * @param Automattic\Jetpack\Sync\Modules\Module $module Instance of a Jetpack sync module.
150 *
151 * @return Automattic\Jetpack\Sync\Modules\Module
152 */
153 public static function set_module_defaults( $module ) {
154 $module->set_defaults();
155 if ( method_exists( $module, 'set_late_default' ) ) {
156 add_action( 'init', array( $module, 'set_late_default' ), 90 );
157 }
158 return $module;
159 }
160 }
161