public function register_module(Module $module)
{
$id = $module->id();
if ($this->has_module($id)) {
throw ModuleAlreadyRegisteredException::for_id($id, 'register');
}
if (isset($this->states[$id])) {
if ($this->states[$id]) {
$module->activate();
} else {
$module->deactivate();
}
} else {
$this->states[$id] = $module->is_active();
$this->save_modules();
}
$this->modules[$id] = $module;
return $this->states[$id];
}