Issue #2527606 by dawehner, plach, catch, mpdonadio, Wim Leers, xjm, Fabianx: Uncaught PHP Exception LogicException when editing Views
parent
81087eb4c2
commit
7b9c39c077
|
@ -875,10 +875,16 @@ abstract class FieldPluginBase extends HandlerBase implements FieldHandlerInterf
|
||||||
$this->documentSelfTokens($options[t('Fields')]);
|
$this->documentSelfTokens($options[t('Fields')]);
|
||||||
|
|
||||||
// Default text.
|
// Default text.
|
||||||
$output = '<p>' . $this->t('You must add some additional fields to this display before using this field. These fields may be marked as <em>Exclude from display</em> if you prefer. Note that due to rendering order, you cannot use fields that come after this field; if you need a field not listed here, rearrange your fields.') . '</p>';
|
|
||||||
|
$output = [];
|
||||||
|
$output[] = [
|
||||||
|
'#markup' => '<p>' . $this->t('You must add some additional fields to this display before using this field. These fields may be marked as <em>Exclude from display</em> if you prefer. Note that due to rendering order, you cannot use fields that come after this field; if you need a field not listed here, rearrange your fields.') . '</p>',
|
||||||
|
];
|
||||||
// We have some options, so make a list.
|
// We have some options, so make a list.
|
||||||
if (!empty($options)) {
|
if (!empty($options)) {
|
||||||
$output = '<p>' . $this->t("The following replacement tokens are available for this field. Note that due to rendering order, you cannot use fields that come after this field; if you need a field not listed here, rearrange your fields.") . '</p>';
|
$output[] = [
|
||||||
|
'#markup' => '<p>' . $this->t("The following replacement tokens are available for this field. Note that due to rendering order, you cannot use fields that come after this field; if you need a field not listed here, rearrange your fields.") . '</p>',
|
||||||
|
];
|
||||||
foreach (array_keys($options) as $type) {
|
foreach (array_keys($options) as $type) {
|
||||||
if (!empty($options[$type])) {
|
if (!empty($options[$type])) {
|
||||||
$items = array();
|
$items = array();
|
||||||
|
@ -890,7 +896,7 @@ abstract class FieldPluginBase extends HandlerBase implements FieldHandlerInterf
|
||||||
'#items' => $items,
|
'#items' => $items,
|
||||||
'#list_type' => $type,
|
'#list_type' => $type,
|
||||||
);
|
);
|
||||||
$output .= $this->getRenderer()->render($item_list);
|
$output[] = $item_list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -901,7 +907,7 @@ abstract class FieldPluginBase extends HandlerBase implements FieldHandlerInterf
|
||||||
$form['alter']['help'] = array(
|
$form['alter']['help'] = array(
|
||||||
'#type' => 'details',
|
'#type' => 'details',
|
||||||
'#title' => $this->t('Replacement patterns'),
|
'#title' => $this->t('Replacement patterns'),
|
||||||
'#value' => SafeMarkup::set($output),
|
'#value' => $output,
|
||||||
'#states' => array(
|
'#states' => array(
|
||||||
'visible' => array(
|
'visible' => array(
|
||||||
array(
|
array(
|
||||||
|
|
|
@ -12,6 +12,8 @@ use Drupal\Core\Ajax\OpenModalDialogCommand;
|
||||||
use Drupal\Core\Form\FormBase;
|
use Drupal\Core\Form\FormBase;
|
||||||
use Drupal\Core\Form\FormState;
|
use Drupal\Core\Form\FormState;
|
||||||
use Drupal\Core\Form\FormStateInterface;
|
use Drupal\Core\Form\FormStateInterface;
|
||||||
|
use Drupal\Core\Render\BubbleableMetadata;
|
||||||
|
use Drupal\Core\Render\RenderContext;
|
||||||
use Drupal\views_ui\ViewUI;
|
use Drupal\views_ui\ViewUI;
|
||||||
use Drupal\views\ViewEntityInterface;
|
use Drupal\views\ViewEntityInterface;
|
||||||
use Drupal\views\Ajax;
|
use Drupal\views\Ajax;
|
||||||
|
@ -205,8 +207,21 @@ abstract class ViewsFormBase extends FormBase implements ViewsFormInterface {
|
||||||
}
|
}
|
||||||
$form_state->disableCache();
|
$form_state->disableCache();
|
||||||
|
|
||||||
$form = \Drupal::formBuilder()->buildForm($form_class, $form_state);
|
// Builds the form in a render context in order to ensure that cacheable
|
||||||
|
// metadata is bubbled up.
|
||||||
|
$render_context = new RenderContext();
|
||||||
|
$callable = function () use ($form_class, &$form_state) {
|
||||||
|
return \Drupal::formBuilder()->buildForm($form_class, $form_state);
|
||||||
|
};
|
||||||
|
$form = $renderer->executeInRenderContext($render_context, $callable);
|
||||||
|
|
||||||
|
if (!$render_context->isEmpty()) {
|
||||||
|
BubbleableMetadata::createFromRenderArray($form)
|
||||||
|
->merge($render_context->pop())
|
||||||
|
->applyTo($form);
|
||||||
|
}
|
||||||
$output = $renderer->renderRoot($form);
|
$output = $renderer->renderRoot($form);
|
||||||
|
|
||||||
drupal_process_attached($form);
|
drupal_process_attached($form);
|
||||||
|
|
||||||
// These forms have the title built in, so set the title here:
|
// These forms have the title built in, so set the title here:
|
||||||
|
|
|
@ -74,4 +74,23 @@ abstract class UITestBase extends ViewTestBase {
|
||||||
return $default;
|
return $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function drupalGet($path, array $options = array(), array $headers = array()) {
|
||||||
|
$url = $this->buildUrl($path, $options);
|
||||||
|
|
||||||
|
// Ensure that each nojs page is accessible via ajax as well.
|
||||||
|
if (strpos($url, 'nojs') !== FALSE) {
|
||||||
|
$url = str_replace('nojs', 'ajax', $url);
|
||||||
|
$result = $this->drupalGet($url, $options, $headers);
|
||||||
|
$this->assertResponse(200);
|
||||||
|
$this->assertHeader('Content-Type', 'application/json');
|
||||||
|
$this->assertTrue(json_decode($result), 'Ensure that the AJAX request returned valid content.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::drupalGet($path, $options, $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue