Commit 7b9c39c0 authored by alexpott's avatar alexpott

Issue #2527606 by dawehner, plach, catch, mpdonadio, Wim Leers, xjm, Fabianx:...

Issue #2527606 by dawehner, plach, catch, mpdonadio, Wim Leers, xjm, Fabianx: Uncaught PHP Exception LogicException when editing Views
parent 81087eb4
......@@ -875,10 +875,16 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
$this->documentSelfTokens($options[t('Fields')]);
// 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.
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) {
if (!empty($options[$type])) {
$items = array();
......@@ -890,7 +896,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
'#items' => $items,
'#list_type' => $type,
);
$output .= $this->getRenderer()->render($item_list);
$output[] = $item_list;
}
}
}
......@@ -901,7 +907,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
$form['alter']['help'] = array(
'#type' => 'details',
'#title' => $this->t('Replacement patterns'),
'#value' => SafeMarkup::set($output),
'#value' => $output,
'#states' => array(
'visible' => array(
array(
......
......@@ -12,6 +12,8 @@
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormState;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\Core\Render\RenderContext;
use Drupal\views_ui\ViewUI;
use Drupal\views\ViewEntityInterface;
use Drupal\views\Ajax;
......@@ -205,8 +207,21 @@ protected function ajaxFormWrapper($form_class, FormStateInterface &$form_state)
}
$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);
drupal_process_attached($form);
// These forms have the title built in, so set the title here:
......
......@@ -74,4 +74,23 @@ public function randomView(array $view = array()) {
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);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment