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')]);
|
||||
|
||||
// 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 @@ abstract class FieldPluginBase extends HandlerBase implements FieldHandlerInterf
|
|||
'#items' => $items,
|
||||
'#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(
|
||||
'#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\Ajax\OpenModalDialogCommand;
|
|||
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 @@ abstract class ViewsFormBase extends FormBase implements ViewsFormInterface {
|
|||
}
|
||||
$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 @@ abstract class UITestBase extends ViewTestBase {
|
|||
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