ModuleEnable.php in X Autoload 7.5
File
tests/src/VirtualDrupal/ModuleEnable.php
View source
<?php
namespace Drupal\xautoload\Tests\VirtualDrupal;
class ModuleEnable {
private $drupalGetFilename;
private $systemTable;
private $hookSystem;
private $systemListReset;
private $moduleList;
private $systemUpdateBootstrapStatus;
private $systemRebuildModuleData;
function __construct(DrupalGetFilename $drupalGetFilename, HookSystem $hookSystem, ModuleList $moduleList, SystemTable $systemTable, SystemListReset $systemListReset, SystemRebuildModuleData $systemRebuildModuleData, SystemUpdateBootstrapStatus $systemUpdateBootstrapStatus) {
$this->drupalGetFilename = $drupalGetFilename;
$this->hookSystem = $hookSystem;
$this->moduleList = $moduleList;
$this->systemTable = $systemTable;
$this->systemListReset = $systemListReset;
$this->systemRebuildModuleData = $systemRebuildModuleData;
$this->systemUpdateBootstrapStatus = $systemUpdateBootstrapStatus;
}
function moduleEnable(array $module_list, $enable_dependencies = TRUE) {
if ($enable_dependencies) {
$module_list = $this
->moduleEnableCheckDependencies($module_list);
}
if (empty($module_list)) {
return TRUE;
}
$modules_installed = array();
$modules_enabled = array();
foreach ($module_list as $module) {
if (1 == $this->systemTable
->moduleGetStatus($module)) {
continue;
}
if (-1 == $this->systemTable
->moduleGetSchemaVersion($module)) {
$this
->enableModule($module, TRUE);
$modules_installed[] = $module;
$modules_enabled[] = $module;
}
else {
$this
->enableModule($module, FALSE);
$modules_enabled[] = $module;
}
}
if (!empty($modules_installed)) {
$this->hookSystem
->moduleInvokeAll('modules_installed', $modules_installed);
}
if (!empty($modules_enabled)) {
$this->hookSystem
->moduleInvokeAll('modules_enabled', $modules_enabled);
}
return TRUE;
}
protected function moduleEnableCheckDependencies(array $module_list) {
$module_data = $this->systemRebuildModuleData
->systemRebuildModuleData();
$module_list = array_flip(array_values($module_list));
while ($module = key($module_list)) {
next($module_list);
if (!isset($module_data[$module])) {
throw new \Exception("Module '{$module}' not found.");
}
if ($module_data[$module]->status) {
unset($module_list[$module]);
continue;
}
$module_list[$module] = $module_data[$module]->sort;
foreach (array_keys($module_data[$module]->requires) as $dependency) {
if (!isset($module_list[$dependency])) {
$module_list[$dependency] = 0;
}
}
}
if (!$module_list) {
return array();
}
arsort($module_list);
return array_keys($module_list);
}
private function enableModule($extension, $install) {
$filename = $this->drupalGetFilename
->drupalGetFilename('module', $extension);
require_once $filename;
if (file_exists($install_file = dirname($filename) . '/' . $extension . '.install')) {
require_once $install_file;
}
$this->systemTable
->moduleSetEnabled($extension);
$this->systemListReset
->systemListReset();
$this->moduleList
->moduleList(TRUE);
$this->hookSystem
->moduleImplementsReset();
$this->systemUpdateBootstrapStatus
->systemUpdateBootstrapStatus();
if ($install) {
PureFunctions::moduleInvoke($extension, 'schema');
$this->systemTable
->moduleSetSchemaVersion($extension, 7000);
PureFunctions::moduleInvoke($extension, 'update_last_removed');
PureFunctions::moduleInvoke($extension, 'install');
$this->hookSystem
->moduleInvokeAll('watchdog');
}
PureFunctions::moduleInvoke($extension, 'enable');
$this->hookSystem
->moduleInvokeAll('watchdog');
}
}