summaryrefslogtreecommitdiff
path: root/core/controllers/admin_modules.php
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-05-26 05:28:59 +0000
committerBharat Mediratta <bharat@menalto.com>2009-05-26 05:28:59 +0000
commit7aed9239088b582a065da3fb63796ff66cd357c8 (patch)
tree8be9bc4faec21b20cbcc060ad5e9ca128465d09e /core/controllers/admin_modules.php
parent2966289b147ceae2fed79b9534840607bf38e0d8 (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/admin_modules.php')
-rw-r--r--core/controllers/admin_modules.php29
1 files changed, 16 insertions, 13 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");
}