function search_api_admin_index_workflow in Search API 7
1 string reference to 'search_api_admin_index_workflow'
- search_api_menu in ./
search_api.module - Implements hook_menu().
File
- ./
search_api.admin.inc, line 1456 - Administration page callbacks for the Search API module.
Code
function search_api_admin_index_workflow(array $form, array &$form_state, SearchApiIndex $index) {
$callback_info = search_api_get_alter_callbacks();
$processor_info = search_api_get_processors();
$options = empty($index->options) ? array() : $index->options;
$form_state['index'] = $index;
$form['#tree'] = TRUE;
$form['#attached']['js'][] = drupal_get_path('module', 'search_api') . '/search_api.admin.js';
// Callbacks
$callbacks = empty($options['data_alter_callbacks']) ? array() : $options['data_alter_callbacks'];
$callback_objects = isset($form_state['callbacks']) ? $form_state['callbacks'] : array();
foreach ($callback_info as $name => $callback) {
if (!isset($callbacks[$name])) {
$callbacks[$name]['status'] = 0;
$callbacks[$name]['weight'] = $callback['weight'];
}
$settings = empty($callbacks[$name]['settings']) ? array() : $callbacks[$name]['settings'];
if (empty($callback_objects[$name]) && class_exists($callback['class'])) {
$callback_objects[$name] = new $callback['class']($index, $settings);
}
if (!(class_exists($callback['class']) && $callback_objects[$name] instanceof SearchApiAlterCallbackInterface)) {
watchdog('search_api', t('Data alteration @id specifies illegal callback class @class.', array(
'@id' => $name,
'@class' => $callback['class'],
)), NULL, WATCHDOG_WARNING);
unset($callback_info[$name]);
unset($callbacks[$name]);
unset($callback_objects[$name]);
continue;
}
if (!$callback_objects[$name]
->supportsIndex($index)) {
unset($callback_info[$name]);
unset($callbacks[$name]);
unset($callback_objects[$name]);
continue;
}
}
$form_state['callbacks'] = $callback_objects;
$form['#callbacks'] = $callbacks;
$form['callbacks'] = array(
'#type' => 'fieldset',
'#title' => t('Data alterations'),
'#description' => t('Select the alterations that will be executed on indexed items, and their order.'),
'#collapsible' => TRUE,
);
// Callback status.
$form['callbacks']['status'] = array(
'#type' => 'item',
'#title' => t('Enabled data alterations'),
'#prefix' => '<div class="search-api-status-wrapper">',
'#suffix' => '</div>',
);
foreach ($callback_info as $name => $callback) {
$form['callbacks']['status'][$name] = array(
'#type' => 'checkbox',
'#title' => $callback['name'],
'#default_value' => $callbacks[$name]['status'],
'#parents' => array(
'callbacks',
$name,
'status',
),
'#description' => $callback['description'],
'#weight' => $callback['weight'],
);
}
// Callback order (tabledrag).
$form['callbacks']['order'] = array(
'#type' => 'item',
'#title' => t('Data alteration processing order'),
'#theme' => 'search_api_admin_item_order',
'#table_id' => 'search-api-callbacks-order-table',
);
foreach ($callback_info as $name => $callback) {
$form['callbacks']['order'][$name]['item'] = array(
'#markup' => $callback['name'],
);
$form['callbacks']['order'][$name]['weight'] = array(
'#type' => 'weight',
'#delta' => 50,
'#default_value' => $callbacks[$name]['weight'],
'#parents' => array(
'callbacks',
$name,
'weight',
),
);
$form['callbacks']['order'][$name]['#weight'] = $callbacks[$name]['weight'];
}
// Callback settings.
$form['callbacks']['settings_title'] = array(
'#type' => 'item',
'#title' => t('Callback settings'),
);
$form['callbacks']['settings'] = array(
'#type' => 'vertical_tabs',
);
foreach ($callback_info as $name => $callback) {
$settings_form = $callback_objects[$name]
->configurationForm();
if (!empty($settings_form)) {
$form['callbacks']['settings'][$name] = array(
'#type' => 'fieldset',
'#title' => $callback['name'],
'#parents' => array(
'callbacks',
$name,
'settings',
),
'#weight' => $callback['weight'],
);
$form['callbacks']['settings'][$name] += $settings_form;
}
}
// Processors
$processors = empty($options['processors']) ? array() : $options['processors'];
$processor_objects = isset($form_state['processors']) ? $form_state['processors'] : array();
foreach ($processor_info as $name => $processor) {
if (!isset($processors[$name])) {
$processors[$name]['status'] = 0;
$processors[$name]['weight'] = $processor['weight'];
}
$settings = empty($processors[$name]['settings']) ? array() : $processors[$name]['settings'];
if (empty($processor_objects[$name]) && class_exists($processor['class'])) {
$processor_objects[$name] = new $processor['class']($index, $settings);
}
if (!(class_exists($processor['class']) && $processor_objects[$name] instanceof SearchApiProcessorInterface)) {
watchdog('search_api', t('Processor @id specifies illegal processor class @class.', array(
'@id' => $name,
'@class' => $processor['class'],
)), NULL, WATCHDOG_WARNING);
unset($processor_info[$name]);
unset($processors[$name]);
unset($processor_objects[$name]);
continue;
}
if (!$processor_objects[$name]
->supportsIndex($index)) {
unset($processor_info[$name]);
unset($processors[$name]);
unset($processor_objects[$name]);
continue;
}
}
$form_state['processors'] = $processor_objects;
$form['#processors'] = $processors;
$form['processors'] = array(
'#type' => 'fieldset',
'#title' => t('Processors'),
'#description' => '<p>' . t("Select processors which will pre- and post-process data at index and search time, and their order. Most processors will only influence fulltext fields, but refer to their individual descriptions for details regarding their effect.<br />Also, some processors shouldn't be used with more advanced search engines (like Solr or Elasticsearch), since the search engine already provides this functionality.") . '</p>',
'#collapsible' => TRUE,
);
if ($index->server) {
$form['processors']['#description'] .= '<p>' . t("Check the <a href='@server-url'>server's</a> service class description for details.", array(
'@server-url' => url('admin/config/search/search_api/server/' . $index->server . '/edit'),
)) . '</p>';
}
// Processor status.
$form['processors']['status'] = array(
'#type' => 'item',
'#title' => t('Enabled processors'),
'#prefix' => '<div class="search-api-status-wrapper">',
'#suffix' => '</div>',
);
foreach ($processor_info as $name => $processor) {
$form['processors']['status'][$name] = array(
'#type' => 'checkbox',
'#title' => $processor['name'],
'#default_value' => $processors[$name]['status'],
'#parents' => array(
'processors',
$name,
'status',
),
'#description' => $processor['description'],
'#weight' => $processor['weight'],
);
}
// Processor order (tabledrag).
$form['processors']['order'] = array(
'#type' => 'item',
'#title' => t('Processor processing order'),
'#description' => t('Set the order in which preprocessing will be done at index and search time. ' . 'Postprocessing of search results will be in the exact opposite direction.'),
'#theme' => 'search_api_admin_item_order',
'#table_id' => 'search-api-processors-order-table',
);
foreach ($processor_info as $name => $processor) {
$form['processors']['order'][$name]['item'] = array(
'#markup' => $processor['name'],
);
$form['processors']['order'][$name]['weight'] = array(
'#type' => 'weight',
'#delta' => 50,
'#default_value' => $processors[$name]['weight'],
'#parents' => array(
'processors',
$name,
'weight',
),
);
$form['processors']['order'][$name]['#weight'] = $processors[$name]['weight'];
}
// Processor settings.
$form['processors']['settings_title'] = array(
'#type' => 'item',
'#title' => t('Processor settings'),
);
$form['processors']['settings'] = array(
'#type' => 'vertical_tabs',
);
foreach ($processor_info as $name => $processor) {
$settings_form = $processor_objects[$name]
->configurationForm();
if (!empty($settings_form)) {
$form['processors']['settings'][$name] = array(
'#type' => 'fieldset',
'#title' => $processor['name'],
'#parents' => array(
'processors',
$name,
'settings',
),
'#weight' => $processor['weight'],
);
$form['processors']['settings'][$name] += $settings_form;
}
}
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save configuration'),
);
return $form;
}