You are here

function search_api_glossary_form_search_api_index_fields_alter in Search API AZ Glossary 8

Same name and namespace in other branches
  1. 8.2 search_api_glossary.module \search_api_glossary_form_search_api_index_fields_alter()

Add search_api_glossary settings to Search API Index configuration.

Implements hook_form_FORM_ID_alter()

File

./search_api_glossary.module, line 17
Search api glossary module file.

Code

function search_api_glossary_form_search_api_index_fields_alter(&$form, FormStateInterface $form_state) {

  // TODO Cleanup this as per Drupal standards.
  $config = \Drupal::config('search_api_glossary.settings');
  $entity = $form_state
    ->getFormObject()
    ->getEntity();

  // TODO Check if there are any limitations.
  // If not, maybe expand this in future.
  $allowed_field_types = array(
    'integer',
    'text',
    'string',
  );
  foreach ($entity
    ->getDatasources() as $datasource_id => $datasource) {
    $fields = $entity
      ->getFieldsByDatasource($datasource_id);
    foreach ($fields as $field) {
      $field_settings_array = $field
        ->getSettings();
      $datasource_id = $field_settings_array['datasource_id'];
      $datasource_id_clean = str_replace('entity:', '', $datasource_id);
      $field_name = $field_settings_array['property_path'];
      $field_label = $field_settings_array['label'];
      $field_type = $field_settings_array['type'];
      $locked = $field
        ->isTypeLocked();

      // Identify glossary fields and skip them.
      // Glossary field should be excluded always.
      // Make it default and prevent changing.
      if (substr($field_name, 0, strlen('field_glossaryaz')) !== 'field_glossaryaz') {
        if (!$locked && in_array($field_type, $allowed_field_types)) {
          $form[$datasource_id]['fields'][$field_name]['glossary_az'] = array(
            '#type' => 'checkbox',
            '#title' => t('Enable'),
            '#default_value' => $config
              ->get($field_name)['enabled'],
          );
          if (array_key_exists('glossary_az_grouping', $config
            ->get($field_name))) {
            $glossary_az_grouping_defaults = $config
              ->get($field_name)['glossary_az_grouping'];
          }
          else {
            $glossary_az_grouping_defaults = array(
              //'glossary_az_grouping_09' => 'glossary_az_grouping_09',
              'glossary_az_grouping_other' => 'glossary_az_grouping_other',
            );
          }
          $form[$datasource_id]['fields'][$field_name]['glossary_az_grouping'] = array(
            '#type' => 'checkboxes',
            #'#title' => t('Glossary grouping'),

            #'#description' => t('When grouping is enabled, individual values such as 1, 2, 3 will get grouped like "0-9"'),
            '#options' => array(
              'glossary_az_grouping_az' => 'Group Alphabetic (A-Z)',
              'glossary_az_grouping_09' => 'Group Numeric (0-9)',
              'glossary_az_grouping_other' => 'Group Non Alpha Numeric (#)',
            ),
            '#default_value' => $glossary_az_grouping_defaults,
            '#required' => FALSE,
            '#size' => 1,
          );

          // TODO Glossary field TYPE should always be STRING.
          // Array to identify which header(s) to alter.
          $datasource_ids[$datasource_id] = $datasource_id;
        }
      }
    }
  }

  // Add glossary header to each fieldset.
  if (!empty($datasource_ids)) {
    foreach ($datasource_ids as $datasource_id_unique) {
      $form[$datasource_id_unique]['#header'][] = t('Glossary');
      $form[$datasource_id_unique]['#header'][] = t('Glossary Grouping');
    }
  }

  // Add a custom validate handler.
  $form['actions']['submit']['#validate'][] = 'search_api_glossary_search_api_index_fields_validate';

  // Add a custom submit handler to save the
  // array of types back to the config file.
  $form['actions']['submit']['#submit'][] = 'search_api_glossary_search_api_index_fields_submit';
}