You are here

public function RulesUIController::overviewTable in Rules 7.2

Generates the render array for an overview configuration table.

Generates the render array for an overview configuration table for arbitrary rule configs that match the given conditions.

Note: The generated overview table contains multiple links for editing the rule configurations. For the links to properly work use RulesUIController::config_menu($base_path) to generate appropriate menu items for the path at which the overview table is displayed.

Parameters

array $conditions: An array of conditions as needed by rules_config_load_multiple().

array $options: An array with optional options. Known keys are:

  • 'hide status op': If set to TRUE, enable/disable links are not added. Defaults to FALSE.
  • 'show plugin': If set to FALSE, the plugin is not shown. Defaults to TRUE.
  • 'show events': If set to TRUE, the event column is shown. Defaults to TRUE if only reaction rules are listed.
  • 'show execution op': If set to TRUE an operation for execution a component is shown for components, as well as a link to schedule a component if the rules scheduler module is enabled.
  • 'base path': Optionally, a different base path to use instead of the currently set RulesPluginUI::$basePath. If no base path has been set yet, the current path is used by default.

Return value

array A renderable array.

File

ui/ui.controller.inc, line 191
Contains the UI controller for Rules.

Class

RulesUIController
Controller class for the Rules UI.

Code

public function overviewTable($conditions = array(), $options = array()) {
  $options += array(
    'hide status op' => FALSE,
    'show plugin' => TRUE,
    'show events' => isset($conditions['plugin']) && $conditions['plugin'] == 'reaction rule',
    'show execution op' => !(isset($conditions['plugin']) && $conditions['plugin'] == 'reaction rule'),
  );

  // By default show only configurations owned by rules.
  $conditions += array(
    'owner' => 'rules',
  );
  if (!empty($options['base path'])) {
    RulesPluginUI::$basePath = $options['base path'];
  }
  elseif (!isset(RulesPluginUI::$basePath)) {

    // Default to the current path, only if no path has been set yet.
    RulesPluginUI::$basePath = current_path();
  }
  $entities = entity_load('rules_config', FALSE, $conditions);
  ksort($entities);

  // Prepare some variables used by overviewTableRow().
  $this->event_info = rules_fetch_data('event_info');
  $this->cache = rules_get_cache();
  $rows = array();
  foreach ($entities as $id => $entity) {
    if (user_access('bypass rules access') || $entity
      ->access()) {
      $rows[] = $this
        ->overviewTableRow($conditions, $id, $entity, $options);
    }
  }

  // Assemble the right table header.
  $header = array(
    t('Name'),
    t('Event'),
    t('Plugin'),
    t('Status'),
    array(
      'data' => t('Operations'),
    ),
  );
  if (!$options['show events']) {

    // Remove the event heading as there is no such column.
    unset($header[1]);
  }
  if (!$options['show plugin']) {
    unset($header[2]);
  }

  // Fix the header operation column colspan.
  $num_cols = isset($rows[0]) ? count($rows[0]) : 0;
  if (($addition = $num_cols - count($header)) > 0) {
    $header[4]['colspan'] = $addition + 1;
  }
  $table = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#empty' => t('None.'),
  );
  $table['#attributes']['class'][] = 'rules-overview-table';
  $table['#attached']['css'][] = drupal_get_path('module', 'rules') . '/ui/rules.ui.css';

  // @todo Hide configs where access() is FALSE.
  return $table;
}