booted ) { return; } $this->booted = true; $this->services['settings'] = new Settings(); $this->services['assets'] = new Assets(); $this->services['http'] = new Http(); $this->services['filesystem'] = new Filesystem(); $this->services['modules'] = new Modules(); $this->services['modules_screen'] = new Modules_Screen(); $this->services['admin_menu'] = new Admin_Menu(); if ( is_admin() ) { $this->services['admin_menu']->register(); } $modules_rest = new Modules_Rest(); $modules_rest->register(); $svg_rest = new Svg_Rest(); $svg_rest->register(); $theme_rest = new Theme_Rest(); $theme_rest->register(); $settings_rest = new Settings_Rest(); $settings_rest->register(); Color_Schemes::register(); $this->services['modules']->discover(); $this->services['modules']->boot_enabled(); } /** * Settings store. * * @return Settings */ public function settings() { return $this->service( 'settings' ); } /** * Asset loader. * * @return Assets */ public function assets() { return $this->service( 'assets' ); } /** * Remote request helper. * * @return Http */ public function http() { return $this->service( 'http' ); } /** * Filesystem helper. * * @return Filesystem */ public function filesystem() { return $this->service( 'filesystem' ); } /** * Module registry. * * @return Modules */ public function modules() { return $this->service( 'modules' ); } /** * The Modules screen renderer. * * @return Modules_Screen */ public function modules_screen() { return $this->service( 'modules_screen' ); } /** * The admin menu builder. * * @return Admin_Menu */ public function admin_menu() { return $this->service( 'admin_menu' ); } /** * Fetch a service, booting the plugin first if something asked early. * * @param string $name Service key. * @return mixed */ private function service( $name ) { if ( ! $this->booted ) { $this->boot(); } return isset( $this->services[ $name ] ) ? $this->services[ $name ] : null; } /** * Singletons are not cloned. * * @return void */ private function __clone() {} /** * Singletons are not unserialised. * * @return void * @throws \Exception Always. */ public function __wakeup() { throw new \Exception( 'PageCore\\Plugin cannot be unserialised.' ); } }