Completed
Pull Request — Gutenberg/master (#354)
by
unknown
22:51 queued 08:16
created
core/services/assets/BlockAssetManager.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -113,7 +113,7 @@  discard block
 block discarded – undo
113 113
 
114 114
 
115 115
     /**
116
-     * @param       $handle
116
+     * @param       string $handle
117 117
      * @param array $dependencies
118 118
      * @since $VID:$
119 119
      * @return JavascriptAsset
@@ -136,7 +136,7 @@  discard block
 block discarded – undo
136 136
 
137 137
 
138 138
     /**
139
-     * @param        $handle
139
+     * @param        string $handle
140 140
      * @param array  $dependencies
141 141
      * @since $VID:$
142 142
      * @return StylesheetAsset
Please login to merge, or discard this patch.
Indentation   +199 added lines, -199 removed lines patch added patch discarded remove patch
@@ -19,203 +19,203 @@
 block discarded – undo
19 19
 abstract class BlockAssetManager extends AssetManager implements BlockAssetManagerInterface
20 20
 {
21 21
 
22
-    /**
23
-     * @var string $editor_script_handle
24
-     */
25
-    private $editor_script_handle;
26
-
27
-    /**
28
-     * @var string $editor_style_handle
29
-     */
30
-    private $editor_style_handle;
31
-
32
-    /**
33
-     * @var string $script_handle
34
-     */
35
-    private $script_handle;
36
-
37
-    /**
38
-     * @var string $style_handle
39
-     */
40
-    private $style_handle;
41
-
42
-
43
-    /**
44
-     * @return string
45
-     */
46
-    public function getEditorScriptHandle()
47
-    {
48
-        return $this->editor_script_handle;
49
-    }
50
-
51
-
52
-    /**
53
-     * @param string $editor_script_handle
54
-     */
55
-    public function setEditorScriptHandle($editor_script_handle)
56
-    {
57
-        $this->editor_script_handle = $editor_script_handle;
58
-    }
59
-
60
-
61
-    /**
62
-     * @return string
63
-     */
64
-    public function getEditorStyleHandle()
65
-    {
66
-        return $this->editor_style_handle;
67
-    }
68
-
69
-
70
-    /**
71
-     * @param string $editor_style_handle
72
-     */
73
-    public function setEditorStyleHandle($editor_style_handle)
74
-    {
75
-        $this->editor_style_handle = $editor_style_handle;
76
-    }
77
-
78
-
79
-    /**
80
-     * @return string
81
-     */
82
-    public function getScriptHandle()
83
-    {
84
-        return $this->script_handle;
85
-    }
86
-
87
-
88
-    /**
89
-     * @param string $script_handle
90
-     */
91
-    public function setScriptHandle($script_handle)
92
-    {
93
-        $this->script_handle = $script_handle;
94
-    }
95
-
96
-
97
-    /**
98
-     * @return string
99
-     */
100
-    public function getStyleHandle()
101
-    {
102
-        return $this->style_handle;
103
-    }
104
-
105
-
106
-    /**
107
-     * @param string $style_handle
108
-     */
109
-    public function setStyleHandle($style_handle)
110
-    {
111
-        $this->style_handle = $style_handle;
112
-    }
113
-
114
-
115
-    /**
116
-     * @param       $handle
117
-     * @param array $dependencies
118
-     * @since $VID:$
119
-     * @return JavascriptAsset
120
-     * @throws InvalidDataTypeException
121
-     * @throws InvalidEntityException
122
-     * @throws DuplicateCollectionIdentifierException
123
-     */
124
-    public function addEditorScript($handle, array $dependencies = array())
125
-    {
126
-        $this->setEditorStyleHandle($handle);
127
-        return parent::addJavascript(
128
-            $handle,
129
-            $this->registry->getJsUrl(
130
-                $this->domain->assetNamespace(),
131
-                $handle
132
-            ),
133
-            $this->addDefaultBlockScriptDependencies($dependencies)
134
-        );
135
-    }
136
-
137
-
138
-    /**
139
-     * @param        $handle
140
-     * @param array  $dependencies
141
-     * @since $VID:$
142
-     * @return StylesheetAsset
143
-     * @throws InvalidDataTypeException
144
-     * @throws InvalidEntityException
145
-     * @throws DuplicateCollectionIdentifierException
146
-     */
147
-    public function addEditorStyle($handle, array $dependencies = array())
148
-    {
149
-        $this->setEditorStyleHandle($handle);
150
-        return parent::addStylesheet(
151
-            $handle,
152
-            $this->registry->getCssUrl(
153
-                $this->domain->assetNamespace(),
154
-                $handle
155
-            ),
156
-            $dependencies
157
-        );
158
-    }
159
-
160
-
161
-    /**
162
-     * @param       $handle
163
-     * @param array $dependencies
164
-     * @since $VID:$
165
-     * @return JavascriptAsset
166
-     * @throws InvalidDataTypeException
167
-     * @throws InvalidEntityException
168
-     * @throws DuplicateCollectionIdentifierException
169
-     */
170
-    public function addScript($handle, array $dependencies = array())
171
-    {
172
-        $this->setScriptHandle($handle);
173
-        return parent::addJavascript(
174
-            $handle,
175
-            $this->registry->getJsUrl(
176
-                $this->domain->assetNamespace(),
177
-                $handle
178
-            ),
179
-            $this->addDefaultBlockScriptDependencies($dependencies)
180
-        );
181
-    }
182
-
183
-
184
-    /**
185
-     * @param        $handle
186
-     * @param array  $dependencies
187
-     * @since $VID:$
188
-     * @return StylesheetAsset
189
-     * @throws InvalidDataTypeException
190
-     * @throws InvalidEntityException
191
-     * @throws DuplicateCollectionIdentifierException
192
-     */
193
-    public function addStyle($handle, array $dependencies = array())
194
-    {
195
-        $this->setStyleHandle($handle);
196
-        return parent::addStylesheet(
197
-            $handle,
198
-            $this->registry->getCssUrl(
199
-                $this->domain->assetNamespace(),
200
-                $handle
201
-            ),
202
-            $dependencies
203
-        );
204
-    }
205
-
206
-
207
-    /**
208
-     * @param array $dependencies
209
-     * @return array
210
-     */
211
-    protected function addDefaultBlockScriptDependencies(array $dependencies)
212
-    {
213
-        return $dependencies + array(
214
-                'eejs-core',
215
-                'wp-blocks',    // Provides useful functions and components for extending the editor
216
-                'wp-i18n',      // Provides localization functions
217
-                'wp-element',   // Provides React.Component
218
-                'wp-components' // Provides many prebuilt components and controls
219
-            );
220
-    }
22
+	/**
23
+	 * @var string $editor_script_handle
24
+	 */
25
+	private $editor_script_handle;
26
+
27
+	/**
28
+	 * @var string $editor_style_handle
29
+	 */
30
+	private $editor_style_handle;
31
+
32
+	/**
33
+	 * @var string $script_handle
34
+	 */
35
+	private $script_handle;
36
+
37
+	/**
38
+	 * @var string $style_handle
39
+	 */
40
+	private $style_handle;
41
+
42
+
43
+	/**
44
+	 * @return string
45
+	 */
46
+	public function getEditorScriptHandle()
47
+	{
48
+		return $this->editor_script_handle;
49
+	}
50
+
51
+
52
+	/**
53
+	 * @param string $editor_script_handle
54
+	 */
55
+	public function setEditorScriptHandle($editor_script_handle)
56
+	{
57
+		$this->editor_script_handle = $editor_script_handle;
58
+	}
59
+
60
+
61
+	/**
62
+	 * @return string
63
+	 */
64
+	public function getEditorStyleHandle()
65
+	{
66
+		return $this->editor_style_handle;
67
+	}
68
+
69
+
70
+	/**
71
+	 * @param string $editor_style_handle
72
+	 */
73
+	public function setEditorStyleHandle($editor_style_handle)
74
+	{
75
+		$this->editor_style_handle = $editor_style_handle;
76
+	}
77
+
78
+
79
+	/**
80
+	 * @return string
81
+	 */
82
+	public function getScriptHandle()
83
+	{
84
+		return $this->script_handle;
85
+	}
86
+
87
+
88
+	/**
89
+	 * @param string $script_handle
90
+	 */
91
+	public function setScriptHandle($script_handle)
92
+	{
93
+		$this->script_handle = $script_handle;
94
+	}
95
+
96
+
97
+	/**
98
+	 * @return string
99
+	 */
100
+	public function getStyleHandle()
101
+	{
102
+		return $this->style_handle;
103
+	}
104
+
105
+
106
+	/**
107
+	 * @param string $style_handle
108
+	 */
109
+	public function setStyleHandle($style_handle)
110
+	{
111
+		$this->style_handle = $style_handle;
112
+	}
113
+
114
+
115
+	/**
116
+	 * @param       $handle
117
+	 * @param array $dependencies
118
+	 * @since $VID:$
119
+	 * @return JavascriptAsset
120
+	 * @throws InvalidDataTypeException
121
+	 * @throws InvalidEntityException
122
+	 * @throws DuplicateCollectionIdentifierException
123
+	 */
124
+	public function addEditorScript($handle, array $dependencies = array())
125
+	{
126
+		$this->setEditorStyleHandle($handle);
127
+		return parent::addJavascript(
128
+			$handle,
129
+			$this->registry->getJsUrl(
130
+				$this->domain->assetNamespace(),
131
+				$handle
132
+			),
133
+			$this->addDefaultBlockScriptDependencies($dependencies)
134
+		);
135
+	}
136
+
137
+
138
+	/**
139
+	 * @param        $handle
140
+	 * @param array  $dependencies
141
+	 * @since $VID:$
142
+	 * @return StylesheetAsset
143
+	 * @throws InvalidDataTypeException
144
+	 * @throws InvalidEntityException
145
+	 * @throws DuplicateCollectionIdentifierException
146
+	 */
147
+	public function addEditorStyle($handle, array $dependencies = array())
148
+	{
149
+		$this->setEditorStyleHandle($handle);
150
+		return parent::addStylesheet(
151
+			$handle,
152
+			$this->registry->getCssUrl(
153
+				$this->domain->assetNamespace(),
154
+				$handle
155
+			),
156
+			$dependencies
157
+		);
158
+	}
159
+
160
+
161
+	/**
162
+	 * @param       $handle
163
+	 * @param array $dependencies
164
+	 * @since $VID:$
165
+	 * @return JavascriptAsset
166
+	 * @throws InvalidDataTypeException
167
+	 * @throws InvalidEntityException
168
+	 * @throws DuplicateCollectionIdentifierException
169
+	 */
170
+	public function addScript($handle, array $dependencies = array())
171
+	{
172
+		$this->setScriptHandle($handle);
173
+		return parent::addJavascript(
174
+			$handle,
175
+			$this->registry->getJsUrl(
176
+				$this->domain->assetNamespace(),
177
+				$handle
178
+			),
179
+			$this->addDefaultBlockScriptDependencies($dependencies)
180
+		);
181
+	}
182
+
183
+
184
+	/**
185
+	 * @param        $handle
186
+	 * @param array  $dependencies
187
+	 * @since $VID:$
188
+	 * @return StylesheetAsset
189
+	 * @throws InvalidDataTypeException
190
+	 * @throws InvalidEntityException
191
+	 * @throws DuplicateCollectionIdentifierException
192
+	 */
193
+	public function addStyle($handle, array $dependencies = array())
194
+	{
195
+		$this->setStyleHandle($handle);
196
+		return parent::addStylesheet(
197
+			$handle,
198
+			$this->registry->getCssUrl(
199
+				$this->domain->assetNamespace(),
200
+				$handle
201
+			),
202
+			$dependencies
203
+		);
204
+	}
205
+
206
+
207
+	/**
208
+	 * @param array $dependencies
209
+	 * @return array
210
+	 */
211
+	protected function addDefaultBlockScriptDependencies(array $dependencies)
212
+	{
213
+		return $dependencies + array(
214
+				'eejs-core',
215
+				'wp-blocks',    // Provides useful functions and components for extending the editor
216
+				'wp-i18n',      // Provides localization functions
217
+				'wp-element',   // Provides React.Component
218
+				'wp-components' // Provides many prebuilt components and controls
219
+			);
220
+	}
221 221
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -212,9 +212,9 @@
 block discarded – undo
212 212
     {
213 213
         return $dependencies + array(
214 214
                 'eejs-core',
215
-                'wp-blocks',    // Provides useful functions and components for extending the editor
216
-                'wp-i18n',      // Provides localization functions
217
-                'wp-element',   // Provides React.Component
215
+                'wp-blocks', // Provides useful functions and components for extending the editor
216
+                'wp-i18n', // Provides localization functions
217
+                'wp-element', // Provides React.Component
218 218
                 'wp-components' // Provides many prebuilt components and controls
219 219
             );
220 220
     }
Please login to merge, or discard this patch.
core/services/assets/BlockAssetManagerInterface.php 1 patch
Indentation   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -13,26 +13,26 @@
 block discarded – undo
13 13
 interface BlockAssetManagerInterface
14 14
 {
15 15
 
16
-    /**
17
-     * @return string
18
-     */
19
-    public function getEditorScriptHandle();
16
+	/**
17
+	 * @return string
18
+	 */
19
+	public function getEditorScriptHandle();
20 20
 
21 21
 
22
-    /**
23
-     * @return string
24
-     */
25
-    public function getEditorStyleHandle();
22
+	/**
23
+	 * @return string
24
+	 */
25
+	public function getEditorStyleHandle();
26 26
 
27 27
 
28
-    /**
29
-     * @return string
30
-     */
31
-    public function getScriptHandle();
28
+	/**
29
+	 * @return string
30
+	 */
31
+	public function getScriptHandle();
32 32
 
33 33
 
34
-    /**
35
-     * @return string
36
-     */
37
-    public function getStyleHandle();
34
+	/**
35
+	 * @return string
36
+	 */
37
+	public function getStyleHandle();
38 38
 }
39 39
\ No newline at end of file
Please login to merge, or discard this patch.
core/services/assets/BlockAssetManagerCollection.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -16,27 +16,27 @@
 block discarded – undo
16 16
 class BlockAssetManagerCollection extends Collection
17 17
 {
18 18
 
19
-    /**
20
-     * Collection constructor
21
-     *
22
-     * @throws InvalidInterfaceException
23
-     */
24
-    public function __construct()
25
-    {
26
-        parent::__construct('EventEspresso\core\services\assets\BlockAssetManager');
27
-    }
19
+	/**
20
+	 * Collection constructor
21
+	 *
22
+	 * @throws InvalidInterfaceException
23
+	 */
24
+	public function __construct()
25
+	{
26
+		parent::__construct('EventEspresso\core\services\assets\BlockAssetManager');
27
+	}
28 28
 
29 29
 
30
-    /**
31
-     * @return  void
32
-     */
33
-    public function addAssets()
34
-    {
35
-        $this->rewind();
36
-        while ($this->valid()) {
37
-            $this->current()->addAssets();
38
-            $this->next();
39
-        }
40
-        $this->rewind();
41
-    }
30
+	/**
31
+	 * @return  void
32
+	 */
33
+	public function addAssets()
34
+	{
35
+		$this->rewind();
36
+		while ($this->valid()) {
37
+			$this->current()->addAssets();
38
+			$this->next();
39
+		}
40
+		$this->rewind();
41
+	}
42 42
 }
Please login to merge, or discard this patch.
core/services/editor/BlockRegistrationManager.php 2 patches
Indentation   +163 added lines, -163 removed lines patch added patch discarded remove patch
@@ -37,167 +37,167 @@
 block discarded – undo
37 37
 class BlockRegistrationManager extends BlockManager
38 38
 {
39 39
 
40
-    /**
41
-     * @var BlockAssetManagerCollection $block_asset_manager_collection
42
-     */
43
-    protected $block_asset_manager_collection;
44
-
45
-    /**
46
-     * @var Registry
47
-     * @since $VID:$
48
-     */
49
-    private $registry;
50
-
51
-
52
-    /**
53
-     * BlockRegistrationManager constructor.
54
-     *
55
-     * @param BlockAssetManagerCollection $block_asset_manager_collection
56
-     * @param BlockCollection             $blocks
57
-     * @param RequestInterface            $request
58
-     * @param Registry                    $registry
59
-     */
60
-    public function __construct(
61
-        BlockAssetManagerCollection $block_asset_manager_collection,
62
-        BlockCollection $blocks,
63
-        RequestInterface $request,
64
-        Registry $registry
65
-    ) {
66
-        $this->block_asset_manager_collection = $block_asset_manager_collection;
67
-        $this->registry = $registry;
68
-        parent::__construct($blocks, $request);
69
-    }
70
-
71
-
72
-    /**
73
-     *  Returns the name of a hookpoint to be used to call initialize()
74
-     *
75
-     * @return string
76
-     */
77
-    public function initHook()
78
-    {
79
-        return 'AHEE__EE_System__set_hooks_for_core';
80
-    }
81
-
82
-
83
-    /**
84
-     * Perform any early setup required for block editors to functions
85
-     *
86
-     * @return void
87
-     * @throws Exception
88
-     */
89
-    public function initialize()
90
-    {
91
-        $this->loadBlocks();
92
-        add_action('AHEE__EE_System__initialize', array($this, 'registerBlocks'));
93
-    }
94
-
95
-
96
-    /**
97
-     * @return CollectionInterface|BlockInterface[]
98
-     * @throws ReflectionException
99
-     * @throws InvalidArgumentException
100
-     * @throws EE_Error
101
-     * @throws InvalidClassException
102
-     * @throws InvalidDataTypeException
103
-     * @throws InvalidEntityException
104
-     * @throws InvalidFilePathException
105
-     * @throws InvalidIdentifierException
106
-     * @throws InvalidInterfaceException
107
-     */
108
-    protected function populateBlockCollection()
109
-    {
110
-        $loader = new CollectionLoader(
111
-            new CollectionDetails(
112
-                // collection name
113
-                'shortcodes',
114
-                // collection interface
115
-                'EventEspresso\core\domain\entities\editor\BlockInterface',
116
-                // FQCNs for classes to add (all classes within each namespace will be loaded)
117
-                apply_filters(
118
-                    'FHEE__EventEspresso_core_services_editor_BlockManager__populateBlockCollection__collection_FQCNs',
119
-                    array(
120
-                        // 'EventEspresso\core\domain\entities\editor\blocks\common',
121
-                        // 'EventEspresso\core\domain\entities\editor\blocks\editor',
122
-                        // 'EventEspresso\core\domain\entities\editor\blocks\widgets',
123
-                    )
124
-                ),
125
-                // filepaths to classes to add
126
-                array(),
127
-                // file mask to use if parsing folder for files to add
128
-                '',
129
-                // what to use as identifier for collection entities
130
-                // using CLASS NAME prevents duplicates (works like a singleton)
131
-                CollectionDetails::ID_CLASS_NAME
132
-            ),
133
-            $this->blocks
134
-        );
135
-        return $loader->getCollection();
136
-    }
137
-
138
-
139
-    /**
140
-     * populates the BlockCollection and calls initialize() on all installed blocks
141
-     *
142
-     * @return void
143
-     * @throws Exception
144
-     */
145
-    public function loadBlocks()
146
-    {
147
-        try {
148
-            $this->populateBlockCollection();
149
-            // cycle thru block loaders and initialize each loader
150
-            foreach ($this->blocks as $block) {
151
-                $block->initialize();
152
-            }
153
-        } catch (Exception $exception) {
154
-            new ExceptionStackTraceDisplay($exception);
155
-        }
156
-    }
157
-
158
-
159
-    /**
160
-     * calls registerBlock() and load assets for all installed blocks
161
-     *
162
-     * @return void
163
-     * @throws Exception
164
-     */
165
-    public function registerBlocks()
166
-    {
167
-        try {
168
-            // cycle thru block loader folders
169
-            foreach ($this->blocks as $block) {
170
-                // perform any setup required for the block
171
-                $block_type = $block->registerBlock();
172
-                if (! $block_type instanceof WP_Block_Type) {
173
-                    throw new InvalidEntityException($block_type, 'WP_Block_Type');
174
-                }
175
-                if (! $this->block_asset_manager_collection->has($block->assetManager())) {
176
-                    $this->block_asset_manager_collection->add($block->assetManager());
177
-                }
178
-                do_action(
179
-                    'FHEE__EventEspresso_core_services_editor_BlockManager__registerBlocks__block_type_registered',
180
-                    $block,
181
-                    $block_type
182
-                );
183
-            }
184
-            if ($this->block_asset_manager_collection->hasObjects()) {
185
-                $this->block_asset_manager_collection->addAssets();
186
-                // register primary assets
187
-                add_action('enqueue_block_assets', array($this, 'registerAssets'));
188
-            }
189
-        } catch (Exception $exception) {
190
-            new ExceptionStackTraceDisplay($exception);
191
-        }
192
-    }
193
-
194
-
195
-    /**
196
-     * @since $VID:$
197
-     * @throws InvalidDataTypeException
198
-     */
199
-    public function registerAssets()
200
-    {
201
-        $this->registry->registerScriptsAndStyles();
202
-    }
40
+	/**
41
+	 * @var BlockAssetManagerCollection $block_asset_manager_collection
42
+	 */
43
+	protected $block_asset_manager_collection;
44
+
45
+	/**
46
+	 * @var Registry
47
+	 * @since $VID:$
48
+	 */
49
+	private $registry;
50
+
51
+
52
+	/**
53
+	 * BlockRegistrationManager constructor.
54
+	 *
55
+	 * @param BlockAssetManagerCollection $block_asset_manager_collection
56
+	 * @param BlockCollection             $blocks
57
+	 * @param RequestInterface            $request
58
+	 * @param Registry                    $registry
59
+	 */
60
+	public function __construct(
61
+		BlockAssetManagerCollection $block_asset_manager_collection,
62
+		BlockCollection $blocks,
63
+		RequestInterface $request,
64
+		Registry $registry
65
+	) {
66
+		$this->block_asset_manager_collection = $block_asset_manager_collection;
67
+		$this->registry = $registry;
68
+		parent::__construct($blocks, $request);
69
+	}
70
+
71
+
72
+	/**
73
+	 *  Returns the name of a hookpoint to be used to call initialize()
74
+	 *
75
+	 * @return string
76
+	 */
77
+	public function initHook()
78
+	{
79
+		return 'AHEE__EE_System__set_hooks_for_core';
80
+	}
81
+
82
+
83
+	/**
84
+	 * Perform any early setup required for block editors to functions
85
+	 *
86
+	 * @return void
87
+	 * @throws Exception
88
+	 */
89
+	public function initialize()
90
+	{
91
+		$this->loadBlocks();
92
+		add_action('AHEE__EE_System__initialize', array($this, 'registerBlocks'));
93
+	}
94
+
95
+
96
+	/**
97
+	 * @return CollectionInterface|BlockInterface[]
98
+	 * @throws ReflectionException
99
+	 * @throws InvalidArgumentException
100
+	 * @throws EE_Error
101
+	 * @throws InvalidClassException
102
+	 * @throws InvalidDataTypeException
103
+	 * @throws InvalidEntityException
104
+	 * @throws InvalidFilePathException
105
+	 * @throws InvalidIdentifierException
106
+	 * @throws InvalidInterfaceException
107
+	 */
108
+	protected function populateBlockCollection()
109
+	{
110
+		$loader = new CollectionLoader(
111
+			new CollectionDetails(
112
+				// collection name
113
+				'shortcodes',
114
+				// collection interface
115
+				'EventEspresso\core\domain\entities\editor\BlockInterface',
116
+				// FQCNs for classes to add (all classes within each namespace will be loaded)
117
+				apply_filters(
118
+					'FHEE__EventEspresso_core_services_editor_BlockManager__populateBlockCollection__collection_FQCNs',
119
+					array(
120
+						// 'EventEspresso\core\domain\entities\editor\blocks\common',
121
+						// 'EventEspresso\core\domain\entities\editor\blocks\editor',
122
+						// 'EventEspresso\core\domain\entities\editor\blocks\widgets',
123
+					)
124
+				),
125
+				// filepaths to classes to add
126
+				array(),
127
+				// file mask to use if parsing folder for files to add
128
+				'',
129
+				// what to use as identifier for collection entities
130
+				// using CLASS NAME prevents duplicates (works like a singleton)
131
+				CollectionDetails::ID_CLASS_NAME
132
+			),
133
+			$this->blocks
134
+		);
135
+		return $loader->getCollection();
136
+	}
137
+
138
+
139
+	/**
140
+	 * populates the BlockCollection and calls initialize() on all installed blocks
141
+	 *
142
+	 * @return void
143
+	 * @throws Exception
144
+	 */
145
+	public function loadBlocks()
146
+	{
147
+		try {
148
+			$this->populateBlockCollection();
149
+			// cycle thru block loaders and initialize each loader
150
+			foreach ($this->blocks as $block) {
151
+				$block->initialize();
152
+			}
153
+		} catch (Exception $exception) {
154
+			new ExceptionStackTraceDisplay($exception);
155
+		}
156
+	}
157
+
158
+
159
+	/**
160
+	 * calls registerBlock() and load assets for all installed blocks
161
+	 *
162
+	 * @return void
163
+	 * @throws Exception
164
+	 */
165
+	public function registerBlocks()
166
+	{
167
+		try {
168
+			// cycle thru block loader folders
169
+			foreach ($this->blocks as $block) {
170
+				// perform any setup required for the block
171
+				$block_type = $block->registerBlock();
172
+				if (! $block_type instanceof WP_Block_Type) {
173
+					throw new InvalidEntityException($block_type, 'WP_Block_Type');
174
+				}
175
+				if (! $this->block_asset_manager_collection->has($block->assetManager())) {
176
+					$this->block_asset_manager_collection->add($block->assetManager());
177
+				}
178
+				do_action(
179
+					'FHEE__EventEspresso_core_services_editor_BlockManager__registerBlocks__block_type_registered',
180
+					$block,
181
+					$block_type
182
+				);
183
+			}
184
+			if ($this->block_asset_manager_collection->hasObjects()) {
185
+				$this->block_asset_manager_collection->addAssets();
186
+				// register primary assets
187
+				add_action('enqueue_block_assets', array($this, 'registerAssets'));
188
+			}
189
+		} catch (Exception $exception) {
190
+			new ExceptionStackTraceDisplay($exception);
191
+		}
192
+	}
193
+
194
+
195
+	/**
196
+	 * @since $VID:$
197
+	 * @throws InvalidDataTypeException
198
+	 */
199
+	public function registerAssets()
200
+	{
201
+		$this->registry->registerScriptsAndStyles();
202
+	}
203 203
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -169,10 +169,10 @@
 block discarded – undo
169 169
             foreach ($this->blocks as $block) {
170 170
                 // perform any setup required for the block
171 171
                 $block_type = $block->registerBlock();
172
-                if (! $block_type instanceof WP_Block_Type) {
172
+                if ( ! $block_type instanceof WP_Block_Type) {
173 173
                     throw new InvalidEntityException($block_type, 'WP_Block_Type');
174 174
                 }
175
-                if (! $this->block_asset_manager_collection->has($block->assetManager())) {
175
+                if ( ! $this->block_asset_manager_collection->has($block->assetManager())) {
176 176
                     $this->block_asset_manager_collection->add($block->assetManager());
177 177
                 }
178 178
                 do_action(
Please login to merge, or discard this patch.
core/services/editor/BlockManager.php 1 patch
Indentation   +74 added lines, -74 removed lines patch added patch discarded remove patch
@@ -22,78 +22,78 @@
 block discarded – undo
22 22
 abstract class BlockManager
23 23
 {
24 24
 
25
-    /**
26
-     * @var CollectionInterface|BlockInterface[] $blocks
27
-     */
28
-    protected $blocks;
29
-
30
-    /**
31
-     * @var RequestInterface $request
32
-     */
33
-    protected $request;
34
-
35
-    /**
36
-     * the post type that the current request applies to
37
-     *
38
-     * @var string $request_post_type
39
-     */
40
-    protected $request_post_type;
41
-
42
-    /**
43
-     * value of the 'page' $_GET param
44
-     *
45
-     * @var string $page
46
-     */
47
-    protected $page;
48
-
49
-    /**
50
-     * value of the 'action' $_GET param
51
-     *
52
-     * @var string $action
53
-     */
54
-    protected $action;
55
-
56
-
57
-    /**
58
-     * BlockManager constructor.
59
-     *
60
-     * @param BlockCollection $blocks
61
-     * @param RequestInterface      $request
62
-     */
63
-    public function __construct(
64
-        BlockCollection $blocks,
65
-        RequestInterface $request
66
-    ) {
67
-        $this->blocks            = $blocks;
68
-        $this->request           = $request;
69
-        $this->request_post_type = $this->request->getRequestParam('post_type', '');
70
-        $this->page              = $this->request->getRequestParam('page', '');
71
-        $this->action            = $this->request->getRequestParam('action', '');
72
-        add_action($this->initHook(), array($this, 'initialize'));
73
-    }
74
-
75
-
76
-    /**
77
-     *  Returns the name of a hookpoint to be used to call initialize()
78
-     *
79
-     * @return string
80
-     */
81
-    abstract public function initHook();
82
-
83
-
84
-    /**
85
-     * Perform any early setup required for block editors to functions
86
-     *
87
-     * @return void
88
-     */
89
-    abstract public function initialize();
90
-
91
-
92
-    /**
93
-     * @return string
94
-     */
95
-    public function currentRequestPostType()
96
-    {
97
-        return $this->request_post_type;
98
-    }
25
+	/**
26
+	 * @var CollectionInterface|BlockInterface[] $blocks
27
+	 */
28
+	protected $blocks;
29
+
30
+	/**
31
+	 * @var RequestInterface $request
32
+	 */
33
+	protected $request;
34
+
35
+	/**
36
+	 * the post type that the current request applies to
37
+	 *
38
+	 * @var string $request_post_type
39
+	 */
40
+	protected $request_post_type;
41
+
42
+	/**
43
+	 * value of the 'page' $_GET param
44
+	 *
45
+	 * @var string $page
46
+	 */
47
+	protected $page;
48
+
49
+	/**
50
+	 * value of the 'action' $_GET param
51
+	 *
52
+	 * @var string $action
53
+	 */
54
+	protected $action;
55
+
56
+
57
+	/**
58
+	 * BlockManager constructor.
59
+	 *
60
+	 * @param BlockCollection $blocks
61
+	 * @param RequestInterface      $request
62
+	 */
63
+	public function __construct(
64
+		BlockCollection $blocks,
65
+		RequestInterface $request
66
+	) {
67
+		$this->blocks            = $blocks;
68
+		$this->request           = $request;
69
+		$this->request_post_type = $this->request->getRequestParam('post_type', '');
70
+		$this->page              = $this->request->getRequestParam('page', '');
71
+		$this->action            = $this->request->getRequestParam('action', '');
72
+		add_action($this->initHook(), array($this, 'initialize'));
73
+	}
74
+
75
+
76
+	/**
77
+	 *  Returns the name of a hookpoint to be used to call initialize()
78
+	 *
79
+	 * @return string
80
+	 */
81
+	abstract public function initHook();
82
+
83
+
84
+	/**
85
+	 * Perform any early setup required for block editors to functions
86
+	 *
87
+	 * @return void
88
+	 */
89
+	abstract public function initialize();
90
+
91
+
92
+	/**
93
+	 * @return string
94
+	 */
95
+	public function currentRequestPostType()
96
+	{
97
+		return $this->request_post_type;
98
+	}
99 99
 }
Please login to merge, or discard this patch.
core/EE_System.core.php 2 patches
Indentation   +1269 added lines, -1269 removed lines patch added patch discarded remove patch
@@ -28,1273 +28,1273 @@
 block discarded – undo
28 28
 {
29 29
 
30 30
 
31
-    /**
32
-     * indicates this is a 'normal' request. Ie, not activation, nor upgrade, nor activation.
33
-     * So examples of this would be a normal GET request on the frontend or backend, or a POST, etc
34
-     */
35
-    const req_type_normal = 0;
36
-
37
-    /**
38
-     * Indicates this is a brand new installation of EE so we should install
39
-     * tables and default data etc
40
-     */
41
-    const req_type_new_activation = 1;
42
-
43
-    /**
44
-     * we've detected that EE has been reactivated (or EE was activated during maintenance mode,
45
-     * and we just exited maintenance mode). We MUST check the database is setup properly
46
-     * and that default data is setup too
47
-     */
48
-    const req_type_reactivation = 2;
49
-
50
-    /**
51
-     * indicates that EE has been upgraded since its previous request.
52
-     * We may have data migration scripts to call and will want to trigger maintenance mode
53
-     */
54
-    const req_type_upgrade = 3;
55
-
56
-    /**
57
-     * TODO  will detect that EE has been DOWNGRADED. We probably don't want to run in this case...
58
-     */
59
-    const req_type_downgrade = 4;
60
-
61
-    /**
62
-     * @deprecated since version 4.6.0.dev.006
63
-     * Now whenever a new_activation is detected the request type is still just
64
-     * new_activation (same for reactivation, upgrade, downgrade etc), but if we'r ein maintenance mode
65
-     * EE_System::initialize_db_if_no_migrations_required and EE_Addon::initialize_db_if_no_migrations_required
66
-     * will instead enqueue that EE plugin's db initialization for when we're taken out of maintenance mode.
67
-     * (Specifically, when the migration manager indicates migrations are finished
68
-     * EE_Data_Migration_Manager::initialize_db_for_enqueued_ee_plugins() will be called)
69
-     */
70
-    const req_type_activation_but_not_installed = 5;
71
-
72
-    /**
73
-     * option prefix for recording the activation history (like core's "espresso_db_update") of addons
74
-     */
75
-    const addon_activation_history_option_prefix = 'ee_addon_activation_history_';
76
-
77
-
78
-    /**
79
-     * @var EE_System $_instance
80
-     */
81
-    private static $_instance;
82
-
83
-    /**
84
-     * @var EE_Registry $registry
85
-     */
86
-    private $registry;
87
-
88
-    /**
89
-     * @var LoaderInterface $loader
90
-     */
91
-    private $loader;
92
-
93
-    /**
94
-     * @var EE_Capabilities $capabilities
95
-     */
96
-    private $capabilities;
97
-
98
-    /**
99
-     * @var RequestInterface $request
100
-     */
101
-    private $request;
102
-
103
-    /**
104
-     * @var EE_Maintenance_Mode $maintenance_mode
105
-     */
106
-    private $maintenance_mode;
107
-
108
-    /**
109
-     * Stores which type of request this is, options being one of the constants on EE_System starting with req_type_*.
110
-     * It can be a brand-new activation, a reactivation, an upgrade, a downgrade, or a normal request.
111
-     *
112
-     * @var int $_req_type
113
-     */
114
-    private $_req_type;
115
-
116
-    /**
117
-     * Whether or not there was a non-micro version change in EE core version during this request
118
-     *
119
-     * @var boolean $_major_version_change
120
-     */
121
-    private $_major_version_change = false;
122
-
123
-    /**
124
-     * A Context DTO dedicated solely to identifying the current request type.
125
-     *
126
-     * @var RequestTypeContextCheckerInterface $request_type
127
-     */
128
-    private $request_type;
129
-
130
-
131
-    /**
132
-     * @singleton method used to instantiate class object
133
-     * @param EE_Registry|null         $registry
134
-     * @param LoaderInterface|null     $loader
135
-     * @param RequestInterface|null    $request
136
-     * @param EE_Maintenance_Mode|null $maintenance_mode
137
-     * @return EE_System
138
-     */
139
-    public static function instance(
140
-        EE_Registry $registry = null,
141
-        LoaderInterface $loader = null,
142
-        RequestInterface $request = null,
143
-        EE_Maintenance_Mode $maintenance_mode = null
144
-    ) {
145
-        // check if class object is instantiated
146
-        if (! self::$_instance instanceof EE_System) {
147
-            self::$_instance = new self($registry, $loader, $request, $maintenance_mode);
148
-        }
149
-        return self::$_instance;
150
-    }
151
-
152
-
153
-    /**
154
-     * resets the instance and returns it
155
-     *
156
-     * @return EE_System
157
-     */
158
-    public static function reset()
159
-    {
160
-        self::$_instance->_req_type = null;
161
-        // make sure none of the old hooks are left hanging around
162
-        remove_all_actions('AHEE__EE_System__perform_activations_upgrades_and_migrations');
163
-        // we need to reset the migration manager in order for it to detect DMSs properly
164
-        EE_Data_Migration_Manager::reset();
165
-        self::instance()->detect_activations_or_upgrades();
166
-        self::instance()->perform_activations_upgrades_and_migrations();
167
-        return self::instance();
168
-    }
169
-
170
-
171
-    /**
172
-     * sets hooks for running rest of system
173
-     * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
174
-     * starting EE Addons from any other point may lead to problems
175
-     *
176
-     * @param EE_Registry         $registry
177
-     * @param LoaderInterface     $loader
178
-     * @param RequestInterface    $request
179
-     * @param EE_Maintenance_Mode $maintenance_mode
180
-     */
181
-    private function __construct(
182
-        EE_Registry $registry,
183
-        LoaderInterface $loader,
184
-        RequestInterface $request,
185
-        EE_Maintenance_Mode $maintenance_mode
186
-    ) {
187
-        $this->registry = $registry;
188
-        $this->loader = $loader;
189
-        $this->request = $request;
190
-        $this->maintenance_mode = $maintenance_mode;
191
-        do_action('AHEE__EE_System__construct__begin', $this);
192
-        add_action(
193
-            'AHEE__EE_Bootstrap__load_espresso_addons',
194
-            array($this, 'loadCapabilities'),
195
-            5
196
-        );
197
-        add_action(
198
-            'AHEE__EE_Bootstrap__load_espresso_addons',
199
-            array($this, 'loadCommandBus'),
200
-            7
201
-        );
202
-        add_action(
203
-            'AHEE__EE_Bootstrap__load_espresso_addons',
204
-            array($this, 'loadPluginApi'),
205
-            9
206
-        );
207
-        // allow addons to load first so that they can register autoloaders, set hooks for running DMS's, etc
208
-        add_action(
209
-            'AHEE__EE_Bootstrap__load_espresso_addons',
210
-            array($this, 'load_espresso_addons')
211
-        );
212
-        // when an ee addon is activated, we want to call the core hook(s) again
213
-        // because the newly-activated addon didn't get a chance to run at all
214
-        add_action('activate_plugin', array($this, 'load_espresso_addons'), 1);
215
-        // detect whether install or upgrade
216
-        add_action(
217
-            'AHEE__EE_Bootstrap__detect_activations_or_upgrades',
218
-            array($this, 'detect_activations_or_upgrades'),
219
-            3
220
-        );
221
-        // load EE_Config, EE_Textdomain, etc
222
-        add_action(
223
-            'AHEE__EE_Bootstrap__load_core_configuration',
224
-            array($this, 'load_core_configuration'),
225
-            5
226
-        );
227
-        // load EE_Config, EE_Textdomain, etc
228
-        add_action(
229
-            'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets',
230
-            array($this, 'register_shortcodes_modules_and_widgets'),
231
-            7
232
-        );
233
-        // you wanna get going? I wanna get going... let's get going!
234
-        add_action(
235
-            'AHEE__EE_Bootstrap__brew_espresso',
236
-            array($this, 'brew_espresso'),
237
-            9
238
-        );
239
-        // other housekeeping
240
-        // exclude EE critical pages from wp_list_pages
241
-        add_filter(
242
-            'wp_list_pages_excludes',
243
-            array($this, 'remove_pages_from_wp_list_pages'),
244
-            10
245
-        );
246
-        // ALL EE Addons should use the following hook point to attach their initial setup too
247
-        // it's extremely important for EE Addons to register any class autoloaders so that they can be available when the EE_Config loads
248
-        do_action('AHEE__EE_System__construct__complete', $this);
249
-    }
250
-
251
-
252
-    /**
253
-     * load and setup EE_Capabilities
254
-     *
255
-     * @return void
256
-     * @throws EE_Error
257
-     */
258
-    public function loadCapabilities()
259
-    {
260
-        $this->capabilities = $this->loader->getShared('EE_Capabilities');
261
-        add_action(
262
-            'AHEE__EE_Capabilities__init_caps__before_initialization',
263
-            function () {
264
-                LoaderFactory::getLoader()->getShared('EE_Payment_Method_Manager');
265
-            }
266
-        );
267
-    }
268
-
269
-
270
-    /**
271
-     * create and cache the CommandBus, and also add middleware
272
-     * The CapChecker middleware requires the use of EE_Capabilities
273
-     * which is why we need to load the CommandBus after Caps are set up
274
-     *
275
-     * @return void
276
-     * @throws EE_Error
277
-     */
278
-    public function loadCommandBus()
279
-    {
280
-        $this->loader->getShared(
281
-            'CommandBusInterface',
282
-            array(
283
-                null,
284
-                apply_filters(
285
-                    'FHEE__EE_Load_Espresso_Core__handle_request__CommandBus_middleware',
286
-                    array(
287
-                        $this->loader->getShared('EventEspresso\core\services\commands\middleware\CapChecker'),
288
-                        $this->loader->getShared('EventEspresso\core\services\commands\middleware\AddActionHook'),
289
-                    )
290
-                ),
291
-            )
292
-        );
293
-    }
294
-
295
-
296
-    /**
297
-     * @return void
298
-     * @throws EE_Error
299
-     */
300
-    public function loadPluginApi()
301
-    {
302
-        // set autoloaders for all of the classes implementing EEI_Plugin_API
303
-        // which provide helpers for EE plugin authors to more easily register certain components with EE.
304
-        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
305
-        $this->loader->getShared('EE_Request_Handler');
306
-    }
307
-
308
-
309
-    /**
310
-     * @param string $addon_name
311
-     * @param string $version_constant
312
-     * @param string $min_version_required
313
-     * @param string $load_callback
314
-     * @param string $plugin_file_constant
315
-     * @return void
316
-     */
317
-    private function deactivateIncompatibleAddon(
318
-        $addon_name,
319
-        $version_constant,
320
-        $min_version_required,
321
-        $load_callback,
322
-        $plugin_file_constant
323
-    ) {
324
-        if (! defined($version_constant)) {
325
-            return;
326
-        }
327
-        $addon_version = constant($version_constant);
328
-        if ($addon_version && version_compare($addon_version, $min_version_required, '<')) {
329
-            remove_action('AHEE__EE_System__load_espresso_addons', $load_callback);
330
-            if (! function_exists('deactivate_plugins')) {
331
-                require_once ABSPATH . 'wp-admin/includes/plugin.php';
332
-            }
333
-            deactivate_plugins(plugin_basename(constant($plugin_file_constant)));
334
-            unset($_GET['activate'], $_REQUEST['activate'], $_GET['activate-multi'], $_REQUEST['activate-multi']);
335
-            EE_Error::add_error(
336
-                sprintf(
337
-                    esc_html__(
338
-                        'We\'re sorry, but the Event Espresso %1$s addon was deactivated because version %2$s or higher is required with this version of Event Espresso core.',
339
-                        'event_espresso'
340
-                    ),
341
-                    $addon_name,
342
-                    $min_version_required
343
-                ),
344
-                __FILE__,
345
-                __FUNCTION__ . "({$addon_name})",
346
-                __LINE__
347
-            );
348
-            EE_Error::get_notices(false, true);
349
-        }
350
-    }
351
-
352
-
353
-    /**
354
-     * load_espresso_addons
355
-     * allow addons to load first so that they can set hooks for running DMS's, etc
356
-     * this is hooked into both:
357
-     *    'AHEE__EE_Bootstrap__load_core_configuration'
358
-     *        which runs during the WP 'plugins_loaded' action at priority 5
359
-     *    and the WP 'activate_plugin' hook point
360
-     *
361
-     * @access public
362
-     * @return void
363
-     */
364
-    public function load_espresso_addons()
365
-    {
366
-        $this->deactivateIncompatibleAddon(
367
-            'Wait Lists',
368
-            'EE_WAIT_LISTS_VERSION',
369
-            '1.0.0.beta.074',
370
-            'load_espresso_wait_lists',
371
-            'EE_WAIT_LISTS_PLUGIN_FILE'
372
-        );
373
-        $this->deactivateIncompatibleAddon(
374
-            'Automated Upcoming Event Notifications',
375
-            'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_VERSION',
376
-            '1.0.0.beta.091',
377
-            'load_espresso_automated_upcoming_event_notification',
378
-            'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_PLUGIN_FILE'
379
-        );
380
-        do_action('AHEE__EE_System__load_espresso_addons');
381
-        // if the WP API basic auth plugin isn't already loaded, load it now.
382
-        // We want it for mobile apps. Just include the entire plugin
383
-        // also, don't load the basic auth when a plugin is getting activated, because
384
-        // it could be the basic auth plugin, and it doesn't check if its methods are already defined
385
-        // and causes a fatal error
386
-        if ($this->request->getRequestParam('activate') !== 'true'
387
-            && ! function_exists('json_basic_auth_handler')
388
-            && ! function_exists('json_basic_auth_error')
389
-            && ! in_array(
390
-                $this->request->getRequestParam('action'),
391
-                array('activate', 'activate-selected'),
392
-                true
393
-            )
394
-        ) {
395
-            include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
396
-        }
397
-        do_action('AHEE__EE_System__load_espresso_addons__complete');
398
-    }
399
-
400
-
401
-    /**
402
-     * detect_activations_or_upgrades
403
-     * Checks for activation or upgrade of core first;
404
-     * then also checks if any registered addons have been activated or upgraded
405
-     * This is hooked into 'AHEE__EE_Bootstrap__detect_activations_or_upgrades'
406
-     * which runs during the WP 'plugins_loaded' action at priority 3
407
-     *
408
-     * @access public
409
-     * @return void
410
-     */
411
-    public function detect_activations_or_upgrades()
412
-    {
413
-        // first off: let's make sure to handle core
414
-        $this->detect_if_activation_or_upgrade();
415
-        foreach ($this->registry->addons as $addon) {
416
-            if ($addon instanceof EE_Addon) {
417
-                // detect teh request type for that addon
418
-                $addon->detect_activation_or_upgrade();
419
-            }
420
-        }
421
-    }
422
-
423
-
424
-    /**
425
-     * detect_if_activation_or_upgrade
426
-     * Takes care of detecting whether this is a brand new install or code upgrade,
427
-     * and either setting up the DB or setting up maintenance mode etc.
428
-     *
429
-     * @access public
430
-     * @return void
431
-     */
432
-    public function detect_if_activation_or_upgrade()
433
-    {
434
-        do_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin');
435
-        // check if db has been updated, or if its a brand-new installation
436
-        $espresso_db_update = $this->fix_espresso_db_upgrade_option();
437
-        $request_type = $this->detect_req_type($espresso_db_update);
438
-        // EEH_Debug_Tools::printr( $request_type, '$request_type', __FILE__, __LINE__ );
439
-        switch ($request_type) {
440
-            case EE_System::req_type_new_activation:
441
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__new_activation');
442
-                $this->_handle_core_version_change($espresso_db_update);
443
-                break;
444
-            case EE_System::req_type_reactivation:
445
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__reactivation');
446
-                $this->_handle_core_version_change($espresso_db_update);
447
-                break;
448
-            case EE_System::req_type_upgrade:
449
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__upgrade');
450
-                // migrations may be required now that we've upgraded
451
-                $this->maintenance_mode->set_maintenance_mode_if_db_old();
452
-                $this->_handle_core_version_change($espresso_db_update);
453
-                break;
454
-            case EE_System::req_type_downgrade:
455
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__downgrade');
456
-                // its possible migrations are no longer required
457
-                $this->maintenance_mode->set_maintenance_mode_if_db_old();
458
-                $this->_handle_core_version_change($espresso_db_update);
459
-                break;
460
-            case EE_System::req_type_normal:
461
-            default:
462
-                break;
463
-        }
464
-        do_action('AHEE__EE_System__detect_if_activation_or_upgrade__complete');
465
-    }
466
-
467
-
468
-    /**
469
-     * Updates the list of installed versions and sets hooks for
470
-     * initializing the database later during the request
471
-     *
472
-     * @param array $espresso_db_update
473
-     */
474
-    private function _handle_core_version_change($espresso_db_update)
475
-    {
476
-        $this->update_list_of_installed_versions($espresso_db_update);
477
-        // get ready to verify the DB is ok (provided we aren't in maintenance mode, of course)
478
-        add_action(
479
-            'AHEE__EE_System__perform_activations_upgrades_and_migrations',
480
-            array($this, 'initialize_db_if_no_migrations_required')
481
-        );
482
-    }
483
-
484
-
485
-    /**
486
-     * standardizes the wp option 'espresso_db_upgrade' which actually stores
487
-     * information about what versions of EE have been installed and activated,
488
-     * NOT necessarily the state of the database
489
-     *
490
-     * @param mixed $espresso_db_update           the value of the WordPress option.
491
-     *                                            If not supplied, fetches it from the options table
492
-     * @return array the correct value of 'espresso_db_upgrade', after saving it, if it needed correction
493
-     */
494
-    private function fix_espresso_db_upgrade_option($espresso_db_update = null)
495
-    {
496
-        do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
497
-        if (! $espresso_db_update) {
498
-            $espresso_db_update = get_option('espresso_db_update');
499
-        }
500
-        // check that option is an array
501
-        if (! is_array($espresso_db_update)) {
502
-            // if option is FALSE, then it never existed
503
-            if ($espresso_db_update === false) {
504
-                // make $espresso_db_update an array and save option with autoload OFF
505
-                $espresso_db_update = array();
506
-                add_option('espresso_db_update', $espresso_db_update, '', 'no');
507
-            } else {
508
-                // option is NOT FALSE but also is NOT an array, so make it an array and save it
509
-                $espresso_db_update = array($espresso_db_update => array());
510
-                update_option('espresso_db_update', $espresso_db_update);
511
-            }
512
-        } else {
513
-            $corrected_db_update = array();
514
-            // if IS an array, but is it an array where KEYS are version numbers, and values are arrays?
515
-            foreach ($espresso_db_update as $should_be_version_string => $should_be_array) {
516
-                if (is_int($should_be_version_string) && ! is_array($should_be_array)) {
517
-                    // the key is an int, and the value IS NOT an array
518
-                    // so it must be numerically-indexed, where values are versions installed...
519
-                    // fix it!
520
-                    $version_string = $should_be_array;
521
-                    $corrected_db_update[ $version_string ] = array('unknown-date');
522
-                } else {
523
-                    // ok it checks out
524
-                    $corrected_db_update[ $should_be_version_string ] = $should_be_array;
525
-                }
526
-            }
527
-            $espresso_db_update = $corrected_db_update;
528
-            update_option('espresso_db_update', $espresso_db_update);
529
-        }
530
-        do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__complete', $espresso_db_update);
531
-        return $espresso_db_update;
532
-    }
533
-
534
-
535
-    /**
536
-     * Does the traditional work of setting up the plugin's database and adding default data.
537
-     * If migration script/process did not exist, this is what would happen on every activation/reactivation/upgrade.
538
-     * NOTE: if we're in maintenance mode (which would be the case if we detect there are data
539
-     * migration scripts that need to be run and a version change happens), enqueues core for database initialization,
540
-     * so that it will be done when migrations are finished
541
-     *
542
-     * @param boolean $initialize_addons_too if true, we double-check addons' database tables etc too;
543
-     * @param boolean $verify_schema         if true will re-check the database tables have the correct schema.
544
-     *                                       This is a resource-intensive job
545
-     *                                       so we prefer to only do it when necessary
546
-     * @return void
547
-     * @throws EE_Error
548
-     */
549
-    public function initialize_db_if_no_migrations_required($initialize_addons_too = false, $verify_schema = true)
550
-    {
551
-        $request_type = $this->detect_req_type();
552
-        // only initialize system if we're not in maintenance mode.
553
-        if ($this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance) {
554
-            /** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
555
-            $rewrite_rules = $this->loader->getShared(
556
-                'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
557
-            );
558
-            $rewrite_rules->flush();
559
-            if ($verify_schema) {
560
-                EEH_Activation::initialize_db_and_folders();
561
-            }
562
-            EEH_Activation::initialize_db_content();
563
-            EEH_Activation::system_initialization();
564
-            if ($initialize_addons_too) {
565
-                $this->initialize_addons();
566
-            }
567
-        } else {
568
-            EE_Data_Migration_Manager::instance()->enqueue_db_initialization_for('Core');
569
-        }
570
-        if ($request_type === EE_System::req_type_new_activation
571
-            || $request_type === EE_System::req_type_reactivation
572
-            || (
573
-                $request_type === EE_System::req_type_upgrade
574
-                && $this->is_major_version_change()
575
-            )
576
-        ) {
577
-            add_action('AHEE__EE_System__initialize_last', array($this, 'redirect_to_about_ee'), 9);
578
-        }
579
-    }
580
-
581
-
582
-    /**
583
-     * Initializes the db for all registered addons
584
-     *
585
-     * @throws EE_Error
586
-     */
587
-    public function initialize_addons()
588
-    {
589
-        // foreach registered addon, make sure its db is up-to-date too
590
-        foreach ($this->registry->addons as $addon) {
591
-            if ($addon instanceof EE_Addon) {
592
-                $addon->initialize_db_if_no_migrations_required();
593
-            }
594
-        }
595
-    }
596
-
597
-
598
-    /**
599
-     * Adds the current code version to the saved wp option which stores a list of all ee versions ever installed.
600
-     *
601
-     * @param    array  $version_history
602
-     * @param    string $current_version_to_add version to be added to the version history
603
-     * @return    boolean success as to whether or not this option was changed
604
-     */
605
-    public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
606
-    {
607
-        if (! $version_history) {
608
-            $version_history = $this->fix_espresso_db_upgrade_option($version_history);
609
-        }
610
-        if ($current_version_to_add === null) {
611
-            $current_version_to_add = espresso_version();
612
-        }
613
-        $version_history[ $current_version_to_add ][] = date('Y-m-d H:i:s', time());
614
-        // re-save
615
-        return update_option('espresso_db_update', $version_history);
616
-    }
617
-
618
-
619
-    /**
620
-     * Detects if the current version indicated in the has existed in the list of
621
-     * previously-installed versions of EE (espresso_db_update). Does NOT modify it (ie, no side-effect)
622
-     *
623
-     * @param array $espresso_db_update array from the wp option stored under the name 'espresso_db_update'.
624
-     *                                  If not supplied, fetches it from the options table.
625
-     *                                  Also, caches its result so later parts of the code can also know whether
626
-     *                                  there's been an update or not. This way we can add the current version to
627
-     *                                  espresso_db_update, but still know if this is a new install or not
628
-     * @return int one of the constants on EE_System::req_type_
629
-     */
630
-    public function detect_req_type($espresso_db_update = null)
631
-    {
632
-        if ($this->_req_type === null) {
633
-            $espresso_db_update = ! empty($espresso_db_update)
634
-                ? $espresso_db_update
635
-                : $this->fix_espresso_db_upgrade_option();
636
-            $this->_req_type = EE_System::detect_req_type_given_activation_history(
637
-                $espresso_db_update,
638
-                'ee_espresso_activation',
639
-                espresso_version()
640
-            );
641
-            $this->_major_version_change = $this->_detect_major_version_change($espresso_db_update);
642
-            $this->request->setIsActivation($this->_req_type !== EE_System::req_type_normal);
643
-        }
644
-        return $this->_req_type;
645
-    }
646
-
647
-
648
-    /**
649
-     * Returns whether or not there was a non-micro version change (ie, change in either
650
-     * the first or second number in the version. Eg 4.9.0.rc.001 to 4.10.0.rc.000,
651
-     * but not 4.9.0.rc.0001 to 4.9.1.rc.0001
652
-     *
653
-     * @param $activation_history
654
-     * @return bool
655
-     */
656
-    private function _detect_major_version_change($activation_history)
657
-    {
658
-        $previous_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history);
659
-        $previous_version_parts = explode('.', $previous_version);
660
-        $current_version_parts = explode('.', espresso_version());
661
-        return isset($previous_version_parts[0], $previous_version_parts[1], $current_version_parts[0], $current_version_parts[1])
662
-               && ($previous_version_parts[0] !== $current_version_parts[0]
663
-                   || $previous_version_parts[1] !== $current_version_parts[1]
664
-               );
665
-    }
666
-
667
-
668
-    /**
669
-     * Returns true if either the major or minor version of EE changed during this request.
670
-     * Eg 4.9.0.rc.001 to 4.10.0.rc.000, but not 4.9.0.rc.0001 to 4.9.1.rc.0001
671
-     *
672
-     * @return bool
673
-     */
674
-    public function is_major_version_change()
675
-    {
676
-        return $this->_major_version_change;
677
-    }
678
-
679
-
680
-    /**
681
-     * Determines the request type for any ee addon, given three piece of info: the current array of activation
682
-     * histories (for core that' 'espresso_db_update' wp option); the name of the WordPress option which is temporarily
683
-     * set upon activation of the plugin (for core it's 'ee_espresso_activation'); and the version that this plugin was
684
-     * just activated to (for core that will always be espresso_version())
685
-     *
686
-     * @param array  $activation_history_for_addon     the option's value which stores the activation history for this
687
-     *                                                 ee plugin. for core that's 'espresso_db_update'
688
-     * @param string $activation_indicator_option_name the name of the WordPress option that is temporarily set to
689
-     *                                                 indicate that this plugin was just activated
690
-     * @param string $version_to_upgrade_to            the version that was just upgraded to (for core that will be
691
-     *                                                 espresso_version())
692
-     * @return int one of the constants on EE_System::req_type_*
693
-     */
694
-    public static function detect_req_type_given_activation_history(
695
-        $activation_history_for_addon,
696
-        $activation_indicator_option_name,
697
-        $version_to_upgrade_to
698
-    ) {
699
-        $version_is_higher = self::_new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to);
700
-        if ($activation_history_for_addon) {
701
-            // it exists, so this isn't a completely new install
702
-            // check if this version already in that list of previously installed versions
703
-            if (! isset($activation_history_for_addon[ $version_to_upgrade_to ])) {
704
-                // it a version we haven't seen before
705
-                if ($version_is_higher === 1) {
706
-                    $req_type = EE_System::req_type_upgrade;
707
-                } else {
708
-                    $req_type = EE_System::req_type_downgrade;
709
-                }
710
-                delete_option($activation_indicator_option_name);
711
-            } else {
712
-                // its not an update. maybe a reactivation?
713
-                if (get_option($activation_indicator_option_name, false)) {
714
-                    if ($version_is_higher === -1) {
715
-                        $req_type = EE_System::req_type_downgrade;
716
-                    } elseif ($version_is_higher === 0) {
717
-                        // we've seen this version before, but it's an activation. must be a reactivation
718
-                        $req_type = EE_System::req_type_reactivation;
719
-                    } else {// $version_is_higher === 1
720
-                        $req_type = EE_System::req_type_upgrade;
721
-                    }
722
-                    delete_option($activation_indicator_option_name);
723
-                } else {
724
-                    // we've seen this version before and the activation indicate doesn't show it was just activated
725
-                    if ($version_is_higher === -1) {
726
-                        $req_type = EE_System::req_type_downgrade;
727
-                    } elseif ($version_is_higher === 0) {
728
-                        // we've seen this version before and it's not an activation. its normal request
729
-                        $req_type = EE_System::req_type_normal;
730
-                    } else {// $version_is_higher === 1
731
-                        $req_type = EE_System::req_type_upgrade;
732
-                    }
733
-                }
734
-            }
735
-        } else {
736
-            // brand new install
737
-            $req_type = EE_System::req_type_new_activation;
738
-            delete_option($activation_indicator_option_name);
739
-        }
740
-        return $req_type;
741
-    }
742
-
743
-
744
-    /**
745
-     * Detects if the $version_to_upgrade_to is higher than the most recent version in
746
-     * the $activation_history_for_addon
747
-     *
748
-     * @param array  $activation_history_for_addon (keys are versions, values are arrays of times activated,
749
-     *                                             sometimes containing 'unknown-date'
750
-     * @param string $version_to_upgrade_to        (current version)
751
-     * @return int results of version_compare( $version_to_upgrade_to, $most_recently_active_version ).
752
-     *                                             ie, -1 if $version_to_upgrade_to is LOWER (downgrade);
753
-     *                                             0 if $version_to_upgrade_to MATCHES (reactivation or normal request);
754
-     *                                             1 if $version_to_upgrade_to is HIGHER (upgrade) ;
755
-     */
756
-    private static function _new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to)
757
-    {
758
-        // find the most recently-activated version
759
-        $most_recently_active_version =
760
-            EE_System::_get_most_recently_active_version_from_activation_history($activation_history_for_addon);
761
-        return version_compare($version_to_upgrade_to, $most_recently_active_version);
762
-    }
763
-
764
-
765
-    /**
766
-     * Gets the most recently active version listed in the activation history,
767
-     * and if none are found (ie, it's a brand new install) returns '0.0.0.dev.000'.
768
-     *
769
-     * @param array $activation_history  (keys are versions, values are arrays of times activated,
770
-     *                                   sometimes containing 'unknown-date'
771
-     * @return string
772
-     */
773
-    private static function _get_most_recently_active_version_from_activation_history($activation_history)
774
-    {
775
-        $most_recently_active_version_activation = '1970-01-01 00:00:00';
776
-        $most_recently_active_version = '0.0.0.dev.000';
777
-        if (is_array($activation_history)) {
778
-            foreach ($activation_history as $version => $times_activated) {
779
-                // check there is a record of when this version was activated. Otherwise,
780
-                // mark it as unknown
781
-                if (! $times_activated) {
782
-                    $times_activated = array('unknown-date');
783
-                }
784
-                if (is_string($times_activated)) {
785
-                    $times_activated = array($times_activated);
786
-                }
787
-                foreach ($times_activated as $an_activation) {
788
-                    if ($an_activation !== 'unknown-date'
789
-                        && $an_activation
790
-                           > $most_recently_active_version_activation) {
791
-                        $most_recently_active_version = $version;
792
-                        $most_recently_active_version_activation = $an_activation === 'unknown-date'
793
-                            ? '1970-01-01 00:00:00'
794
-                            : $an_activation;
795
-                    }
796
-                }
797
-            }
798
-        }
799
-        return $most_recently_active_version;
800
-    }
801
-
802
-
803
-    /**
804
-     * This redirects to the about EE page after activation
805
-     *
806
-     * @return void
807
-     */
808
-    public function redirect_to_about_ee()
809
-    {
810
-        $notices = EE_Error::get_notices(false);
811
-        // if current user is an admin and it's not an ajax or rest request
812
-        if (! isset($notices['errors'])
813
-            && $this->request->isAdmin()
814
-            && apply_filters(
815
-                'FHEE__EE_System__redirect_to_about_ee__do_redirect',
816
-                $this->capabilities->current_user_can('manage_options', 'espresso_about_default')
817
-            )
818
-        ) {
819
-            $query_params = array('page' => 'espresso_about');
820
-            if (EE_System::instance()->detect_req_type() === EE_System::req_type_new_activation) {
821
-                $query_params['new_activation'] = true;
822
-            }
823
-            if (EE_System::instance()->detect_req_type() === EE_System::req_type_reactivation) {
824
-                $query_params['reactivation'] = true;
825
-            }
826
-            $url = add_query_arg($query_params, admin_url('admin.php'));
827
-            wp_safe_redirect($url);
828
-            exit();
829
-        }
830
-    }
831
-
832
-
833
-    /**
834
-     * load_core_configuration
835
-     * this is hooked into 'AHEE__EE_Bootstrap__load_core_configuration'
836
-     * which runs during the WP 'plugins_loaded' action at priority 5
837
-     *
838
-     * @return void
839
-     * @throws ReflectionException
840
-     */
841
-    public function load_core_configuration()
842
-    {
843
-        do_action('AHEE__EE_System__load_core_configuration__begin', $this);
844
-        $this->loader->getShared('EE_Load_Textdomain');
845
-        // load textdomain
846
-        EE_Load_Textdomain::load_textdomain();
847
-        // load and setup EE_Config and EE_Network_Config
848
-        $config = $this->loader->getShared('EE_Config');
849
-        $this->loader->getShared('EE_Network_Config');
850
-        // setup autoloaders
851
-        // enable logging?
852
-        if ($config->admin->use_full_logging) {
853
-            $this->loader->getShared('EE_Log');
854
-        }
855
-        // check for activation errors
856
-        $activation_errors = get_option('ee_plugin_activation_errors', false);
857
-        if ($activation_errors) {
858
-            EE_Error::add_error($activation_errors, __FILE__, __FUNCTION__, __LINE__);
859
-            update_option('ee_plugin_activation_errors', false);
860
-        }
861
-        // get model names
862
-        $this->_parse_model_names();
863
-        // load caf stuff a chance to play during the activation process too.
864
-        $this->_maybe_brew_regular();
865
-        // configure custom post type definitions
866
-        $this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions');
867
-        $this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions');
868
-        do_action('AHEE__EE_System__load_core_configuration__complete', $this);
869
-    }
870
-
871
-
872
-    /**
873
-     * cycles through all of the models/*.model.php files, and assembles an array of model names
874
-     *
875
-     * @return void
876
-     * @throws ReflectionException
877
-     */
878
-    private function _parse_model_names()
879
-    {
880
-        // get all the files in the EE_MODELS folder that end in .model.php
881
-        $models = glob(EE_MODELS . '*.model.php');
882
-        $model_names = array();
883
-        $non_abstract_db_models = array();
884
-        foreach ($models as $model) {
885
-            // get model classname
886
-            $classname = EEH_File::get_classname_from_filepath_with_standard_filename($model);
887
-            $short_name = str_replace('EEM_', '', $classname);
888
-            $reflectionClass = new ReflectionClass($classname);
889
-            if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
890
-                $non_abstract_db_models[ $short_name ] = $classname;
891
-            }
892
-            $model_names[ $short_name ] = $classname;
893
-        }
894
-        $this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
895
-        $this->registry->non_abstract_db_models = apply_filters(
896
-            'FHEE__EE_System__parse_implemented_model_names',
897
-            $non_abstract_db_models
898
-        );
899
-    }
900
-
901
-
902
-    /**
903
-     * The purpose of this method is to simply check for a file named "caffeinated/brewing_regular.php" for any hooks
904
-     * that need to be setup before our EE_System launches.
905
-     *
906
-     * @return void
907
-     * @throws DomainException
908
-     * @throws InvalidArgumentException
909
-     * @throws InvalidDataTypeException
910
-     * @throws InvalidInterfaceException
911
-     * @throws InvalidClassException
912
-     * @throws InvalidFilePathException
913
-     */
914
-    private function _maybe_brew_regular()
915
-    {
916
-        /** @var Domain $domain */
917
-        $domain = DomainFactory::getShared(
918
-            new FullyQualifiedName(
919
-                'EventEspresso\core\domain\Domain'
920
-            ),
921
-            array(
922
-                new FilePath(EVENT_ESPRESSO_MAIN_FILE),
923
-                Version::fromString(espresso_version()),
924
-            )
925
-        );
926
-        if ($domain->isCaffeinated()) {
927
-            require_once EE_CAFF_PATH . 'brewing_regular.php';
928
-        }
929
-    }
930
-
931
-
932
-    /**
933
-     * register_shortcodes_modules_and_widgets
934
-     * generate lists of shortcodes and modules, then verify paths and classes
935
-     * This is hooked into 'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets'
936
-     * which runs during the WP 'plugins_loaded' action at priority 7
937
-     *
938
-     * @access public
939
-     * @return void
940
-     * @throws Exception
941
-     */
942
-    public function register_shortcodes_modules_and_widgets()
943
-    {
944
-        try {
945
-            // load, register, and add shortcodes the new way
946
-            if ($this->request->isFrontend() || $this->request->isIframe()) {
947
-                $this->loader->getShared(
948
-                    'EventEspresso\core\services\shortcodes\ShortcodesManager',
949
-                    array(
950
-                        // and the old way, but we'll put it under control of the new system
951
-                        EE_Config::getLegacyShortcodesManager(),
952
-                    )
953
-                );
954
-            }
955
-            if (function_exists('register_block_type')) {
956
-                // or the even newer newer new way
957
-                if ($this->request->isFrontend() || $this->request->isIframe() || $this->request->isAdmin()) {
958
-                    $this->loader->getShared(
959
-                        'EventEspresso\core\services\editor\BlockRegistrationManager'
960
-                    );
961
-                }
962
-            }
963
-        } catch (Exception $exception) {
964
-            new ExceptionStackTraceDisplay($exception);
965
-        }
966
-        do_action('AHEE__EE_System__register_shortcodes_modules_and_widgets');
967
-        // check for addons using old hook point
968
-        if (has_action('AHEE__EE_System__register_shortcodes_modules_and_addons')) {
969
-            $this->_incompatible_addon_error();
970
-        }
971
-    }
972
-
973
-
974
-    /**
975
-     * _incompatible_addon_error
976
-     *
977
-     * @access public
978
-     * @return void
979
-     */
980
-    private function _incompatible_addon_error()
981
-    {
982
-        // get array of classes hooking into here
983
-        $class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook(
984
-            'AHEE__EE_System__register_shortcodes_modules_and_addons'
985
-        );
986
-        if (! empty($class_names)) {
987
-            $msg = __(
988
-                'The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
989
-                'event_espresso'
990
-            );
991
-            $msg .= '<ul>';
992
-            foreach ($class_names as $class_name) {
993
-                $msg .= '<li><b>Event Espresso - '
994
-                        . str_replace(
995
-                            array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'),
996
-                            '',
997
-                            $class_name
998
-                        ) . '</b></li>';
999
-            }
1000
-            $msg .= '</ul>';
1001
-            $msg .= __(
1002
-                'Compatibility issues can be avoided and/or resolved by keeping addons and plugins updated to the latest version.',
1003
-                'event_espresso'
1004
-            );
1005
-            // save list of incompatible addons to wp-options for later use
1006
-            add_option('ee_incompatible_addons', $class_names, '', 'no');
1007
-            if (is_admin()) {
1008
-                EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
1009
-            }
1010
-        }
1011
-    }
1012
-
1013
-
1014
-    /**
1015
-     * brew_espresso
1016
-     * begins the process of setting hooks for initializing EE in the correct order
1017
-     * This is happening on the 'AHEE__EE_Bootstrap__brew_espresso' hook point
1018
-     * which runs during the WP 'plugins_loaded' action at priority 9
1019
-     *
1020
-     * @return void
1021
-     */
1022
-    public function brew_espresso()
1023
-    {
1024
-        do_action('AHEE__EE_System__brew_espresso__begin', $this);
1025
-        // load some final core systems
1026
-        add_action('init', array($this, 'set_hooks_for_core'), 1);
1027
-        add_action('init', array($this, 'perform_activations_upgrades_and_migrations'), 3);
1028
-        add_action('init', array($this, 'load_CPTs_and_session'), 5);
1029
-        add_action('init', array($this, 'load_controllers'), 7);
1030
-        add_action('init', array($this, 'core_loaded_and_ready'), 9);
1031
-        add_action('init', array($this, 'initialize'), 10);
1032
-        add_action('init', array($this, 'initialize_last'), 100);
1033
-        if (is_admin() && apply_filters('FHEE__EE_System__brew_espresso__load_pue', true)) {
1034
-            // pew pew pew
1035
-            $this->loader->getShared('EventEspresso\core\services\licensing\LicenseService');
1036
-            do_action('AHEE__EE_System__brew_espresso__after_pue_init');
1037
-        }
1038
-        do_action('AHEE__EE_System__brew_espresso__complete', $this);
1039
-    }
1040
-
1041
-
1042
-    /**
1043
-     *    set_hooks_for_core
1044
-     *
1045
-     * @access public
1046
-     * @return    void
1047
-     * @throws EE_Error
1048
-     */
1049
-    public function set_hooks_for_core()
1050
-    {
1051
-        $this->_deactivate_incompatible_addons();
1052
-        do_action('AHEE__EE_System__set_hooks_for_core');
1053
-        $this->loader->getShared('EventEspresso\core\domain\values\session\SessionLifespan');
1054
-        // caps need to be initialized on every request so that capability maps are set.
1055
-        // @see https://events.codebasehq.com/projects/event-espresso/tickets/8674
1056
-        $this->registry->CAP->init_caps();
1057
-    }
1058
-
1059
-
1060
-    /**
1061
-     * Using the information gathered in EE_System::_incompatible_addon_error,
1062
-     * deactivates any addons considered incompatible with the current version of EE
1063
-     */
1064
-    private function _deactivate_incompatible_addons()
1065
-    {
1066
-        $incompatible_addons = get_option('ee_incompatible_addons', array());
1067
-        if (! empty($incompatible_addons)) {
1068
-            $active_plugins = get_option('active_plugins', array());
1069
-            foreach ($active_plugins as $active_plugin) {
1070
-                foreach ($incompatible_addons as $incompatible_addon) {
1071
-                    if (strpos($active_plugin, $incompatible_addon) !== false) {
1072
-                        unset($_GET['activate']);
1073
-                        espresso_deactivate_plugin($active_plugin);
1074
-                    }
1075
-                }
1076
-            }
1077
-        }
1078
-    }
1079
-
1080
-
1081
-    /**
1082
-     *    perform_activations_upgrades_and_migrations
1083
-     *
1084
-     * @access public
1085
-     * @return    void
1086
-     */
1087
-    public function perform_activations_upgrades_and_migrations()
1088
-    {
1089
-        do_action('AHEE__EE_System__perform_activations_upgrades_and_migrations');
1090
-    }
1091
-
1092
-
1093
-    /**
1094
-     * @return void
1095
-     * @throws DomainException
1096
-     */
1097
-    public function load_CPTs_and_session()
1098
-    {
1099
-        do_action('AHEE__EE_System__load_CPTs_and_session__start');
1100
-        /** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies $register_custom_taxonomies */
1101
-        $register_custom_taxonomies = $this->loader->getShared(
1102
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'
1103
-        );
1104
-        $register_custom_taxonomies->registerCustomTaxonomies();
1105
-        /** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes $register_custom_post_types */
1106
-        $register_custom_post_types = $this->loader->getShared(
1107
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'
1108
-        );
1109
-        $register_custom_post_types->registerCustomPostTypes();
1110
-        /** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms */
1111
-        $register_custom_taxonomy_terms = $this->loader->getShared(
1112
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms'
1113
-        );
1114
-        $register_custom_taxonomy_terms->registerCustomTaxonomyTerms();
1115
-        // load legacy Custom Post Types and Taxonomies
1116
-        $this->loader->getShared('EE_Register_CPTs');
1117
-        do_action('AHEE__EE_System__load_CPTs_and_session__complete');
1118
-    }
1119
-
1120
-
1121
-    /**
1122
-     * load_controllers
1123
-     * this is the best place to load any additional controllers that needs access to EE core.
1124
-     * it is expected that all basic core EE systems, that are not dependant on the current request are loaded at this
1125
-     * time
1126
-     *
1127
-     * @access public
1128
-     * @return void
1129
-     */
1130
-    public function load_controllers()
1131
-    {
1132
-        do_action('AHEE__EE_System__load_controllers__start');
1133
-        // let's get it started
1134
-        if (! $this->maintenance_mode->level()
1135
-            && ($this->request->isFrontend() || $this->request->isFrontAjax())
1136
-        ) {
1137
-            do_action('AHEE__EE_System__load_controllers__load_front_controllers');
1138
-            $this->loader->getShared('EE_Front_Controller');
1139
-        } elseif ($this->request->isAdmin() || $this->request->isAdminAjax()) {
1140
-            do_action('AHEE__EE_System__load_controllers__load_admin_controllers');
1141
-            $this->loader->getShared('EE_Admin');
1142
-        }
1143
-        do_action('AHEE__EE_System__load_controllers__complete');
1144
-    }
1145
-
1146
-
1147
-    /**
1148
-     * core_loaded_and_ready
1149
-     * all of the basic EE core should be loaded at this point and available regardless of M-Mode
1150
-     *
1151
-     * @access public
1152
-     * @return void
1153
-     * @throws Exception
1154
-     */
1155
-    public function core_loaded_and_ready()
1156
-    {
1157
-        if ($this->request->isAdmin() || $this->request->isFrontend() || $this->request->isIframe()) {
1158
-            try {
1159
-                $this->loader->getShared('EventEspresso\core\services\assets\Registry');
1160
-                $this->loader->getShared('EventEspresso\core\domain\services\assets\CoreAssetManager');
1161
-            } catch (Exception $exception) {
1162
-                new ExceptionStackTraceDisplay($exception);
1163
-            }
1164
-        }
1165
-        if ($this->request->isAdmin()
1166
-            || $this->request->isEeAjax()
1167
-            || $this->request->isFrontend()
1168
-        ) {
1169
-            $this->loader->getShared('EE_Session');
1170
-        }
1171
-        do_action('AHEE__EE_System__core_loaded_and_ready');
1172
-        // load_espresso_template_tags
1173
-        if (is_readable(EE_PUBLIC . 'template_tags.php')
1174
-            && ($this->request->isFrontend()
1175
-                || $this->request->isAdmin()
1176
-                || $this->request->isIframe()
1177
-                || $this->request->isFeed()
1178
-            )
1179
-        ) {
1180
-            require_once EE_PUBLIC . 'template_tags.php';
1181
-        }
1182
-        do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
1183
-    }
1184
-
1185
-
1186
-    /**
1187
-     * initialize
1188
-     * this is the best place to begin initializing client code
1189
-     *
1190
-     * @access public
1191
-     * @return void
1192
-     */
1193
-    public function initialize()
1194
-    {
1195
-        do_action('AHEE__EE_System__initialize');
1196
-    }
1197
-
1198
-
1199
-    /**
1200
-     * initialize_last
1201
-     * this is run really late during the WP init hook point, and ensures that mostly everything else that needs to
1202
-     * initialize has done so
1203
-     *
1204
-     * @access public
1205
-     * @return void
1206
-     */
1207
-    public function initialize_last()
1208
-    {
1209
-        do_action('AHEE__EE_System__initialize_last');
1210
-        /** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
1211
-        $rewrite_rules = $this->loader->getShared(
1212
-            'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
1213
-        );
1214
-        $rewrite_rules->flushRewriteRules();
1215
-        add_action('admin_bar_init', array($this, 'addEspressoToolbar'));
1216
-    }
1217
-
1218
-
1219
-    /**
1220
-     * @return void
1221
-     * @throws EE_Error
1222
-     */
1223
-    public function addEspressoToolbar()
1224
-    {
1225
-        $this->loader->getShared(
1226
-            'EventEspresso\core\domain\services\admin\AdminToolBar',
1227
-            array($this->registry->CAP)
1228
-        );
1229
-    }
1230
-
1231
-
1232
-    /**
1233
-     * do_not_cache
1234
-     * sets no cache headers and defines no cache constants for WP plugins
1235
-     *
1236
-     * @access public
1237
-     * @return void
1238
-     */
1239
-    public static function do_not_cache()
1240
-    {
1241
-        // set no cache constants
1242
-        if (! defined('DONOTCACHEPAGE')) {
1243
-            define('DONOTCACHEPAGE', true);
1244
-        }
1245
-        if (! defined('DONOTCACHCEOBJECT')) {
1246
-            define('DONOTCACHCEOBJECT', true);
1247
-        }
1248
-        if (! defined('DONOTCACHEDB')) {
1249
-            define('DONOTCACHEDB', true);
1250
-        }
1251
-        // add no cache headers
1252
-        add_action('send_headers', array('EE_System', 'nocache_headers'), 10);
1253
-        // plus a little extra for nginx and Google Chrome
1254
-        add_filter('nocache_headers', array('EE_System', 'extra_nocache_headers'), 10, 1);
1255
-        // prevent browsers from prefetching of the rel='next' link, because it may contain content that interferes with the registration process
1256
-        remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
1257
-    }
1258
-
1259
-
1260
-    /**
1261
-     *    extra_nocache_headers
1262
-     *
1263
-     * @access    public
1264
-     * @param $headers
1265
-     * @return    array
1266
-     */
1267
-    public static function extra_nocache_headers($headers)
1268
-    {
1269
-        // for NGINX
1270
-        $headers['X-Accel-Expires'] = 0;
1271
-        // plus extra for Google Chrome since it doesn't seem to respect "no-cache", but WILL respect "no-store"
1272
-        $headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
1273
-        return $headers;
1274
-    }
1275
-
1276
-
1277
-    /**
1278
-     *    nocache_headers
1279
-     *
1280
-     * @access    public
1281
-     * @return    void
1282
-     */
1283
-    public static function nocache_headers()
1284
-    {
1285
-        nocache_headers();
1286
-    }
1287
-
1288
-
1289
-    /**
1290
-     * simply hooks into "wp_list_pages_exclude" filter (for wp_list_pages method) and makes sure EE critical pages are
1291
-     * never returned with the function.
1292
-     *
1293
-     * @param  array $exclude_array any existing pages being excluded are in this array.
1294
-     * @return array
1295
-     */
1296
-    public function remove_pages_from_wp_list_pages($exclude_array)
1297
-    {
1298
-        return array_merge($exclude_array, $this->registry->CFG->core->get_critical_pages_array());
1299
-    }
31
+	/**
32
+	 * indicates this is a 'normal' request. Ie, not activation, nor upgrade, nor activation.
33
+	 * So examples of this would be a normal GET request on the frontend or backend, or a POST, etc
34
+	 */
35
+	const req_type_normal = 0;
36
+
37
+	/**
38
+	 * Indicates this is a brand new installation of EE so we should install
39
+	 * tables and default data etc
40
+	 */
41
+	const req_type_new_activation = 1;
42
+
43
+	/**
44
+	 * we've detected that EE has been reactivated (or EE was activated during maintenance mode,
45
+	 * and we just exited maintenance mode). We MUST check the database is setup properly
46
+	 * and that default data is setup too
47
+	 */
48
+	const req_type_reactivation = 2;
49
+
50
+	/**
51
+	 * indicates that EE has been upgraded since its previous request.
52
+	 * We may have data migration scripts to call and will want to trigger maintenance mode
53
+	 */
54
+	const req_type_upgrade = 3;
55
+
56
+	/**
57
+	 * TODO  will detect that EE has been DOWNGRADED. We probably don't want to run in this case...
58
+	 */
59
+	const req_type_downgrade = 4;
60
+
61
+	/**
62
+	 * @deprecated since version 4.6.0.dev.006
63
+	 * Now whenever a new_activation is detected the request type is still just
64
+	 * new_activation (same for reactivation, upgrade, downgrade etc), but if we'r ein maintenance mode
65
+	 * EE_System::initialize_db_if_no_migrations_required and EE_Addon::initialize_db_if_no_migrations_required
66
+	 * will instead enqueue that EE plugin's db initialization for when we're taken out of maintenance mode.
67
+	 * (Specifically, when the migration manager indicates migrations are finished
68
+	 * EE_Data_Migration_Manager::initialize_db_for_enqueued_ee_plugins() will be called)
69
+	 */
70
+	const req_type_activation_but_not_installed = 5;
71
+
72
+	/**
73
+	 * option prefix for recording the activation history (like core's "espresso_db_update") of addons
74
+	 */
75
+	const addon_activation_history_option_prefix = 'ee_addon_activation_history_';
76
+
77
+
78
+	/**
79
+	 * @var EE_System $_instance
80
+	 */
81
+	private static $_instance;
82
+
83
+	/**
84
+	 * @var EE_Registry $registry
85
+	 */
86
+	private $registry;
87
+
88
+	/**
89
+	 * @var LoaderInterface $loader
90
+	 */
91
+	private $loader;
92
+
93
+	/**
94
+	 * @var EE_Capabilities $capabilities
95
+	 */
96
+	private $capabilities;
97
+
98
+	/**
99
+	 * @var RequestInterface $request
100
+	 */
101
+	private $request;
102
+
103
+	/**
104
+	 * @var EE_Maintenance_Mode $maintenance_mode
105
+	 */
106
+	private $maintenance_mode;
107
+
108
+	/**
109
+	 * Stores which type of request this is, options being one of the constants on EE_System starting with req_type_*.
110
+	 * It can be a brand-new activation, a reactivation, an upgrade, a downgrade, or a normal request.
111
+	 *
112
+	 * @var int $_req_type
113
+	 */
114
+	private $_req_type;
115
+
116
+	/**
117
+	 * Whether or not there was a non-micro version change in EE core version during this request
118
+	 *
119
+	 * @var boolean $_major_version_change
120
+	 */
121
+	private $_major_version_change = false;
122
+
123
+	/**
124
+	 * A Context DTO dedicated solely to identifying the current request type.
125
+	 *
126
+	 * @var RequestTypeContextCheckerInterface $request_type
127
+	 */
128
+	private $request_type;
129
+
130
+
131
+	/**
132
+	 * @singleton method used to instantiate class object
133
+	 * @param EE_Registry|null         $registry
134
+	 * @param LoaderInterface|null     $loader
135
+	 * @param RequestInterface|null    $request
136
+	 * @param EE_Maintenance_Mode|null $maintenance_mode
137
+	 * @return EE_System
138
+	 */
139
+	public static function instance(
140
+		EE_Registry $registry = null,
141
+		LoaderInterface $loader = null,
142
+		RequestInterface $request = null,
143
+		EE_Maintenance_Mode $maintenance_mode = null
144
+	) {
145
+		// check if class object is instantiated
146
+		if (! self::$_instance instanceof EE_System) {
147
+			self::$_instance = new self($registry, $loader, $request, $maintenance_mode);
148
+		}
149
+		return self::$_instance;
150
+	}
151
+
152
+
153
+	/**
154
+	 * resets the instance and returns it
155
+	 *
156
+	 * @return EE_System
157
+	 */
158
+	public static function reset()
159
+	{
160
+		self::$_instance->_req_type = null;
161
+		// make sure none of the old hooks are left hanging around
162
+		remove_all_actions('AHEE__EE_System__perform_activations_upgrades_and_migrations');
163
+		// we need to reset the migration manager in order for it to detect DMSs properly
164
+		EE_Data_Migration_Manager::reset();
165
+		self::instance()->detect_activations_or_upgrades();
166
+		self::instance()->perform_activations_upgrades_and_migrations();
167
+		return self::instance();
168
+	}
169
+
170
+
171
+	/**
172
+	 * sets hooks for running rest of system
173
+	 * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
174
+	 * starting EE Addons from any other point may lead to problems
175
+	 *
176
+	 * @param EE_Registry         $registry
177
+	 * @param LoaderInterface     $loader
178
+	 * @param RequestInterface    $request
179
+	 * @param EE_Maintenance_Mode $maintenance_mode
180
+	 */
181
+	private function __construct(
182
+		EE_Registry $registry,
183
+		LoaderInterface $loader,
184
+		RequestInterface $request,
185
+		EE_Maintenance_Mode $maintenance_mode
186
+	) {
187
+		$this->registry = $registry;
188
+		$this->loader = $loader;
189
+		$this->request = $request;
190
+		$this->maintenance_mode = $maintenance_mode;
191
+		do_action('AHEE__EE_System__construct__begin', $this);
192
+		add_action(
193
+			'AHEE__EE_Bootstrap__load_espresso_addons',
194
+			array($this, 'loadCapabilities'),
195
+			5
196
+		);
197
+		add_action(
198
+			'AHEE__EE_Bootstrap__load_espresso_addons',
199
+			array($this, 'loadCommandBus'),
200
+			7
201
+		);
202
+		add_action(
203
+			'AHEE__EE_Bootstrap__load_espresso_addons',
204
+			array($this, 'loadPluginApi'),
205
+			9
206
+		);
207
+		// allow addons to load first so that they can register autoloaders, set hooks for running DMS's, etc
208
+		add_action(
209
+			'AHEE__EE_Bootstrap__load_espresso_addons',
210
+			array($this, 'load_espresso_addons')
211
+		);
212
+		// when an ee addon is activated, we want to call the core hook(s) again
213
+		// because the newly-activated addon didn't get a chance to run at all
214
+		add_action('activate_plugin', array($this, 'load_espresso_addons'), 1);
215
+		// detect whether install or upgrade
216
+		add_action(
217
+			'AHEE__EE_Bootstrap__detect_activations_or_upgrades',
218
+			array($this, 'detect_activations_or_upgrades'),
219
+			3
220
+		);
221
+		// load EE_Config, EE_Textdomain, etc
222
+		add_action(
223
+			'AHEE__EE_Bootstrap__load_core_configuration',
224
+			array($this, 'load_core_configuration'),
225
+			5
226
+		);
227
+		// load EE_Config, EE_Textdomain, etc
228
+		add_action(
229
+			'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets',
230
+			array($this, 'register_shortcodes_modules_and_widgets'),
231
+			7
232
+		);
233
+		// you wanna get going? I wanna get going... let's get going!
234
+		add_action(
235
+			'AHEE__EE_Bootstrap__brew_espresso',
236
+			array($this, 'brew_espresso'),
237
+			9
238
+		);
239
+		// other housekeeping
240
+		// exclude EE critical pages from wp_list_pages
241
+		add_filter(
242
+			'wp_list_pages_excludes',
243
+			array($this, 'remove_pages_from_wp_list_pages'),
244
+			10
245
+		);
246
+		// ALL EE Addons should use the following hook point to attach their initial setup too
247
+		// it's extremely important for EE Addons to register any class autoloaders so that they can be available when the EE_Config loads
248
+		do_action('AHEE__EE_System__construct__complete', $this);
249
+	}
250
+
251
+
252
+	/**
253
+	 * load and setup EE_Capabilities
254
+	 *
255
+	 * @return void
256
+	 * @throws EE_Error
257
+	 */
258
+	public function loadCapabilities()
259
+	{
260
+		$this->capabilities = $this->loader->getShared('EE_Capabilities');
261
+		add_action(
262
+			'AHEE__EE_Capabilities__init_caps__before_initialization',
263
+			function () {
264
+				LoaderFactory::getLoader()->getShared('EE_Payment_Method_Manager');
265
+			}
266
+		);
267
+	}
268
+
269
+
270
+	/**
271
+	 * create and cache the CommandBus, and also add middleware
272
+	 * The CapChecker middleware requires the use of EE_Capabilities
273
+	 * which is why we need to load the CommandBus after Caps are set up
274
+	 *
275
+	 * @return void
276
+	 * @throws EE_Error
277
+	 */
278
+	public function loadCommandBus()
279
+	{
280
+		$this->loader->getShared(
281
+			'CommandBusInterface',
282
+			array(
283
+				null,
284
+				apply_filters(
285
+					'FHEE__EE_Load_Espresso_Core__handle_request__CommandBus_middleware',
286
+					array(
287
+						$this->loader->getShared('EventEspresso\core\services\commands\middleware\CapChecker'),
288
+						$this->loader->getShared('EventEspresso\core\services\commands\middleware\AddActionHook'),
289
+					)
290
+				),
291
+			)
292
+		);
293
+	}
294
+
295
+
296
+	/**
297
+	 * @return void
298
+	 * @throws EE_Error
299
+	 */
300
+	public function loadPluginApi()
301
+	{
302
+		// set autoloaders for all of the classes implementing EEI_Plugin_API
303
+		// which provide helpers for EE plugin authors to more easily register certain components with EE.
304
+		EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
305
+		$this->loader->getShared('EE_Request_Handler');
306
+	}
307
+
308
+
309
+	/**
310
+	 * @param string $addon_name
311
+	 * @param string $version_constant
312
+	 * @param string $min_version_required
313
+	 * @param string $load_callback
314
+	 * @param string $plugin_file_constant
315
+	 * @return void
316
+	 */
317
+	private function deactivateIncompatibleAddon(
318
+		$addon_name,
319
+		$version_constant,
320
+		$min_version_required,
321
+		$load_callback,
322
+		$plugin_file_constant
323
+	) {
324
+		if (! defined($version_constant)) {
325
+			return;
326
+		}
327
+		$addon_version = constant($version_constant);
328
+		if ($addon_version && version_compare($addon_version, $min_version_required, '<')) {
329
+			remove_action('AHEE__EE_System__load_espresso_addons', $load_callback);
330
+			if (! function_exists('deactivate_plugins')) {
331
+				require_once ABSPATH . 'wp-admin/includes/plugin.php';
332
+			}
333
+			deactivate_plugins(plugin_basename(constant($plugin_file_constant)));
334
+			unset($_GET['activate'], $_REQUEST['activate'], $_GET['activate-multi'], $_REQUEST['activate-multi']);
335
+			EE_Error::add_error(
336
+				sprintf(
337
+					esc_html__(
338
+						'We\'re sorry, but the Event Espresso %1$s addon was deactivated because version %2$s or higher is required with this version of Event Espresso core.',
339
+						'event_espresso'
340
+					),
341
+					$addon_name,
342
+					$min_version_required
343
+				),
344
+				__FILE__,
345
+				__FUNCTION__ . "({$addon_name})",
346
+				__LINE__
347
+			);
348
+			EE_Error::get_notices(false, true);
349
+		}
350
+	}
351
+
352
+
353
+	/**
354
+	 * load_espresso_addons
355
+	 * allow addons to load first so that they can set hooks for running DMS's, etc
356
+	 * this is hooked into both:
357
+	 *    'AHEE__EE_Bootstrap__load_core_configuration'
358
+	 *        which runs during the WP 'plugins_loaded' action at priority 5
359
+	 *    and the WP 'activate_plugin' hook point
360
+	 *
361
+	 * @access public
362
+	 * @return void
363
+	 */
364
+	public function load_espresso_addons()
365
+	{
366
+		$this->deactivateIncompatibleAddon(
367
+			'Wait Lists',
368
+			'EE_WAIT_LISTS_VERSION',
369
+			'1.0.0.beta.074',
370
+			'load_espresso_wait_lists',
371
+			'EE_WAIT_LISTS_PLUGIN_FILE'
372
+		);
373
+		$this->deactivateIncompatibleAddon(
374
+			'Automated Upcoming Event Notifications',
375
+			'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_VERSION',
376
+			'1.0.0.beta.091',
377
+			'load_espresso_automated_upcoming_event_notification',
378
+			'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_PLUGIN_FILE'
379
+		);
380
+		do_action('AHEE__EE_System__load_espresso_addons');
381
+		// if the WP API basic auth plugin isn't already loaded, load it now.
382
+		// We want it for mobile apps. Just include the entire plugin
383
+		// also, don't load the basic auth when a plugin is getting activated, because
384
+		// it could be the basic auth plugin, and it doesn't check if its methods are already defined
385
+		// and causes a fatal error
386
+		if ($this->request->getRequestParam('activate') !== 'true'
387
+			&& ! function_exists('json_basic_auth_handler')
388
+			&& ! function_exists('json_basic_auth_error')
389
+			&& ! in_array(
390
+				$this->request->getRequestParam('action'),
391
+				array('activate', 'activate-selected'),
392
+				true
393
+			)
394
+		) {
395
+			include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
396
+		}
397
+		do_action('AHEE__EE_System__load_espresso_addons__complete');
398
+	}
399
+
400
+
401
+	/**
402
+	 * detect_activations_or_upgrades
403
+	 * Checks for activation or upgrade of core first;
404
+	 * then also checks if any registered addons have been activated or upgraded
405
+	 * This is hooked into 'AHEE__EE_Bootstrap__detect_activations_or_upgrades'
406
+	 * which runs during the WP 'plugins_loaded' action at priority 3
407
+	 *
408
+	 * @access public
409
+	 * @return void
410
+	 */
411
+	public function detect_activations_or_upgrades()
412
+	{
413
+		// first off: let's make sure to handle core
414
+		$this->detect_if_activation_or_upgrade();
415
+		foreach ($this->registry->addons as $addon) {
416
+			if ($addon instanceof EE_Addon) {
417
+				// detect teh request type for that addon
418
+				$addon->detect_activation_or_upgrade();
419
+			}
420
+		}
421
+	}
422
+
423
+
424
+	/**
425
+	 * detect_if_activation_or_upgrade
426
+	 * Takes care of detecting whether this is a brand new install or code upgrade,
427
+	 * and either setting up the DB or setting up maintenance mode etc.
428
+	 *
429
+	 * @access public
430
+	 * @return void
431
+	 */
432
+	public function detect_if_activation_or_upgrade()
433
+	{
434
+		do_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin');
435
+		// check if db has been updated, or if its a brand-new installation
436
+		$espresso_db_update = $this->fix_espresso_db_upgrade_option();
437
+		$request_type = $this->detect_req_type($espresso_db_update);
438
+		// EEH_Debug_Tools::printr( $request_type, '$request_type', __FILE__, __LINE__ );
439
+		switch ($request_type) {
440
+			case EE_System::req_type_new_activation:
441
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__new_activation');
442
+				$this->_handle_core_version_change($espresso_db_update);
443
+				break;
444
+			case EE_System::req_type_reactivation:
445
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__reactivation');
446
+				$this->_handle_core_version_change($espresso_db_update);
447
+				break;
448
+			case EE_System::req_type_upgrade:
449
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__upgrade');
450
+				// migrations may be required now that we've upgraded
451
+				$this->maintenance_mode->set_maintenance_mode_if_db_old();
452
+				$this->_handle_core_version_change($espresso_db_update);
453
+				break;
454
+			case EE_System::req_type_downgrade:
455
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__downgrade');
456
+				// its possible migrations are no longer required
457
+				$this->maintenance_mode->set_maintenance_mode_if_db_old();
458
+				$this->_handle_core_version_change($espresso_db_update);
459
+				break;
460
+			case EE_System::req_type_normal:
461
+			default:
462
+				break;
463
+		}
464
+		do_action('AHEE__EE_System__detect_if_activation_or_upgrade__complete');
465
+	}
466
+
467
+
468
+	/**
469
+	 * Updates the list of installed versions and sets hooks for
470
+	 * initializing the database later during the request
471
+	 *
472
+	 * @param array $espresso_db_update
473
+	 */
474
+	private function _handle_core_version_change($espresso_db_update)
475
+	{
476
+		$this->update_list_of_installed_versions($espresso_db_update);
477
+		// get ready to verify the DB is ok (provided we aren't in maintenance mode, of course)
478
+		add_action(
479
+			'AHEE__EE_System__perform_activations_upgrades_and_migrations',
480
+			array($this, 'initialize_db_if_no_migrations_required')
481
+		);
482
+	}
483
+
484
+
485
+	/**
486
+	 * standardizes the wp option 'espresso_db_upgrade' which actually stores
487
+	 * information about what versions of EE have been installed and activated,
488
+	 * NOT necessarily the state of the database
489
+	 *
490
+	 * @param mixed $espresso_db_update           the value of the WordPress option.
491
+	 *                                            If not supplied, fetches it from the options table
492
+	 * @return array the correct value of 'espresso_db_upgrade', after saving it, if it needed correction
493
+	 */
494
+	private function fix_espresso_db_upgrade_option($espresso_db_update = null)
495
+	{
496
+		do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
497
+		if (! $espresso_db_update) {
498
+			$espresso_db_update = get_option('espresso_db_update');
499
+		}
500
+		// check that option is an array
501
+		if (! is_array($espresso_db_update)) {
502
+			// if option is FALSE, then it never existed
503
+			if ($espresso_db_update === false) {
504
+				// make $espresso_db_update an array and save option with autoload OFF
505
+				$espresso_db_update = array();
506
+				add_option('espresso_db_update', $espresso_db_update, '', 'no');
507
+			} else {
508
+				// option is NOT FALSE but also is NOT an array, so make it an array and save it
509
+				$espresso_db_update = array($espresso_db_update => array());
510
+				update_option('espresso_db_update', $espresso_db_update);
511
+			}
512
+		} else {
513
+			$corrected_db_update = array();
514
+			// if IS an array, but is it an array where KEYS are version numbers, and values are arrays?
515
+			foreach ($espresso_db_update as $should_be_version_string => $should_be_array) {
516
+				if (is_int($should_be_version_string) && ! is_array($should_be_array)) {
517
+					// the key is an int, and the value IS NOT an array
518
+					// so it must be numerically-indexed, where values are versions installed...
519
+					// fix it!
520
+					$version_string = $should_be_array;
521
+					$corrected_db_update[ $version_string ] = array('unknown-date');
522
+				} else {
523
+					// ok it checks out
524
+					$corrected_db_update[ $should_be_version_string ] = $should_be_array;
525
+				}
526
+			}
527
+			$espresso_db_update = $corrected_db_update;
528
+			update_option('espresso_db_update', $espresso_db_update);
529
+		}
530
+		do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__complete', $espresso_db_update);
531
+		return $espresso_db_update;
532
+	}
533
+
534
+
535
+	/**
536
+	 * Does the traditional work of setting up the plugin's database and adding default data.
537
+	 * If migration script/process did not exist, this is what would happen on every activation/reactivation/upgrade.
538
+	 * NOTE: if we're in maintenance mode (which would be the case if we detect there are data
539
+	 * migration scripts that need to be run and a version change happens), enqueues core for database initialization,
540
+	 * so that it will be done when migrations are finished
541
+	 *
542
+	 * @param boolean $initialize_addons_too if true, we double-check addons' database tables etc too;
543
+	 * @param boolean $verify_schema         if true will re-check the database tables have the correct schema.
544
+	 *                                       This is a resource-intensive job
545
+	 *                                       so we prefer to only do it when necessary
546
+	 * @return void
547
+	 * @throws EE_Error
548
+	 */
549
+	public function initialize_db_if_no_migrations_required($initialize_addons_too = false, $verify_schema = true)
550
+	{
551
+		$request_type = $this->detect_req_type();
552
+		// only initialize system if we're not in maintenance mode.
553
+		if ($this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance) {
554
+			/** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
555
+			$rewrite_rules = $this->loader->getShared(
556
+				'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
557
+			);
558
+			$rewrite_rules->flush();
559
+			if ($verify_schema) {
560
+				EEH_Activation::initialize_db_and_folders();
561
+			}
562
+			EEH_Activation::initialize_db_content();
563
+			EEH_Activation::system_initialization();
564
+			if ($initialize_addons_too) {
565
+				$this->initialize_addons();
566
+			}
567
+		} else {
568
+			EE_Data_Migration_Manager::instance()->enqueue_db_initialization_for('Core');
569
+		}
570
+		if ($request_type === EE_System::req_type_new_activation
571
+			|| $request_type === EE_System::req_type_reactivation
572
+			|| (
573
+				$request_type === EE_System::req_type_upgrade
574
+				&& $this->is_major_version_change()
575
+			)
576
+		) {
577
+			add_action('AHEE__EE_System__initialize_last', array($this, 'redirect_to_about_ee'), 9);
578
+		}
579
+	}
580
+
581
+
582
+	/**
583
+	 * Initializes the db for all registered addons
584
+	 *
585
+	 * @throws EE_Error
586
+	 */
587
+	public function initialize_addons()
588
+	{
589
+		// foreach registered addon, make sure its db is up-to-date too
590
+		foreach ($this->registry->addons as $addon) {
591
+			if ($addon instanceof EE_Addon) {
592
+				$addon->initialize_db_if_no_migrations_required();
593
+			}
594
+		}
595
+	}
596
+
597
+
598
+	/**
599
+	 * Adds the current code version to the saved wp option which stores a list of all ee versions ever installed.
600
+	 *
601
+	 * @param    array  $version_history
602
+	 * @param    string $current_version_to_add version to be added to the version history
603
+	 * @return    boolean success as to whether or not this option was changed
604
+	 */
605
+	public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
606
+	{
607
+		if (! $version_history) {
608
+			$version_history = $this->fix_espresso_db_upgrade_option($version_history);
609
+		}
610
+		if ($current_version_to_add === null) {
611
+			$current_version_to_add = espresso_version();
612
+		}
613
+		$version_history[ $current_version_to_add ][] = date('Y-m-d H:i:s', time());
614
+		// re-save
615
+		return update_option('espresso_db_update', $version_history);
616
+	}
617
+
618
+
619
+	/**
620
+	 * Detects if the current version indicated in the has existed in the list of
621
+	 * previously-installed versions of EE (espresso_db_update). Does NOT modify it (ie, no side-effect)
622
+	 *
623
+	 * @param array $espresso_db_update array from the wp option stored under the name 'espresso_db_update'.
624
+	 *                                  If not supplied, fetches it from the options table.
625
+	 *                                  Also, caches its result so later parts of the code can also know whether
626
+	 *                                  there's been an update or not. This way we can add the current version to
627
+	 *                                  espresso_db_update, but still know if this is a new install or not
628
+	 * @return int one of the constants on EE_System::req_type_
629
+	 */
630
+	public function detect_req_type($espresso_db_update = null)
631
+	{
632
+		if ($this->_req_type === null) {
633
+			$espresso_db_update = ! empty($espresso_db_update)
634
+				? $espresso_db_update
635
+				: $this->fix_espresso_db_upgrade_option();
636
+			$this->_req_type = EE_System::detect_req_type_given_activation_history(
637
+				$espresso_db_update,
638
+				'ee_espresso_activation',
639
+				espresso_version()
640
+			);
641
+			$this->_major_version_change = $this->_detect_major_version_change($espresso_db_update);
642
+			$this->request->setIsActivation($this->_req_type !== EE_System::req_type_normal);
643
+		}
644
+		return $this->_req_type;
645
+	}
646
+
647
+
648
+	/**
649
+	 * Returns whether or not there was a non-micro version change (ie, change in either
650
+	 * the first or second number in the version. Eg 4.9.0.rc.001 to 4.10.0.rc.000,
651
+	 * but not 4.9.0.rc.0001 to 4.9.1.rc.0001
652
+	 *
653
+	 * @param $activation_history
654
+	 * @return bool
655
+	 */
656
+	private function _detect_major_version_change($activation_history)
657
+	{
658
+		$previous_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history);
659
+		$previous_version_parts = explode('.', $previous_version);
660
+		$current_version_parts = explode('.', espresso_version());
661
+		return isset($previous_version_parts[0], $previous_version_parts[1], $current_version_parts[0], $current_version_parts[1])
662
+			   && ($previous_version_parts[0] !== $current_version_parts[0]
663
+				   || $previous_version_parts[1] !== $current_version_parts[1]
664
+			   );
665
+	}
666
+
667
+
668
+	/**
669
+	 * Returns true if either the major or minor version of EE changed during this request.
670
+	 * Eg 4.9.0.rc.001 to 4.10.0.rc.000, but not 4.9.0.rc.0001 to 4.9.1.rc.0001
671
+	 *
672
+	 * @return bool
673
+	 */
674
+	public function is_major_version_change()
675
+	{
676
+		return $this->_major_version_change;
677
+	}
678
+
679
+
680
+	/**
681
+	 * Determines the request type for any ee addon, given three piece of info: the current array of activation
682
+	 * histories (for core that' 'espresso_db_update' wp option); the name of the WordPress option which is temporarily
683
+	 * set upon activation of the plugin (for core it's 'ee_espresso_activation'); and the version that this plugin was
684
+	 * just activated to (for core that will always be espresso_version())
685
+	 *
686
+	 * @param array  $activation_history_for_addon     the option's value which stores the activation history for this
687
+	 *                                                 ee plugin. for core that's 'espresso_db_update'
688
+	 * @param string $activation_indicator_option_name the name of the WordPress option that is temporarily set to
689
+	 *                                                 indicate that this plugin was just activated
690
+	 * @param string $version_to_upgrade_to            the version that was just upgraded to (for core that will be
691
+	 *                                                 espresso_version())
692
+	 * @return int one of the constants on EE_System::req_type_*
693
+	 */
694
+	public static function detect_req_type_given_activation_history(
695
+		$activation_history_for_addon,
696
+		$activation_indicator_option_name,
697
+		$version_to_upgrade_to
698
+	) {
699
+		$version_is_higher = self::_new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to);
700
+		if ($activation_history_for_addon) {
701
+			// it exists, so this isn't a completely new install
702
+			// check if this version already in that list of previously installed versions
703
+			if (! isset($activation_history_for_addon[ $version_to_upgrade_to ])) {
704
+				// it a version we haven't seen before
705
+				if ($version_is_higher === 1) {
706
+					$req_type = EE_System::req_type_upgrade;
707
+				} else {
708
+					$req_type = EE_System::req_type_downgrade;
709
+				}
710
+				delete_option($activation_indicator_option_name);
711
+			} else {
712
+				// its not an update. maybe a reactivation?
713
+				if (get_option($activation_indicator_option_name, false)) {
714
+					if ($version_is_higher === -1) {
715
+						$req_type = EE_System::req_type_downgrade;
716
+					} elseif ($version_is_higher === 0) {
717
+						// we've seen this version before, but it's an activation. must be a reactivation
718
+						$req_type = EE_System::req_type_reactivation;
719
+					} else {// $version_is_higher === 1
720
+						$req_type = EE_System::req_type_upgrade;
721
+					}
722
+					delete_option($activation_indicator_option_name);
723
+				} else {
724
+					// we've seen this version before and the activation indicate doesn't show it was just activated
725
+					if ($version_is_higher === -1) {
726
+						$req_type = EE_System::req_type_downgrade;
727
+					} elseif ($version_is_higher === 0) {
728
+						// we've seen this version before and it's not an activation. its normal request
729
+						$req_type = EE_System::req_type_normal;
730
+					} else {// $version_is_higher === 1
731
+						$req_type = EE_System::req_type_upgrade;
732
+					}
733
+				}
734
+			}
735
+		} else {
736
+			// brand new install
737
+			$req_type = EE_System::req_type_new_activation;
738
+			delete_option($activation_indicator_option_name);
739
+		}
740
+		return $req_type;
741
+	}
742
+
743
+
744
+	/**
745
+	 * Detects if the $version_to_upgrade_to is higher than the most recent version in
746
+	 * the $activation_history_for_addon
747
+	 *
748
+	 * @param array  $activation_history_for_addon (keys are versions, values are arrays of times activated,
749
+	 *                                             sometimes containing 'unknown-date'
750
+	 * @param string $version_to_upgrade_to        (current version)
751
+	 * @return int results of version_compare( $version_to_upgrade_to, $most_recently_active_version ).
752
+	 *                                             ie, -1 if $version_to_upgrade_to is LOWER (downgrade);
753
+	 *                                             0 if $version_to_upgrade_to MATCHES (reactivation or normal request);
754
+	 *                                             1 if $version_to_upgrade_to is HIGHER (upgrade) ;
755
+	 */
756
+	private static function _new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to)
757
+	{
758
+		// find the most recently-activated version
759
+		$most_recently_active_version =
760
+			EE_System::_get_most_recently_active_version_from_activation_history($activation_history_for_addon);
761
+		return version_compare($version_to_upgrade_to, $most_recently_active_version);
762
+	}
763
+
764
+
765
+	/**
766
+	 * Gets the most recently active version listed in the activation history,
767
+	 * and if none are found (ie, it's a brand new install) returns '0.0.0.dev.000'.
768
+	 *
769
+	 * @param array $activation_history  (keys are versions, values are arrays of times activated,
770
+	 *                                   sometimes containing 'unknown-date'
771
+	 * @return string
772
+	 */
773
+	private static function _get_most_recently_active_version_from_activation_history($activation_history)
774
+	{
775
+		$most_recently_active_version_activation = '1970-01-01 00:00:00';
776
+		$most_recently_active_version = '0.0.0.dev.000';
777
+		if (is_array($activation_history)) {
778
+			foreach ($activation_history as $version => $times_activated) {
779
+				// check there is a record of when this version was activated. Otherwise,
780
+				// mark it as unknown
781
+				if (! $times_activated) {
782
+					$times_activated = array('unknown-date');
783
+				}
784
+				if (is_string($times_activated)) {
785
+					$times_activated = array($times_activated);
786
+				}
787
+				foreach ($times_activated as $an_activation) {
788
+					if ($an_activation !== 'unknown-date'
789
+						&& $an_activation
790
+						   > $most_recently_active_version_activation) {
791
+						$most_recently_active_version = $version;
792
+						$most_recently_active_version_activation = $an_activation === 'unknown-date'
793
+							? '1970-01-01 00:00:00'
794
+							: $an_activation;
795
+					}
796
+				}
797
+			}
798
+		}
799
+		return $most_recently_active_version;
800
+	}
801
+
802
+
803
+	/**
804
+	 * This redirects to the about EE page after activation
805
+	 *
806
+	 * @return void
807
+	 */
808
+	public function redirect_to_about_ee()
809
+	{
810
+		$notices = EE_Error::get_notices(false);
811
+		// if current user is an admin and it's not an ajax or rest request
812
+		if (! isset($notices['errors'])
813
+			&& $this->request->isAdmin()
814
+			&& apply_filters(
815
+				'FHEE__EE_System__redirect_to_about_ee__do_redirect',
816
+				$this->capabilities->current_user_can('manage_options', 'espresso_about_default')
817
+			)
818
+		) {
819
+			$query_params = array('page' => 'espresso_about');
820
+			if (EE_System::instance()->detect_req_type() === EE_System::req_type_new_activation) {
821
+				$query_params['new_activation'] = true;
822
+			}
823
+			if (EE_System::instance()->detect_req_type() === EE_System::req_type_reactivation) {
824
+				$query_params['reactivation'] = true;
825
+			}
826
+			$url = add_query_arg($query_params, admin_url('admin.php'));
827
+			wp_safe_redirect($url);
828
+			exit();
829
+		}
830
+	}
831
+
832
+
833
+	/**
834
+	 * load_core_configuration
835
+	 * this is hooked into 'AHEE__EE_Bootstrap__load_core_configuration'
836
+	 * which runs during the WP 'plugins_loaded' action at priority 5
837
+	 *
838
+	 * @return void
839
+	 * @throws ReflectionException
840
+	 */
841
+	public function load_core_configuration()
842
+	{
843
+		do_action('AHEE__EE_System__load_core_configuration__begin', $this);
844
+		$this->loader->getShared('EE_Load_Textdomain');
845
+		// load textdomain
846
+		EE_Load_Textdomain::load_textdomain();
847
+		// load and setup EE_Config and EE_Network_Config
848
+		$config = $this->loader->getShared('EE_Config');
849
+		$this->loader->getShared('EE_Network_Config');
850
+		// setup autoloaders
851
+		// enable logging?
852
+		if ($config->admin->use_full_logging) {
853
+			$this->loader->getShared('EE_Log');
854
+		}
855
+		// check for activation errors
856
+		$activation_errors = get_option('ee_plugin_activation_errors', false);
857
+		if ($activation_errors) {
858
+			EE_Error::add_error($activation_errors, __FILE__, __FUNCTION__, __LINE__);
859
+			update_option('ee_plugin_activation_errors', false);
860
+		}
861
+		// get model names
862
+		$this->_parse_model_names();
863
+		// load caf stuff a chance to play during the activation process too.
864
+		$this->_maybe_brew_regular();
865
+		// configure custom post type definitions
866
+		$this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions');
867
+		$this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions');
868
+		do_action('AHEE__EE_System__load_core_configuration__complete', $this);
869
+	}
870
+
871
+
872
+	/**
873
+	 * cycles through all of the models/*.model.php files, and assembles an array of model names
874
+	 *
875
+	 * @return void
876
+	 * @throws ReflectionException
877
+	 */
878
+	private function _parse_model_names()
879
+	{
880
+		// get all the files in the EE_MODELS folder that end in .model.php
881
+		$models = glob(EE_MODELS . '*.model.php');
882
+		$model_names = array();
883
+		$non_abstract_db_models = array();
884
+		foreach ($models as $model) {
885
+			// get model classname
886
+			$classname = EEH_File::get_classname_from_filepath_with_standard_filename($model);
887
+			$short_name = str_replace('EEM_', '', $classname);
888
+			$reflectionClass = new ReflectionClass($classname);
889
+			if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
890
+				$non_abstract_db_models[ $short_name ] = $classname;
891
+			}
892
+			$model_names[ $short_name ] = $classname;
893
+		}
894
+		$this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
895
+		$this->registry->non_abstract_db_models = apply_filters(
896
+			'FHEE__EE_System__parse_implemented_model_names',
897
+			$non_abstract_db_models
898
+		);
899
+	}
900
+
901
+
902
+	/**
903
+	 * The purpose of this method is to simply check for a file named "caffeinated/brewing_regular.php" for any hooks
904
+	 * that need to be setup before our EE_System launches.
905
+	 *
906
+	 * @return void
907
+	 * @throws DomainException
908
+	 * @throws InvalidArgumentException
909
+	 * @throws InvalidDataTypeException
910
+	 * @throws InvalidInterfaceException
911
+	 * @throws InvalidClassException
912
+	 * @throws InvalidFilePathException
913
+	 */
914
+	private function _maybe_brew_regular()
915
+	{
916
+		/** @var Domain $domain */
917
+		$domain = DomainFactory::getShared(
918
+			new FullyQualifiedName(
919
+				'EventEspresso\core\domain\Domain'
920
+			),
921
+			array(
922
+				new FilePath(EVENT_ESPRESSO_MAIN_FILE),
923
+				Version::fromString(espresso_version()),
924
+			)
925
+		);
926
+		if ($domain->isCaffeinated()) {
927
+			require_once EE_CAFF_PATH . 'brewing_regular.php';
928
+		}
929
+	}
930
+
931
+
932
+	/**
933
+	 * register_shortcodes_modules_and_widgets
934
+	 * generate lists of shortcodes and modules, then verify paths and classes
935
+	 * This is hooked into 'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets'
936
+	 * which runs during the WP 'plugins_loaded' action at priority 7
937
+	 *
938
+	 * @access public
939
+	 * @return void
940
+	 * @throws Exception
941
+	 */
942
+	public function register_shortcodes_modules_and_widgets()
943
+	{
944
+		try {
945
+			// load, register, and add shortcodes the new way
946
+			if ($this->request->isFrontend() || $this->request->isIframe()) {
947
+				$this->loader->getShared(
948
+					'EventEspresso\core\services\shortcodes\ShortcodesManager',
949
+					array(
950
+						// and the old way, but we'll put it under control of the new system
951
+						EE_Config::getLegacyShortcodesManager(),
952
+					)
953
+				);
954
+			}
955
+			if (function_exists('register_block_type')) {
956
+				// or the even newer newer new way
957
+				if ($this->request->isFrontend() || $this->request->isIframe() || $this->request->isAdmin()) {
958
+					$this->loader->getShared(
959
+						'EventEspresso\core\services\editor\BlockRegistrationManager'
960
+					);
961
+				}
962
+			}
963
+		} catch (Exception $exception) {
964
+			new ExceptionStackTraceDisplay($exception);
965
+		}
966
+		do_action('AHEE__EE_System__register_shortcodes_modules_and_widgets');
967
+		// check for addons using old hook point
968
+		if (has_action('AHEE__EE_System__register_shortcodes_modules_and_addons')) {
969
+			$this->_incompatible_addon_error();
970
+		}
971
+	}
972
+
973
+
974
+	/**
975
+	 * _incompatible_addon_error
976
+	 *
977
+	 * @access public
978
+	 * @return void
979
+	 */
980
+	private function _incompatible_addon_error()
981
+	{
982
+		// get array of classes hooking into here
983
+		$class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook(
984
+			'AHEE__EE_System__register_shortcodes_modules_and_addons'
985
+		);
986
+		if (! empty($class_names)) {
987
+			$msg = __(
988
+				'The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
989
+				'event_espresso'
990
+			);
991
+			$msg .= '<ul>';
992
+			foreach ($class_names as $class_name) {
993
+				$msg .= '<li><b>Event Espresso - '
994
+						. str_replace(
995
+							array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'),
996
+							'',
997
+							$class_name
998
+						) . '</b></li>';
999
+			}
1000
+			$msg .= '</ul>';
1001
+			$msg .= __(
1002
+				'Compatibility issues can be avoided and/or resolved by keeping addons and plugins updated to the latest version.',
1003
+				'event_espresso'
1004
+			);
1005
+			// save list of incompatible addons to wp-options for later use
1006
+			add_option('ee_incompatible_addons', $class_names, '', 'no');
1007
+			if (is_admin()) {
1008
+				EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
1009
+			}
1010
+		}
1011
+	}
1012
+
1013
+
1014
+	/**
1015
+	 * brew_espresso
1016
+	 * begins the process of setting hooks for initializing EE in the correct order
1017
+	 * This is happening on the 'AHEE__EE_Bootstrap__brew_espresso' hook point
1018
+	 * which runs during the WP 'plugins_loaded' action at priority 9
1019
+	 *
1020
+	 * @return void
1021
+	 */
1022
+	public function brew_espresso()
1023
+	{
1024
+		do_action('AHEE__EE_System__brew_espresso__begin', $this);
1025
+		// load some final core systems
1026
+		add_action('init', array($this, 'set_hooks_for_core'), 1);
1027
+		add_action('init', array($this, 'perform_activations_upgrades_and_migrations'), 3);
1028
+		add_action('init', array($this, 'load_CPTs_and_session'), 5);
1029
+		add_action('init', array($this, 'load_controllers'), 7);
1030
+		add_action('init', array($this, 'core_loaded_and_ready'), 9);
1031
+		add_action('init', array($this, 'initialize'), 10);
1032
+		add_action('init', array($this, 'initialize_last'), 100);
1033
+		if (is_admin() && apply_filters('FHEE__EE_System__brew_espresso__load_pue', true)) {
1034
+			// pew pew pew
1035
+			$this->loader->getShared('EventEspresso\core\services\licensing\LicenseService');
1036
+			do_action('AHEE__EE_System__brew_espresso__after_pue_init');
1037
+		}
1038
+		do_action('AHEE__EE_System__brew_espresso__complete', $this);
1039
+	}
1040
+
1041
+
1042
+	/**
1043
+	 *    set_hooks_for_core
1044
+	 *
1045
+	 * @access public
1046
+	 * @return    void
1047
+	 * @throws EE_Error
1048
+	 */
1049
+	public function set_hooks_for_core()
1050
+	{
1051
+		$this->_deactivate_incompatible_addons();
1052
+		do_action('AHEE__EE_System__set_hooks_for_core');
1053
+		$this->loader->getShared('EventEspresso\core\domain\values\session\SessionLifespan');
1054
+		// caps need to be initialized on every request so that capability maps are set.
1055
+		// @see https://events.codebasehq.com/projects/event-espresso/tickets/8674
1056
+		$this->registry->CAP->init_caps();
1057
+	}
1058
+
1059
+
1060
+	/**
1061
+	 * Using the information gathered in EE_System::_incompatible_addon_error,
1062
+	 * deactivates any addons considered incompatible with the current version of EE
1063
+	 */
1064
+	private function _deactivate_incompatible_addons()
1065
+	{
1066
+		$incompatible_addons = get_option('ee_incompatible_addons', array());
1067
+		if (! empty($incompatible_addons)) {
1068
+			$active_plugins = get_option('active_plugins', array());
1069
+			foreach ($active_plugins as $active_plugin) {
1070
+				foreach ($incompatible_addons as $incompatible_addon) {
1071
+					if (strpos($active_plugin, $incompatible_addon) !== false) {
1072
+						unset($_GET['activate']);
1073
+						espresso_deactivate_plugin($active_plugin);
1074
+					}
1075
+				}
1076
+			}
1077
+		}
1078
+	}
1079
+
1080
+
1081
+	/**
1082
+	 *    perform_activations_upgrades_and_migrations
1083
+	 *
1084
+	 * @access public
1085
+	 * @return    void
1086
+	 */
1087
+	public function perform_activations_upgrades_and_migrations()
1088
+	{
1089
+		do_action('AHEE__EE_System__perform_activations_upgrades_and_migrations');
1090
+	}
1091
+
1092
+
1093
+	/**
1094
+	 * @return void
1095
+	 * @throws DomainException
1096
+	 */
1097
+	public function load_CPTs_and_session()
1098
+	{
1099
+		do_action('AHEE__EE_System__load_CPTs_and_session__start');
1100
+		/** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies $register_custom_taxonomies */
1101
+		$register_custom_taxonomies = $this->loader->getShared(
1102
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'
1103
+		);
1104
+		$register_custom_taxonomies->registerCustomTaxonomies();
1105
+		/** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes $register_custom_post_types */
1106
+		$register_custom_post_types = $this->loader->getShared(
1107
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'
1108
+		);
1109
+		$register_custom_post_types->registerCustomPostTypes();
1110
+		/** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms */
1111
+		$register_custom_taxonomy_terms = $this->loader->getShared(
1112
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms'
1113
+		);
1114
+		$register_custom_taxonomy_terms->registerCustomTaxonomyTerms();
1115
+		// load legacy Custom Post Types and Taxonomies
1116
+		$this->loader->getShared('EE_Register_CPTs');
1117
+		do_action('AHEE__EE_System__load_CPTs_and_session__complete');
1118
+	}
1119
+
1120
+
1121
+	/**
1122
+	 * load_controllers
1123
+	 * this is the best place to load any additional controllers that needs access to EE core.
1124
+	 * it is expected that all basic core EE systems, that are not dependant on the current request are loaded at this
1125
+	 * time
1126
+	 *
1127
+	 * @access public
1128
+	 * @return void
1129
+	 */
1130
+	public function load_controllers()
1131
+	{
1132
+		do_action('AHEE__EE_System__load_controllers__start');
1133
+		// let's get it started
1134
+		if (! $this->maintenance_mode->level()
1135
+			&& ($this->request->isFrontend() || $this->request->isFrontAjax())
1136
+		) {
1137
+			do_action('AHEE__EE_System__load_controllers__load_front_controllers');
1138
+			$this->loader->getShared('EE_Front_Controller');
1139
+		} elseif ($this->request->isAdmin() || $this->request->isAdminAjax()) {
1140
+			do_action('AHEE__EE_System__load_controllers__load_admin_controllers');
1141
+			$this->loader->getShared('EE_Admin');
1142
+		}
1143
+		do_action('AHEE__EE_System__load_controllers__complete');
1144
+	}
1145
+
1146
+
1147
+	/**
1148
+	 * core_loaded_and_ready
1149
+	 * all of the basic EE core should be loaded at this point and available regardless of M-Mode
1150
+	 *
1151
+	 * @access public
1152
+	 * @return void
1153
+	 * @throws Exception
1154
+	 */
1155
+	public function core_loaded_and_ready()
1156
+	{
1157
+		if ($this->request->isAdmin() || $this->request->isFrontend() || $this->request->isIframe()) {
1158
+			try {
1159
+				$this->loader->getShared('EventEspresso\core\services\assets\Registry');
1160
+				$this->loader->getShared('EventEspresso\core\domain\services\assets\CoreAssetManager');
1161
+			} catch (Exception $exception) {
1162
+				new ExceptionStackTraceDisplay($exception);
1163
+			}
1164
+		}
1165
+		if ($this->request->isAdmin()
1166
+			|| $this->request->isEeAjax()
1167
+			|| $this->request->isFrontend()
1168
+		) {
1169
+			$this->loader->getShared('EE_Session');
1170
+		}
1171
+		do_action('AHEE__EE_System__core_loaded_and_ready');
1172
+		// load_espresso_template_tags
1173
+		if (is_readable(EE_PUBLIC . 'template_tags.php')
1174
+			&& ($this->request->isFrontend()
1175
+				|| $this->request->isAdmin()
1176
+				|| $this->request->isIframe()
1177
+				|| $this->request->isFeed()
1178
+			)
1179
+		) {
1180
+			require_once EE_PUBLIC . 'template_tags.php';
1181
+		}
1182
+		do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
1183
+	}
1184
+
1185
+
1186
+	/**
1187
+	 * initialize
1188
+	 * this is the best place to begin initializing client code
1189
+	 *
1190
+	 * @access public
1191
+	 * @return void
1192
+	 */
1193
+	public function initialize()
1194
+	{
1195
+		do_action('AHEE__EE_System__initialize');
1196
+	}
1197
+
1198
+
1199
+	/**
1200
+	 * initialize_last
1201
+	 * this is run really late during the WP init hook point, and ensures that mostly everything else that needs to
1202
+	 * initialize has done so
1203
+	 *
1204
+	 * @access public
1205
+	 * @return void
1206
+	 */
1207
+	public function initialize_last()
1208
+	{
1209
+		do_action('AHEE__EE_System__initialize_last');
1210
+		/** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
1211
+		$rewrite_rules = $this->loader->getShared(
1212
+			'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
1213
+		);
1214
+		$rewrite_rules->flushRewriteRules();
1215
+		add_action('admin_bar_init', array($this, 'addEspressoToolbar'));
1216
+	}
1217
+
1218
+
1219
+	/**
1220
+	 * @return void
1221
+	 * @throws EE_Error
1222
+	 */
1223
+	public function addEspressoToolbar()
1224
+	{
1225
+		$this->loader->getShared(
1226
+			'EventEspresso\core\domain\services\admin\AdminToolBar',
1227
+			array($this->registry->CAP)
1228
+		);
1229
+	}
1230
+
1231
+
1232
+	/**
1233
+	 * do_not_cache
1234
+	 * sets no cache headers and defines no cache constants for WP plugins
1235
+	 *
1236
+	 * @access public
1237
+	 * @return void
1238
+	 */
1239
+	public static function do_not_cache()
1240
+	{
1241
+		// set no cache constants
1242
+		if (! defined('DONOTCACHEPAGE')) {
1243
+			define('DONOTCACHEPAGE', true);
1244
+		}
1245
+		if (! defined('DONOTCACHCEOBJECT')) {
1246
+			define('DONOTCACHCEOBJECT', true);
1247
+		}
1248
+		if (! defined('DONOTCACHEDB')) {
1249
+			define('DONOTCACHEDB', true);
1250
+		}
1251
+		// add no cache headers
1252
+		add_action('send_headers', array('EE_System', 'nocache_headers'), 10);
1253
+		// plus a little extra for nginx and Google Chrome
1254
+		add_filter('nocache_headers', array('EE_System', 'extra_nocache_headers'), 10, 1);
1255
+		// prevent browsers from prefetching of the rel='next' link, because it may contain content that interferes with the registration process
1256
+		remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
1257
+	}
1258
+
1259
+
1260
+	/**
1261
+	 *    extra_nocache_headers
1262
+	 *
1263
+	 * @access    public
1264
+	 * @param $headers
1265
+	 * @return    array
1266
+	 */
1267
+	public static function extra_nocache_headers($headers)
1268
+	{
1269
+		// for NGINX
1270
+		$headers['X-Accel-Expires'] = 0;
1271
+		// plus extra for Google Chrome since it doesn't seem to respect "no-cache", but WILL respect "no-store"
1272
+		$headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
1273
+		return $headers;
1274
+	}
1275
+
1276
+
1277
+	/**
1278
+	 *    nocache_headers
1279
+	 *
1280
+	 * @access    public
1281
+	 * @return    void
1282
+	 */
1283
+	public static function nocache_headers()
1284
+	{
1285
+		nocache_headers();
1286
+	}
1287
+
1288
+
1289
+	/**
1290
+	 * simply hooks into "wp_list_pages_exclude" filter (for wp_list_pages method) and makes sure EE critical pages are
1291
+	 * never returned with the function.
1292
+	 *
1293
+	 * @param  array $exclude_array any existing pages being excluded are in this array.
1294
+	 * @return array
1295
+	 */
1296
+	public function remove_pages_from_wp_list_pages($exclude_array)
1297
+	{
1298
+		return array_merge($exclude_array, $this->registry->CFG->core->get_critical_pages_array());
1299
+	}
1300 1300
 }
Please login to merge, or discard this patch.
Spacing   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
         EE_Maintenance_Mode $maintenance_mode = null
144 144
     ) {
145 145
         // check if class object is instantiated
146
-        if (! self::$_instance instanceof EE_System) {
146
+        if ( ! self::$_instance instanceof EE_System) {
147 147
             self::$_instance = new self($registry, $loader, $request, $maintenance_mode);
148 148
         }
149 149
         return self::$_instance;
@@ -260,7 +260,7 @@  discard block
 block discarded – undo
260 260
         $this->capabilities = $this->loader->getShared('EE_Capabilities');
261 261
         add_action(
262 262
             'AHEE__EE_Capabilities__init_caps__before_initialization',
263
-            function () {
263
+            function() {
264 264
                 LoaderFactory::getLoader()->getShared('EE_Payment_Method_Manager');
265 265
             }
266 266
         );
@@ -301,7 +301,7 @@  discard block
 block discarded – undo
301 301
     {
302 302
         // set autoloaders for all of the classes implementing EEI_Plugin_API
303 303
         // which provide helpers for EE plugin authors to more easily register certain components with EE.
304
-        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
304
+        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES.'plugin_api');
305 305
         $this->loader->getShared('EE_Request_Handler');
306 306
     }
307 307
 
@@ -321,14 +321,14 @@  discard block
 block discarded – undo
321 321
         $load_callback,
322 322
         $plugin_file_constant
323 323
     ) {
324
-        if (! defined($version_constant)) {
324
+        if ( ! defined($version_constant)) {
325 325
             return;
326 326
         }
327 327
         $addon_version = constant($version_constant);
328 328
         if ($addon_version && version_compare($addon_version, $min_version_required, '<')) {
329 329
             remove_action('AHEE__EE_System__load_espresso_addons', $load_callback);
330
-            if (! function_exists('deactivate_plugins')) {
331
-                require_once ABSPATH . 'wp-admin/includes/plugin.php';
330
+            if ( ! function_exists('deactivate_plugins')) {
331
+                require_once ABSPATH.'wp-admin/includes/plugin.php';
332 332
             }
333 333
             deactivate_plugins(plugin_basename(constant($plugin_file_constant)));
334 334
             unset($_GET['activate'], $_REQUEST['activate'], $_GET['activate-multi'], $_REQUEST['activate-multi']);
@@ -342,7 +342,7 @@  discard block
 block discarded – undo
342 342
                     $min_version_required
343 343
                 ),
344 344
                 __FILE__,
345
-                __FUNCTION__ . "({$addon_name})",
345
+                __FUNCTION__."({$addon_name})",
346 346
                 __LINE__
347 347
             );
348 348
             EE_Error::get_notices(false, true);
@@ -392,7 +392,7 @@  discard block
 block discarded – undo
392 392
                 true
393 393
             )
394 394
         ) {
395
-            include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
395
+            include_once EE_THIRD_PARTY.'wp-api-basic-auth'.DS.'basic-auth.php';
396 396
         }
397 397
         do_action('AHEE__EE_System__load_espresso_addons__complete');
398 398
     }
@@ -494,11 +494,11 @@  discard block
 block discarded – undo
494 494
     private function fix_espresso_db_upgrade_option($espresso_db_update = null)
495 495
     {
496 496
         do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
497
-        if (! $espresso_db_update) {
497
+        if ( ! $espresso_db_update) {
498 498
             $espresso_db_update = get_option('espresso_db_update');
499 499
         }
500 500
         // check that option is an array
501
-        if (! is_array($espresso_db_update)) {
501
+        if ( ! is_array($espresso_db_update)) {
502 502
             // if option is FALSE, then it never existed
503 503
             if ($espresso_db_update === false) {
504 504
                 // make $espresso_db_update an array and save option with autoload OFF
@@ -518,10 +518,10 @@  discard block
 block discarded – undo
518 518
                     // so it must be numerically-indexed, where values are versions installed...
519 519
                     // fix it!
520 520
                     $version_string = $should_be_array;
521
-                    $corrected_db_update[ $version_string ] = array('unknown-date');
521
+                    $corrected_db_update[$version_string] = array('unknown-date');
522 522
                 } else {
523 523
                     // ok it checks out
524
-                    $corrected_db_update[ $should_be_version_string ] = $should_be_array;
524
+                    $corrected_db_update[$should_be_version_string] = $should_be_array;
525 525
                 }
526 526
             }
527 527
             $espresso_db_update = $corrected_db_update;
@@ -604,13 +604,13 @@  discard block
 block discarded – undo
604 604
      */
605 605
     public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
606 606
     {
607
-        if (! $version_history) {
607
+        if ( ! $version_history) {
608 608
             $version_history = $this->fix_espresso_db_upgrade_option($version_history);
609 609
         }
610 610
         if ($current_version_to_add === null) {
611 611
             $current_version_to_add = espresso_version();
612 612
         }
613
-        $version_history[ $current_version_to_add ][] = date('Y-m-d H:i:s', time());
613
+        $version_history[$current_version_to_add][] = date('Y-m-d H:i:s', time());
614 614
         // re-save
615 615
         return update_option('espresso_db_update', $version_history);
616 616
     }
@@ -700,7 +700,7 @@  discard block
 block discarded – undo
700 700
         if ($activation_history_for_addon) {
701 701
             // it exists, so this isn't a completely new install
702 702
             // check if this version already in that list of previously installed versions
703
-            if (! isset($activation_history_for_addon[ $version_to_upgrade_to ])) {
703
+            if ( ! isset($activation_history_for_addon[$version_to_upgrade_to])) {
704 704
                 // it a version we haven't seen before
705 705
                 if ($version_is_higher === 1) {
706 706
                     $req_type = EE_System::req_type_upgrade;
@@ -778,7 +778,7 @@  discard block
 block discarded – undo
778 778
             foreach ($activation_history as $version => $times_activated) {
779 779
                 // check there is a record of when this version was activated. Otherwise,
780 780
                 // mark it as unknown
781
-                if (! $times_activated) {
781
+                if ( ! $times_activated) {
782 782
                     $times_activated = array('unknown-date');
783 783
                 }
784 784
                 if (is_string($times_activated)) {
@@ -809,7 +809,7 @@  discard block
 block discarded – undo
809 809
     {
810 810
         $notices = EE_Error::get_notices(false);
811 811
         // if current user is an admin and it's not an ajax or rest request
812
-        if (! isset($notices['errors'])
812
+        if ( ! isset($notices['errors'])
813 813
             && $this->request->isAdmin()
814 814
             && apply_filters(
815 815
                 'FHEE__EE_System__redirect_to_about_ee__do_redirect',
@@ -878,7 +878,7 @@  discard block
 block discarded – undo
878 878
     private function _parse_model_names()
879 879
     {
880 880
         // get all the files in the EE_MODELS folder that end in .model.php
881
-        $models = glob(EE_MODELS . '*.model.php');
881
+        $models = glob(EE_MODELS.'*.model.php');
882 882
         $model_names = array();
883 883
         $non_abstract_db_models = array();
884 884
         foreach ($models as $model) {
@@ -887,9 +887,9 @@  discard block
 block discarded – undo
887 887
             $short_name = str_replace('EEM_', '', $classname);
888 888
             $reflectionClass = new ReflectionClass($classname);
889 889
             if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
890
-                $non_abstract_db_models[ $short_name ] = $classname;
890
+                $non_abstract_db_models[$short_name] = $classname;
891 891
             }
892
-            $model_names[ $short_name ] = $classname;
892
+            $model_names[$short_name] = $classname;
893 893
         }
894 894
         $this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
895 895
         $this->registry->non_abstract_db_models = apply_filters(
@@ -924,7 +924,7 @@  discard block
 block discarded – undo
924 924
             )
925 925
         );
926 926
         if ($domain->isCaffeinated()) {
927
-            require_once EE_CAFF_PATH . 'brewing_regular.php';
927
+            require_once EE_CAFF_PATH.'brewing_regular.php';
928 928
         }
929 929
     }
930 930
 
@@ -983,7 +983,7 @@  discard block
 block discarded – undo
983 983
         $class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook(
984 984
             'AHEE__EE_System__register_shortcodes_modules_and_addons'
985 985
         );
986
-        if (! empty($class_names)) {
986
+        if ( ! empty($class_names)) {
987 987
             $msg = __(
988 988
                 'The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
989 989
                 'event_espresso'
@@ -995,7 +995,7 @@  discard block
 block discarded – undo
995 995
                             array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'),
996 996
                             '',
997 997
                             $class_name
998
-                        ) . '</b></li>';
998
+                        ).'</b></li>';
999 999
             }
1000 1000
             $msg .= '</ul>';
1001 1001
             $msg .= __(
@@ -1064,7 +1064,7 @@  discard block
 block discarded – undo
1064 1064
     private function _deactivate_incompatible_addons()
1065 1065
     {
1066 1066
         $incompatible_addons = get_option('ee_incompatible_addons', array());
1067
-        if (! empty($incompatible_addons)) {
1067
+        if ( ! empty($incompatible_addons)) {
1068 1068
             $active_plugins = get_option('active_plugins', array());
1069 1069
             foreach ($active_plugins as $active_plugin) {
1070 1070
                 foreach ($incompatible_addons as $incompatible_addon) {
@@ -1131,7 +1131,7 @@  discard block
 block discarded – undo
1131 1131
     {
1132 1132
         do_action('AHEE__EE_System__load_controllers__start');
1133 1133
         // let's get it started
1134
-        if (! $this->maintenance_mode->level()
1134
+        if ( ! $this->maintenance_mode->level()
1135 1135
             && ($this->request->isFrontend() || $this->request->isFrontAjax())
1136 1136
         ) {
1137 1137
             do_action('AHEE__EE_System__load_controllers__load_front_controllers');
@@ -1170,14 +1170,14 @@  discard block
 block discarded – undo
1170 1170
         }
1171 1171
         do_action('AHEE__EE_System__core_loaded_and_ready');
1172 1172
         // load_espresso_template_tags
1173
-        if (is_readable(EE_PUBLIC . 'template_tags.php')
1173
+        if (is_readable(EE_PUBLIC.'template_tags.php')
1174 1174
             && ($this->request->isFrontend()
1175 1175
                 || $this->request->isAdmin()
1176 1176
                 || $this->request->isIframe()
1177 1177
                 || $this->request->isFeed()
1178 1178
             )
1179 1179
         ) {
1180
-            require_once EE_PUBLIC . 'template_tags.php';
1180
+            require_once EE_PUBLIC.'template_tags.php';
1181 1181
         }
1182 1182
         do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
1183 1183
     }
@@ -1239,13 +1239,13 @@  discard block
 block discarded – undo
1239 1239
     public static function do_not_cache()
1240 1240
     {
1241 1241
         // set no cache constants
1242
-        if (! defined('DONOTCACHEPAGE')) {
1242
+        if ( ! defined('DONOTCACHEPAGE')) {
1243 1243
             define('DONOTCACHEPAGE', true);
1244 1244
         }
1245
-        if (! defined('DONOTCACHCEOBJECT')) {
1245
+        if ( ! defined('DONOTCACHCEOBJECT')) {
1246 1246
             define('DONOTCACHCEOBJECT', true);
1247 1247
         }
1248
-        if (! defined('DONOTCACHEDB')) {
1248
+        if ( ! defined('DONOTCACHEDB')) {
1249 1249
             define('DONOTCACHEDB', true);
1250 1250
         }
1251 1251
         // add no cache headers
Please login to merge, or discard this patch.
core/domain/entities/editor/blocks/CoreBlocksAssetManager.php 1 patch
Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -17,20 +17,20 @@
 block discarded – undo
17 17
  */
18 18
 class CoreBlocksAssetManager extends BlockAssetManager
19 19
 {
20
-    const JS_HANDLE_CORE_BLOCKS = 'core-blocks';
21
-    const CSS_HANDLE_CORE_BLOCKS = 'core-blocks';
20
+	const JS_HANDLE_CORE_BLOCKS = 'core-blocks';
21
+	const CSS_HANDLE_CORE_BLOCKS = 'core-blocks';
22 22
 
23
-    /**
24
-     * @since $VID:$
25
-     * @throws InvalidDataTypeException
26
-     * @throws InvalidEntityException
27
-     * @throws DuplicateCollectionIdentifierException
28
-     */
29
-    public function addAssets()
30
-    {
31
-        $this->addEditorScript(self::JS_HANDLE_CORE_BLOCKS);
32
-        $this->addEditorStyle(self::CSS_HANDLE_CORE_BLOCKS);
33
-        $this->setScriptHandle(self::JS_HANDLE_CORE_BLOCKS);
34
-        $this->setStyleHandle(self::CSS_HANDLE_CORE_BLOCKS);
35
-    }
23
+	/**
24
+	 * @since $VID:$
25
+	 * @throws InvalidDataTypeException
26
+	 * @throws InvalidEntityException
27
+	 * @throws DuplicateCollectionIdentifierException
28
+	 */
29
+	public function addAssets()
30
+	{
31
+		$this->addEditorScript(self::JS_HANDLE_CORE_BLOCKS);
32
+		$this->addEditorStyle(self::CSS_HANDLE_CORE_BLOCKS);
33
+		$this->setScriptHandle(self::JS_HANDLE_CORE_BLOCKS);
34
+		$this->setStyleHandle(self::CSS_HANDLE_CORE_BLOCKS);
35
+	}
36 36
 }
Please login to merge, or discard this patch.
core/domain/entities/editor/Block.php 2 patches
Indentation   +212 added lines, -212 removed lines patch added patch discarded remove patch
@@ -20,216 +20,216 @@
 block discarded – undo
20 20
 abstract class Block implements BlockInterface
21 21
 {
22 22
 
23
-    /**
24
-     * BlockAssetManager that this editor block uses for asset registration
25
-     *
26
-     * @var BlockAssetManagerInterface $block_asset_manager
27
-     */
28
-    protected $block_asset_manager;
29
-
30
-    /**
31
-     * @var array $attributes
32
-     */
33
-    private $attributes;
34
-
35
-    /**
36
-     * If set to true, then the block will render its content client side
37
-     * If false, then the block will render its content server side using the renderBlock() method
38
-     *
39
-     * @var bool $dynamic
40
-     */
41
-    private $dynamic = false;
42
-
43
-    /**
44
-     * @var string $editor_block_type
45
-     */
46
-    private $editor_block_type;
47
-
48
-    /**
49
-     * @var array $supported_post_types
50
-     */
51
-    private $supported_post_types;
52
-
53
-    /**
54
-     * @var WP_Block_Type $wp_block_type
55
-     */
56
-    private $wp_block_type;
57
-
58
-
59
-    /**
60
-     * BlockLoader constructor.
61
-     *
62
-     * @param BlockAssetManagerInterface $block_asset_manager
63
-     */
64
-    public function __construct(BlockAssetManagerInterface $block_asset_manager)
65
-    {
66
-        $this->block_asset_manager = $block_asset_manager;
67
-    }
68
-
69
-
70
-    /**
71
-     * @return string
72
-     */
73
-    public function blockType()
74
-    {
75
-        return $this->editor_block_type;
76
-    }
77
-
78
-
79
-    /**
80
-     * @return string
81
-     */
82
-    public function namespacedBlockType()
83
-    {
84
-        return self::NAME_SPACE . $this->editor_block_type;
85
-    }
86
-
87
-
88
-    /**
89
-     * @param string $editor_block_type
90
-     */
91
-    protected function setBlockType($editor_block_type)
92
-    {
93
-        $this->editor_block_type = $editor_block_type;
94
-    }
95
-
96
-
97
-    /**
98
-     * BlockAssetManager that this editor block uses for asset registration
99
-     *
100
-     * @return BlockAssetManagerInterface
101
-     */
102
-    public function assetManager()
103
-    {
104
-        return $this->block_asset_manager;
105
-    }
106
-
107
-
108
-    /**
109
-     * @param WP_Block_Type $wp_block_type
110
-     */
111
-    protected function setWpBlockType($wp_block_type)
112
-    {
113
-        $this->wp_block_type = $wp_block_type;
114
-    }
115
-
116
-
117
-    /**
118
-     * @param array $supported_post_types
119
-     */
120
-    protected function setSupportedPostTypes(array $supported_post_types)
121
-    {
122
-        $this->supported_post_types = $supported_post_types;
123
-    }
124
-
125
-
126
-    /**
127
-     * @return array
128
-     */
129
-    public function attributes()
130
-    {
131
-        return $this->attributes;
132
-    }
133
-
134
-
135
-    /**
136
-     * @param array $attributes
137
-     */
138
-    public function setAttributes(array $attributes)
139
-    {
140
-        $this->attributes = $attributes;
141
-    }
142
-
143
-
144
-    /**
145
-     * @return bool
146
-     */
147
-    public function isDynamic()
148
-    {
149
-        return $this->dynamic;
150
-    }
151
-
152
-
153
-    /**
154
-     * @param bool $dynamic
155
-     */
156
-    public function setDynamic($dynamic = true)
157
-    {
158
-        $this->dynamic = filter_var($dynamic, FILTER_VALIDATE_BOOLEAN);
159
-    }
160
-
161
-
162
-    /**
163
-     * Registers the Editor Block with WP core;
164
-     * Returns the registered block type on success, or false on failure.
165
-     *
166
-     * @return WP_Block_Type|false
167
-     */
168
-    public function registerBlock()
169
-    {
170
-        $args = array(
171
-            'attributes'    => $this->attributes(),
172
-            'editor_script' => $this->block_asset_manager->getEditorScriptHandle(),
173
-            'editor_style'  => $this->block_asset_manager->getEditorStyleHandle(),
174
-            'script'        => $this->block_asset_manager->getScriptHandle(),
175
-            'style'         => $this->block_asset_manager->getStyleHandle(),
176
-        );
177
-        if (! $this->isDynamic()) {
178
-            $args['render_callback'] = $this->renderBlock();
179
-        }
180
-        $wp_block_type = register_block_type(
181
-            new WP_Block_Type(
182
-                $this->namespacedBlockType(),
183
-                $args
184
-            )
185
-        );
186
-        $this->setWpBlockType($wp_block_type);
187
-        return $wp_block_type;
188
-    }
189
-
190
-
191
-    /**
192
-     * @return WP_Block_Type|false The registered block type on success, or false on failure.
193
-     */
194
-    public function unRegisterBlock()
195
-    {
196
-        return unregister_block_type($this->namespacedBlockType());
197
-    }
198
-
199
-
200
-    /**
201
-     * returns true if the block type applies for the supplied post type
202
-     * and should be added to that post type's editor
203
-     *
204
-     * @param string $post_type
205
-     * @return boolean
206
-     */
207
-    public function appliesToPostType($post_type)
208
-    {
209
-        return in_array($post_type, $this->supported_post_types, true);
210
-    }
211
-
212
-
213
-    /**
214
-     * @return array
215
-     */
216
-    public function getEditorContainer()
217
-    {
218
-        return array(
219
-            $this->namespacedBlockType(),
220
-            array(),
221
-        );
222
-    }
223
-
224
-
225
-    /**
226
-     * returns the rendered HTML for the block
227
-     *
228
-     * @param array $attributes
229
-     * @return string
230
-     */
231
-    public function renderBlock(array $attributes = array())
232
-    {
233
-        return '';
234
-    }
23
+	/**
24
+	 * BlockAssetManager that this editor block uses for asset registration
25
+	 *
26
+	 * @var BlockAssetManagerInterface $block_asset_manager
27
+	 */
28
+	protected $block_asset_manager;
29
+
30
+	/**
31
+	 * @var array $attributes
32
+	 */
33
+	private $attributes;
34
+
35
+	/**
36
+	 * If set to true, then the block will render its content client side
37
+	 * If false, then the block will render its content server side using the renderBlock() method
38
+	 *
39
+	 * @var bool $dynamic
40
+	 */
41
+	private $dynamic = false;
42
+
43
+	/**
44
+	 * @var string $editor_block_type
45
+	 */
46
+	private $editor_block_type;
47
+
48
+	/**
49
+	 * @var array $supported_post_types
50
+	 */
51
+	private $supported_post_types;
52
+
53
+	/**
54
+	 * @var WP_Block_Type $wp_block_type
55
+	 */
56
+	private $wp_block_type;
57
+
58
+
59
+	/**
60
+	 * BlockLoader constructor.
61
+	 *
62
+	 * @param BlockAssetManagerInterface $block_asset_manager
63
+	 */
64
+	public function __construct(BlockAssetManagerInterface $block_asset_manager)
65
+	{
66
+		$this->block_asset_manager = $block_asset_manager;
67
+	}
68
+
69
+
70
+	/**
71
+	 * @return string
72
+	 */
73
+	public function blockType()
74
+	{
75
+		return $this->editor_block_type;
76
+	}
77
+
78
+
79
+	/**
80
+	 * @return string
81
+	 */
82
+	public function namespacedBlockType()
83
+	{
84
+		return self::NAME_SPACE . $this->editor_block_type;
85
+	}
86
+
87
+
88
+	/**
89
+	 * @param string $editor_block_type
90
+	 */
91
+	protected function setBlockType($editor_block_type)
92
+	{
93
+		$this->editor_block_type = $editor_block_type;
94
+	}
95
+
96
+
97
+	/**
98
+	 * BlockAssetManager that this editor block uses for asset registration
99
+	 *
100
+	 * @return BlockAssetManagerInterface
101
+	 */
102
+	public function assetManager()
103
+	{
104
+		return $this->block_asset_manager;
105
+	}
106
+
107
+
108
+	/**
109
+	 * @param WP_Block_Type $wp_block_type
110
+	 */
111
+	protected function setWpBlockType($wp_block_type)
112
+	{
113
+		$this->wp_block_type = $wp_block_type;
114
+	}
115
+
116
+
117
+	/**
118
+	 * @param array $supported_post_types
119
+	 */
120
+	protected function setSupportedPostTypes(array $supported_post_types)
121
+	{
122
+		$this->supported_post_types = $supported_post_types;
123
+	}
124
+
125
+
126
+	/**
127
+	 * @return array
128
+	 */
129
+	public function attributes()
130
+	{
131
+		return $this->attributes;
132
+	}
133
+
134
+
135
+	/**
136
+	 * @param array $attributes
137
+	 */
138
+	public function setAttributes(array $attributes)
139
+	{
140
+		$this->attributes = $attributes;
141
+	}
142
+
143
+
144
+	/**
145
+	 * @return bool
146
+	 */
147
+	public function isDynamic()
148
+	{
149
+		return $this->dynamic;
150
+	}
151
+
152
+
153
+	/**
154
+	 * @param bool $dynamic
155
+	 */
156
+	public function setDynamic($dynamic = true)
157
+	{
158
+		$this->dynamic = filter_var($dynamic, FILTER_VALIDATE_BOOLEAN);
159
+	}
160
+
161
+
162
+	/**
163
+	 * Registers the Editor Block with WP core;
164
+	 * Returns the registered block type on success, or false on failure.
165
+	 *
166
+	 * @return WP_Block_Type|false
167
+	 */
168
+	public function registerBlock()
169
+	{
170
+		$args = array(
171
+			'attributes'    => $this->attributes(),
172
+			'editor_script' => $this->block_asset_manager->getEditorScriptHandle(),
173
+			'editor_style'  => $this->block_asset_manager->getEditorStyleHandle(),
174
+			'script'        => $this->block_asset_manager->getScriptHandle(),
175
+			'style'         => $this->block_asset_manager->getStyleHandle(),
176
+		);
177
+		if (! $this->isDynamic()) {
178
+			$args['render_callback'] = $this->renderBlock();
179
+		}
180
+		$wp_block_type = register_block_type(
181
+			new WP_Block_Type(
182
+				$this->namespacedBlockType(),
183
+				$args
184
+			)
185
+		);
186
+		$this->setWpBlockType($wp_block_type);
187
+		return $wp_block_type;
188
+	}
189
+
190
+
191
+	/**
192
+	 * @return WP_Block_Type|false The registered block type on success, or false on failure.
193
+	 */
194
+	public function unRegisterBlock()
195
+	{
196
+		return unregister_block_type($this->namespacedBlockType());
197
+	}
198
+
199
+
200
+	/**
201
+	 * returns true if the block type applies for the supplied post type
202
+	 * and should be added to that post type's editor
203
+	 *
204
+	 * @param string $post_type
205
+	 * @return boolean
206
+	 */
207
+	public function appliesToPostType($post_type)
208
+	{
209
+		return in_array($post_type, $this->supported_post_types, true);
210
+	}
211
+
212
+
213
+	/**
214
+	 * @return array
215
+	 */
216
+	public function getEditorContainer()
217
+	{
218
+		return array(
219
+			$this->namespacedBlockType(),
220
+			array(),
221
+		);
222
+	}
223
+
224
+
225
+	/**
226
+	 * returns the rendered HTML for the block
227
+	 *
228
+	 * @param array $attributes
229
+	 * @return string
230
+	 */
231
+	public function renderBlock(array $attributes = array())
232
+	{
233
+		return '';
234
+	}
235 235
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -81,7 +81,7 @@  discard block
 block discarded – undo
81 81
      */
82 82
     public function namespacedBlockType()
83 83
     {
84
-        return self::NAME_SPACE . $this->editor_block_type;
84
+        return self::NAME_SPACE.$this->editor_block_type;
85 85
     }
86 86
 
87 87
 
@@ -174,7 +174,7 @@  discard block
 block discarded – undo
174 174
             'script'        => $this->block_asset_manager->getScriptHandle(),
175 175
             'style'         => $this->block_asset_manager->getStyleHandle(),
176 176
         );
177
-        if (! $this->isDynamic()) {
177
+        if ( ! $this->isDynamic()) {
178 178
             $args['render_callback'] = $this->renderBlock();
179 179
         }
180 180
         $wp_block_type = register_block_type(
Please login to merge, or discard this patch.
core/domain/entities/editor/BlockInterface.php 1 patch
Indentation   +66 added lines, -66 removed lines patch added patch discarded remove patch
@@ -22,70 +22,70 @@
 block discarded – undo
22 22
 interface BlockInterface
23 23
 {
24 24
 
25
-    const NAME_SPACE = 'event-espresso/';
26
-
27
-    /**
28
-     * Perform any early setup required by the block
29
-     * including setting the block type and supported post types
30
-     *
31
-     * @return void
32
-     */
33
-    public function initialize();
34
-
35
-
36
-    /**
37
-     * @return string
38
-     */
39
-    public function blockType();
40
-
41
-
42
-    /**
43
-     * AssetRegister that this editor block uses for asset registration
44
-     *
45
-     * @return BlockAssetManagerInterface
46
-     */
47
-    public function assetManager();
48
-
49
-
50
-    /**
51
-     * Registers the Editor Block with WP core;
52
-     * Returns the registered block type on success, or false on failure.
53
-     *
54
-     * @return WP_Block_Type|false
55
-     */
56
-    public function registerBlock();
57
-
58
-
59
-    /**
60
-     * Un-registers the Editor Block with WP core;
61
-     * Returns the registered block type on success, or false on failure.
62
-     *
63
-     * @return WP_Block_Type|false
64
-     */
65
-    public function unRegisterBlock();
66
-
67
-
68
-    /**
69
-     * returns true if the block type applies for the supplied post type
70
-     * and should be added to that post type's editor
71
-     *
72
-     * @param string $post_type
73
-     * @return boolean
74
-     */
75
-    public function appliesToPostType($post_type);
76
-
77
-
78
-    /**
79
-     * @return array
80
-     */
81
-    public function getEditorContainer();
82
-
83
-
84
-    /**
85
-     * returns the rendered HTML for the block
86
-     *
87
-     * @param array $attributes
88
-     * @return string
89
-     */
90
-    public function renderBlock(array $attributes = array());
25
+	const NAME_SPACE = 'event-espresso/';
26
+
27
+	/**
28
+	 * Perform any early setup required by the block
29
+	 * including setting the block type and supported post types
30
+	 *
31
+	 * @return void
32
+	 */
33
+	public function initialize();
34
+
35
+
36
+	/**
37
+	 * @return string
38
+	 */
39
+	public function blockType();
40
+
41
+
42
+	/**
43
+	 * AssetRegister that this editor block uses for asset registration
44
+	 *
45
+	 * @return BlockAssetManagerInterface
46
+	 */
47
+	public function assetManager();
48
+
49
+
50
+	/**
51
+	 * Registers the Editor Block with WP core;
52
+	 * Returns the registered block type on success, or false on failure.
53
+	 *
54
+	 * @return WP_Block_Type|false
55
+	 */
56
+	public function registerBlock();
57
+
58
+
59
+	/**
60
+	 * Un-registers the Editor Block with WP core;
61
+	 * Returns the registered block type on success, or false on failure.
62
+	 *
63
+	 * @return WP_Block_Type|false
64
+	 */
65
+	public function unRegisterBlock();
66
+
67
+
68
+	/**
69
+	 * returns true if the block type applies for the supplied post type
70
+	 * and should be added to that post type's editor
71
+	 *
72
+	 * @param string $post_type
73
+	 * @return boolean
74
+	 */
75
+	public function appliesToPostType($post_type);
76
+
77
+
78
+	/**
79
+	 * @return array
80
+	 */
81
+	public function getEditorContainer();
82
+
83
+
84
+	/**
85
+	 * returns the rendered HTML for the block
86
+	 *
87
+	 * @param array $attributes
88
+	 * @return string
89
+	 */
90
+	public function renderBlock(array $attributes = array());
91 91
 }
Please login to merge, or discard this patch.