You are here

function oa_messages_build_message_notifications_table in Open Atrium Core 7.2

Helper function to build the message notifications table.

1 call to oa_messages_build_message_notifications_table()
oa_messages_oa_user_settings_form_alter in modules/oa_messages/oa_messages.admin.inc
Implements hook_oa_user_settings_form_alter().

File

modules/oa_messages/oa_messages.admin.inc, line 90
Provides forms and pages for administering oa_messages.

Code

function oa_messages_build_message_notifications_table(&$form_state, $user, $defaults = array()) {
  $filter = NULL;
  $values = isset($form_state['values']) ? $form_state['values']['oa_messages']['message_notifications'] : NULL;
  if (isset($form_state['triggering_element']) && $form_state['triggering_element']['#value'] === 'Search') {
    $filter = trim($form_state['values']['oa_messages']['message_notifications']['filter']['space_filter']);
  }

  // show pager on results
  $page = 0;
  if (isset($form_state['complete form'])) {
    if ($pos = strrpos($form_state['complete form']['#action'], '=')) {
      $page = substr($form_state['complete form']['#action'], $pos + 1);
    }
  }
  $form = array();
  $spaces = oa_core_get_groups_by_user_access($user, FALSE, NULL, $page, $filter);
  if (!empty($spaces)) {
    $message_types = message_type_load();
    $notifiers = oa_message_notifiers();

    // Get notification method options.
    foreach ($notifiers as $notifier) {
      $method_options[$notifier['id']] = $notifier['title'];
      if ($notifier['default']) {
        $default_notifiers[] = $notifier['id'];
      }
    }
    $method_options['none'] = t('None');

    // Get messages options.
    foreach ($message_types as $type) {
      $message_options[$type->name] = $type->description;
      $message_defaults[$type->name] = $type->name;
    }
    $form['filter'] = array(
      '#type' => 'container',
      '#attributes' => array(
        'class' => array(
          'filters',
        ),
      ),
    );
    $form['filter']['space_filter'] = array(
      '#type' => 'textfield',
      '#attributes' => array(
        'placeholder' => t('Space'),
      ),
      '#prefix' => '<br /><h4>' . t('Space Preferences') . '</h4><label class="display-block">' . t('Filter Spaces:') . '</label>',
    );
    $form['filter']['actions']['submit'] = array(
      '#type' => 'button',
      '#value' => t('Search'),
      '#prefix' => '<div class="filter-actions">',
      '#ajax' => array(
        'wrapper' => 'edit-oa-messages-all-spaces',
        'callback' => 'oa_messages_ajax_load_notification_methods',
      ),
    );
    $form['filter']['actions']['reset'] = array(
      '#type' => 'button',
      '#value' => t('Reset'),
      '#suffix' => '</div><br />',
      '#ajax' => array(
        'wrapper' => 'edit-oa-messages-all-spaces',
        'callback' => 'oa_messages_ajax_load_notification_methods',
      ),
    );
    $form['all_notifications'] = array(
      '#type' => 'select',
      '#prefix' => '<label class="display-block">' . t('Set Spaces Preferences:') . '</label>',
      '#options' => $method_options,
      '#required' => FALSE,
      '#empty_option' => t('Choose a notification method'),
    );
    $form['all_notifications_submit'] = array(
      '#type' => 'button',
      '#value' => t('Apply'),
      '#ajax' => array(
        'wrapper' => 'edit-oa-messages-all-spaces',
        'callback' => 'oa_messages_ajax_load_notification_methods',
      ),
    );
    $form['header'] = array(
      '#type' => 'container',
      '#prefix' => '<div class="container-fluid header">',
      '#suffix' => '</div>',
    );
    $form['header']['select_all'] = array(
      '#type' => 'checkbox',
      '#title' => t('Spaces'),
      '#prefix' => '<div class="column1 col-sm-3">',
      '#suffix' => '</div>',
      '#attributes' => array(
        'class' => array(
          'select-all',
        ),
      ),
    );
    $form['header']['methods'] = array(
      '#markup' => t('Notification Method'),
      '#prefix' => '<div class="column2 col-sm-3">',
      '#suffix' => '</div>',
    );
    $form['header']['message'] = array(
      '#markup' => t('Messages'),
      '#prefix' => '<div class="column3 col-sm-6">',
      '#suffix' => '</div>',
    );
    $form['all_spaces'] = array(
      '#type' => 'container',
      '#id' => 'edit-oa-messages-all-spaces',
    );

    // Remove "None" option for method notifications.
    array_pop($method_options);

    // Build space options.
    foreach ($spaces as $key => $space) {

      // Set defaults.
      $method_values = NULL;
      $messages_values = NULL;
      if (isset($values) && $values['all_spaces'][$space->nid]['checkbox']) {
        if ($values['all_notifications'] === 'none') {
          $method_values = '';
          $messages_values = '';
        }
        else {
          $method_values = $values['all_notifications'];
          $messages_values = $message_defaults;
        }
        $default_methods = $method_values;
        $default_messages = $messages_values;
      }
      elseif (isset($defaults['message_notifications'][$space->nid]['methods'])) {
        $default_methods = $defaults['message_notifications'][$space->nid]['methods'];
        if (isset($defaults['message_notifications'][$space->nid]['messages'])) {
          $default_messages = $defaults['message_notifications'][$space->nid]['messages'];
        }
      }
      else {
        $default_methods = $default_notifiers;
        $default_messages = $message_defaults;
      }
      $form['all_spaces'][$space->nid] = array(
        '#type' => 'fieldgroup',
        '#title' => $space->title,
        '#title_display' => 'invisible',
        '#collapsible' => FALSE,
        '#prefix' => '<div class="container-fluid">',
        '#suffix' => '</div>',
      );
      $form['all_spaces'][$space->nid]['checkbox'] = array(
        '#type' => 'checkbox',
        '#title' => $space->title,
        '#prefix' => '<div class="column1 col-sm-3">',
        '#suffix' => '</div>',
        '#attributes' => array(
          'class' => array(
            'apply-to',
          ),
        ),
      );
      $form['all_spaces'][$space->nid]['methods'] = array(
        '#type' => 'select',
        '#title' => t('Notification Method'),
        '#title_display' => 'invisible',
        '#multiple' => TRUE,
        '#options' => $method_options,
        '#default_value' => $default_methods,
        '#prefix' => '<div class="column2 col-sm-3">',
        '#suffix' => '</div>',
        '#id' => $space->nid,
      );
      $form['all_spaces'][$space->nid]['message_container'] = array(
        '#type' => 'fieldset',
        '#title' => t('Messages'),
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,
        '#prefix' => '<div class="column3 col-sm-6">',
        '#suffix' => '</div>',
        '#id' => 'message-container-' . $space->nid,
      );
      $form['all_spaces'][$space->nid]['message_container']['messages'] = array(
        '#type' => 'checkboxes',
        '#title' => t('Messages'),
        '#title_display' => 'invisible',
        '#multiple' => TRUE,
        '#options' => $message_options,
        '#default_value' => $default_messages,
      );

      // Set values if given.
      if (isset($method_values) && isset($messages_values)) {
        $form['all_spaces'][$space->nid]['methods']['#value'] = $method_values;
        $form_state['input']['oa_messages']['message_notifications']['all_spaces'][$space->nid]['message_container']['messages'] = $messages_values;
      }
    }
  }
  return $form;
}