You are here

function views_maintenance_page in Views Maintenance 6

Same name and namespace in other branches
  1. 7 views_maintenance.admin.inc \views_maintenance_page()

Page callback for views maintenance page.

Return value

string

1 string reference to 'views_maintenance_page'
views_maintenance_menu in ./views_maintenance.module
Implements hook_menu().

File

./views_maintenance.admin.inc, line 133
Provides administrative UI for Views Maintenance.

Code

function views_maintenance_page() {
  $views = views_get_all_views();

  // Filter-out disabled views from list.
  foreach ($views as $view_id => $view) {
    if (!empty($view->disabled)) {

      // Exclude disabled views
      $view
        ->destroy();
      unset($views[$view_id]);
      continue;
    }
  }
  $views_info = array();
  if (!empty($views)) {

    // Include necessary files. But first of all include views/includes/handlers.inc,
    // because hook_views_api() implementations for core modules are there and
    // after we call module_implements('views_api') implementations static cache
    // will miss those implementations and all core handlers will be broken.
    views_include('base');
    views_include('handlers');
    views_module_include('views_maintenance.inc');

    // Run hooks to get status from all modules
    $views_use_cases = module_invoke_all('views_maintenance_use_cases', $views);

    // Init order for sorting use cases by level of importance.
    _views_maintenance_compare_by_order(NULL, NULL, array(
      'broken',
      'ok',
      'maybe',
      'unused',
    ));

    // Build views info.
    views_include('admin');
    $base_tables = views_fetch_base_tables();
    foreach ($views as $view_id => $view) {
      $displays_info = array();
      $displays_statuses = array();
      foreach ($view->display as $display_id => $display) {
        if (!empty($views_use_cases[$view_id][$display_id])) {

          // At least one use case was returned, sort use cases by status. This
          // brings use case with most important status to the first position.
          // Order was initialized earlier.
          $display_use_cases = $views_use_cases[$view_id][$display_id];
          usort($display_use_cases, '_views_maintenance_use_cases_sort_by_status');
        }
        else {

          // No use cases were returned for this display, use default use case
          // with "unused" status and without description.
          $display_use_cases = array(
            array(
              'status' => 'unused',
            ),
          );
        }

        // Save first use case status, it is used for determining view status.
        $first = reset(array_keys($display_use_cases));
        $displays_statuses[$display_id] = $display_use_cases[$first]['status'];

        // Build display info.
        $displays_info[$display_id] = array(
          'name' => $display->display_title,
          'type' => $display->handler->definition['title'],
          'use_cases' => $display_use_cases,
        );
      }

      // Determine view status based on most important status of each display.
      $view_status = _views_maintenance_view_status($displays_statuses);
      $views_info[$view_id] = array(
        'name' => $view->name,
        'type' => !empty($base_tables[$view->base_table]['title']) ? $base_tables[$view->base_table]['title'] : t('Broken'),
        'storage' => $view->type,
        'status' => $view_status,
        'links' => _views_maintenance_view_admin_links($view),
        'description' => $view->description,
        'displays' => $displays_info,
      );
    }
  }
  return theme('views_maintenance_views_table', $views_info);
}