<?php
if ( function_exists( 'add_action' ) ) {
add_action( 'after_setup_theme', 'eig_load_modules', 100 );
}
/**
* Initialize the module loader.
*/
function eig_load_modules() {
Endurance_ModuleManager::loadActiveModules();
// Read options, if module states don't match what is in database, do a write.
$options = eig_active_module_options();
$modules = Endurance_ModuleRegistry::collection()->all();
$options->populate( $modules );
$options->maybePersist();
}
/**
* Returns an instance of Endurance_Options where the keys are the
* names (slugs) for the modules. The values will be a boolean representing
* whether the module is enabled or not.
*
* @return Endurance_Options
*/
function eig_active_module_options() {
static $options;
if ( ! isset( $options ) ) {
$options = new Endurance_Options( 'eig_active_modules' );
}
return $options;
}
/**
* Register a module
*
* Arguments:
* - name (required): The internal name used to reference the module.
* - label (required): The module label shown to end users.
* - callback (required): The callback used to load the module when it is active.
* - isActive (optional): The default state of the plugin on a fresh plugin installation. Defaults to false.
* - isHidden (optional): Whether to show the plugin toggle in the admin interface. Defaults to false.
*
* @param array $args
*/
function eig_register_module( array $args ) {
if ( ! isset( $args['name'] ) ) {
throw new InvalidArgumentException( 'Module must have a name!' );
}
if ( ! is_string( $args['name'] ) ) {
throw new InvalidArgumentException( 'Module `name` argument must be a string!' );
}
if ( ! isset( $args['label'] ) ) {
throw new InvalidArgumentException( 'Module must have a label!' );
}
if ( ! is_string( $args['label'] ) ) {
throw new InvalidArgumentException( 'Module `label` argument must be a string!' );
}
if ( ! isset( $args['callback'] ) ) {
throw new InvalidArgumentException( 'Module must have a callback!' );
}
if ( ! is_callable( $args['callback'] ) ) {
throw new InvalidArgumentException( 'Module must have a valid callback!' );
}
if ( isset( $args['isActive'] ) && ! is_bool( $args['isActive'] ) ) {
throw new InvalidArgumentException( 'Module `isActive` argument must be a boolean!' );
}
if ( isset( $args['isHidden'] ) && ! is_bool( $args['isHidden'] ) ) {
throw new InvalidArgumentException( 'Module `isHidden` argument must be a boolean!' );
}
$defaults = array(
'isActive' => false,
'isHidden' => false,
);
$module = array_merge( $defaults, $args );
$options = eig_active_module_options();
// Fetch option to check if module is active or not, if no entry is found, use the default isActive state.
$module['isActive'] = (bool) $options->get( $args['name'], (bool) $module['isActive'] );
Endurance_ModuleRegistry::register( $module['name'], $module );
}