You are here

public function DefaultController::encodingAutocomplete in Feeds extensible parsers 8

Autocomplete callback for encodings.

1 string reference to 'DefaultController::encodingAutocomplete'
feeds_ex.routing.yml in ./feeds_ex.routing.yml
feeds_ex.routing.yml

File

src/Controller/DefaultController.php, line 17

Class

DefaultController
Default controller for the feeds_ex module.

Namespace

Drupal\feeds_ex\Controller

Code

public function encodingAutocomplete($string = '') {
  $matches = [];
  if (!strlen($string) || Unicode::getStatus() != Unicode::STATUS_MULTIBYTE) {
    drupal_json_output($matches);
    return;
  }
  $added = array_map('trim', explode(',', $string));
  $string = array_pop($added);
  $lower_added = array_map('drupal_strtolower', $added);

  // Filter out items already added. Do it case insensitively without changing
  // the suggested case.
  $prefix = '';
  $encodings = [];
  foreach (mb_list_encodings() as $suggestion) {
    if (in_array(mb_strtolower($suggestion), $lower_added)) {
      $prefix .= $suggestion . ', ';
      continue;
    }
    $encodings[] = $suggestion;
  }

  // Find starts with first.
  foreach ($encodings as $delta => $encoding) {
    if (stripos($encoding, $string) !== 0) {
      continue;
    }
    $matches[$prefix . $encoding] = Html::escape($encoding);

    // Remove matches so we don't search them again.
    unset($encodings[$delta]);
  }

  // Find contains next.
  foreach ($encodings as $encoding) {
    if (stripos($encoding, $string) !== FALSE) {
      $matches[$prefix . $encoding] = Html::escape($encoding);
    }
  }

  // Only send back 10 suggestions.
  $matches = array_slice($matches, 0, 10, TRUE);
  drupal_json_output($matches);
}