You are here

function lti_tool_provider_og_group_mapping in LTI Tool Provider 7

Admin form for the group mapping.

Parameters

array $form: The form.

array $form_state: The form state.

5 string references to 'lti_tool_provider_og_group_mapping'
lti_tool_provider_og_group_mapping_submit in lti_tool_provider_og/lti_tool_provider_og.admin.inc
Submit handler for group mapping form.
lti_tool_provider_og_install in lti_tool_provider_og/lti_tool_provider_og.install
Implements hook_install().
lti_tool_provider_og_lti_tool_provider_launch_alter in lti_tool_provider_og/lti_tool_provider_og.module
Implements hook_lti_tool_provider_launch_alter().
lti_tool_provider_og_menu in lti_tool_provider_og/lti_tool_provider_og.module
Implements hook_menu().
lti_tool_provider_og_uninstall in lti_tool_provider_og/lti_tool_provider_og.install
Implements hook_uninstall().

File

lti_tool_provider_og/lti_tool_provider_og.admin.inc, line 16
Admin forms and menu page callbacks for LTI Tool Provider OG module.

Code

function lti_tool_provider_og_group_mapping($form, &$form_state) {
  $form = array();
  $form['description'] = array(
    '#type' => 'item',
    '#title' => t('Choose a group bundle, configure LTI context variable to group attribute mapping and group role mapping.'),
    '#weight' => -9,
  );
  $new_bundles = lti_tool_provider_og_get_group_bundles();
  $old_bundle = variable_get('lti_tool_provider_og_group_mapping_bundle');
  $form['bundle'] = array(
    '#type' => 'select',
    '#title' => t('LTI Context to Drupal group mapping'),
    '#description' => t('Please select the Drupal group bundle corresponding to an LTI course.'),
    '#options' => $new_bundles,
    '#weight' => -8,
    '#ajax' => array(
      'callback' => 'lti_tool_provider_og_group_mapping_select_callback',
      'wrapper' => 'group-detail',
      'method' => 'replace',
      'effect' => 'fade',
    ),
  );

  // The group_detail section of the form is ajax reloaded when the bundle
  // or the creat_course checkbox changes.
  $form['bundle']['#default_value'] = isset($form_state['values']['bundle']) ? $form_state['values']['bundle'] : $old_bundle;
  $parts = explode(':', $form['bundle']['#default_value']);
  $is_node_type = reset($parts) == 'node' ? TRUE : FALSE;
  $form['group_detail'] = array(
    '#prefix' => '<div id="group-detail">',
    '#suffix' => '</div>',
    '#weight' => -7,
  );
  if (!empty($form['bundle']['#default_value']) && $form['bundle']['#default_value'] != 'none:None') {
    if ($is_node_type) {
      $form['group_detail']['create_course'] = array(
        '#type' => 'checkbox',
        '#title' => t('Automatically create groups. Note: Only available for node group bundles and LTI user must have appropriate "Create content type" permission.'),
        '#default_value' => isset($form_state['values']['create_course']) ? $form_state['values']['create_course'] : variable_get('lti_tool_provider_og_provision_groups'),
        '#weight' => -6,
        '#ajax' => array(
          'callback' => 'lti_tool_provider_og_group_mapping_select_callback',
          'wrapper' => 'group-detail',
          'method' => 'replace',
          'effect' => 'fade',
        ),
      );
      if ($form['group_detail']['create_course']['#default_value'] == 1) {
        $form['group_detail']['create_course_anon'] = array(
          '#type' => 'checkbox',
          '#title' => t('Create groups with anon rather than LTI user. Note: LTI user does NOT need "Create content type" permission.'),
          '#default_value' => isset($form_state['values']['create_course_anon']) ? $form_state['values']['create_course_anon'] : variable_get('lti_tool_provider_og_provision_groups_anon'),
          '#weight' => -5,
        );
      }
    }
    $form['group_detail']['mapping_description'] = array(
      '#prefix' => '<div id="select-mapping-div">',
      '#suffix' => '</div>',
      '#type' => 'item',
      '#title' => t('LTI group attribute mapping'),
      '#description' => t('Choose the group attributes to be mapped from the LTI context variables. Note: Title and context_id must be mapped but not necessarily to each other.'),
      '#weight' => -4,
    );
    if ($is_node_type && $form['group_detail']['create_course']['#default_value'] == 0) {
      $form['group_detail']['mapping_description']['#description'] = 'Choose the group attribute to be mapped from the LTI context_id.';
    }
    $saved_settings = variable_get('lti_tool_provider_og_group_mapping', array());
    $form['group_detail']['mapping'] = array(
      '#tree' => TRUE,
      '#theme' => 'table',
      '#header' => array(
        t('LTI Context Variable'),
        t('Group Attribute'),
      ),
      '#rows' => array(),
      '#weight' => -1,
    );
    foreach (lti_tool_provider_context_mapping_details() as $key => $detail) {
      if ((!$is_node_type || $form['group_detail']['create_course']['#default_value'] == 0) && $detail != 'context_id') {
        unset($form_state['values']['mapping'][$key]);
      }
      else {
        $variable = array(
          '#type' => 'item',
          '#title' => check_plain($detail),
        );
        $attribute = array(
          '#type' => 'select',
          '#options' => lti_tool_provider_og_retrieve_entity_field_types($form['bundle']['#default_value']),
        );
        if (isset($form_state['values'][$detail])) {
          $attribute['#default_value'] = $form_state['values'][$detail];
        }
        else {
          $attribute['#default_value'] = isset($saved_settings[$detail]) ? $saved_settings[$detail] : 0;
        }
        $form['group_detail']['mapping'][] = array(
          'variable' => &$variable,
          'attribute' => &$attribute,
        );
        $form['group_detail']['mapping']['#rows'][] = array(
          array(
            'data' => &$variable,
          ),
          array(
            'data' => &$attribute,
          ),
        );
        unset($variable);
        unset($attribute);
      }
    }
    $form['group_detail']['mapping']['#weight'] = -3;
    if ($form['bundle']['#default_value'] != 'none:None') {
      $form['group_detail']['roles_description'] = array(
        '#type' => 'item',
        '#title' => t('LTI group role mapping'),
        '#description' => t('Choose the group roles to be mapped from the LTI roles.'),
        '#weight' => -2,
      );
      list($entity, $bundle) = explode(':', $form['bundle']['#default_value']);
      $select_roles = og_roles($entity, $bundle);

      // Remove OG_ANONYMOUS_ROLE in $select_roles.
      if (($key = array_search(OG_ANONYMOUS_ROLE, $select_roles)) !== FALSE) {
        unset($select_roles[$key]);
      }
      $old_bundle = variable_get('lti_tool_provider_og_group_mapping_bundle');
      if ($old_bundle == $form['bundle']['#default_value']) {
        $old_role_array = variable_get('lti_tool_provider_og_group_role_array');
      }
      $form['group_detail']['roles'] = array(
        '#tree' => TRUE,
        '#theme' => 'table',
        '#header' => array(
          t('LTI Roles'),
          t('Group Roles'),
        ),
        '#rows' => array(),
        '#weight' => -1,
      );
      foreach (lti_tool_provider_get_lti_roles() as $role) {
        $lti_role = array(
          '#type' => 'item',
          '#title' => check_plain($role),
        );
        $group_role = array(
          '#type' => 'select',
          '#options' => $select_roles,
        );
        if (isset($old_role_array[$role]) && isset($select_roles[$old_role_array[$role]])) {
          $group_role['#default_value'] = $old_role_array[$role];
        }
        else {
          $group_role['#default_value'] = array_search(DRUPAL_AUTHENTICATED_RID, $select_roles);
        }
        $form['group_detail']['roles'][] = array(
          'lti_role' => &$lti_role,
          'group_role' => &$group_role,
        );
        $form['group_detail']['roles']['#rows'][] = array(
          array(
            'data' => &$lti_role,
          ),
          array(
            'data' => &$group_role,
          ),
        );
        unset($lti_role);
        unset($group_role);
      }
    }
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save Group Mapping'),
    '#submit' => array(
      'lti_tool_provider_og_group_mapping_submit',
    ),
    '#weight' => 10,
  );
  return $form;
}