You are here

function services_client_error_admin_list in Services Client 7.2

Same name and namespace in other branches
  1. 7 services_client_error/services_client_error.admin.inc \services_client_error_admin_list()

List all services client errors

1 string reference to 'services_client_error_admin_list'
services_client_error_menu in services_client_error/services_client_error.module
Implements hook_menu().

File

services_client_error/services_client_error.admin.inc, line 11
Administration callbacks for error handling.

Code

function services_client_error_admin_list() {
  $header = array(
    array(
      'data' => 'Date',
      'field' => 'created',
      'sort' => 'desc',
    ),
    array(
      'data' => 'Entity',
    ),
    array(
      'data' => 'Entity Id',
    ),
    array(
      'data' => 'Event',
    ),
    array(
      'data' => 'Retries',
    ),
    array(
      'data' => 'Status',
    ),
    array(
      'data' => 'Code',
    ),
    array(
      'data' => 'Message',
    ),
    array(
      'data' => 'Actions',
    ),
  );
  $query = db_select('services_client_error', 's')
    ->fields('s', array(
    'eid',
    'created',
    'entity_type',
    'entity_id',
    'event',
    'retries',
    'status',
    'error_code',
    'error_message',
  ))
    ->extend('PagerDefault')
    ->limit(50)
    ->extend('TableSort')
    ->orderByHeader($header);

  // Status filter was applied.
  $statuses = services_client_error_status_map();
  if (isset($_GET['status']) && in_array($_GET['status'], array_keys($statuses))) {
    $query
      ->condition('status', $_GET['status'], '=');
  }
  $rows = array();
  foreach ($query
    ->execute() as $error) {
    $error = (array) $error;
    $entities = entity_load($error['entity_type'], array(
      $error['entity_id'],
    ));
    $entity = reset($entities);
    $event = services_client_get_event($error['event']);
    $row = array(
      'created' => format_date($error['created'], 'short'),
      'entity_type' => check_plain($error['entity_type']),
      'entity_id' => check_plain($error['entity_id']),
      'event' => !empty($event) ? l($error['event'], $event
        ->getUrl()) : '[' . t('missing event') . ']',
      'retries' => check_plain($error['retries']),
      'status' => services_client_error_status_title($error['status']),
      'error_code' => check_plain($error['error_code']),
      'error_message' => check_plain($error['error_message']),
    );
    $actions = array();

    // If entity still exists on system, show link.
    if (!empty($entity)) {
      $uri = entity_uri($error['entity_type'], $entity);
      $actions[] = l(t('View Entity'), $uri['path'], (array) $uri['options']);
    }
    $actions[] = l(t('History'), 'admin/structure/services_client/errors/' . $error['eid'] . '/log', array(
      'query' => drupal_get_destination(),
    ));
    $actions[] = l(t('Delete'), 'admin/structure/services_client/errors/' . $error['eid'] . '/delete', array(
      'query' => drupal_get_destination(),
    ));
    if (!empty($entity) && $error['status'] != SC_ERROR_COMPLETED) {
      $actions[] = l(t('Retry'), 'admin/structure/services_client/errors/' . $error['eid'] . '/retry', array(
        'query' => drupal_get_destination(),
      ));
    }
    $row['actions'] = implode(' | ', $actions);
    $rows[] = $row;
  }
  $filters = array(
    array(
      'title' => t('All'),
      'href' => 'admin/structure/services_client/errors',
    ),
  );
  foreach (services_client_error_status_map() as $id => $name) {

    // $filters[] = l($name, 'admin/structure/services_client/errors', array('query' => array('status' => $id)));
    $filters[] = array(
      'title' => $name,
      'href' => 'admin/structure/services_client/errors',
      'query' => array(
        'status' => $id,
      ),
    );
  }
  $output['filter'] = array(
    '#theme' => 'links',
    '#links' => $filters,
    '#heading' => t("Filter"),
    '#attributes' => array(
      'class' => array(
        'links',
        'inline',
      ),
    ),
  );
  $output['table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#sticky' => TRUE,
    '#empty' => !isset($_GET['status']) ? t('No syncing errors. Wohoo!') : t('No errors matching filter criteria'),
  );
  $output['pager'] = array(
    '#theme' => 'pager',
  );
  return $output;
}