PluginProbe
Genesis Blocks / trunk
Genesis Blocks vtrunk
3.1.11 trunk 1.0.0 1.1.0 1.1.1 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.4.0 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 2.0.0 3.0.0 3.0.1 3.1.0 3.1.1 3.1.10 All 32 releases
genesis-blocks / lib / ModuleLoader.php

ModuleLoader.php in Genesis Blocks trunk, at lib/ModuleLoader.php

107 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Module Loader
4 * Load Genesis Blocks Modules.
5 *
6 * @since 0.1.0
7 * @package Genesis\Blocks
8 */
9
10 declare(strict_types=1);
11
12 namespace Genesis\Blocks;
13
14 /**
15 * Module Loader Class
16 * Manage registration of Genesis Blocks modules.
17 *
18 * @since 0.1.0
19 */
20 final class ModuleLoader {
21 /**
22 * Context
23 * Information about the current environment.
24 *
25 * @since 0.1.0
26 * @var array
27 */
28 public $context;
29
30 /**
31 * Class Constructor
32 *
33 * @since 0.1.0
34 * @param array $context Current environment information.
35 */
36 public function __construct( array $context ) {
37 $this->context = $context;
38 }
39
40 /**
41 * Initialize Registry
42 * Register Genesis Modules.
43 *
44 * @since 0.1.0
45 */
46 public function init() {
47 $modules = $this->get_modules();
48 $this->load_modules( $modules );
49 }
50
51 /**
52 * Get Modules
53 * Return a list of avaialable modules.
54 *
55 * @uses glob
56 * @since 0.1.0
57 *
58 * @return array
59 */
60 private function get_modules(): array {
61 return glob( __DIR__ . '/*/Module.php' );
62 }
63
64 /**
65 * Load Modules
66 * Iterate through modules and activate each one.
67 *
68 * @todo Gracefully manage activation errors.
69 * @todo Use a better escape method than esc_html?
70 *
71 * @since 0.1.0
72 * @param array $modules Collection of modules to iterate.
73 */
74 private function load_modules( array $modules ) {
75 foreach ( $modules as $path ) {
76 try {
77 $class = __NAMESPACE__ . '\\' . basename( dirname( $path ) ) . '\\Module';
78 $module = new $class();
79 $this->activate_module( $module ); // Send to new method for type safety.
80 } catch ( \TypeError $e ) {
81 // Invalid module.
82 echo esc_html( $e->getMessage() ) . "\n\n";
83 continue;
84 } catch ( \Exception $e ) {
85 echo esc_html( $e->getMessage() ) . "\n\n";
86 return;
87 }
88 }
89 }
90
91 /**
92 * Activate Module
93 * Activate the provide module.
94 *
95 * @since 0.1.0
96 * @uses Genesis\Blocks\Interfaces\ModuleInterface
97 * @param Interfaces\ModuleInterface $module Interface for modules.
98 *
99 * @throws \Exception In event of module activation failure.
100 */
101 private function activate_module( Interfaces\ModuleInterface $module ) {
102 if ( $module->is_enabled() ) {
103 $module->activate( $this->context );
104 }
105 }
106 }
107