/** * {@inheritdoc} */ public function form(array $form, FormStateInterface $form_state) { $form['#attached']['library'][] = 'search_api/drupal.search_api.admin_css'; // Retrieve lists of all processors, and the stages and weights they have. if (!$form_state->has('processors')) { $all_processors = $this->entity->getProcessors(FALSE); $sort_processors = function (ProcessorInterface $a, ProcessorInterface $b) { return strnatcasecmp($a->label(), $b->label()); }; uasort($all_processors, $sort_processors); } else { $all_processors = $form_state->get('processors'); } $stages = $this->processorPluginManager->getProcessingStages(); $processors_by_stage = array(); foreach ($stages as $stage => $definition) { $processors_by_stage[$stage] = $this->entity->getProcessorsByStage($stage, FALSE); } $processor_settings = $this->entity->getOption('processors'); $form['#tree'] = TRUE; $form['#attached']['library'][] = 'search_api/drupal.search_api.index-active-formatters'; $form['#title'] = $this->t('Manage processors for search index %label', array('%label' => $this->entity->label())); $form['description']['#markup'] = '<p>' . $this->t('Configure processors which will pre- and post-process data at index and search time.') . '</p>'; // Add the list of processors with checkboxes to enable/disable them. $form['status'] = array( '#type' => 'fieldset', '#title' => $this->t('Enabled'), '#attributes' => array('class' => array( 'search-api-status-wrapper', )), ); foreach ($all_processors as $processor_id => $processor) { $clean_css_id = Html::cleanCssIdentifier($processor_id); $form['status'][$processor_id] = array( '#type' => 'checkbox', '#title' => $processor->label(), '#default_value' => $processor->isLocked() || !empty($processor_settings[$processor_id]), '#description' => $processor->getDescription(), '#attributes' => array( 'class' => array( 'search-api-processor-status-' . $clean_css_id, ), 'data-id' => $clean_css_id, ), '#disabled' => $processor->isLocked(), '#access' => !$processor->isHidden(), ); } $form['weights'] = array( '#type' => 'fieldset', '#title' => t('Processor order'), ); // Order enabled processors per stage. foreach ($stages as $stage => $description) { $form['weights'][$stage] = array ( '#type' => 'fieldset', '#title' => $description['label'], '#attributes' => array('class' => array( 'search-api-stage-wrapper', 'search-api-stage-wrapper-' . Html::cleanCssIdentifier($stage), )), ); $form['weights'][$stage]['order'] = array( '#type' => 'table', ); $form['weights'][$stage]['order']['#tabledrag'][] = array( 'action' => 'order', 'relationship' => 'sibling', 'group' => 'search-api-processor-weight-' . Html::cleanCssIdentifier($stage), ); } foreach ($processors_by_stage as $stage => $processors) { /** @var \Drupal\search_api\Processor\ProcessorInterface $processor */ foreach ($processors as $processor_id => $processor) { $weight = isset($processor_settings[$processor_id]['weights'][$stage]) ? $processor_settings[$processor_id]['weights'][$stage] : $processor->getDefaultWeight($stage); if ($processor->isHidden()) { $form['processors'][$processor_id]['weights'][$stage] = array( '#type' => 'value', '#value' => $weight, ); continue; } $form['weights'][$stage]['order'][$processor_id]['#attributes']['class'][] = 'draggable'; $form['weights'][$stage]['order'][$processor_id]['#attributes']['class'][] = 'search-api-processor-weight--' . Html::cleanCssIdentifier($processor_id); $form['weights'][$stage]['order'][$processor_id]['#weight'] = $weight; $form['weights'][$stage]['order'][$processor_id]['label']['#plain_text'] = $processor->label(); $form['weights'][$stage]['order'][$processor_id]['weight'] = array( '#type' => 'weight', '#title' => $this->t('Weight for processor %title', array('%title' => $processor->label())), '#title_display' => 'invisible', '#default_value' => $weight, '#parents' => array('processors', $processor_id, 'weights', $stage), '#attributes' => array('class' => array( 'search-api-processor-weight-' . Html::cleanCssIdentifier($stage), )), ); } } // Add vertical tabs containing the settings for the processors. Tabs for // disabled processors are hidden with JS magic, but need to be included in // case the processor is enabled. $form['processor_settings'] = array( '#title' => $this->t('Processor settings'), '#type' => 'vertical_tabs', ); foreach ($all_processors as $processor_id => $processor) { $processor_form_state = new SubFormState($form_state, array('processors', $processor_id, 'settings')); $processor_form = $processor->buildConfigurationForm($form, $processor_form_state); if ($processor_form) { $form['settings'][$processor_id] = array( '#type' => 'details', '#title' => $processor->label(), '#group' => 'processor_settings', '#parents' => array('processors', $processor_id, 'settings'), '#attributes' => array('class' => array( 'search-api-processor-settings-' . Html::cleanCssIdentifier($processor_id), )), ); $form['settings'][$processor_id] += $processor_form; } } return $form; }
/** * {@inheritdoc} */ public function getProcessorsByStage($stage, $only_enabled = TRUE) { return $this->entity->getProcessorsByStage($stage, $only_enabled); }