function search_api_glossary_form_search_api_index_fields_alter in Search API AZ Glossary 8.2
Same name and namespace in other branches
- 8 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';
}