You are here

function lti_tool_provider_memberships_form in LTI Tool Provider 7

Memberships admin form.

Parameters

array $form: The form array.

array $form_state: The form state array.

Return value

array The form array.

1 string reference to 'lti_tool_provider_memberships_form'
lti_tool_provider_memberships_menu in lti_tool_provider_memberships/lti_tool_provider_memberships.module
Implements hook_menu().

File

lti_tool_provider_memberships/lti_tool_provider_memberships.module, line 163
lti_tool_provider_memberships hook implementations and support functions.

Code

function lti_tool_provider_memberships_form($form, &$form_state) {
  $form = array(
    '#submit' => array(
      'lti_tool_provider_memberships_form_submit',
    ),
    '#validate' => array(
      'lti_tool_provider_memberships_form_validate',
    ),
  );

  // batch process the preparation of data for the form and/or
  // retrieve it from the session.
  if (!isset($_SESSION['lti_tool_provider_memberships_batch_has_run'])) {
    $batch_prepare_form = array(
      'title' => t('Preparing membership form.'),
      'operations' => array(
        array(
          'lti_tool_provider_memberships_batch_get_memberships',
          array(
            FALSE,
          ),
        ),
        array(
          'lti_tool_provider_memberships_batch_get_new_memberships',
          array(),
        ),
        array(
          'lti_tool_provider_memberships_batch_get_dropped_memberships',
          array(),
        ),
        array(
          'lti_tool_provider_memberships_batch_get_altered_memberships',
          array(),
        ),
      ),
      'finished' => 'lti_tool_provider_memberships_prepare_form_finished',
      'init_message' => t('Preparing membership form.'),
      'error_message' => t('Encountered an error while preparing the membership form.'),
      'file' => drupal_get_path('module', 'lti_tool_provider_memberships') . '/lti_tool_provider_memberships.batch.inc',
    );
    batch_set($batch_prepare_form);
    batch_process('lti-tool-provider/memberships');
  }
  $member_data = $_SESSION['lti_tool_provider_memberships_batch_results']['members'];
  $new_members = $_SESSION['lti_tool_provider_memberships_batch_results']['new_members'];
  $dropped_members = $_SESSION['lti_tool_provider_memberships_batch_results']['dropped_members'];
  $altered_members = $_SESSION['lti_tool_provider_memberships_batch_results']['altered_members'];

  // Display time of last data retrieval.
  $memberships_context = lti_tool_provider_memberships_get_memberships_context();
  $fid = $memberships_context->lti_tool_provider_memberships_context_file_id;
  if ($fid != 0) {
    $file = file_load($fid);
    $time_retrieved = format_date($file->timestamp);
  }
  else {
    $time_retrieved = 'Never Retrieved';
  }
  $form['members'] = array(
    '#prefix' => '<div id="membership-table">',
    '#suffix' => '</div>',
  );
  $form['members']['title'] = array(
    '#type' => 'item',
    '#markup' => t('Memberships for Context: <b>@context</b>, Retrieved on: <b>@date</b>', array(
      '@context' => $_SESSION['lti_tool_provider_context_info']['context_id'],
      '@date' => $time_retrieved,
    )),
  );
  $form['members']['fetch_xml_btn'] = array(
    '#type' => 'submit',
    '#value' => t('Refresh'),
  );
  $form['members']['fetch_xml_and_apply_btn'] = array(
    '#type' => 'submit',
    '#value' => t('Refresh and apply all changes'),
  );
  if (!empty($new_members)) {
    $form['members']['new_members']['description'] = array(
      '#type' => 'item',
      '#title' => t('New LTI Memberships'),
      '#markup' => t(count($new_members) . ' new member(s)'),
    );
    $new_members_header = array(
      'user_id' => t('User ID'),
      'person_name_full' => t('Name'),
      'roles' => t('Roles'),
    );
    if (variable_get('lti_tool_provider_memberships_subgroups')) {
      $new_members_header['Groups'] = t('Groups');
    }
    $new_members_rows = array();
    foreach ($new_members as $new_member) {
      $new_members_rows[$new_member['user_id']] = $new_member;
      if (variable_get('lti_tool_provider_memberships_subgroups')) {
        $groups = '';
        if (isset($new_member['groups'])) {
          foreach ($new_member['groups'] as $group) {
            $groups .= $group['title'] . ' ';
          }
        }
        else {
          $new_members_rows[$new_member['user_id']]['groups'] = array();
        }
        $new_members_rows[$new_member['user_id']]['Groups'] = $groups;
      }
    }
    $form['members']['new_members']['new_members_table'] = array(
      '#type' => 'tableselect',
      '#header' => $new_members_header,
      '#options' => $new_members_rows,
    );
    $form['members']['new_members']['add'] = array(
      '#type' => 'submit',
      '#value' => t('Add member(s)'),
    );
  }
  if (!empty($dropped_members)) {
    $form['members']['dropped_members']['description'] = array(
      '#type' => 'item',
      '#title' => t('Dropped LTI Memberships'),
      '#markup' => t(count($dropped_members) . ' member(s) dropped'),
    );
    $dropped_members_header = array(
      'user_id' => t('User ID'),
      'person_name_full' => t('Name'),
      'roles' => t('Roles'),
    );
    $dropped_members_rows = array();
    foreach ($dropped_members as $dropped_member) {
      $dropped_members_rows[$dropped_member->lti_tool_provider_memberships_id] = array(
        'user_id' => $dropped_member->lti_tool_provider_memberships_user_id,
        'person_name_full' => $dropped_member->lti_tool_provider_memberships_person_name_full,
        'roles' => $dropped_member->lti_tool_provider_memberships_role,
      );
    }
    $form['members']['dropped_members']['dropped_members_table'] = array(
      '#type' => 'tableselect',
      '#header' => $dropped_members_header,
      '#options' => $dropped_members_rows,
    );
    $form['members']['dropped_members']['remove_dropped_members'] = array(
      '#type' => 'submit',
      '#value' => t('Invalidate selected member(s) in context, leaving content'),
    );
    $form['members']['dropped_members']['remove_dropped_members_contents'] = array(
      '#type' => 'submit',
      '#value' => t('Remove selected member(s) and their content'),
    );
  }
  if (!empty($altered_members)) {
    $form['members']['altered_members']['description'] = array(
      '#type' => 'item',
      '#title' => t('Altered LTI Memberships'),
      '#markup' => t(count($altered_members) . ' member(s) altered'),
    );
    $altered_members_header = array(
      'user_id' => t('User ID'),
      'person_name_full' => t('Name'),
      'old_roles' => t('Old Roles'),
      'new_roles' => t('New Roles'),
      'dropped_groups' => t('Dropped Groups'),
      'added_groups' => t('Added Groups'),
    );
    $altered_members_rows = array();
    foreach ($altered_members as $altered_member) {
      $dropped_subgroups = '';
      if (isset($altered_member['dropped_subgroups'])) {
        foreach ($altered_member['dropped_subgroups'] as $subgroup) {
          $dropped_subgroups .= ' ' . $subgroup['title'];
        }
      }
      $added_subgroups = '';
      if (isset($altered_member['added_subgroups'])) {
        foreach ($altered_member['added_subgroups'] as $subgroup) {
          $added_subgroups .= ' ' . $subgroup['title'];
        }
      }
      $altered_members_rows[$altered_member['lti_tool_provider_memberships_id']] = array(
        'user_id' => $altered_member['user_id'],
        'person_name_full' => $altered_member['person_name_full'],
        'old_roles' => isset($altered_member['old_roles']) ? $altered_member['old_roles'] : '',
        'new_roles' => isset($altered_member['new_roles']) ? $altered_member['new_roles'] : '',
        'existing_roles' => $altered_member['existing_roles'],
        'dropped_groups' => $dropped_subgroups,
        'dropped_subgroups' => isset($altered_member['dropped_subgroups']) ? $altered_member['dropped_subgroups'] : '',
        'added_groups' => $added_subgroups,
        'added_subgroups' => isset($altered_member['added_subgroups']) ? $altered_member['added_subgroups'] : '',
      );
    }
    $form['members']['altered_members']['altered_members_table'] = array(
      '#type' => 'tableselect',
      '#header' => $altered_members_header,
      '#options' => $altered_members_rows,
    );
    $form['members']['altered_members']['update_altered_members'] = array(
      '#type' => 'submit',
      '#value' => t('Update selected member(s) in context'),
    );
  }
  $query = new EntityFieldQuery();
  $result = $query
    ->entityCondition('entity_type', 'lti_tool_provider_memberships')
    ->propertycondition('lti_tool_provider_memberships_context_id', $_SESSION['lti_tool_provider_context_info']['context_id'])
    ->execute();
  $form['members']['current_members']['description'] = array(
    '#type' => 'item',
    '#title' => t('Current LTI Membership'),
    '#markup' => !empty($result) ? t(count((array) $result['lti_tool_provider_memberships']) . ' current member(s)') : '',
  );
  $current_members_header = array(
    array(
      'data' => 'User ID',
      'field' => 'lti_tool_provider_memberships_user_id',
      'sort' => 'asc',
    ),
    array(
      'data' => 'Name',
      'field' => 'lti_tool_provider_memberships_person_name_full',
    ),
    array(
      'data' => 'Roles',
      'field' => 'lti_tool_provider_memberships_role',
    ),
    array(
      'data' => 'Date Added',
      'field' => 'date_added',
    ),
    array(
      'data' => 'Date Updated',
      'field' => 'date_updated',
    ),
    array(
      'data' => 'Date Dropped',
      'field' => 'date_dropped',
    ),
    array(
      'data' => 'Status',
      'field' => 'lti_tool_provider_memberships_status',
    ),
  );
  if (isset($form_state['storage']['paging_num']) && $form_state['storage']['paging_num'] > 0) {
    $limit = $_SESSION['lti_tool_provider_membership_limit'] = $form_state['storage']['paging_num'];
  }
  elseif (isset($_SESSION['lti_tool_provider_membership_limit'])) {
    $limit = $_SESSION['lti_tool_provider_membership_limit'];
  }
  else {
    $limit = $_SESSION['lti_tool_provider_membership_limit'] = 10;
  }
  $query = db_select('lti_tool_provider_memberships', 'd')
    ->condition('lti_tool_provider_memberships_context_id', $_SESSION['lti_tool_provider_context_info']['context_id'])
    ->fields('d', array(
    'lti_tool_provider_memberships_user_id',
    'lti_tool_provider_memberships_person_name_full',
    'lti_tool_provider_memberships_role',
    'date_added',
    'date_updated',
    'date_dropped',
    'lti_tool_provider_memberships_status',
  ));
  $query = $query
    ->extend('TableSort')
    ->orderByHeader($current_members_header);
  $query = $query
    ->extend('PagerDefault')
    ->limit($limit)
    ->element(13);
  $result = $query
    ->execute();
  $current_members_rows = array();
  foreach ($result as $entity) {
    $current_members_rows[] = array(
      $entity->lti_tool_provider_memberships_user_id,
      $entity->lti_tool_provider_memberships_person_name_full,
      $entity->lti_tool_provider_memberships_role,
      format_date($entity->date_added),
      format_date($entity->date_updated),
      isset($entity->date_dropped) ? format_date($entity->date_dropped) : '-',
      $entity->lti_tool_provider_memberships_status,
    );
  }
  $form['members']['current_members']['pager_table'] = array(
    '#theme' => 'table',
    '#header' => $current_members_header,
    '#rows' => $current_members_rows,
    '#empty' => t('No LTI Membership entity exists.'),
  );
  $form['members']['current_members']['pager_table_pager'] = array(
    '#theme' => 'pager',
    '#element' => 13,
  );
  $form['members']['current_members']['paging_num'] = array(
    '#prefix' => '<div class="container-inline">',
    '#type' => 'textfield',
    '#title' => t('Items per page'),
    '#default_value' => $limit,
    '#maxlength' => 4,
    '#size' => 3,
  );
  $form['members']['current_members']['paging_num_btn'] = array(
    '#type' => 'submit',
    '#value' => t('Go'),
    '#suffix' => '</div>',
  );
  return $form;
}