diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/controllers/welcome.php | 10 | ||||
-rw-r--r-- | core/helpers/module.php | 31 |
2 files changed, 33 insertions, 8 deletions
diff --git a/core/controllers/welcome.php b/core/controllers/welcome.php index 9d3ca996..5e76789c 100644 --- a/core/controllers/welcome.php +++ b/core/controllers/welcome.php @@ -74,12 +74,7 @@ class Welcome_Controller extends Template_Controller { if ($module_name != "core") { require_once(DOCROOT . "modules/${module_name}/helpers/${module_name}_installer.php"); } - $modules = Kohana::config('core.modules'); - $modules[] = MODPATH . $module_name; - Kohana::config_set('core.modules', $modules); - - Kohana::log("debug", "${module_name}_install (initial)"); - call_user_func(array("${module_name}_installer", "install")); + module::install($module_name); } url::redirect("welcome"); @@ -109,8 +104,9 @@ class Welcome_Controller extends Template_Controller { $db->query("DROP TABLE `$table`"); } set_error_handler($old_handler); + } else { + module::uninstall($module_name); } - call_user_func(array("{$module_name}_installer", "uninstall")); url::redirect("welcome"); } diff --git a/core/helpers/module.php b/core/helpers/module.php index 10effbe3..a06f2999 100644 --- a/core/helpers/module.php +++ b/core/helpers/module.php @@ -79,6 +79,31 @@ class module_Core { return $modules; } + public static function install($module_name) { + $installer_class = "{$module_name}_installer"; + Kohana::log("debug", "$installer_class install (initial)"); + if ($module_name != "core") { + require_once(DOCROOT . "modules/${module_name}/helpers/{$installer_class}.php"); + } + $kohana_modules = Kohana::config('core.modules'); + $kohana_modules[] = MODPATH . $module_name; + Kohana::config_set('core.modules', $kohana_modules); + + call_user_func(array($installer_class, "install")); + + if (method_exists($installer_class, "install")) { + call_user_func_array(array($installer_class, "install"), array()); + } + + self::load_modules(); + } + + public static function uninstall($module_name) { + $installer_class = "{$module_name}_installer"; + Kohana::log("debug", "$installer_class uninstall"); + call_user_func(array($installer_class, "uninstall")); + } + public static function load_modules() { // This is one of the first database operations that we'll do, so it may fail if there's no // install yet. Try to handle this situation gracefully expecting that the scaffolding will @@ -87,8 +112,12 @@ class module_Core { // @todo get rid of this extra error checking when we have an installer. set_error_handler(array("module", "_dummy_error_handler")); + // Reload module list from the config file since we'll do a refresh after calling install() + $core = Kohana::config_load('core'); + $kohana_modules = $core['modules']; + self::$module_names = array(); + self::$modules = array(); try { - $kohana_modules = Kohana::config('core.modules'); foreach (ORM::factory("module")->find_all() as $module) { self::$module_names[] = $module->name; self::$modules[] = $module; |