Issue #1996378 by Wim Leers: Edit broken because of #1043198 and routing system bug + missing test coverage.
parent
ff6e1eea6e
commit
3076bee4cc
|
@ -6,7 +6,7 @@ edit_metadata:
|
||||||
_permission: 'access in-place editing'
|
_permission: 'access in-place editing'
|
||||||
|
|
||||||
edit_field_form:
|
edit_field_form:
|
||||||
pattern: '/edit/form/{entity_type}/{entity}/{field_name}/{langcode}/{view_mode}'
|
pattern: '/edit/form/{entity_type}/{entity}/{field_name}/{langcode}/{view_mode_id}'
|
||||||
defaults:
|
defaults:
|
||||||
_controller: '\Drupal\edit\EditController::fieldForm'
|
_controller: '\Drupal\edit\EditController::fieldForm'
|
||||||
requirements:
|
requirements:
|
||||||
|
|
|
@ -91,12 +91,12 @@ class EditController extends ContainerAware {
|
||||||
* The name of the field that is being edited.
|
* The name of the field that is being edited.
|
||||||
* @param string $langcode
|
* @param string $langcode
|
||||||
* The name of the language for which the field is being edited.
|
* The name of the language for which the field is being edited.
|
||||||
* @param string $view_mode
|
* @param string $view_mode_id
|
||||||
* The view mode the field should be rerendered in.
|
* The view mode the field should be rerendered in.
|
||||||
* @return \Drupal\Core\Ajax\AjaxResponse
|
* @return \Drupal\Core\Ajax\AjaxResponse
|
||||||
* The Ajax response.
|
* The Ajax response.
|
||||||
*/
|
*/
|
||||||
public function fieldForm(EntityInterface $entity, $field_name, $langcode, $view_mode) {
|
public function fieldForm(EntityInterface $entity, $field_name, $langcode, $view_mode_id) {
|
||||||
$response = new AjaxResponse();
|
$response = new AjaxResponse();
|
||||||
|
|
||||||
$form_state = array(
|
$form_state = array(
|
||||||
|
@ -112,7 +112,7 @@ class EditController extends ContainerAware {
|
||||||
$entity = entity_load($form_state['entity']->entityType(), $form_state['entity']->id(), TRUE);
|
$entity = entity_load($form_state['entity']->entityType(), $form_state['entity']->id(), TRUE);
|
||||||
// @todo Remove when http://drupal.org/node/1346214 is complete.
|
// @todo Remove when http://drupal.org/node/1346214 is complete.
|
||||||
$entity = $entity->getBCEntity();
|
$entity = $entity->getBCEntity();
|
||||||
$output = field_view_field($entity, $field_name, $view_mode, $langcode);
|
$output = field_view_field($entity, $field_name, $view_mode_id, $langcode);
|
||||||
|
|
||||||
$response->addCommand(new FieldFormSavedCommand(drupal_render($output)));
|
$response->addCommand(new FieldFormSavedCommand(drupal_render($output)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ namespace Drupal\edit\Tests;
|
||||||
use Drupal\simpletest\WebTestBase;
|
use Drupal\simpletest\WebTestBase;
|
||||||
use Drupal\edit\Ajax\MetadataCommand;
|
use Drupal\edit\Ajax\MetadataCommand;
|
||||||
use Drupal\Core\Ajax\AppendCommand;
|
use Drupal\Core\Ajax\AppendCommand;
|
||||||
|
use Drupal\Component\Utility\Unicode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests loading of Edit and lazy-loading of in-place editors.
|
* Tests loading of Edit and lazy-loading of in-place editors.
|
||||||
|
@ -137,6 +138,15 @@ class EditLoadingTest extends WebTestBase {
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
$this->assertIdentical($command->render(), $ajax_commands[2], 'The Edit metadata command contains the expected metadata.');
|
$this->assertIdentical($command->render(), $ajax_commands[2], 'The Edit metadata command contains the expected metadata.');
|
||||||
|
|
||||||
|
// Retrieving the form for this field should result in a 200 response,
|
||||||
|
// containing only an editFieldForm command.
|
||||||
|
$response = $this->retrieveFieldForm('node/1/body/und/full');
|
||||||
|
$this->assertResponse(200);
|
||||||
|
$ajax_commands = drupal_json_decode($response);
|
||||||
|
$this->assertIdentical(1, count($ajax_commands), 'The field form HTTP request results in three AJAX commands.');
|
||||||
|
$this->assertIdentical('editFieldForm', $ajax_commands[0]['command'], 'The first AJAX command is an editFieldForm command.');
|
||||||
|
$this->assertIdentical('<form ', Unicode::substr($ajax_commands[0]['data'], 0, 6), 'The editFieldForm command contains a form.');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -165,7 +175,51 @@ class EditLoadingTest extends WebTestBase {
|
||||||
}
|
}
|
||||||
$post = implode('&', $post);
|
$post = implode('&', $post);
|
||||||
|
|
||||||
// Add extra information to the POST data as ajax.js does.
|
// Perform HTTP request.
|
||||||
|
return $this->curlExec(array(
|
||||||
|
CURLOPT_URL => url('edit/metadata', array('absolute' => TRUE)),
|
||||||
|
CURLOPT_POST => TRUE,
|
||||||
|
CURLOPT_POSTFIELDS => $post . $this->getAjaxPageStatePostData(),
|
||||||
|
CURLOPT_HTTPHEADER => array(
|
||||||
|
'Accept: application/json',
|
||||||
|
'Content-Type: application/x-www-form-urlencoded',
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve field form from the server. May also result in additional
|
||||||
|
* JavaScript settings and CSS/JS being loaded.
|
||||||
|
*
|
||||||
|
* @param string $field_id
|
||||||
|
* An Edit field ID.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* The response body.
|
||||||
|
*/
|
||||||
|
protected function retrieveFieldForm($field_id) {
|
||||||
|
// Build & serialize POST value.
|
||||||
|
$post = urlencode('nocssjs') . '=' . urlencode('true');
|
||||||
|
|
||||||
|
// Perform HTTP request.
|
||||||
|
return $this->curlExec(array(
|
||||||
|
CURLOPT_URL => url('edit/form/' . $field_id, array('absolute' => TRUE)),
|
||||||
|
CURLOPT_POST => TRUE,
|
||||||
|
CURLOPT_POSTFIELDS => $post . $this->getAjaxPageStatePostData(),
|
||||||
|
CURLOPT_HTTPHEADER => array(
|
||||||
|
'Accept: application/json',
|
||||||
|
'Content-Type: application/x-www-form-urlencoded',
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get extra information to the POST data as ajax.js does.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* Additional post data.
|
||||||
|
*/
|
||||||
|
protected function getAjaxPageStatePostData() {
|
||||||
$extra_post = '';
|
$extra_post = '';
|
||||||
$drupal_settings = $this->drupalSettings;
|
$drupal_settings = $this->drupalSettings;
|
||||||
if (isset($drupal_settings['ajaxPageState'])) {
|
if (isset($drupal_settings['ajaxPageState'])) {
|
||||||
|
@ -178,16 +232,6 @@ class EditLoadingTest extends WebTestBase {
|
||||||
$extra_post .= '&' . urlencode("ajax_page_state[js][$key]") . '=1';
|
$extra_post .= '&' . urlencode("ajax_page_state[js][$key]") . '=1';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $extra_post;
|
||||||
// Perform HTTP request.
|
}
|
||||||
return $this->curlExec(array(
|
|
||||||
CURLOPT_URL => url('edit/metadata', array('absolute' => TRUE)),
|
|
||||||
CURLOPT_POST => TRUE,
|
|
||||||
CURLOPT_POSTFIELDS => $post . $extra_post,
|
|
||||||
CURLOPT_HTTPHEADER => array(
|
|
||||||
'Accept: application/json',
|
|
||||||
'Content-Type: application/x-www-form-urlencoded',
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue