summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2010-01-22 13:38:05 -0800
committerTim Almdal <tnalmdal@shaw.ca>2010-01-22 13:38:05 -0800
commiteabeeeb1267e0c925b5f31b2455a080bc2e9f237 (patch)
tree7c97ae65caaaec9ceeeab932fedfb97d3dcae957
parentdf313cac567bee77f5a73308381fe67dcac9b92c (diff)
Trap any errors that may occur when trying to install a new identity provider and then reinstall the current one.
-rw-r--r--modules/gallery/controllers/admin_modules.php31
-rw-r--r--modules/gallery/libraries/IdentityProvider.php40
2 files changed, 45 insertions, 26 deletions
diff --git a/modules/gallery/controllers/admin_modules.php b/modules/gallery/controllers/admin_modules.php
index a2168280..84fee25d 100644
--- a/modules/gallery/controllers/admin_modules.php
+++ b/modules/gallery/controllers/admin_modules.php
@@ -76,21 +76,24 @@ class Admin_Modules_Controller extends Admin_Controller {
continue;
}
- $desired = Input::instance()->post($module_name) == 1;
- if ($info->active && !$desired && module::is_active($module_name)) {
- $changes->deactivate[] = $module_name;
- $deactivated_names[] = t($info->name);
- module::deactivate($module_name);
- } else if (!$info->active && $desired && !module::is_active($module_name)) {
- $changes->activate[] = $module_name;
- $activated_names[] = t($info->name);
-
- if (module::is_installed($module_name)) {
- module::upgrade($module_name);
- } else {
- module::install($module_name);
+ try {
+ $desired = Input::instance()->post($module_name) == 1;
+ if ($info->active && !$desired && module::is_active($module_name)) {
+ module::deactivate($module_name);
+ $changes->deactivate[] = $module_name;
+ $deactivated_names[] = t($info->name);
+ } else if (!$info->active && $desired && !module::is_active($module_name)) {
+ if (module::is_installed($module_name)) {
+ module::upgrade($module_name);
+ } else {
+ module::install($module_name);
+ }
+ module::activate($module_name);
+ $changes->activate[] = $module_name;
+ $activated_names[] = t($info->name);
}
- module::activate($module_name);
+ } catch (Exception $e) {
+ Kohana_Log::add("error", (string)$e);
}
}
diff --git a/modules/gallery/libraries/IdentityProvider.php b/modules/gallery/libraries/IdentityProvider.php
index f7be33e3..e07838d1 100644
--- a/modules/gallery/libraries/IdentityProvider.php
+++ b/modules/gallery/libraries/IdentityProvider.php
@@ -71,19 +71,35 @@ class IdentityProvider_Core {
module::uninstall($current_provider);
}
- IdentityProvider::reset();
- $provider = new IdentityProvider($new_provider);
-
- module::set_var("gallery", "identity_provider", $new_provider);
-
- if (method_exists("{$new_provider}_installer", "initialize")) {
- call_user_func("{$new_provider}_installer::initialize");
+ try {
+ IdentityProvider::reset();
+ $provider = new IdentityProvider($new_provider);
+
+ module::set_var("gallery", "identity_provider", $new_provider);
+
+ if (method_exists("{$new_provider}_installer", "initialize")) {
+ call_user_func("{$new_provider}_installer::initialize");
+ }
+
+ module::event("identity_provider_changed", $current_provider, $new_provider);
+
+ auth::login($provider->admin_user());
+ Session::instance()->regenerate();
+ } catch (Exception $e) {
+ // Make sure new provider is not in the database
+ module::uninstall($new_provider);
+
+ // Lets reset to the current provider so that the gallery installation is still
+ // working.
+ module::set_var("gallery", "identity_provider", null);
+ IdentityProvider::change_provider($current_provider);
+ module::activate($current_provider);
+ message::error(
+ t("Error attempting to enable \"%new_provider\" identity provider, " .
+ "reverted to \"%old_provider\" identity provider",
+ array("new_provider" => $new_provider, "old_provider" => $current_provider)));
+ throw $e;
}
-
- module::event("identity_provider_changed", $current_provider, $new_provider);
-
- auth::login($provider->admin_user());
- Session::instance()->regenerate();
}
/**