views_system.module in Views System 7.4
Same filename and directory in other branches
Extends the Views module and provides fields, filter criteria, and sort criteria for Modules/Themes/Theme engines.
File
views_system.moduleView source
<?php
/**
* @file
* Extends the Views module and provides fields, filter criteria, and sort
* criteria for Modules/Themes/Theme engines.
*/
/**
* Implements hook_help().
*/
function views_system_help($path, $arg) {
switch ($path) {
case 'admin/help#views_system':
$output = '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('The Views System module extends the Views module and provides fields, filter criteria, and sort criteria for <em>Modules/Themes/Theme engines</em>. For more information, see the online handbook entry for <a href="@views_system">Views System module</a>.', array(
'@views_system' => 'https://www.drupal.org/project/views_system',
)) . '</p>';
return $output;
}
}
/**
* Implements hook_views_api().
*/
function views_system_views_api() {
return array(
'api' => '3.0',
'path' => drupal_get_path('module', 'views_system') . '/views',
);
}
/**
* Implements hook_flush_caches().
*/
function views_system_flush_caches() {
views_system_rebuild_module_data();
views_system_rebuild_theme_data();
}
/**
* Implements hook_modules_enabled().
*/
function views_system_modules_enabled() {
views_system_rebuild_module_data();
views_system_rebuild_theme_data();
}
/**
* Implements hook_modules_disabled().
*/
function views_system_modules_disabled() {
views_system_rebuild_module_data();
views_system_rebuild_theme_data();
}
/**
* Implements hook_form_FORM_ID_alter(); update data on modules page.
*/
function views_system_form_system_modules_alter(&$form, &$form_state, $form_id) {
views_system_rebuild_module_data();
}
/**
* Implements hook_form_FORM_ID_alter(); update data on themes page.
*/
function views_system_form_system_themes_admin_form_alter(&$form, &$form_state, $form_id) {
views_system_rebuild_theme_data();
}
/**
* Helper function to rebuild module's data.
*/
function views_system_rebuild_module_data() {
db_query("DELETE FROM {views_system} WHERE type = 'module' OR type = 'profile'");
$profile = drupal_get_profile();
$query = db_insert('views_system')
->fields(array(
'configure',
'core',
'datestamp',
'dependencies',
'description',
'filename',
'files',
'label',
'mtime',
'operations',
'origin',
'package',
'pathname',
'php',
'project',
'project_status_url',
'required',
'required_by',
'requires',
'scripts',
'stylesheets',
'type',
'version',
'visible',
));
$modules = system_rebuild_module_data();
foreach ($modules as $module) {
$core = preg_match('/^(modules\\/|profiles\\/minimal\\/minimal|profiles\\/standard\\/standard|profiles\\/testing\\/testing)/i', $module->filename);
$contributed = !$core && isset($module->info['project']);
$data = array();
$data['configure'] = !empty($module->info['configure']) ? $module->info['configure'] : '';
$data['core'] = !empty($module->info['core']) ? $module->info['core'] : '';
$data['datestamp'] = !empty($module->info['datestamp']) ? (int) $module->info['datestamp'] : NULL;
$dependencies = array();
if (isset($module->info['dependencies'])) {
foreach ($module->info['dependencies'] as $name) {
$dependency = drupal_parse_dependency($name);
$dependencies[$name] = array(
'name' => $dependency['name'],
'label' => isset($modules[$dependency['name']]->info['name']) ? $modules[$dependency['name']]->info['name'] : $dependency['name'],
'version' => isset($dependency['original_version']) ? trim($dependency['original_version']) : '',
);
}
}
$data['dependencies'] = !empty($dependencies) ? serialize($dependencies) : '';
$data['description'] = !empty($module->info['description']) ? $module->info['description'] : '';
$data['filename'] = basename($module->filename);
$data['files'] = !empty($module->info['files']) ? serialize($module->info['files']) : '';
$data['label'] = $module->info['name'];
$data['mtime'] = (int) $module->info['mtime'];
$data['operations'] = $module->status && !empty($module->info['configure']) ? $module->info['configure'] : '';
$data['origin'] = $core ? 'core' : ($contributed ? 'contributed' : 'custom');
$data['package'] = !empty($module->info['package']) ? $module->info['package'] : '';
$data['pathname'] = $module->filename;
$data['php'] = !empty($module->info['php']) ? $module->info['php'] : '';
$data['project'] = !empty($module->info['project']) ? $module->info['project'] : '';
$data['project_status_url'] = !empty($module->info['project_status_url']) ? $module->info['project_status_url'] : '';
$data['required'] = !empty($module->info['required']) ? (int) $module->info['required'] : 0;
$required_by = array();
foreach ($module->required_by as $name => $value) {
$required_by[$name] = isset($modules[$name]->info['name']) ? $modules[$name]->info['name'] : $name;
}
$data['required_by'] = !empty($required_by) ? serialize($required_by) : '';
$requires = array();
foreach ($module->requires as $name => $value) {
$requires[$name] = isset($modules[$name]->info['name']) ? $modules[$name]->info['name'] : $name;
}
$data['requires'] = !empty($requires) ? serialize($requires) : '';
$data['scripts'] = !empty($module->info['scripts']) ? serialize($module->info['scripts']) : '';
$data['stylesheets'] = !empty($module->info['stylesheets']) ? serialize($module->info['stylesheets']) : '';
$data['type'] = $module->name != $profile ? $module->type : 'profile';
$data['version'] = !empty($module->info['version']) ? $module->info['version'] : '';
$data['visible'] = !empty($module->info['hidden']) ? (int) (!$module->info['hidden']) : 1;
$query
->values($data);
}
$query
->execute();
}
/**
* Helper function to rebuild theme's data.
*/
function views_system_rebuild_theme_data() {
db_query("DELETE FROM {views_system} WHERE type = 'theme' OR type = 'theme_engine'");
$default_theme = variable_get('theme_default', 'bartik');
$admin_theme = variable_get('admin_theme', '0');
$query = db_insert('views_system')
->fields(array(
'admin_theme',
'base_theme',
'core',
'datestamp',
'default_theme',
'description',
'engine',
'features',
'filename',
'files',
'label',
'mtime',
'operations',
'origin',
'pathname',
'php',
'project',
'project_status_url',
'regions',
'regions_hidden',
'required',
'required_by',
'requires',
'screenshot',
'scripts',
'settings',
'stylesheets',
'type',
'version',
'visible',
));
$themes = system_rebuild_theme_data();
foreach ($themes as $theme) {
$core = preg_match('/^themes\\//i', $theme->filename);
$contributed = !$core && isset($theme->info['project']);
$data = array();
$data['admin_theme'] = (int) ($theme->name == $admin_theme || $theme->name == $default_theme && $admin_theme == '0');
$data['base_theme'] = !empty($theme->info['base theme']) ? $theme->info['base theme'] : '';
$data['core'] = !empty($theme->info['core']) ? $theme->info['core'] : '';
$data['datestamp'] = !empty($theme->info['datestamp']) ? (int) $theme->info['datestamp'] : NULL;
$data['default_theme'] = (int) ($theme->name == $default_theme);
$data['description'] = !empty($theme->info['description']) ? $theme->info['description'] : '';
$data['engine'] = !empty($theme->info['engine']) ? $theme->info['engine'] : '';
$data['features'] = !empty($theme->info['features']) ? serialize($theme->info['features']) : '';
$data['filename'] = basename($theme->filename);
$data['files'] = !empty($theme->info['files']) ? serialize($theme->info['files']) : '';
$data['label'] = $theme->info['name'];
$data['mtime'] = (int) $theme->info['mtime'];
$data['operations'] = $theme->status ? 'admin/appearance/settings/' . $theme->name : '';
$data['origin'] = $core ? 'core' : ($contributed ? 'contributed' : 'custom');
$data['pathname'] = $theme->filename;
$data['php'] = !empty($theme->info['php']) ? $theme->info['php'] : '';
$data['project'] = !empty($theme->info['project']) ? $theme->info['project'] : '';
$data['project_status_url'] = !empty($theme->info['project_status_url']) ? $theme->info['project_status_url'] : '';
$data['regions'] = !empty($theme->info['regions']) ? serialize($theme->info['regions']) : '';
$data['regions_hidden'] = !empty($theme->info['regions_hidden']) ? serialize($theme->info['regions_hidden']) : '';
$data['required'] = !empty($theme->info['required']) ? (int) $theme->info['required'] : 0;
$required_by = array();
if (isset($theme->sub_themes)) {
foreach ($theme->sub_themes as $name => $value) {
$required_by[$name] = isset($themes[$name]->info['name']) ? $themes[$name]->info['name'] : $name;
}
}
$data['required_by'] = !empty($required_by) ? serialize($required_by) : '';
$requires = array();
if (isset($theme->base_themes)) {
foreach ($theme->base_themes as $name => $value) {
$requires[$name] = isset($themes[$name]->info['name']) ? $themes[$name]->info['name'] : $name;
}
}
$data['requires'] = !empty($requires) ? serialize($requires) : '';
$data['screenshot'] = !empty($theme->info['screenshot']) && file_exists($theme->info['screenshot']) ? $theme->info['screenshot'] : '';
$data['scripts'] = !empty($theme->info['scripts']) ? serialize($theme->info['scripts']) : '';
$data['settings'] = !empty($theme->info['settings']) ? serialize($theme->info['settings']) : '';
$data['stylesheets'] = !empty($theme->info['stylesheets']) ? serialize($theme->info['stylesheets']) : '';
$data['type'] = $theme->type;
$data['version'] = !empty($theme->info['version']) ? $theme->info['version'] : '';
$data['visible'] = !empty($theme->info['hidden']) ? (int) (!$theme->info['hidden']) : 1;
$query
->values($data);
}
$query
->execute();
}
/**
* Helper function to retrieve list of base themes.
*/
function views_system_get_base_theme_list() {
return db_query("SELECT s.name, vs.label FROM {views_system} vs LEFT JOIN {system} s ON s.filename = vs.pathname WHERE s.name IN (SELECT DISTINCT(base_theme) FROM {views_system} WHERE base_theme <> '') ORDER BY vs.label")
->fetchAllKeyed();
}
/**
* Helper function to retrieve list of engines.
*/
function views_system_get_engine_list() {
return array(
'phptemplate' => t('PHPTemplate'),
);
}
/**
* Helper function to retrieve list of origins.
*/
function views_system_get_origin_list() {
return array(
'core' => t('Core'),
'contributed' => t('Contributed'),
'custom' => t('Custom'),
);
}
/**
* Helper function to retrieve list of types.
*/
function views_system_get_type_list() {
$list = array(
'module' => t('Module'),
'profile' => t('Profile'),
'theme' => t('Theme'),
'theme_engine' => t('Theme engine'),
);
$types = db_query('SELECT DISTINCT(type) FROM {views_system} ORDER BY type')
->fetchAllKeyed(0, 0);
return array_intersect_key($list, $types);
}
/**
* Helper function to convert a nested array into a flat array.
*/
function views_system_convert_nested_array_into_flat_array($nested, $path = NULL, $delimiter = '.') {
$flat = array();
if (!is_null($path)) {
$path .= $delimiter;
}
if (is_array($nested)) {
foreach ($nested as $key => &$value) {
if (is_array($value)) {
$flat = array_merge($flat, views_system_convert_nested_array_into_flat_array($value, $path . $key, $delimiter));
}
else {
$flat[$path . $key] = $value;
}
}
}
return $flat;
}