src/admin-pages/settings-sections/class-wp-site-identity-standard-settings-section-registry.php
<?php
/**
* WP_Site_Identity_Standard_Settings_Section_Registry class
*
* @package WPSiteIdentity
* @since 1.0.0
*/
/**
* Class responsible for registering settings sections.
*
* @since 1.0.0
*/
class WP_Site_Identity_Standard_Settings_Section_Registry implements WP_Site_Identity_Settings_Section_Registry {
/**
* All registered settings sections as `$slug => $instance` pairs.
*
* @since 1.0.0
* @var array
*/
protected $sections = array();
/**
* Parent settings form to register settings sections for.
*
* @since 1.0.0
* @var WP_Site_Identity_Settings_Form
*/
protected $form;
/**
* Factory to create settings section objects.
*
* @since 1.0.0
* @var WP_Site_Identity_Settings_Section_Factory
*/
protected $factory;
/**
* Constructor.
*
* @since 1.0.0
*
* @param WP_Site_Identity_Settings_Form $form Parent settings form.
*/
public function __construct( WP_Site_Identity_Settings_Form $form ) {
$this->form = $form;
$this->factory = new WP_Site_Identity_Settings_Section_Factory( $this );
}
/**
* Gets all registered settings sections.
*
* @since 1.0.0
*
* @return array Array of `$slug => $instance` pairs.
*/
public function get_all_sections() {
return $this->sections;
}
/**
* Gets a registered settings section instance.
*
* @since 1.0.0
*
* @param string $slug Slug of the settings section.
* @return WP_Site_Identity_Settings_Section Registered settings section.
*
* @throws WP_Site_Identity_Settings_Section_Not_Found_Exception Thrown when a settings section cannot be found.
*/
public function get_section( $slug ) {
if ( ! isset( $this->sections[ $slug ] ) ) {
/* translators: %s: settings section slug */
throw new WP_Site_Identity_Settings_Section_Not_Found_Exception( sprintf( __( 'The settings section with the slug %s could not be found.', 'wp-site-identity' ), $slug ) );
}
return $this->sections[ $slug ];
}
/**
* Checks whether a settings section is registered.
*
* @since 1.0.0
*
* @param string $slug Slug of the settings section.
* @return bool True if the settings section is registered, false otherwise.
*/
public function has_section( $slug ) {
return isset( $this->sections[ $slug ] );
}
/**
* Registers a new settings section.
*
* @since 1.0.0
*
* @param WP_Site_Identity_Settings_Section $section Settings section to register.
*/
public function register_section( WP_Site_Identity_Settings_Section $section ) {
$setting_registry = $this->form->get_setting_registry();
$slug = $section->get_slug();
$group = $setting_registry->prefix( $setting_registry->group() );
$this->sections[ $slug ] = $section;
add_settings_section( $slug, $section->get_title(), array( $section, 'render' ), $group );
}
/**
* Gets the factory to create settings section objects.
*
* @since 1.0.0
*
* @return WP_Site_Identity_Settings_Section_Factory Factory to create settings section objects.
*/
public function factory() {
return $this->factory;
}
}