Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 8
CRAP
n/a
0 / 0
NewfoldLabs\WP\ModuleLoader\register
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
NewfoldLabs\WP\ModuleLoader\unregister
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
NewfoldLabs\WP\ModuleLoader\activate
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
NewfoldLabs\WP\ModuleLoader\deactivate
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
NewfoldLabs\WP\ModuleLoader\isActive
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
NewfoldLabs\WP\ModuleLoader\load
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
NewfoldLabs\WP\ModuleLoader\container
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
NewfoldLabs\WP\ModuleLoader\options
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace NewfoldLabs\WP\ModuleLoader;
4
5use WP_Forge\Options\Options;
6
7/**
8 * Register a module.
9 *
10 * Required attributes:
11 *  - name (string): The internal module name; should be lowercase with dashes.
12 *  - label (string): The user-facing module name
13 *  - callback (callable): The callback that kicks off the module's functionality.
14 *  - isActive (bool): Whether the module defaults to active.
15 *  - isHidden (bool): Whether the module should be hidden from users in the UI.
16 *
17 * @param iterable $attributes
18 */
19function register( $attributes ) {
20    $module = new Module( $attributes );
21    $module->register();
22}
23
24/**
25 * Unregister a module.
26 *
27 * @param string $name Module name
28 */
29function unregister( string $name ) {
30    ModuleRegistry::unregister( $name );
31}
32
33/**
34 * Activate a module.
35 *
36 * @param string $name Module name
37 */
38function activate( string $name ) {
39
40    if ( ModuleRegistry::has( $name ) ) {
41
42        /** @var Module $module */
43        $module = ModuleRegistry::get( $name );
44
45        // Activate module
46        $module->isActive = true;
47        options()->set( $name, true );
48    }
49}
50
51/**
52 * Deactivate a module.
53 *
54 * @param string $name Module name
55 */
56function deactivate( string $name ) {
57
58    if ( ModuleRegistry::has( $name ) ) {
59
60        /** @var Module $module */
61        $module = ModuleRegistry::get( $name );
62
63        // Deactivate module
64        $module->isActive = false;
65        options()->set( $name, false );
66
67    }
68}
69
70/**
71 * Check if a module is active.
72 *
73 * @param string $name Module name
74 *
75 * @return bool
76 */
77function isActive( string $name ) {
78    return ModuleRegistry::getActive()->has( $name );
79}
80
81/**
82 * Load all active modules.
83 *
84 * @return void
85 */
86function load() {
87    // Load active modules
88    foreach ( ModuleRegistry::getActive() as $module ) {
89        call_user_func( $module->callback, container(), $module );
90    }
91
92    // Store state of all modules into the database
93    options()->populate( ModuleRegistry::collection()->pluck( 'isActive', 'name' )->all() );
94}
95
96/**
97 * Get or set the container instance.
98 *
99 * @param Container|null $container
100 *
101 * @return Container
102 */
103function container( ?Container $container = null ) {
104
105    static $instance;
106
107    // If no container was passed and was never set, default to an empty container
108    if ( ! isset( $instance ) ) {
109        // If a container was passed, set it; otherwise default to an empty container.
110        $instance = ! is_null( $container ) ? $container : new Container();
111
112        do_action( 'newfold_container_set', $instance );
113    }
114
115    return $instance;
116}
117
118/**
119 * Get the options object for our active modules.
120 *
121 * @return Options
122 */
123function options() {
124
125    static $options;
126
127    if ( ! isset( $options ) ) {
128        $options = new Options( 'newfold_active_modules' );
129    }
130
131    return $options;
132}