You are here

function search_api_glossary_search_api_index_fields_validate in Search API AZ Glossary 8

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

Validate search_api_glossary settings for Search API Index configuration.

1 string reference to 'search_api_glossary_search_api_index_fields_validate'
search_api_glossary_form_search_api_index_fields_alter in ./search_api_glossary.module
Add search_api_glossary settings to Search API Index configuration.

File

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

Code

function search_api_glossary_search_api_index_fields_validate($form, FormStateInterface $form_state) {
  $values = $form_state
    ->getValues();
  $fields = $values['fields'];
  $entity = $form_state
    ->getFormObject()
    ->getEntity();
  $field_settings_array = $entity
    ->get('field_settings');

  // If a glossary field exists but
  // parent field has been removed or
  // Glossary option is disabled and
  // Glossary field is still enabled
  // throw an error.
  foreach ($fields as $field_name => $field_values) {

    // Identify glossary fields and check parents.
    // This case would occur if Glossary field is added
    // but parent is removed or disabled.
    if (substr($field_name, 0, strlen('field_glossaryaz')) === 'field_glossaryaz') {

      // Check if the parent field for
      // this glossary field exists and is enabled.
      $glossary_parent_field = str_replace('field_glossaryaz_', '', $field_name);

      // We dont seem to have a parent field for Glossary.
      if (!array_key_exists($glossary_parent_field, $fields)) {

        // Throw an exception to remove the Glossary field.
        $form_state
          ->setErrorByName($field_name, t('@parent field is missing or removed. Please remove @glossary field or add @parent field.', array(
          '@parent' => $glossary_parent_field,
          '@glossary' => $field_settings_array[$field_name]['label'],
        )));
      }
      elseif ($fields[$glossary_parent_field]['glossary_az'] == 0) {

        // Throw an exception to remove the Glossary field.
        // Or enable glossary option.
        $form_state
          ->setErrorByName($field_name, t('@parent field does not have Glossary enabled. Please remove @glossary field or enable Glossary on @parent field.', array(
          '@parent' => $field_settings_array[$glossary_parent_field]['label'],
          '@glossary' => $field_settings_array[$field_name]['label'],
        )));
      }
    }
  }
}