Commit 23808dd5 authored by Stephen Mustgrave's avatar Stephen Mustgrave
Browse files

Issue #3260484 by smustgrave, Robert Ngo, laura.gates, NicholasS: Allow more...

parent 21293265
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
<?php

/**
 * @file
 * The search_api_best_bets install.
 */

use Drupal\field\Entity\FieldStorageConfig;

/**
 * Update existing field of type search_api_best_bets, allow 360 characters.
 */
function search_api_best_bets_update_9301(&$sandbox) {
  $num_chars = 360;

  // Check for existing field of type search_api_best_bets.
  $ref_fields = \Drupal::service('entity_type.manager')
    ->getStorage('field_storage_config')
    ->loadByProperties(['type' => 'search_api_best_bets']);

  /** @var \Drupal\field\Entity\FieldStorageConfig $ref_field */
  foreach ($ref_fields as $ref_field) {
    $field_name = $ref_field->getName();

    // Resize the columns.
    $database = \Drupal::database();
    $database->query("ALTER TABLE node__{$field_name} MODIFY {$field_name}_query_text VARCHAR($num_chars)");
    $database->query("ALTER TABLE node_revision__{$field_name} MODIFY {$field_name}_query_text VARCHAR($num_chars)");

    // Update storage schema.
    $storage_key = "node.field_schema_data." . $field_name;
    $storage_schema = \Drupal::keyValue('entity.storage_schema.sql');
    $field_schema = $storage_schema->get($storage_key);
    $field_schema["node__{$field_name}"]['fields']["{$field_name}_query_text"]['length'] = $num_chars;
    $field_schema["node_revision__{$field_name}"]['fields']["{$field_name}_query_text"]['length'] = $num_chars;
    $storage_schema->set($storage_key, $field_schema);

    // Update field configuration.
    $config = \Drupal::configFactory()
      ->getEditable("field.storage.node.{$field_name}");
    $config->set('settings.max_length', $num_chars);
    $config->save(TRUE);

    // Update field storage configuration.
    FieldStorageConfig::loadByName('node', $field_name)->save();
  }
}
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ class SearchApiBestBetsFieldItem extends FieldItemBase {
      'columns' => [
        'query_text' => [
          'type' => 'varchar',
          'length' => 64,
          'length' => 360,
        ],
        'exclude' => [
          'type' => 'int',
+4 −4
Original line number Diff line number Diff line
@@ -153,23 +153,23 @@ class SearchApiBestBetsFieldWidget extends WidgetBase {
      '#group' => 'advanced',
    ];
    $element['elevate'] = [
      '#type' => 'textfield',
      '#type' => 'textarea',
      '#title' => $this->getSetting('elevate_label'),
      '#placeholder' => $this->getSetting('elevate_placeholder'),
      '#description' => $this->t('Write the elevate queries in the field - separate multiple by comma.'),
      '#default_value' => $default_values['elevate'] ?? NULL,
      '#maxlength' => 64,
      '#maxlength' => 360,
      '#required' => $element['#required'],
    ];

    if (!$this->getSetting('disable_exclude')) {
      $element['exclude'] = [
        '#type' => 'textfield',
        '#type' => 'textarea',
        '#title' => $this->getSetting('exclude_label'),
        '#placeholder' => $this->getSetting('exclude_placeholder'),
        '#description' => $this->getSetting('exclude_description'),
        '#default_value' => $default_values['exclude'] ?? NULL,
        '#maxlength' => 64,
        '#maxlength' => 360,
        '#required' => $element['#required'],
      ];
    }