diff --git a/provision.api.php b/provision.api.php index 0eb222a01963ea0b594db46610770927bfacc187..9d0ec6020e27b28693a65f681cf06d270b4cf477 100644 --- a/provision.api.php +++ b/provision.api.php @@ -82,6 +82,22 @@ function hook_provision_services() { return array('db' => NULL); } +/** + * Alter a Context immediately after it is loaded and the 'init' methods are run. + * + * If replacing the context with a new object, be sure to implement the methods + * $context->method_invoke('init) and $context->type_invoke('init'); + * + * @param $context \Provision_Context|\Provision_Context_server|\Provision_Context_site|\Provision_Context_platform + * + * @see provision.context.inc#72 + */ +function hook_provision_context_alter(&$context) { + $context = new Provision_Context_Server_alternate($context->name); + $context->method_invoke('init'); + $context->type_invoke('init'); +} + /** * Append PHP code to Drupal's settings.php file. * diff --git a/provision.context.inc b/provision.context.inc index 5455e474803cc397dff6627beead38e9da978177..ac7d676129080230c472f76377acf6027e1ea86f 100644 --- a/provision.context.inc +++ b/provision.context.inc @@ -69,6 +69,10 @@ function & d($name = NULL, $_root_object = FALSE, $allow_creation = TRUE) { if (!is_null($instances[$name])) { $instances[$name]->method_invoke('init'); $instances[$name]->type_invoke('init'); + + // Allow drush modules to alter the class being loaded. + drush_command_invoke_all_ref('provision_context_alter', $instances[$name]); + } return $instances[$name]; }