You are here

views_system.module in Views System 7.4

Extends the Views module and provides fields, filter criteria, and sort criteria for Modules/Themes/Theme engines.

File

views_system.module
View 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;
}

Functions

Namesort descending Description
views_system_convert_nested_array_into_flat_array Helper function to convert a nested array into a flat array.
views_system_flush_caches Implements hook_flush_caches().
views_system_form_system_modules_alter Implements hook_form_FORM_ID_alter(); update data on modules page.
views_system_form_system_themes_admin_form_alter Implements hook_form_FORM_ID_alter(); update data on themes page.
views_system_get_base_theme_list Helper function to retrieve list of base themes.
views_system_get_engine_list Helper function to retrieve list of engines.
views_system_get_origin_list Helper function to retrieve list of origins.
views_system_get_type_list Helper function to retrieve list of types.
views_system_help Implements hook_help().
views_system_modules_disabled Implements hook_modules_disabled().
views_system_modules_enabled Implements hook_modules_enabled().
views_system_rebuild_module_data Helper function to rebuild module's data.
views_system_rebuild_theme_data Helper function to rebuild theme's data.
views_system_views_api Implements hook_views_api().