diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-05-26 05:28:59 +0000 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-05-26 05:28:59 +0000 |
commit | 7aed9239088b582a065da3fb63796ff66cd357c8 (patch) | |
tree | 8be9bc4faec21b20cbcc060ad5e9ca128465d09e /core/controllers | |
parent | 2966289b147ceae2fed79b9534840607bf38e0d8 (diff) |
Restructure the module lifecycle.
Install: <module>_installer::install() is called, any necessary tables
are created.
Activate: <module>_installer::activate() is called. Module
controllers are routable, helpers are accessible, etc. The module is
in use.
Deactivate: <module>_installer::deactivate() is called. Module code
is not accessible or routable. Module is *not* in use, but its tables
are still around.
Uninstall: <module>_installer::uninstall() is called. Module is
completely removed from the database.
Admin > Modules will install and activate modules, but will only
deactivate (will NOT uninstall modules).
Diffstat (limited to 'core/controllers')
-rw-r--r-- | core/controllers/admin_modules.php | 29 | ||||
-rw-r--r-- | core/controllers/scaffold.php | 15 |
2 files changed, 27 insertions, 17 deletions
diff --git a/core/controllers/admin_modules.php b/core/controllers/admin_modules.php index 17d75bcb..f7dd909d 100644 --- a/core/controllers/admin_modules.php +++ b/core/controllers/admin_modules.php @@ -28,33 +28,36 @@ class Admin_Modules_Controller extends Admin_Controller { public function save() { access::verify_csrf(); - $changes->install = array(); - $changes->uninstall = array(); + $changes->activate = array(); + $changes->deactivate = array(); + $activated_names = array(); + $deactivated_names = array(); foreach (module::available() as $module_name => $info) { if ($info->locked) { continue; } $desired = $this->input->post($module_name) == 1; - if ($info->installed && !$desired && module::is_installed($module_name)) { - $changes->uninstall[] = $module_name; - $uninstalled_names[] = $info->name; - module::uninstall($module_name); - } else if (!$info->installed && $desired && !module::is_installed($module_name)) { - $changes->install[] = $module_name; - $installed_names[] = $info->name; + if ($info->active && !$desired && module::is_active($module_name)) { + $changes->deactivate[] = $module_name; + $deactivated_names[] = $info->name; + module::deactivate($module_name); + } else if (!$info->active && $desired && !module::is_active($module_name)) { + $changes->activate[] = $module_name; + $activated_names[] = $info->name; module::install($module_name); + module::activate($module_name); } } module::event("module_change", $changes); // @todo this type of collation is questionable from a i18n perspective - if (isset($installed_names)) { - message::success(t("Installed: %names", array("names" => join(", ", $installed_names)))); + if ($activated_names) { + message::success(t("Activated: %names", array("names" => join(", ", $activated_names)))); } - if (isset($uninstalled_names)) { - message::success(t("Uninstalled: %names", array("names" => join(", ", $uninstalled_names)))); + if ($deactivated_names) { + message::success(t("Deactivated: %names", array("names" => join(", ", $deactivated_names)))); } url::redirect("admin/modules"); } diff --git a/core/controllers/scaffold.php b/core/controllers/scaffold.php index 9f306caf..463a092c 100644 --- a/core/controllers/scaffold.php +++ b/core/controllers/scaffold.php @@ -78,7 +78,7 @@ class Scaffold_Controller extends Template_Controller { function add_albums_and_photos($count, $desired_type=null) { srand(time()); $parents = ORM::factory("item")->where("type", "album")->find_all()->as_array(); - $owner_id = module::is_installed("user") ? user::active()->id : null; + $owner_id = user::active()->id; $test_images = glob(APPPATH . "tests/images/*.[Jj][Pp][Gg]"); @@ -162,7 +162,7 @@ class Scaffold_Controller extends Template_Controller { url::redirect("scaffold"); } - if (module::is_installed("akismet")) { + if (module::is_active("akismet")) { akismet::$test_mode = 1; } for ($i = 0; $i < $count; $i++) { @@ -291,20 +291,27 @@ class Scaffold_Controller extends Template_Controller { dir::unlink(VARPATH . "modules"); dir::unlink(VARPATH . "tmp"); - module::$module_names = array(); - module::$modules = array(); $db->clear_cache(); + module::$modules = array(); + module::$active = array(); // Use a known random seed so that subsequent packaging runs will reuse the same random // numbers, keeping our install.sql file more stable. srand(0); + try { core_installer::install(true); module::load_modules(); foreach (array("user", "comment", "organize", "info", "rss", "search", "slideshow", "tag") as $module_name) { module::install($module_name); + module::activate($module_name); + } + } catch (Exception $e) { + Kohana::log("error", $e->getTraceAsString()); + print $e->getTrace(); + throw $e; } url::redirect("scaffold/dump_database"); |