View source
<?php
namespace Drupal\xautoload\Tests\VirtualDrupal;
class SystemTable {
private $systemTableData = array();
function addModuleWithFilename($module, $filename) {
$this
->addModule($module, array(
'filename' => $filename,
));
}
function addModule($module, $data) {
if (!isset($data['filename'])) {
throw new \Exception("Missing filename in module data.");
}
if ($data['filename'] !== dirname($data['filename']) . '/' . $module . '.module') {
throw new \Exception("Unexpected filename for module.");
}
$this->systemTableData[$module] = $data + array(
'status' => 0,
'bootstrap' => 0,
'schema_version' => -1,
'weight' => 0,
'info' => NULL,
'type' => 'module',
'name' => $module,
);
}
function moduleSetDir($module, $dir) {
if (!isset($this->systemTableData[$module])) {
throw new \Exception("Unknown module '{$module}'.");
}
$filename = $dir . '/' . $module . '.module';
$this->systemTableData[$module]['filename'] = $filename;
}
function moduleSetFilename($module, $filename) {
if (!isset($this->systemTableData[$module])) {
throw new \Exception("Unknown module '{$module}'.");
}
$this->systemTableData[$module]['filename'] = $filename;
}
function moduleSetEnabled($module) {
if (!isset($this->systemTableData[$module])) {
throw new \Exception("Unknown module '{$module}'.");
}
$this->systemTableData[$module]['status'] = 1;
}
public function moduleSetSchemaVersion($module, $version) {
if (!isset($this->systemTableData[$module])) {
throw new \Exception("Unknown module '{$module}'.");
}
$this->systemTableData[$module]['schema_version'] = $version;
}
function getActiveExtensions() {
$activeExtensions = array();
foreach ($this->systemTableData as $module => $data) {
if (1 === $data['status']) {
$activeExtensions[$module] = $data['type'];
}
}
return $activeExtensions;
}
function moduleGetData($module) {
if (!isset($this->systemTableData[$module])) {
return NULL;
}
return $this->systemTableData[$module];
}
function moduleGetFilename($module) {
if (!isset($this->systemTableData[$module])) {
return NULL;
}
return $this->systemTableData[$module]['filename'];
}
function moduleGetStatus($module) {
if (!isset($this->systemTableData[$module])) {
throw new \Exception("Unknown module '{$module}'.");
}
return $this->systemTableData[$module]['status'];
}
function moduleGetSchemaVersion($module) {
if (!isset($this->systemTableData[$module])) {
throw new \Exception("Unknown module '{$module}'.");
}
return $this->systemTableData[$module]['schema_version'];
}
public function systemTableObjects(array $fields = NULL, $type = NULL) {
$objects = array();
foreach ($this->systemTableData as $name => $record) {
if (NULL !== $type && $type !== $record['type']) {
continue;
}
$objects[$name] = $this
->makeObject($record, $fields);
}
return $objects;
}
public function systemTableSortedObjects(array $fields = NULL, $type = NULL) {
$byWeight = array();
foreach ($this->systemTableData as $name => $record) {
if (NULL !== $type && $type !== $record['type']) {
continue;
}
$byWeight[$record['weight']][$name] = $this
->makeObject($record, $fields);
}
ksort($byWeight);
$sorted = array();
foreach ($byWeight as $records) {
ksort($records);
$sorted += $records;
}
return $sorted;
}
private function makeObject($array, array $fields = NULL) {
if (!isset($fields)) {
return (object) $array;
}
$object = new \stdClass();
foreach ($fields as $field) {
$object->{$field} = $array[$field];
}
return $object;
}
public function systemGetFilesDatabase($files, $type) {
$fields = array(
'filename',
'name',
'type',
'status',
'schema_version',
'weight',
);
foreach ($this
->systemTableObjects($fields) as $file) {
if ($type !== $file->type) {
continue;
}
if (!isset($files[$file->name]) || !is_object($files[$file->name])) {
continue;
}
$file->uri = $file->filename;
foreach ($file as $key => $value) {
if (!isset($files[$file->name]->{$key})) {
$files[$file->name]->{$key} = $value;
}
}
}
}
public function systemUpdateFilesDatabase(&$files, $type) {
foreach ($this
->systemTableObjects(NULL, $type) as $record) {
if (isset($files[$record->name]) && is_object($files[$record->name])) {
$file = $files[$record->name];
foreach ($record as $key => $oldvalue) {
if (isset($file->{$key})) {
$this->systemTableData[$record->name][$key] = $file->{$key};
}
}
$file->exists = TRUE;
}
else {
unset($this->systemTableData[$record->name]);
}
}
foreach ($files as $name => $file) {
if (isset($file->exists)) {
unset($file->exists);
}
else {
$this->systemTableData[$name] = array(
'filename' => $file->uri,
'name' => $file->name,
'type' => $type,
'owner' => isset($file->owner) ? $file->owner : '',
'info' => $file->info,
'status' => 0,
'bootstrap' => 0,
'schema_version' => -1,
'weight' => 0,
);
$file->type = $type;
$file->status = 0;
$file->schema_version = -1;
}
}
}
public function setBootstrapModules($bootstrap_modules) {
foreach ($this->systemTableData as $name => $record) {
$record['bootstrap'] = empty($bootstrap_modules[$name]) ? 0 : 1;
}
}
public function moduleSetWeight($name, $weight) {
if (!isset($this->systemTableData[$name])) {
throw new \Exception("Unknown module '{$name}'.");
}
$this->systemTableData[$name]['weight'] = $weight;
}
}