/** * @param string $hook * @param bool $sort * * @return array */ private function discoverImplementations($hook, $sort) { # StaticCallLog::addCall(); // The hook is not cached, so ensure that whether or not it has // implementations, that the cache is updated at the end of the request. $this->writeCache = TRUE; $hook_info = $this->moduleHookInfo(); $implementations = array(); $list = $this->moduleList->moduleList(FALSE, FALSE, $sort); if ('modules_enabled' === $hook) { # HackyLog::logx($list); } foreach ($list as $module) { $include_file = isset($hook_info[$hook]['group']) && module_load_include('inc', $module, $module . '.' . $hook_info[$hook]['group']); // Since module_hook() may needlessly try to load the include file again, // function_exists() is used directly here. if (function_exists($module . '_' . $hook)) { $implementations[$module] = $include_file ? $hook_info[$hook]['group'] : FALSE; } } // Allow modules to change the weight of specific implementations but avoid // an infinite loop. if ($hook != 'module_implements_alter') { $this->hookSystem->drupalAlter('module_implements', $implementations, $hook); } return $implementations; }
/** * @see bootstrap_invoke_all() * * @param string $hook */ private function bootstrapInvokeAll($hook) { // Bootstrap modules should have been loaded when this function is called, so // we don't need to tell module_list() to reset its internal list (and we // therefore leave the first parameter at its default value of FALSE). We // still pass in TRUE for the second parameter, though; in case this is the // first time during the bootstrap that module_list() is called, we want to // make sure that its internal cache is primed with the bootstrap modules // only. foreach ($this->moduleList->moduleList(FALSE, TRUE) as $module) { $this->drupalLoad->drupalLoad('module', $module); PureFunctions::moduleInvoke($module, $hook); } }
/** * @param string $extension * @param bool $install * * @see module_enable() */ private function enableModule($extension, $install) { $filename = $this->drupalGetFilename->drupalGetFilename('module', $extension); // Include module files. require_once $filename; if (file_exists($install_file = dirname($filename) . '/' . $extension . '.install')) { require_once $install_file; } // Update status in system table $this->systemTable->moduleSetEnabled($extension); // Clear various caches, especially hook_module_implements() $this->systemListReset->systemListReset(); $this->moduleList->moduleList(TRUE); $this->hookSystem->moduleImplementsReset(); $this->systemUpdateBootstrapStatus->systemUpdateBootstrapStatus(); // Update the registry to include it. # registry_update(); // Refresh the schema to include it. # drupal_get_schema(NULL, TRUE); // Update the theme registry to include it. # drupal_theme_rebuild(); // Clear entity cache. # entity_info_cache_clear(); if ($install) { PureFunctions::moduleInvoke($extension, 'schema'); $this->systemTable->moduleSetSchemaVersion($extension, 7000); PureFunctions::moduleInvoke($extension, 'update_last_removed'); // Optional hook_install().. PureFunctions::moduleInvoke($extension, 'install'); // Optional watchdog() $this->hookSystem->moduleInvokeAll('watchdog'); } // hook_enable() PureFunctions::moduleInvoke($extension, 'enable'); // watchdog() $this->hookSystem->moduleInvokeAll('watchdog'); }