updated core and modules
This commit is contained in:
@@ -47,7 +47,7 @@ class ConfigImporterFieldPurger {
|
||||
}
|
||||
else {
|
||||
$context['finished'] = $context['sandbox']['field']['current_progress'] / $context['sandbox']['field']['steps_to_delete'];
|
||||
$context['message'] = \Drupal::translation()->translate('Purging field @field_label', array('@field_label' => $field_storage->label()));
|
||||
$context['message'] = \Drupal::translation()->translate('Purging field @field_label', ['@field_label' => $field_storage->label()]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,11 +111,11 @@ class ConfigImporterFieldPurger {
|
||||
public static function getFieldStoragesToPurge(array $extensions, array $deletes) {
|
||||
$providers = array_keys($extensions['module']);
|
||||
$providers[] = 'core';
|
||||
$storages_to_delete = array();
|
||||
$storages_to_delete = [];
|
||||
|
||||
// Gather fields that will be deleted during configuration synchronization
|
||||
// where the module that provides the field type is also being uninstalled.
|
||||
$field_storage_ids = array();
|
||||
$field_storage_ids = [];
|
||||
foreach ($deletes as $config_name) {
|
||||
$field_storage_config_prefix = \Drupal::entityManager()->getDefinition('field_storage_config')->getConfigPrefix();
|
||||
if (strpos($config_name, $field_storage_config_prefix . '.') === 0) {
|
||||
@@ -134,7 +134,7 @@ class ConfigImporterFieldPurger {
|
||||
|
||||
// Gather deleted fields from modules that are being uninstalled.
|
||||
/** @var \Drupal\field\FieldStorageConfigInterface[] $field_storages */
|
||||
$field_storages = entity_load_multiple_by_properties('field_storage_config', array('deleted' => TRUE, 'include_deleted' => TRUE));
|
||||
$field_storages = entity_load_multiple_by_properties('field_storage_config', ['deleted' => TRUE, 'include_deleted' => TRUE]);
|
||||
foreach ($field_storages as $field_storage) {
|
||||
if (!in_array($field_storage->getTypeProvider(), $providers)) {
|
||||
$storages_to_delete[$field_storage->id()] = $field_storage;
|
||||
|
||||
@@ -193,7 +193,7 @@ class FieldConfig extends FieldConfigBase implements FieldConfigInterface {
|
||||
parent::preDelete($storage, $fields);
|
||||
// Keep the field definitions in the state storage so we can use them
|
||||
// later during field_purge_batch().
|
||||
$deleted_fields = $state->get('field.field.deleted') ?: array();
|
||||
$deleted_fields = $state->get('field.field.deleted') ?: [];
|
||||
foreach ($fields as $field) {
|
||||
if (!$field->deleted) {
|
||||
$config = $field->toArray();
|
||||
@@ -228,7 +228,7 @@ class FieldConfig extends FieldConfigBase implements FieldConfigInterface {
|
||||
|
||||
// Delete the associated field storages if they are not used anymore and are
|
||||
// not persistent.
|
||||
$storages_to_delete = array();
|
||||
$storages_to_delete = [];
|
||||
foreach ($fields as $field) {
|
||||
$storage_definition = $field->getFieldStorageDefinition();
|
||||
if (!$field->deleted && !$field->isUninstalling() && $storage_definition->isDeletable()) {
|
||||
@@ -306,7 +306,7 @@ class FieldConfig extends FieldConfigBase implements FieldConfigInterface {
|
||||
*/
|
||||
public function getDisplayOptions($display_context) {
|
||||
// Hide configurable fields by default.
|
||||
return array('type' => 'hidden');
|
||||
return ['region' => 'hidden'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,7 @@ use Drupal\field\FieldStorageConfigInterface;
|
||||
* id = "field_storage_config",
|
||||
* label = @Translation("Field storage"),
|
||||
* handlers = {
|
||||
* "access" = "Drupal\field\FieldStorageConfigAccessControlHandler",
|
||||
* "storage" = "Drupal\field\FieldStorageConfigStorage"
|
||||
* },
|
||||
* config_prefix = "storage",
|
||||
@@ -370,7 +371,7 @@ class FieldStorageConfig extends ConfigEntityBase implements FieldStorageConfigI
|
||||
|
||||
// See if any module forbids the update by throwing an exception. This
|
||||
// invokes hook_field_storage_config_update_forbid().
|
||||
$module_handler->invokeAll('field_storage_config_update_forbid', array($this, $this->original));
|
||||
$module_handler->invokeAll('field_storage_config_update_forbid', [$this, $this->original]);
|
||||
|
||||
// Notify the entity manager. A listener can reject the definition
|
||||
// update as invalid by raising an exception, which stops execution before
|
||||
@@ -407,7 +408,7 @@ class FieldStorageConfig extends ConfigEntityBase implements FieldStorageConfigI
|
||||
|
||||
// Keep the field definitions in the state storage so we can use them later
|
||||
// during field_purge_batch().
|
||||
$deleted_storages = $state->get('field.storage.deleted') ?: array();
|
||||
$deleted_storages = $state->get('field.storage.deleted') ?: [];
|
||||
foreach ($field_storages as $field_storage) {
|
||||
if (!$field_storage->deleted) {
|
||||
$config = $field_storage->toArray();
|
||||
@@ -444,12 +445,12 @@ class FieldStorageConfig extends ConfigEntityBase implements FieldStorageConfigI
|
||||
$class = $this->getFieldItemClass();
|
||||
$schema = $class::schema($this);
|
||||
// Fill in default values for optional entries.
|
||||
$schema += array(
|
||||
'columns' => array(),
|
||||
'unique keys' => array(),
|
||||
'indexes' => array(),
|
||||
'foreign keys' => array(),
|
||||
);
|
||||
$schema += [
|
||||
'columns' => [],
|
||||
'unique keys' => [],
|
||||
'indexes' => [],
|
||||
'foreign keys' => [],
|
||||
];
|
||||
|
||||
// Merge custom indexes with those specified by the field type. Custom
|
||||
// indexes prevail.
|
||||
@@ -499,7 +500,7 @@ class FieldStorageConfig extends ConfigEntityBase implements FieldStorageConfigI
|
||||
return $map[$this->getTargetEntityTypeId()][$this->getName()]['bundles'];
|
||||
}
|
||||
}
|
||||
return array();
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -719,7 +720,7 @@ class FieldStorageConfig extends ConfigEntityBase implements FieldStorageConfigI
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getConstraints() {
|
||||
return array();
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,13 +2,12 @@
|
||||
|
||||
namespace Drupal\field;
|
||||
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
use Drupal\Core\Entity\EntityAccessControlHandler;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
|
||||
/**
|
||||
* Defines the access control handler for the field entity type.
|
||||
* Defines the access control handler for the field config entity type.
|
||||
*
|
||||
* @see \Drupal\field\Entity\FieldConfig
|
||||
*/
|
||||
@@ -18,16 +17,16 @@ class FieldConfigAccessControlHandler extends EntityAccessControlHandler {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
|
||||
if ($operation == 'delete') {
|
||||
$field_storage_entity = $entity->getFieldStorageDefinition();
|
||||
if ($field_storage_entity->isLocked()) {
|
||||
return AccessResult::forbidden()->addCacheableDependency($field_storage_entity);
|
||||
}
|
||||
else {
|
||||
return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields')->addCacheableDependency($field_storage_entity);
|
||||
}
|
||||
}
|
||||
return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields');
|
||||
// Delegate access control to the underlying field storage config entity:
|
||||
// the field config entity merely handles configuration for a particular
|
||||
// bundle of an entity type, the bulk of the logic and configuration is with
|
||||
// the field storage config entity. Therefore, if an operation is allowed on
|
||||
// a certain field storage config entity, it should also be allowed for all
|
||||
// associated field config entities.
|
||||
// @see \Drupal\Core\Field\FieldDefinitionInterface
|
||||
/** \Drupal\field\FieldConfigInterface $entity */
|
||||
$field_storage_entity = $entity->getFieldStorageDefinition();
|
||||
return $field_storage_entity->access($operation, $account, TRUE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -95,12 +95,12 @@ class FieldConfigStorage extends FieldConfigStorageBase {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function loadByProperties(array $conditions = array()) {
|
||||
public function loadByProperties(array $conditions = []) {
|
||||
// Include deleted fields if specified in the $conditions parameters.
|
||||
$include_deleted = isset($conditions['include_deleted']) ? $conditions['include_deleted'] : FALSE;
|
||||
unset($conditions['include_deleted']);
|
||||
|
||||
$fields = array();
|
||||
$fields = [];
|
||||
|
||||
// Get fields stored in configuration. If we are explicitly looking for
|
||||
// deleted fields only, this can be skipped, because they will be
|
||||
@@ -109,7 +109,7 @@ class FieldConfigStorage extends FieldConfigStorageBase {
|
||||
if (isset($conditions['entity_type']) && isset($conditions['bundle']) && isset($conditions['field_name'])) {
|
||||
// Optimize for the most frequent case where we do have a specific ID.
|
||||
$id = $conditions['entity_type'] . '.' . $conditions['bundle'] . '.' . $conditions['field_name'];
|
||||
$fields = $this->loadMultiple(array($id));
|
||||
$fields = $this->loadMultiple([$id]);
|
||||
}
|
||||
else {
|
||||
// No specific ID, we need to examine all existing fields.
|
||||
@@ -119,8 +119,8 @@ class FieldConfigStorage extends FieldConfigStorageBase {
|
||||
|
||||
// Merge deleted fields (stored in state) if needed.
|
||||
if ($include_deleted || !empty($conditions['deleted'])) {
|
||||
$deleted_fields = $this->state->get('field.field.deleted') ?: array();
|
||||
$deleted_storages = $this->state->get('field.storage.deleted') ?: array();
|
||||
$deleted_fields = $this->state->get('field.field.deleted') ?: [];
|
||||
$deleted_storages = $this->state->get('field.storage.deleted') ?: [];
|
||||
foreach ($deleted_fields as $id => $config) {
|
||||
// If the field storage itself is deleted, inject it directly in the field.
|
||||
if (isset($deleted_storages[$config['field_storage_uuid']])) {
|
||||
@@ -131,7 +131,7 @@ class FieldConfigStorage extends FieldConfigStorageBase {
|
||||
}
|
||||
|
||||
// Collect matching fields.
|
||||
$matching_fields = array();
|
||||
$matching_fields = [];
|
||||
foreach ($fields as $field) {
|
||||
// Some conditions are checked against the field storage.
|
||||
$field_storage = $field->getFieldStorageDefinition();
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\field;
|
||||
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
use Drupal\Core\Entity\EntityAccessControlHandler;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
|
||||
/**
|
||||
* Defines the access control handler for the field storage config entity type.
|
||||
*
|
||||
* @see \Drupal\field\Entity\FieldStorageConfig
|
||||
*/
|
||||
class FieldStorageConfigAccessControlHandler extends EntityAccessControlHandler {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
|
||||
/** \Drupal\field\FieldStorageConfigInterface $entity */
|
||||
if ($operation === 'delete') {
|
||||
if ($entity->isLocked()) {
|
||||
return AccessResult::forbidden()->addCacheableDependency($entity);
|
||||
}
|
||||
else {
|
||||
return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields')->addCacheableDependency($entity);
|
||||
}
|
||||
}
|
||||
return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getTargetEntityTypeId() . ' fields');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -64,7 +64,7 @@ class FieldStorageConfigStorage extends ConfigEntityStorage {
|
||||
* The module handler.
|
||||
* @param \Drupal\Core\State\StateInterface $state
|
||||
* The state key value store.
|
||||
* @param \Drupal\Component\Plugin\PluginManagerInterface\FieldTypePluginManagerInterface
|
||||
* @param \Drupal\Component\Plugin\PluginManagerInterface\FieldTypePluginManagerInterface $field_type_manager
|
||||
* The field type plugin manager.
|
||||
*/
|
||||
public function __construct(EntityTypeInterface $entity_type, ConfigFactoryInterface $config_factory, UuidInterface $uuid_service, LanguageManagerInterface $language_manager, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, StateInterface $state, FieldTypePluginManagerInterface $field_type_manager) {
|
||||
@@ -94,13 +94,13 @@ class FieldStorageConfigStorage extends ConfigEntityStorage {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function loadByProperties(array $conditions = array()) {
|
||||
public function loadByProperties(array $conditions = []) {
|
||||
// Include deleted fields if specified in the $conditions parameters.
|
||||
$include_deleted = isset($conditions['include_deleted']) ? $conditions['include_deleted'] : FALSE;
|
||||
unset($conditions['include_deleted']);
|
||||
|
||||
/** @var \Drupal\field\FieldStorageConfigInterface[] $storages */
|
||||
$storages = array();
|
||||
$storages = [];
|
||||
|
||||
// Get field storages living in configuration. If we are explicitly looking
|
||||
// for deleted storages only, this can be skipped, because they will be
|
||||
@@ -109,7 +109,7 @@ class FieldStorageConfigStorage extends ConfigEntityStorage {
|
||||
if (isset($conditions['entity_type']) && isset($conditions['field_name'])) {
|
||||
// Optimize for the most frequent case where we do have a specific ID.
|
||||
$id = $conditions['entity_type'] . $conditions['field_name'];
|
||||
$storages = $this->loadMultiple(array($id));
|
||||
$storages = $this->loadMultiple([$id]);
|
||||
}
|
||||
else {
|
||||
// No specific ID, we need to examine all existing storages.
|
||||
@@ -119,14 +119,14 @@ class FieldStorageConfigStorage extends ConfigEntityStorage {
|
||||
|
||||
// Merge deleted field storages (living in state) if needed.
|
||||
if ($include_deleted || !empty($conditions['deleted'])) {
|
||||
$deleted_storages = $this->state->get('field.storage.deleted') ?: array();
|
||||
$deleted_storages = $this->state->get('field.storage.deleted') ?: [];
|
||||
foreach ($deleted_storages as $id => $config) {
|
||||
$storages[$id] = $this->create($config);
|
||||
}
|
||||
}
|
||||
|
||||
// Collect matching fields.
|
||||
$matches = array();
|
||||
$matches = [];
|
||||
foreach ($storages as $field) {
|
||||
foreach ($conditions as $key => $value) {
|
||||
// Extract the actual value against which the condition is checked.
|
||||
@@ -150,8 +150,12 @@ class FieldStorageConfigStorage extends ConfigEntityStorage {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function mapFromStorageRecords(array $records) {
|
||||
foreach ($records as &$record) {
|
||||
foreach ($records as $id => &$record) {
|
||||
$class = $this->fieldTypeManager->getPluginClass($record['type']);
|
||||
if (empty($class)) {
|
||||
$config_id = $this->getPrefix() . $id;
|
||||
throw new \RuntimeException("Unable to determine class for field type '{$record['type']}' found in the '$config_id' configuration");
|
||||
}
|
||||
$record['settings'] = $class::storageSettingsFromConfigData($record['settings']);
|
||||
}
|
||||
return parent::mapFromStorageRecords($records);
|
||||
|
||||
@@ -3,12 +3,13 @@
|
||||
namespace Drupal\field\Plugin\migrate\process;
|
||||
|
||||
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
|
||||
use Drupal\Component\Plugin\PluginManagerInterface;
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\migrate\MigrateExecutableInterface;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Drupal\migrate\Plugin\migrate\process\StaticMap;
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface;
|
||||
use Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
@@ -21,10 +22,17 @@ class FieldType extends StaticMap implements ContainerFactoryPluginInterface {
|
||||
/**
|
||||
* The cckfield plugin manager.
|
||||
*
|
||||
* @var \Drupal\Component\Plugin\PluginManagerInterface
|
||||
* @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface
|
||||
*/
|
||||
protected $cckPluginManager;
|
||||
|
||||
/**
|
||||
* The field plugin manager.
|
||||
*
|
||||
* @var \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface
|
||||
*/
|
||||
protected $fieldPluginManager;
|
||||
|
||||
/**
|
||||
* The migration object.
|
||||
*
|
||||
@@ -41,14 +49,17 @@ class FieldType extends StaticMap implements ContainerFactoryPluginInterface {
|
||||
* The plugin ID.
|
||||
* @param mixed $plugin_definition
|
||||
* The plugin definition.
|
||||
* @param \Drupal\Component\Plugin\PluginManagerInterface $cck_plugin_manager
|
||||
* @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface $cck_plugin_manager
|
||||
* The cckfield plugin manager.
|
||||
* @param \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface $field_plugin_manager
|
||||
* The field plugin manager.
|
||||
* @param \Drupal\migrate\Plugin\MigrationInterface $migration
|
||||
* The migration being run.
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, PluginManagerInterface $cck_plugin_manager, MigrationInterface $migration = NULL) {
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrateCckFieldPluginManagerInterface $cck_plugin_manager, MigrateFieldPluginManagerInterface $field_plugin_manager, MigrationInterface $migration = NULL) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition);
|
||||
$this->cckPluginManager = $cck_plugin_manager;
|
||||
$this->fieldPluginManager = $field_plugin_manager;
|
||||
$this->migration = $migration;
|
||||
}
|
||||
|
||||
@@ -61,6 +72,7 @@ class FieldType extends StaticMap implements ContainerFactoryPluginInterface {
|
||||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$container->get('plugin.manager.migrate.cckfield'),
|
||||
$container->get('plugin.manager.migrate.field'),
|
||||
$migration
|
||||
);
|
||||
}
|
||||
@@ -70,12 +82,18 @@ class FieldType extends StaticMap implements ContainerFactoryPluginInterface {
|
||||
*/
|
||||
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
$field_type = is_array($value) ? $value[0] : $value;
|
||||
|
||||
try {
|
||||
return $this->cckPluginManager->createInstance($field_type, [], $this->migration)->getFieldType($row);
|
||||
$plugin_id = $this->fieldPluginManager->getPluginIdFromFieldType($field_type, [], $this->migration);
|
||||
return $this->fieldPluginManager->createInstance($plugin_id, [], $this->migration)->getFieldType($row);
|
||||
}
|
||||
catch (PluginNotFoundException $e) {
|
||||
return parent::transform($value, $migrate_executable, $row, $destination_property);
|
||||
try {
|
||||
$plugin_id = $this->cckPluginManager->getPluginIdFromFieldType($field_type, [], $this->migration);
|
||||
return $this->cckPluginManager->createInstance($plugin_id, [], $this->migration)->getFieldType($row);
|
||||
}
|
||||
catch (PluginNotFoundException $e) {
|
||||
return parent::transform($value, $migrate_executable, $row, $destination_property);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class FieldFormatterSettingsDefaults extends ProcessPluginBase {
|
||||
if (isset($value[1])) {
|
||||
$module = $row->getSourceProperty('module');
|
||||
if ($module === 'date') {
|
||||
$value = array('format_type' => 'fallback');
|
||||
$value = ['format_type' => 'fallback'];
|
||||
}
|
||||
elseif ($module === 'number') {
|
||||
// We have to do the lookup here in the process plugin because for
|
||||
@@ -35,7 +35,7 @@ class FieldFormatterSettingsDefaults extends ProcessPluginBase {
|
||||
return $this->numberSettings($row->getDestinationProperty('options/type'), $value[1]);
|
||||
}
|
||||
else {
|
||||
$value = array();
|
||||
$value = [];
|
||||
}
|
||||
}
|
||||
return $value;
|
||||
|
||||
@@ -20,7 +20,7 @@ class FieldInstanceDefaults extends ProcessPluginBase {
|
||||
*/
|
||||
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
list($widget_type, $widget_settings) = $value;
|
||||
$default = array();
|
||||
$default = [];
|
||||
|
||||
switch ($widget_type) {
|
||||
case 'text_textfield':
|
||||
@@ -58,7 +58,7 @@ class FieldInstanceDefaults extends ProcessPluginBase {
|
||||
break;
|
||||
}
|
||||
if (!empty($default)) {
|
||||
$default = array($default);
|
||||
$default = [$default];
|
||||
}
|
||||
return $default;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ class FieldInstanceSettings extends ProcessPluginBase {
|
||||
*/
|
||||
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
list($widget_type, $widget_settings, $field_settings) = $value;
|
||||
$settings = array();
|
||||
$settings = [];
|
||||
switch ($widget_type) {
|
||||
case 'number':
|
||||
$settings['min'] = $field_settings['min'];
|
||||
@@ -33,7 +33,7 @@ class FieldInstanceSettings extends ProcessPluginBase {
|
||||
// $settings['url'] = $widget_settings['default_value'][0]['url'];
|
||||
// D6 has optional, required, value and none. D8 only has disabled (0)
|
||||
// optional (1) and required (2).
|
||||
$map = array('disabled' => 0, 'optional' => 1, 'required' => 2);
|
||||
$map = ['disabled' => 0, 'optional' => 1, 'required' => 2];
|
||||
$settings['title'] = $map[$field_settings['title']];
|
||||
break;
|
||||
|
||||
|
||||
@@ -41,41 +41,41 @@ class FieldInstanceWidgetSettings extends ProcessPluginBase {
|
||||
$size = isset($widget_settings['size']) ? $widget_settings['size'] : 60;
|
||||
$rows = isset($widget_settings['rows']) ? $widget_settings['rows'] : 5;
|
||||
|
||||
$settings = array(
|
||||
'text_textfield' => array(
|
||||
$settings = [
|
||||
'text_textfield' => [
|
||||
'size' => $size,
|
||||
'placeholder' => '',
|
||||
),
|
||||
'text_textarea' => array(
|
||||
],
|
||||
'text_textarea' => [
|
||||
'rows' => $rows,
|
||||
'placeholder' => '',
|
||||
),
|
||||
'number' => array(
|
||||
],
|
||||
'number' => [
|
||||
'placeholder' => '',
|
||||
),
|
||||
'email_textfield' => array(
|
||||
],
|
||||
'email_textfield' => [
|
||||
'placeholder' => '',
|
||||
),
|
||||
'link' => array(
|
||||
],
|
||||
'link' => [
|
||||
'placeholder_url' => '',
|
||||
'placeholder_title' => '',
|
||||
),
|
||||
'filefield_widget' => array(
|
||||
],
|
||||
'filefield_widget' => [
|
||||
'progress_indicator' => $progress,
|
||||
),
|
||||
'imagefield_widget' => array(
|
||||
],
|
||||
'imagefield_widget' => [
|
||||
'progress_indicator' => $progress,
|
||||
'preview_image_style' => 'thumbnail',
|
||||
),
|
||||
'optionwidgets_onoff' => array(
|
||||
],
|
||||
'optionwidgets_onoff' => [
|
||||
'display_label' => FALSE,
|
||||
),
|
||||
'phone_textfield' => array(
|
||||
],
|
||||
'phone_textfield' => [
|
||||
'placeholder' => '',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
|
||||
return isset($settings[$widget_type]) ? $settings[$widget_type] : array();
|
||||
return isset($settings[$widget_type]) ? $settings[$widget_type] : [];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,22 +21,29 @@ class FieldSettings extends ProcessPluginBase {
|
||||
* Get the field default/mapped settings.
|
||||
*/
|
||||
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
list($field_type, $global_settings) = $value;
|
||||
return $this->getSettings($field_type, $global_settings);
|
||||
// To maintain backwards compatibility, ensure that $value contains at least
|
||||
// three elements.
|
||||
if (count($value) == 2) {
|
||||
$value[] = NULL;
|
||||
}
|
||||
list($field_type, $global_settings, $original_field_type) = $value;
|
||||
return $this->getSettings($field_type, $global_settings, $original_field_type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge the default D8 and specified D6 settings.
|
||||
*
|
||||
* @param string $field_type
|
||||
* The field type.
|
||||
* The destination field type.
|
||||
* @param array $global_settings
|
||||
* The field settings.
|
||||
* @param string $original_field_type
|
||||
* (optional) The original field type before migration.
|
||||
*
|
||||
* @return array
|
||||
* A valid array of settings.
|
||||
*/
|
||||
public function getSettings($field_type, $global_settings) {
|
||||
public function getSettings($field_type, $global_settings, $original_field_type = NULL) {
|
||||
$max_length = isset($global_settings['max_length']) ? $global_settings['max_length'] : '';
|
||||
$max_length = empty($max_length) ? 255 : $max_length;
|
||||
$allowed_values = [];
|
||||
@@ -59,26 +66,31 @@ class FieldSettings extends ProcessPluginBase {
|
||||
}
|
||||
}
|
||||
|
||||
$settings = array(
|
||||
'text' => array(
|
||||
$settings = [
|
||||
'text' => [
|
||||
'max_length' => $max_length,
|
||||
),
|
||||
'datetime' => array('datetime_type' => 'datetime'),
|
||||
'list_string' => array(
|
||||
],
|
||||
'datetime' => ['datetime_type' => 'datetime'],
|
||||
'list_string' => [
|
||||
'allowed_values' => $allowed_values,
|
||||
),
|
||||
'list_integer' => array(
|
||||
],
|
||||
'list_integer' => [
|
||||
'allowed_values' => $allowed_values,
|
||||
),
|
||||
'list_float' => array(
|
||||
],
|
||||
'list_float' => [
|
||||
'allowed_values' => $allowed_values,
|
||||
),
|
||||
'boolean' => array(
|
||||
],
|
||||
'boolean' => [
|
||||
'allowed_values' => $allowed_values,
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
|
||||
return isset($settings[$field_type]) ? $settings[$field_type] : array();
|
||||
if ($original_field_type == 'userreference') {
|
||||
return ['target_type' => 'user'];
|
||||
}
|
||||
else {
|
||||
return isset($settings[$field_type]) ? $settings[$field_type] : [];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ class FieldInstanceDefaults extends ProcessPluginBase {
|
||||
list($default_value, $widget_settings) = $value;
|
||||
$widget_type = $widget_settings['type'];
|
||||
|
||||
$default = array();
|
||||
$default = [];
|
||||
|
||||
foreach ($default_value as $item) {
|
||||
switch ($widget_type) {
|
||||
|
||||
@@ -17,19 +17,48 @@ class FieldInstanceSettings extends ProcessPluginBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
|
||||
list($instance_settings, $widget_settings) = $value;
|
||||
list($instance_settings, $widget_settings, $field_settings) = $value;
|
||||
$widget_type = $widget_settings['type'];
|
||||
|
||||
// Get entityreference handler settings from source field configuration.
|
||||
if ($row->getSourceProperty('type') == "entityreference") {
|
||||
$instance_settings['handler'] = 'default:' . $field_settings['target_type'];
|
||||
// Transform the sort settings to D8 structure.
|
||||
$sort = [
|
||||
'field' => '_none',
|
||||
'direction' => 'ASC',
|
||||
];
|
||||
if (!empty(array_filter($field_settings['handler_settings']['sort']))) {
|
||||
if ($field_settings['handler_settings']['sort']['type'] == "property") {
|
||||
$sort = [
|
||||
'field' => $field_settings['handler_settings']['sort']['property'],
|
||||
'direction' => $field_settings['handler_settings']['sort']['direction'],
|
||||
];
|
||||
}
|
||||
elseif ($field_settings['handler_settings']['sort']['type'] == "field") {
|
||||
$sort = [
|
||||
'field' => $field_settings['handler_settings']['sort']['field'],
|
||||
'direction' => $field_settings['handler_settings']['sort']['direction'],
|
||||
];
|
||||
}
|
||||
}
|
||||
if (empty($field_settings['handler_settings']['target_bundles'])) {
|
||||
$field_settings['handler_settings']['target_bundles'] = NULL;
|
||||
}
|
||||
$field_settings['handler_settings']['sort'] = $sort;
|
||||
$instance_settings['handler_settings'] = $field_settings['handler_settings'];
|
||||
}
|
||||
|
||||
switch ($widget_type) {
|
||||
case 'image_image':
|
||||
$settings = $instance_settings;
|
||||
$settings['default_image'] = array(
|
||||
$settings['default_image'] = [
|
||||
'alt' => '',
|
||||
'title' => '',
|
||||
'width' => NULL,
|
||||
'height' => NULL,
|
||||
'uuid' => '',
|
||||
);
|
||||
];
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -22,7 +22,7 @@ class FieldSettings extends ProcessPluginBase {
|
||||
switch ($row->getSourceProperty('type')) {
|
||||
case 'image':
|
||||
if (!is_array($value['default_image'])) {
|
||||
$value['default_image'] = array('uuid' => '');
|
||||
$value['default_image'] = ['uuid' => ''];
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ class Field extends DrupalSqlBase {
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('content_node_field', 'cnf')
|
||||
->fields('cnf', array(
|
||||
->fields('cnf', [
|
||||
'field_name',
|
||||
'type',
|
||||
'global_settings',
|
||||
@@ -31,7 +31,7 @@ class Field extends DrupalSqlBase {
|
||||
'db_columns',
|
||||
'active',
|
||||
'locked',
|
||||
))
|
||||
])
|
||||
->distinct();
|
||||
// Only import fields which are actually being used.
|
||||
$query->innerJoin('content_node_field_instance', 'cnfi', 'cnfi.field_name = cnf.field_name');
|
||||
@@ -43,7 +43,7 @@ class Field extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'field_name' => $this->t('Field name'),
|
||||
'type' => $this->t('Type (text, integer, ....)'),
|
||||
'widget_type' => $this->t('An instance-specific widget type'),
|
||||
@@ -55,7 +55,7 @@ class Field extends DrupalSqlBase {
|
||||
'db_columns' => $this->t('DB Columns'),
|
||||
'active' => $this->t('Active'),
|
||||
'locked' => $this->t('Locked'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,10 +96,10 @@ class Field extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['field_name'] = array(
|
||||
$ids['field_name'] = [
|
||||
'type' => 'string',
|
||||
'alias' => 'cnf',
|
||||
);
|
||||
];
|
||||
return $ids;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class FieldInstance extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'field_name' => $this->t('The machine name of field.'),
|
||||
'type_name' => $this->t('Content type where this field is in use.'),
|
||||
'weight' => $this->t('Weight.'),
|
||||
@@ -45,7 +45,7 @@ class FieldInstance extends DrupalSqlBase {
|
||||
'widget_module' => $this->t('Module that implements widget.'),
|
||||
'widget_active' => $this->t('Status of widget'),
|
||||
'module' => $this->t('The module that provides the field.'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,15 +66,15 @@ class FieldInstance extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids = array(
|
||||
'field_name' => array(
|
||||
$ids = [
|
||||
'field_name' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'cnfi',
|
||||
),
|
||||
'type_name' => array(
|
||||
],
|
||||
'type_name' => [
|
||||
'type' => 'string',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
return $ids;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,11 +18,9 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function initializeIterator() {
|
||||
$rows = array();
|
||||
$rows = [];
|
||||
$result = $this->prepareQuery()->execute();
|
||||
while ($field_row = $result->fetchAssoc()) {
|
||||
$field_row['display_settings'] = unserialize($field_row['display_settings']);
|
||||
$field_row['widget_settings'] = unserialize($field_row['widget_settings']);
|
||||
$bundle = $field_row['type_name'];
|
||||
$field_name = $field_row['field_name'];
|
||||
|
||||
@@ -34,7 +32,8 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
$rows[$index]['module'] = $field_row['module'];
|
||||
$rows[$index]['weight'] = $field_row['weight'];
|
||||
$rows[$index]['widget_type'] = $field_row['widget_type'];
|
||||
$rows[$index]['widget_settings'] = $field_row['widget_settings'];
|
||||
$rows[$index]['widget_settings'] = unserialize($field_row['widget_settings']);
|
||||
$rows[$index]['display_settings'] = unserialize($field_row['display_settings']);
|
||||
}
|
||||
|
||||
return new \ArrayIterator($rows);
|
||||
@@ -45,7 +44,7 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('content_node_field_instance', 'cnfi')
|
||||
->fields('cnfi', array(
|
||||
->fields('cnfi', [
|
||||
'field_name',
|
||||
'type_name',
|
||||
'weight',
|
||||
@@ -56,11 +55,11 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
'description',
|
||||
'widget_module',
|
||||
'widget_active',
|
||||
))
|
||||
->fields('cnf', array(
|
||||
])
|
||||
->fields('cnf', [
|
||||
'type',
|
||||
'module',
|
||||
));
|
||||
]);
|
||||
$query->join('content_node_field', 'cnf', 'cnfi.field_name = cnf.field_name');
|
||||
$query->orderBy('cnfi.weight');
|
||||
|
||||
@@ -71,7 +70,7 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'field_name' => $this->t('The machine name of field.'),
|
||||
'type_name' => $this->t('Content type where this field is used.'),
|
||||
'weight' => $this->t('Weight.'),
|
||||
@@ -82,7 +81,7 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
'description' => $this->t('A description of field.'),
|
||||
'widget_module' => $this->t('Module that implements widget.'),
|
||||
'widget_active' => $this->t('Status of widget'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,7 +18,7 @@ class FieldInstancePerViewMode extends ViewModeBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function initializeIterator() {
|
||||
$rows = array();
|
||||
$rows = [];
|
||||
$result = $this->prepareQuery()->execute();
|
||||
while ($field_row = $result->fetchAssoc()) {
|
||||
// These are added to every view mode row.
|
||||
@@ -28,7 +28,10 @@ class FieldInstancePerViewMode extends ViewModeBase {
|
||||
$field_name = $field_row['field_name'];
|
||||
|
||||
foreach ($this->getViewModes() as $view_mode) {
|
||||
if (isset($field_row['display_settings'][$view_mode]) && empty($field_row['display_settings'][$view_mode]['exclude'])) {
|
||||
// Append to the return value if the row has display settings for this
|
||||
// view mode and the view mode is neither hidden nor excluded.
|
||||
// @see \Drupal\node\Plugin\migrate\source\d6\ViewMode::initializeIterator()
|
||||
if (isset($field_row['display_settings'][$view_mode]) && $field_row['display_settings'][$view_mode]['format'] != 'hidden' && empty($field_row['display_settings'][$view_mode]['exclude'])) {
|
||||
$index = $view_mode . "." . $bundle . "." . $field_name;
|
||||
$rows[$index]['entity_type'] = 'node';
|
||||
$rows[$index]['view_mode'] = $view_mode;
|
||||
@@ -52,18 +55,18 @@ class FieldInstancePerViewMode extends ViewModeBase {
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('content_node_field_instance', 'cnfi')
|
||||
->fields('cnfi', array(
|
||||
->fields('cnfi', [
|
||||
'field_name',
|
||||
'type_name',
|
||||
'weight',
|
||||
'label',
|
||||
'display_settings',
|
||||
'widget_settings',
|
||||
))
|
||||
->fields('cnf', array(
|
||||
])
|
||||
->fields('cnf', [
|
||||
'type',
|
||||
'module',
|
||||
));
|
||||
]);
|
||||
$query->join('content_node_field', 'cnf', 'cnfi.field_name = cnf.field_name');
|
||||
$query->orderBy('cnfi.weight');
|
||||
|
||||
@@ -74,7 +77,7 @@ class FieldInstancePerViewMode extends ViewModeBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'field_name' => $this->t('The machine name of field.'),
|
||||
'type_name' => $this->t('Content type where this field is used.'),
|
||||
'weight' => $this->t('Weight.'),
|
||||
@@ -85,7 +88,7 @@ class FieldInstancePerViewMode extends ViewModeBase {
|
||||
'description' => $this->t('A description of field.'),
|
||||
'widget_module' => $this->t('Module that implements widget.'),
|
||||
'widget_active' => $this->t('Status of widget'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,7 +21,7 @@ class Field extends DrupalSqlBase {
|
||||
$query = $this->select('field_config', 'fc')
|
||||
->distinct()
|
||||
->fields('fc')
|
||||
->fields('fci', array('entity_type'))
|
||||
->fields('fci', ['entity_type'])
|
||||
->condition('fc.active', 1)
|
||||
->condition('fc.deleted', 0)
|
||||
->condition('fc.storage_active', 1);
|
||||
@@ -34,7 +34,7 @@ class Field extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'field_name' => $this->t('The name of this field.'),
|
||||
'type' => $this->t('The type of this field.'),
|
||||
'module' => $this->t('The module that implements the field type.'),
|
||||
@@ -42,7 +42,7 @@ class Field extends DrupalSqlBase {
|
||||
'locked' => $this->t('Locked'),
|
||||
'cardinality' => $this->t('Cardinality'),
|
||||
'translatable' => $this->t('Translatable'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,16 +59,16 @@ class Field extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return array(
|
||||
'field_name' => array(
|
||||
return [
|
||||
'field_name' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'fc',
|
||||
),
|
||||
'entity_type' => array(
|
||||
],
|
||||
'entity_type' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'fci',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,9 +25,10 @@ class FieldInstance extends DrupalSqlBase {
|
||||
->condition('fc.active', 1)
|
||||
->condition('fc.deleted', 0)
|
||||
->condition('fc.storage_active', 1)
|
||||
->fields('fc', array('type'));
|
||||
->fields('fc', ['type']);
|
||||
|
||||
$query->innerJoin('field_config', 'fc', 'fci.field_id = fc.id');
|
||||
$query->addField('fc', 'data', 'field_data');
|
||||
|
||||
// Optionally filter by entity type and bundle.
|
||||
if (isset($this->configuration['entity_type'])) {
|
||||
@@ -45,7 +46,7 @@ class FieldInstance extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'field_name' => $this->t('The machine name of field.'),
|
||||
'entity_type' => $this->t('The entity type.'),
|
||||
'bundle' => $this->t('The entity bundle.'),
|
||||
@@ -53,7 +54,8 @@ class FieldInstance extends DrupalSqlBase {
|
||||
'instance_settings' => $this->t('Field instance settings.'),
|
||||
'widget_settings' => $this->t('Widget settings.'),
|
||||
'display_settings' => $this->t('Display settings.'),
|
||||
);
|
||||
'field_settings' => $this->t('Field settings.'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,7 +68,7 @@ class FieldInstance extends DrupalSqlBase {
|
||||
$row->setSourceProperty('description', $data['description']);
|
||||
$row->setSourceProperty('required', $data['required']);
|
||||
|
||||
$default_value = !empty($data['default_value']) ? $data['default_value'] : array();
|
||||
$default_value = !empty($data['default_value']) ? $data['default_value'] : [];
|
||||
if ($data['widget']['type'] == 'email_textfield' && $default_value) {
|
||||
$default_value[0]['value'] = $default_value[0]['email'];
|
||||
unset($default_value[0]['email']);
|
||||
@@ -81,6 +83,28 @@ class FieldInstance extends DrupalSqlBase {
|
||||
// This is for parity with the d6_field_instance plugin.
|
||||
$row->setSourceProperty('widget_type', $data['widget']['type']);
|
||||
|
||||
$field_data = unserialize($row->getSourceProperty('field_data'));
|
||||
$row->setSourceProperty('field_settings', $field_data['settings']);
|
||||
|
||||
$translatable = FALSE;
|
||||
if ($row->getSourceProperty('entity_type') == 'node') {
|
||||
// language_content_type_[bundle] may be
|
||||
// - 0: no language support
|
||||
// - 1: language assignment support
|
||||
// - 2: node translation support
|
||||
// - 4: entity translation support
|
||||
if ($this->variableGet('language_content_type_' . $row->getSourceProperty('bundle'), 0) == 2) {
|
||||
$translatable = TRUE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// This is not a node entity. Get the translatable value from the source
|
||||
// field_config table.
|
||||
$data = unserialize($row->getSourceProperty('field_data'));
|
||||
$translatable = $data['translatable'];
|
||||
}
|
||||
$row->setSourceProperty('translatable', $translatable);
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
@@ -88,20 +112,20 @@ class FieldInstance extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return array(
|
||||
'entity_type' => array(
|
||||
return [
|
||||
'entity_type' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'fci',
|
||||
),
|
||||
'bundle' => array(
|
||||
],
|
||||
'bundle' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'fci',
|
||||
),
|
||||
'field_name' => array(
|
||||
],
|
||||
'field_name' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'fci',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,16 +19,16 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('field_config_instance', 'fci')
|
||||
->fields('fci', array(
|
||||
->fields('fci', [
|
||||
'field_name',
|
||||
'bundle',
|
||||
'data',
|
||||
'entity_type'
|
||||
))
|
||||
->fields('fc', array(
|
||||
])
|
||||
->fields('fc', [
|
||||
'type',
|
||||
'module',
|
||||
));
|
||||
]);
|
||||
$query->join('field_config', 'fc', 'fci.field_id = fc.id');
|
||||
return $query;
|
||||
}
|
||||
@@ -47,27 +47,27 @@ class FieldInstancePerFormDisplay extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'field_name' => $this->t('The machine name of field.'),
|
||||
'bundle' => $this->t('Content type where this field is used.'),
|
||||
'data' => $this->t('Field configuration data.'),
|
||||
'entity_type' => $this->t('The entity type.'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return array(
|
||||
'bundle' => array(
|
||||
return [
|
||||
'bundle' => [
|
||||
'type' => 'string',
|
||||
),
|
||||
'field_name' => array(
|
||||
],
|
||||
'field_name' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'fci',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,14 +18,21 @@ class FieldInstancePerViewMode extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function initializeIterator() {
|
||||
$rows = array();
|
||||
$rows = [];
|
||||
$result = $this->prepareQuery()->execute();
|
||||
foreach ($result as $field_instance) {
|
||||
$data = unserialize($field_instance['data']);
|
||||
// We don't need to include the serialized data in the returned rows.
|
||||
unset($field_instance['data']);
|
||||
|
||||
foreach ($data['display'] as $view_mode => $info) {
|
||||
$rows[] = array_merge($field_instance, $info, array('view_mode' => $view_mode));
|
||||
// Rename type to formatter_type in the info array.
|
||||
$info['formatter_type'] = $info['type'];
|
||||
unset($info['type']);
|
||||
|
||||
$rows[] = array_merge($field_instance, $info, [
|
||||
'view_mode' => $view_mode,
|
||||
]);
|
||||
}
|
||||
}
|
||||
return new \ArrayIterator($rows);
|
||||
@@ -35,45 +42,49 @@ class FieldInstancePerViewMode extends DrupalSqlBase {
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
return $this->select('field_config_instance', 'fci')
|
||||
->fields('fci', array('entity_type', 'bundle', 'field_name', 'data'));
|
||||
$query = $this->select('field_config_instance', 'fci')
|
||||
->fields('fci', ['entity_type', 'bundle', 'field_name', 'data'])
|
||||
->fields('fc', ['type']);
|
||||
$query->join('field_config', 'fc', 'fc.field_name = fci.field_name');
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return array(
|
||||
return [
|
||||
'entity_type' => $this->t('The entity type ID.'),
|
||||
'bundle' => $this->t('The bundle ID.'),
|
||||
'field_name' => $this->t('Machine name of the field.'),
|
||||
'view_mode' => $this->t('The original machine name of the view mode.'),
|
||||
'label' => $this->t('The display label of the field.'),
|
||||
'type' => $this->t('The formatter ID.'),
|
||||
'type' => $this->t('The field ID.'),
|
||||
'formatter_type' => $this->t('The formatter ID.'),
|
||||
'settings' => $this->t('Array of formatter-specific settings.'),
|
||||
'module' => $this->t('The module providing the formatter.'),
|
||||
'weight' => $this->t('Display weight of the field.'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return array(
|
||||
'entity_type' => array(
|
||||
return [
|
||||
'entity_type' => [
|
||||
'type' => 'string',
|
||||
),
|
||||
'bundle' => array(
|
||||
],
|
||||
'bundle' => [
|
||||
'type' => 'string',
|
||||
),
|
||||
'view_mode' => array(
|
||||
],
|
||||
'view_mode' => [
|
||||
'type' => 'string',
|
||||
),
|
||||
'field_name' => array(
|
||||
],
|
||||
'field_name' => [
|
||||
'type' => 'string',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Drupal\field\Tests\Boolean;
|
||||
|
||||
use Drupal\Component\Utility\Unicode;
|
||||
use Drupal\entity_test\Entity\EntityTest;
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
use Drupal\field\Entity\FieldConfig;
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
@@ -19,7 +20,12 @@ class BooleanFieldTest extends WebTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('entity_test', 'field_ui', 'options');
|
||||
public static $modules = [
|
||||
'entity_test',
|
||||
'field_ui',
|
||||
'options',
|
||||
'field_test_boolean_access_denied',
|
||||
];
|
||||
|
||||
/**
|
||||
* A field to use in this test class.
|
||||
@@ -41,101 +47,102 @@ class BooleanFieldTest extends WebTestBase {
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->drupalLogin($this->drupalCreateUser(array(
|
||||
$this->drupalLogin($this->drupalCreateUser([
|
||||
'view test entity',
|
||||
'administer entity_test content',
|
||||
'administer entity_test form display',
|
||||
'administer entity_test fields',
|
||||
)));
|
||||
]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests boolean field.
|
||||
*/
|
||||
function testBooleanField() {
|
||||
public function testBooleanField() {
|
||||
$on = $this->randomMachineName();
|
||||
$off = $this->randomMachineName();
|
||||
$label = $this->randomMachineName();
|
||||
|
||||
// Create a field with settings to validate.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
$this->fieldStorage = FieldStorageConfig::create(array(
|
||||
$this->fieldStorage = FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'boolean',
|
||||
));
|
||||
]);
|
||||
$this->fieldStorage->save();
|
||||
$this->field = FieldConfig::create(array(
|
||||
$this->field = FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'bundle' => 'entity_test',
|
||||
'label' => $label,
|
||||
'required' => TRUE,
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'on_label' => $on,
|
||||
'off_label' => $off,
|
||||
),
|
||||
));
|
||||
],
|
||||
]);
|
||||
$this->field->save();
|
||||
|
||||
// Create a form display for the default form mode.
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'boolean_checkbox',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
// Create a display for the full view mode.
|
||||
entity_get_display('entity_test', 'entity_test', 'full')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'boolean',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display creation form.
|
||||
$this->drupalGet('entity_test/add');
|
||||
$this->assertFieldByName("{$field_name}[value]", '', 'Widget found.');
|
||||
$this->assertRaw($on);
|
||||
$this->assertText($this->field->label(), 'Uses field label by default.');
|
||||
$this->assertNoRaw($on, 'Does not use the "On" label.');
|
||||
|
||||
// Submit and ensure it is accepted.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[value]" => 1,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]));
|
||||
|
||||
// Verify that boolean value is displayed.
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$entity = EntityTest::load($id);
|
||||
$display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
|
||||
$content = $display->build($entity);
|
||||
$this->setRawContent(\Drupal::service('renderer')->renderRoot($content));
|
||||
$this->assertRaw('<div class="field__item">' . $on . '</div>');
|
||||
|
||||
// Test if we can change the on label.
|
||||
$on = $this->randomMachineName();
|
||||
$edit = array(
|
||||
'settings[on_label]' => $on,
|
||||
);
|
||||
$this->drupalPostForm('entity_test/structure/entity_test/fields/entity_test.entity_test.' . $field_name, $edit, t('Save settings'));
|
||||
// Check if we see the updated labels in the creation form.
|
||||
$this->drupalGet('entity_test/add');
|
||||
$this->assertRaw($on);
|
||||
|
||||
// Test the display_label option.
|
||||
// Test with "On" label option.
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'boolean_checkbox',
|
||||
'settings' => array(
|
||||
'display_label' => TRUE,
|
||||
)
|
||||
))
|
||||
'settings' => [
|
||||
'display_label' => FALSE,
|
||||
]
|
||||
])
|
||||
->save();
|
||||
|
||||
$this->drupalGet('entity_test/add');
|
||||
$this->assertFieldByName("{$field_name}[value]", '', 'Widget found.');
|
||||
$this->assertNoRaw($on);
|
||||
$this->assertText($this->field->label());
|
||||
$this->assertRaw($on);
|
||||
$this->assertNoText($this->field->label());
|
||||
|
||||
// Test if we can change the on label.
|
||||
$on = $this->randomMachineName();
|
||||
$edit = [
|
||||
'settings[on_label]' => $on,
|
||||
];
|
||||
$this->drupalPostForm('entity_test/structure/entity_test/fields/entity_test.entity_test.' . $field_name, $edit, t('Save settings'));
|
||||
// Check if we see the updated labels in the creation form.
|
||||
$this->drupalGet('entity_test/add');
|
||||
$this->assertRaw($on);
|
||||
|
||||
// Go to the form display page and check if the default settings works as
|
||||
// expected.
|
||||
@@ -143,7 +150,7 @@ class BooleanFieldTest extends WebTestBase {
|
||||
$this->drupalGet($fieldEditUrl);
|
||||
|
||||
// Click on the widget settings button to open the widget settings form.
|
||||
$this->drupalPostAjaxForm(NULL, array(), $field_name . "_settings_edit");
|
||||
$this->drupalPostAjaxForm(NULL, [], $field_name . "_settings_edit");
|
||||
|
||||
$this->assertText(
|
||||
'Use field label instead of the "On label" as label',
|
||||
@@ -151,7 +158,7 @@ class BooleanFieldTest extends WebTestBase {
|
||||
);
|
||||
|
||||
// Enable setting.
|
||||
$edit = array('fields[' . $field_name . '][settings_edit_form][settings][display_label]' => 1);
|
||||
$edit = ['fields[' . $field_name . '][settings_edit_form][settings][display_label]' => 1];
|
||||
$this->drupalPostAjaxForm(NULL, $edit, $field_name . "_plugin_settings_update");
|
||||
$this->drupalPostForm(NULL, NULL, 'Save');
|
||||
|
||||
@@ -160,7 +167,7 @@ class BooleanFieldTest extends WebTestBase {
|
||||
$this->drupalGet($fieldEditUrl);
|
||||
$this->assertText('Use field label: Yes', 'Checking the display settings checkbox updated the value.');
|
||||
|
||||
$this->drupalPostAjaxForm(NULL, array(), $field_name . "_settings_edit");
|
||||
$this->drupalPostAjaxForm(NULL, [], $field_name . "_settings_edit");
|
||||
$this->assertText(
|
||||
'Use field label instead of the "On label" as label',
|
||||
t('Display setting checkbox is available')
|
||||
@@ -177,4 +184,66 @@ class BooleanFieldTest extends WebTestBase {
|
||||
$this->assertFieldById('edit-settings-off-label', $off);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test field access.
|
||||
*/
|
||||
public function testFormAccess() {
|
||||
$on = 'boolean_on';
|
||||
$off = 'boolean_off';
|
||||
$label = 'boolean_label';
|
||||
$field_name = 'boolean_name';
|
||||
$this->fieldStorage = FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'boolean',
|
||||
]);
|
||||
$this->fieldStorage->save();
|
||||
$this->field = FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'bundle' => 'entity_test',
|
||||
'label' => $label,
|
||||
'settings' => [
|
||||
'on_label' => $on,
|
||||
'off_label' => $off,
|
||||
],
|
||||
]);
|
||||
$this->field->save();
|
||||
|
||||
// Create a form display for the default form mode.
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, [
|
||||
'type' => 'boolean_checkbox',
|
||||
])
|
||||
->save();
|
||||
|
||||
// Create a display for the full view mode.
|
||||
entity_get_display('entity_test', 'entity_test', 'full')
|
||||
->setComponent($field_name, [
|
||||
'type' => 'boolean',
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display creation form.
|
||||
$this->drupalGet('entity_test/add');
|
||||
$this->assertFieldByName("{$field_name}[value]");
|
||||
|
||||
// Should be posted OK.
|
||||
$this->drupalPostForm(NULL, [], t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]));
|
||||
|
||||
// Tell the test module to disable access to the field.
|
||||
\Drupal::state()->set('field.test_boolean_field_access_field', $field_name);
|
||||
$this->drupalGet('entity_test/add');
|
||||
// Field should not be there anymore.
|
||||
$this->assertNoFieldByName("{$field_name}[value]");
|
||||
// Should still be able to post the form.
|
||||
$this->drupalPostForm(NULL, [], t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -44,10 +44,10 @@ class BooleanFormatterSettingsTest extends WebTestBase {
|
||||
|
||||
// Create a content type. Use Node because it has Field UI pages that work.
|
||||
$type_name = Unicode::strtolower($this->randomMachineName(8)) . '_test';
|
||||
$type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name));
|
||||
$type = $this->drupalCreateContentType(['name' => $type_name, 'type' => $type_name]);
|
||||
$this->bundle = $type->id();
|
||||
|
||||
$admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer node display', 'bypass node access', 'administer nodes'));
|
||||
$admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node display', 'bypass node access', 'administer nodes']);
|
||||
$this->drupalLogin($admin_user);
|
||||
|
||||
$this->fieldName = Unicode::strtolower($this->randomMachineName(8));
|
||||
@@ -77,18 +77,18 @@ class BooleanFormatterSettingsTest extends WebTestBase {
|
||||
/**
|
||||
* Tests the formatter settings page for the Boolean formatter.
|
||||
*/
|
||||
function testBooleanFormatterSettings() {
|
||||
public function testBooleanFormatterSettings() {
|
||||
// List the options we expect to see on the settings form. Omit the one
|
||||
// with the Unicode check/x characters, which does not appear to work
|
||||
// well in WebTestBase.
|
||||
$options = array(
|
||||
$options = [
|
||||
'Yes / No',
|
||||
'True / False',
|
||||
'On / Off',
|
||||
'Enabled / Disabled',
|
||||
'1 / 0',
|
||||
'Custom',
|
||||
);
|
||||
];
|
||||
|
||||
// Define what the "default" option should look like, depending on the
|
||||
// field settings.
|
||||
@@ -96,29 +96,29 @@ class BooleanFormatterSettingsTest extends WebTestBase {
|
||||
|
||||
// For several different values of the field settings, test that the
|
||||
// options, including default, are shown correctly.
|
||||
$settings = array(
|
||||
array('Yes', 'No'),
|
||||
array('On', 'Off'),
|
||||
array('TRUE', 'FALSE'),
|
||||
);
|
||||
$settings = [
|
||||
['Yes', 'No'],
|
||||
['On', 'Off'],
|
||||
['TRUE', 'FALSE'],
|
||||
];
|
||||
|
||||
foreach ($settings as $values) {
|
||||
// Set up the field settings.
|
||||
$this->drupalGet('admin/structure/types/manage/' . $this->bundle . '/fields/node.' . $this->bundle . '.' . $this->fieldName);
|
||||
$this->drupalPostForm(NULL, array(
|
||||
$this->drupalPostForm(NULL, [
|
||||
'settings[on_label]' => $values[0],
|
||||
'settings[off_label]' => $values[1],
|
||||
), 'Save settings');
|
||||
], 'Save settings');
|
||||
|
||||
// Open the Manage Display page and trigger the field settings form.
|
||||
$this->drupalGet('admin/structure/types/manage/' . $this->bundle . '/display');
|
||||
$this->drupalPostAjaxForm(NULL, array(), $this->fieldName . '_settings_edit');
|
||||
$this->drupalPostAjaxForm(NULL, [], $this->fieldName . '_settings_edit');
|
||||
|
||||
// Test that the settings options are present in the correct format.
|
||||
foreach ($options as $string) {
|
||||
$this->assertText($string);
|
||||
}
|
||||
$this->assertText(SafeMarkup::format($default, array('@on' => $values[0], '@off' => $values[1])));
|
||||
$this->assertText(SafeMarkup::format($default, ['@on' => $values[0], '@off' => $values[1]]));
|
||||
}
|
||||
|
||||
foreach ($settings as $values) {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Drupal\field\Tests\Email;
|
||||
|
||||
use Drupal\Component\Utility\Unicode;
|
||||
use Drupal\entity_test\Entity\EntityTest;
|
||||
use Drupal\field\Entity\FieldConfig;
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
@@ -19,7 +20,7 @@ class EmailFieldTest extends WebTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('node', 'entity_test', 'field_ui');
|
||||
public static $modules = ['node', 'entity_test', 'field_ui'];
|
||||
|
||||
/**
|
||||
* A field storage to use in this test class.
|
||||
@@ -38,24 +39,24 @@ class EmailFieldTest extends WebTestBase {
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->drupalLogin($this->drupalCreateUser(array(
|
||||
$this->drupalLogin($this->drupalCreateUser([
|
||||
'view test entity',
|
||||
'administer entity_test content',
|
||||
'administer content types',
|
||||
)));
|
||||
]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests email field.
|
||||
*/
|
||||
function testEmailField() {
|
||||
public function testEmailField() {
|
||||
// Create a field with settings to validate.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
$this->fieldStorage = FieldStorageConfig::create(array(
|
||||
$this->fieldStorage = FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'email',
|
||||
));
|
||||
]);
|
||||
$this->fieldStorage->save();
|
||||
$this->field = FieldConfig::create([
|
||||
'field_storage' => $this->fieldStorage,
|
||||
@@ -65,18 +66,18 @@ class EmailFieldTest extends WebTestBase {
|
||||
|
||||
// Create a form display for the default form mode.
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'email_default',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => 'example@example.com',
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
// Create a display for the full view mode.
|
||||
entity_get_display('entity_test', 'entity_test', 'full')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'email_mailto',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display creation form.
|
||||
@@ -86,17 +87,17 @@ class EmailFieldTest extends WebTestBase {
|
||||
|
||||
// Submit a valid email address and ensure it is accepted.
|
||||
$value = 'test@example.com';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]));
|
||||
$this->assertRaw($value);
|
||||
|
||||
// Verify that a mailto link is displayed.
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$entity = EntityTest::load($id);
|
||||
$display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
|
||||
$content = $display->build($entity);
|
||||
$this->setRawContent(\Drupal::service('renderer')->renderRoot($content));
|
||||
|
||||
@@ -46,18 +46,18 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
|
||||
// Create a content type, with underscores.
|
||||
$type_name = strtolower($this->randomMachineName(8)) . '_test';
|
||||
$type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name));
|
||||
$type = $this->drupalCreateContentType(['name' => $type_name, 'type' => $type_name]);
|
||||
$this->type = $type->id();
|
||||
|
||||
// Create test user.
|
||||
$admin_user = $this->drupalCreateUser(array(
|
||||
$admin_user = $this->drupalCreateUser([
|
||||
'access content',
|
||||
'administer node fields',
|
||||
'administer node display',
|
||||
'administer views',
|
||||
'create ' . $type_name . ' content',
|
||||
'edit own ' . $type_name . ' content',
|
||||
));
|
||||
]);
|
||||
$this->drupalLogin($admin_user);
|
||||
}
|
||||
|
||||
@@ -74,11 +74,11 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
$this->assertOption('edit-new-storage-type', 'field_ui:entity_reference:node');
|
||||
$this->assertOption('edit-new-storage-type', 'field_ui:entity_reference:user');
|
||||
|
||||
$this->drupalPostForm(NULL, array(
|
||||
$this->drupalPostForm(NULL, [
|
||||
'label' => 'Test label',
|
||||
'field_name' => 'test',
|
||||
'new_storage_type' => 'entity_reference',
|
||||
), t('Save and continue'));
|
||||
], t('Save and continue'));
|
||||
|
||||
// Node should be selected by default.
|
||||
$this->assertFieldByName('settings[target_type]', 'node');
|
||||
@@ -87,14 +87,14 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
$this->assertFieldSelectOptions('settings[target_type]', array_keys(\Drupal::entityManager()->getDefinitions()));
|
||||
|
||||
// Second step: 'Field settings' form.
|
||||
$this->drupalPostForm(NULL, array(), t('Save field settings'));
|
||||
$this->drupalPostForm(NULL, [], t('Save field settings'));
|
||||
|
||||
// The base handler should be selected by default.
|
||||
$this->assertFieldByName('settings[handler]', 'default:node');
|
||||
|
||||
// The base handler settings should be displayed.
|
||||
$entity_type_id = 'node';
|
||||
$bundles = entity_get_bundles($entity_type_id);
|
||||
$bundles = $this->container->get('entity_type.bundle.info')->getBundleInfo($entity_type_id);
|
||||
foreach ($bundles as $bundle_name => $bundle_info) {
|
||||
$this->assertFieldByName('settings[handler_settings][target_bundles][' . $bundle_name . ']');
|
||||
}
|
||||
@@ -106,7 +106,7 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
$this->assertFieldByName('settings[handler_settings][sort][field]', '_none');
|
||||
$this->assertNoFieldByName('settings[handler_settings][sort][direction]');
|
||||
// Option 1: sort by field.
|
||||
$this->drupalPostAjaxForm(NULL, array('settings[handler_settings][sort][field]' => 'nid'), 'settings[handler_settings][sort][field]');
|
||||
$this->drupalPostAjaxForm(NULL, ['settings[handler_settings][sort][field]' => 'nid'], 'settings[handler_settings][sort][field]');
|
||||
$this->assertFieldByName('settings[handler_settings][sort][direction]', 'ASC');
|
||||
|
||||
// Test that a non-translatable base field is a sort option.
|
||||
@@ -117,14 +117,14 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
$this->assertFieldByXPath("//select[@name='settings[handler_settings][sort][field]']/option[@value='body.value']");
|
||||
|
||||
// Set back to no sort.
|
||||
$this->drupalPostAjaxForm(NULL, array('settings[handler_settings][sort][field]' => '_none'), 'settings[handler_settings][sort][field]');
|
||||
$this->drupalPostAjaxForm(NULL, ['settings[handler_settings][sort][field]' => '_none'], 'settings[handler_settings][sort][field]');
|
||||
$this->assertNoFieldByName('settings[handler_settings][sort][direction]');
|
||||
|
||||
// Third step: confirm.
|
||||
$this->drupalPostForm(NULL, array(
|
||||
$this->drupalPostForm(NULL, [
|
||||
'required' => '1',
|
||||
'settings[handler_settings][target_bundles][' . key($bundles) . ']' => key($bundles),
|
||||
), t('Save settings'));
|
||||
], t('Save settings'));
|
||||
|
||||
// Check that the field appears in the overview form.
|
||||
$this->assertFieldByXPath('//table[@id="field-overview"]//tr[@id="field-test"]/td[1]', 'Test label', 'Field was created and appears in the overview page.');
|
||||
@@ -133,14 +133,14 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
// field is required.
|
||||
// The first 'Edit' link is for the Body field.
|
||||
$this->clickLink(t('Edit'), 1);
|
||||
$this->drupalPostForm(NULL, array(), t('Save settings'));
|
||||
$this->drupalPostForm(NULL, [], t('Save settings'));
|
||||
|
||||
// Switch the target type to 'taxonomy_term' and check that the settings
|
||||
// specific to its selection handler are displayed.
|
||||
$field_name = 'node.' . $this->type . '.field_test';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[target_type]' => 'taxonomy_term',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm($bundle_path . '/fields/' . $field_name . '/storage', $edit, t('Save field settings'));
|
||||
$this->drupalGet($bundle_path . '/fields/' . $field_name);
|
||||
$this->assertFieldByName('settings[handler_settings][auto_create]');
|
||||
@@ -148,106 +148,115 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
// Switch the target type to 'user' and check that the settings specific to
|
||||
// its selection handler are displayed.
|
||||
$field_name = 'node.' . $this->type . '.field_test';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[target_type]' => 'user',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm($bundle_path . '/fields/' . $field_name . '/storage', $edit, t('Save field settings'));
|
||||
$this->drupalGet($bundle_path . '/fields/' . $field_name);
|
||||
$this->assertFieldByName('settings[handler_settings][filter][type]', '_none');
|
||||
|
||||
// Switch the target type to 'node'.
|
||||
$field_name = 'node.' . $this->type . '.field_test';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[target_type]' => 'node',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm($bundle_path . '/fields/' . $field_name . '/storage', $edit, t('Save field settings'));
|
||||
|
||||
// Try to select the views handler.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[handler]' => 'views',
|
||||
);
|
||||
];
|
||||
$this->drupalPostAjaxForm($bundle_path . '/fields/' . $field_name, $edit, 'settings[handler]');
|
||||
$this->assertRaw(t('No eligible views were found. <a href=":create">Create a view</a> with an <em>Entity Reference</em> display, or add such a display to an <a href=":existing">existing view</a>.', array(
|
||||
$this->assertRaw(t('No eligible views were found. <a href=":create">Create a view</a> with an <em>Entity Reference</em> display, or add such a display to an <a href=":existing">existing view</a>.', [
|
||||
':create' => \Drupal::url('views_ui.add'),
|
||||
':existing' => \Drupal::url('entity.view.collection'),
|
||||
)));
|
||||
]));
|
||||
$this->drupalPostForm(NULL, $edit, t('Save settings'));
|
||||
// If no eligible view is available we should see a message.
|
||||
$this->assertText('The views entity selection mode requires a view.');
|
||||
|
||||
// Enable the entity_reference_test module which creates an eligible view.
|
||||
$this->container->get('module_installer')->install(array('entity_reference_test'));
|
||||
$this->container->get('module_installer')->install(['entity_reference_test']);
|
||||
$this->resetAll();
|
||||
$this->drupalGet($bundle_path . '/fields/' . $field_name);
|
||||
$this->drupalPostAjaxForm($bundle_path . '/fields/' . $field_name, $edit, 'settings[handler]');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[handler_settings][view][view_and_display]' => 'test_entity_reference:entity_reference_1',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save settings'));
|
||||
$this->assertResponse(200);
|
||||
|
||||
// Switch the target type to 'entity_test'.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[target_type]' => 'entity_test',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm($bundle_path . '/fields/' . $field_name . '/storage', $edit, t('Save field settings'));
|
||||
$this->drupalGet($bundle_path . '/fields/' . $field_name);
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[handler]' => 'views',
|
||||
);
|
||||
];
|
||||
$this->drupalPostAjaxForm($bundle_path . '/fields/' . $field_name, $edit, 'settings[handler]');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'required' => FALSE,
|
||||
'settings[handler_settings][view][view_and_display]' => 'test_entity_reference_entity_test:entity_reference_1',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save settings'));
|
||||
$this->assertResponse(200);
|
||||
|
||||
// Create a new view and display it as a entity reference.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'id' => 'node_test_view',
|
||||
'label' => 'Node Test View',
|
||||
'show[wizard_key]' => 'node',
|
||||
'show[sort]' => 'none',
|
||||
'page[create]' => 1,
|
||||
'page[title]' => 'Test Node View',
|
||||
'page[path]' => 'test/node/view',
|
||||
'page[style][style_plugin]' => 'default',
|
||||
'page[style][row_plugin]' => 'fields',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('admin/structure/views/add', $edit, t('Save and edit'));
|
||||
$this->drupalPostForm(NULL, array(), t('Duplicate as Entity Reference'));
|
||||
$this->drupalPostForm(NULL, [], t('Duplicate as Entity Reference'));
|
||||
$this->clickLink(t('Settings'));
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'style_options[search_fields][title]' => 'title',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Apply'));
|
||||
$this->drupalPostForm('admin/structure/views/view/node_test_view/edit/entity_reference_1', array(), t('Save'));
|
||||
|
||||
// Set sort to NID ascending.
|
||||
$edit = [
|
||||
'name[node_field_data.nid]' => 1,
|
||||
];
|
||||
$this->drupalPostForm('admin/structure/views/nojs/add-handler/node_test_view/entity_reference_1/sort', $edit, t('Add and configure sort criteria'));
|
||||
$this->drupalPostForm(NULL, NULL, t('Apply'));
|
||||
|
||||
$this->drupalPostForm('admin/structure/views/view/node_test_view/edit/entity_reference_1', [], t('Save'));
|
||||
$this->clickLink(t('Settings'));
|
||||
|
||||
// Create a test entity reference field.
|
||||
$field_name = 'test_entity_ref_field';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'new_storage_type' => 'field_ui:entity_reference:node',
|
||||
'label' => 'Test Entity Reference Field',
|
||||
'field_name' => $field_name,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm($bundle_path . '/fields/add-field', $edit, t('Save and continue'));
|
||||
|
||||
// Set to unlimited.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save field settings'));
|
||||
|
||||
// Add the view to the test field.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[handler]' => 'views',
|
||||
);
|
||||
];
|
||||
$this->drupalPostAjaxForm(NULL, $edit, 'settings[handler]');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'required' => FALSE,
|
||||
'settings[handler_settings][view][view_and_display]' => 'node_test_view:entity_reference_1',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save settings'));
|
||||
|
||||
// Create nodes.
|
||||
@@ -266,34 +275,34 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
$this->drupalGet('node/add/' . $this->type);
|
||||
$result = $this->xpath('//input[@name="field_test_entity_ref_field[0][target_id]" and contains(@data-autocomplete-path, "/entity_reference_autocomplete/node/views/")]');
|
||||
$target_url = $this->getAbsoluteUrl($result[0]['data-autocomplete-path']);
|
||||
$this->drupalGet($target_url, array('query' => array('q' => 'Foo')));
|
||||
$this->drupalGet($target_url, ['query' => ['q' => 'Foo']]);
|
||||
$this->assertRaw($node1->getTitle() . ' (' . $node1->id() . ')');
|
||||
$this->assertRaw($node2->getTitle() . ' (' . $node2->id() . ')');
|
||||
|
||||
// Try to add a new node, fill the entity reference field and submit the
|
||||
// form.
|
||||
$this->drupalPostForm('node/add/' . $this->type, [], t('Add another item'));
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'title[0][value]' => 'Example',
|
||||
'field_test_entity_ref_field[0][target_id]' => 'Foo Node (' . $node1->id() . ')',
|
||||
'field_test_entity_ref_field[1][target_id]' => 'Foo Node (' . $node2->id() . ')',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertResponse(200);
|
||||
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'title[0][value]' => 'Example',
|
||||
'field_test_entity_ref_field[0][target_id]' => 'Test'
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('node/add/' . $this->type, $edit, t('Save'));
|
||||
|
||||
// Assert that entity reference autocomplete field is validated.
|
||||
$this->assertText(t('There are no entities matching "@entity"', ['@entity' => 'Test']));
|
||||
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'title[0][value]' => 'Test',
|
||||
'field_test_entity_ref_field[0][target_id]' => $node1->getTitle()
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('node/add/' . $this->type, $edit, t('Save'));
|
||||
|
||||
// Assert the results multiple times to avoid sorting problem of nodes with
|
||||
@@ -301,16 +310,17 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
$this->assertText(t('Multiple entities match this reference;'));
|
||||
$this->assertText(t("@node1", ['@node1' => $node1->getTitle() . ' (' . $node1->id() . ')']));
|
||||
$this->assertText(t("@node2", ['@node2' => $node2->getTitle() . ' (' . $node2->id() . ')']));
|
||||
$this->assertText(t('Specify the one you want by appending the id in parentheses, like "@example".', ['@example' => $node2->getTitle() . ' (' . $node2->id() . ')']));
|
||||
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'title[0][value]' => 'Test',
|
||||
'field_test_entity_ref_field[0][target_id]' => $node1->getTitle() . ' (' . $node1->id() . ')'
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('node/add/' . $this->type, $edit, t('Save'));
|
||||
$this->assertLink($node1->getTitle());
|
||||
|
||||
// Tests adding default values to autocomplete widgets.
|
||||
Vocabulary::create(array('vid' => 'tags', 'name' => 'tags'))->save();
|
||||
Vocabulary::create(['vid' => 'tags', 'name' => 'tags'])->save();
|
||||
$taxonomy_term_field_name = $this->createEntityReferenceField('taxonomy_term', ['tags']);
|
||||
$field_path = 'node.' . $this->type . '.field_' . $taxonomy_term_field_name;
|
||||
$this->drupalGet($bundle_path . '/fields/' . $field_path . '/storage');
|
||||
@@ -341,7 +351,7 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
*/
|
||||
public function testAvailableFormatters() {
|
||||
// Create a new vocabulary.
|
||||
Vocabulary::create(array('vid' => 'tags', 'name' => 'tags'))->save();
|
||||
Vocabulary::create(['vid' => 'tags', 'name' => 'tags'])->save();
|
||||
|
||||
// Create entity reference field with taxonomy term as a target.
|
||||
$taxonomy_term_field_name = $this->createEntityReferenceField('taxonomy_term', ['tags']);
|
||||
@@ -360,42 +370,38 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
|
||||
// Check for Taxonomy Term select box values.
|
||||
// Test if Taxonomy Term Entity Reference Field has the correct formatters.
|
||||
$this->assertFieldSelectOptions('fields[field_' . $taxonomy_term_field_name . '][type]', array(
|
||||
$this->assertFieldSelectOptions('fields[field_' . $taxonomy_term_field_name . '][type]', [
|
||||
'entity_reference_label',
|
||||
'entity_reference_entity_id',
|
||||
'entity_reference_rss_category',
|
||||
'entity_reference_entity_view',
|
||||
'hidden',
|
||||
));
|
||||
]);
|
||||
|
||||
// Test if User Reference Field has the correct formatters.
|
||||
// Author should be available for this field.
|
||||
// RSS Category should not be available for this field.
|
||||
$this->assertFieldSelectOptions('fields[field_' . $user_field_name . '][type]', array(
|
||||
$this->assertFieldSelectOptions('fields[field_' . $user_field_name . '][type]', [
|
||||
'author',
|
||||
'entity_reference_entity_id',
|
||||
'entity_reference_entity_view',
|
||||
'entity_reference_label',
|
||||
'hidden',
|
||||
));
|
||||
]);
|
||||
|
||||
// Test if Node Entity Reference Field has the correct formatters.
|
||||
// RSS Category should not be available for this field.
|
||||
$this->assertFieldSelectOptions('fields[field_' . $node_field_name . '][type]', array(
|
||||
$this->assertFieldSelectOptions('fields[field_' . $node_field_name . '][type]', [
|
||||
'entity_reference_label',
|
||||
'entity_reference_entity_id',
|
||||
'entity_reference_entity_view',
|
||||
'hidden',
|
||||
));
|
||||
]);
|
||||
|
||||
// Test if Date Format Reference Field has the correct formatters.
|
||||
// RSS Category & Entity View should not be available for this field.
|
||||
// This could be any field without a ViewBuilder.
|
||||
$this->assertFieldSelectOptions('fields[field_' . $date_format_field_name . '][type]', array(
|
||||
$this->assertFieldSelectOptions('fields[field_' . $date_format_field_name . '][type]', [
|
||||
'entity_reference_label',
|
||||
'entity_reference_entity_id',
|
||||
'hidden',
|
||||
));
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -477,7 +483,7 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
// Generate a random field name, must be only lowercase characters.
|
||||
$field_name = strtolower($this->randomMachineName());
|
||||
|
||||
$storage_edit = $field_edit = array();
|
||||
$storage_edit = $field_edit = [];
|
||||
$storage_edit['settings[target_type]'] = $target_type;
|
||||
foreach ($bundles as $bundle) {
|
||||
$field_edit['settings[handler_settings][target_bundles][' . $bundle . ']'] = TRUE;
|
||||
@@ -501,7 +507,7 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
* TRUE if the assertion succeeded, FALSE otherwise.
|
||||
*/
|
||||
protected function assertFieldSelectOptions($name, array $expected_options) {
|
||||
$xpath = $this->buildXPathQuery('//select[@name=:name]', array(':name' => $name));
|
||||
$xpath = $this->buildXPathQuery('//select[@name=:name]', [':name' => $name]);
|
||||
$fields = $this->xpath($xpath);
|
||||
if ($fields) {
|
||||
$field = $fields[0];
|
||||
@@ -527,7 +533,7 @@ class EntityReferenceAdminTest extends WebTestBase {
|
||||
* An array of option values as strings.
|
||||
*/
|
||||
protected function getAllOptionsList(\SimpleXMLElement $element) {
|
||||
$options = array();
|
||||
$options = [];
|
||||
// Add all options items.
|
||||
foreach ($element->option as $option) {
|
||||
$options[] = (string) $option['value'];
|
||||
|
||||
@@ -14,7 +14,7 @@ use Drupal\field\Entity\FieldStorageConfig;
|
||||
*/
|
||||
class EntityReferenceFileUploadTest extends WebTestBase {
|
||||
|
||||
public static $modules = array('entity_reference', 'node', 'file');
|
||||
public static $modules = ['entity_reference', 'node', 'file'];
|
||||
|
||||
/**
|
||||
* The name of a content type that will reference $referencedType.
|
||||
@@ -46,19 +46,19 @@ class EntityReferenceFileUploadTest extends WebTestBase {
|
||||
|
||||
$referenced = $this->drupalCreateContentType();
|
||||
$this->referencedType = $referenced->id();
|
||||
$this->nodeId = $this->drupalCreateNode(array('type' => $referenced->id()))->id();
|
||||
$this->nodeId = $this->drupalCreateNode(['type' => $referenced->id()])->id();
|
||||
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => 'test_field',
|
||||
'entity_type' => 'node',
|
||||
'translatable' => FALSE,
|
||||
'entity_types' => array(),
|
||||
'settings' => array(
|
||||
'entity_types' => [],
|
||||
'settings' => [
|
||||
'target_type' => 'node',
|
||||
),
|
||||
],
|
||||
'type' => 'entity_reference',
|
||||
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
|
||||
))->save();
|
||||
])->save();
|
||||
|
||||
FieldConfig::create([
|
||||
'label' => 'Entity reference field',
|
||||
@@ -66,25 +66,25 @@ class EntityReferenceFileUploadTest extends WebTestBase {
|
||||
'entity_type' => 'node',
|
||||
'required' => TRUE,
|
||||
'bundle' => $referencing->id(),
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'handler' => 'default',
|
||||
'handler_settings' => array(
|
||||
'handler_settings' => [
|
||||
// Reference a single vocabulary.
|
||||
'target_bundles' => array(
|
||||
'target_bundles' => [
|
||||
$referenced->id(),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
],
|
||||
])->save();
|
||||
|
||||
|
||||
// Create a file field.
|
||||
$file_field_name = 'file_field';
|
||||
$field_storage = FieldStorageConfig::create(array(
|
||||
$field_storage = FieldStorageConfig::create([
|
||||
'field_name' => $file_field_name,
|
||||
'entity_type' => 'node',
|
||||
'type' => 'file'
|
||||
));
|
||||
]);
|
||||
$field_storage->save();
|
||||
FieldConfig::create([
|
||||
'entity_type' => 'node',
|
||||
@@ -98,12 +98,12 @@ class EntityReferenceFileUploadTest extends WebTestBase {
|
||||
->setComponent($file_field_name)
|
||||
->save();
|
||||
entity_get_form_display('node', $referencing->id(), 'default')
|
||||
->setComponent('test_field', array(
|
||||
->setComponent('test_field', [
|
||||
'type' => 'entity_reference_autocomplete',
|
||||
))
|
||||
->setComponent($file_field_name, array(
|
||||
])
|
||||
->setComponent($file_field_name, [
|
||||
'type' => 'file_generic',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
}
|
||||
|
||||
@@ -111,17 +111,17 @@ class EntityReferenceFileUploadTest extends WebTestBase {
|
||||
* Tests that the autocomplete input element does not cause ajax fatal.
|
||||
*/
|
||||
public function testFileUpload() {
|
||||
$user1 = $this->drupalCreateUser(array('access content', "create $this->referencingType content"));
|
||||
$user1 = $this->drupalCreateUser(['access content', "create $this->referencingType content"]);
|
||||
$this->drupalLogin($user1);
|
||||
|
||||
$test_file = current($this->drupalGetTestFiles('text'));
|
||||
$edit['files[file_field_0]'] = drupal_realpath($test_file->uri);
|
||||
$this->drupalPostForm('node/add/' . $this->referencingType, $edit, 'Upload');
|
||||
$this->assertResponse(200);
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'title[0][value]' => $this->randomMachineName(),
|
||||
'test_field[0][target_id]' => $this->nodeId,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, 'Save');
|
||||
$this->assertResponse(200);
|
||||
}
|
||||
|
||||
@@ -34,30 +34,30 @@ trait EntityReferenceTestTrait {
|
||||
*
|
||||
* @see \Drupal\Core\Entity\Plugin\EntityReferenceSelection\SelectionBase::buildConfigurationForm()
|
||||
*/
|
||||
protected function createEntityReferenceField($entity_type, $bundle, $field_name, $field_label, $target_entity_type, $selection_handler = 'default', $selection_handler_settings = array(), $cardinality = 1) {
|
||||
protected function createEntityReferenceField($entity_type, $bundle, $field_name, $field_label, $target_entity_type, $selection_handler = 'default', $selection_handler_settings = [], $cardinality = 1) {
|
||||
// Look for or add the specified field to the requested entity bundle.
|
||||
if (!FieldStorageConfig::loadByName($entity_type, $field_name)) {
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'type' => 'entity_reference',
|
||||
'entity_type' => $entity_type,
|
||||
'cardinality' => $cardinality,
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'target_type' => $target_entity_type,
|
||||
),
|
||||
))->save();
|
||||
],
|
||||
])->save();
|
||||
}
|
||||
if (!FieldConfig::loadByName($entity_type, $bundle, $field_name)) {
|
||||
FieldConfig::create(array(
|
||||
FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => $entity_type,
|
||||
'bundle' => $bundle,
|
||||
'label' => $field_label,
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'handler' => $selection_handler,
|
||||
'handler_settings' => $selection_handler_settings,
|
||||
),
|
||||
))->save();
|
||||
],
|
||||
])->save();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class FieldDefaultValueCallbackTest extends WebTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('node', 'field_test', 'field_ui');
|
||||
public static $modules = ['node', 'field_test', 'field_ui'];
|
||||
|
||||
/**
|
||||
* The field name.
|
||||
@@ -37,10 +37,10 @@ class FieldDefaultValueCallbackTest extends WebTestBase {
|
||||
|
||||
// Create Article node types.
|
||||
if ($this->profile != 'standard') {
|
||||
$this->drupalCreateContentType(array(
|
||||
$this->drupalCreateContentType([
|
||||
'type' => 'article',
|
||||
'name' => 'Article',
|
||||
));
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,12 +22,12 @@ class FieldImportDeleteUninstallUiTest extends FieldTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('entity_test', 'telephone', 'config', 'filter', 'datetime');
|
||||
public static $modules = ['entity_test', 'telephone', 'config', 'filter', 'datetime'];
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->drupalLogin($this->drupalCreateUser(array('synchronize configuration')));
|
||||
$this->drupalLogin($this->drupalCreateUser(['synchronize configuration']));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35,11 +35,11 @@ class FieldImportDeleteUninstallUiTest extends FieldTestBase {
|
||||
*/
|
||||
public function testImportDeleteUninstall() {
|
||||
// Create a telephone field.
|
||||
$field_storage = FieldStorageConfig::create(array(
|
||||
$field_storage = FieldStorageConfig::create([
|
||||
'field_name' => 'field_tel',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'telephone',
|
||||
));
|
||||
]);
|
||||
$field_storage->save();
|
||||
FieldConfig::create([
|
||||
'field_storage' => $field_storage,
|
||||
@@ -47,11 +47,11 @@ class FieldImportDeleteUninstallUiTest extends FieldTestBase {
|
||||
])->save();
|
||||
|
||||
// Create a text field.
|
||||
$date_field_storage = FieldStorageConfig::create(array(
|
||||
$date_field_storage = FieldStorageConfig::create([
|
||||
'field_name' => 'field_date',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'datetime',
|
||||
));
|
||||
]);
|
||||
$date_field_storage->save();
|
||||
FieldConfig::create([
|
||||
'field_storage' => $date_field_storage,
|
||||
@@ -73,7 +73,7 @@ class FieldImportDeleteUninstallUiTest extends FieldTestBase {
|
||||
|
||||
// Verify entity has been created properly.
|
||||
$id = $entity->id();
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$entity = EntityTest::load($id);
|
||||
$this->assertEqual($entity->field_tel->value, $value);
|
||||
$this->assertEqual($entity->field_tel[0]->value, $value);
|
||||
|
||||
@@ -104,12 +104,12 @@ class FieldImportDeleteUninstallUiTest extends FieldTestBase {
|
||||
|
||||
// This will purge all the data, delete the field and uninstall the
|
||||
// Telephone and Text modules.
|
||||
$this->drupalPostForm(NULL, array(), t('Import all'));
|
||||
$this->drupalPostForm(NULL, [], t('Import all'));
|
||||
$this->assertNoText('Field data will be deleted by this synchronization.');
|
||||
$this->rebuildContainer();
|
||||
$this->assertFalse(\Drupal::moduleHandler()->moduleExists('telephone'));
|
||||
$this->assertFalse(\Drupal::entityManager()->loadEntityByUuid('field_storage_config', $field_storage->uuid()), 'The telephone field has been deleted by the configuration synchronization');
|
||||
$deleted_storages = \Drupal::state()->get('field.storage.deleted') ?: array();
|
||||
$deleted_storages = \Drupal::state()->get('field.storage.deleted') ?: [];
|
||||
$this->assertFalse(isset($deleted_storages[$field_storage->uuid()]), 'Telephone field has been completed removed from the system.');
|
||||
$this->assertFalse(isset($deleted_storages[$field_storage->uuid()]), 'Text field has been completed removed from the system.');
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@ use Drupal\simpletest\WebTestBase;
|
||||
|
||||
/**
|
||||
* Parent class for Field API tests.
|
||||
*
|
||||
* @deprecated Scheduled for removal in Drupal 9.0.0.
|
||||
* Use \Drupal\Tests\field\Functional\FieldTestBase instead.
|
||||
*/
|
||||
abstract class FieldTestBase extends WebTestBase {
|
||||
|
||||
@@ -19,8 +22,8 @@ abstract class FieldTestBase extends WebTestBase {
|
||||
* @return
|
||||
* An array of random values, in the format expected for field values.
|
||||
*/
|
||||
function _generateTestFieldValues($cardinality) {
|
||||
$values = array();
|
||||
public function _generateTestFieldValues($cardinality) {
|
||||
$values = [];
|
||||
for ($i = 0; $i < $cardinality; $i++) {
|
||||
// field_test fields treat 0 as 'empty value'.
|
||||
$values[$i]['value'] = mt_rand(1, 127);
|
||||
@@ -45,17 +48,20 @@ abstract class FieldTestBase extends WebTestBase {
|
||||
* @param $column
|
||||
* (Optional) The name of the column to check. Defaults to 'value'.
|
||||
*/
|
||||
function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_DEFAULT, $column = 'value') {
|
||||
public function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_DEFAULT, $column = 'value') {
|
||||
// Re-load the entity to make sure we have the latest changes.
|
||||
\Drupal::entityManager()->getStorage($entity->getEntityTypeId())->resetCache(array($entity->id()));
|
||||
$e = entity_load($entity->getEntityTypeId(), $entity->id());
|
||||
$storage = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity->getEntityTypeId());
|
||||
$storage->resetCache([$entity->id()]);
|
||||
$e = $storage->load($entity->id());
|
||||
|
||||
$field = $values = $e->getTranslation($langcode)->$field_name;
|
||||
// Filter out empty values so that they don't mess with the assertions.
|
||||
$field->filterEmptyItems();
|
||||
$values = $field->getValue();
|
||||
$this->assertEqual(count($values), count($expected_values), 'Expected number of values were saved.');
|
||||
foreach ($expected_values as $key => $value) {
|
||||
$this->assertEqual($values[$key][$column], $value, format_string('Value @value was saved correctly.', array('@value' => $value)));
|
||||
$this->assertEqual($values[$key][$column], $value, format_string('Value @value was saved correctly.', ['@value' => $value]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ use Drupal\Component\Utility\Html;
|
||||
use Drupal\Core\Entity\Entity\EntityFormDisplay;
|
||||
use Drupal\Core\Field\FieldStorageDefinitionInterface;
|
||||
use Drupal\Core\Form\FormState;
|
||||
use Drupal\entity_test\Entity\EntityTest;
|
||||
use Drupal\entity_test\Entity\EntityTestBaseFieldDisplay;
|
||||
use Drupal\field\Entity\FieldConfig;
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
@@ -24,7 +25,7 @@ class FormTest extends FieldTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('node', 'field_test', 'options', 'entity_test', 'locale');
|
||||
public static $modules = ['node', 'field_test', 'options', 'entity_test', 'locale'];
|
||||
|
||||
/**
|
||||
* An array of values defining a field single.
|
||||
@@ -57,40 +58,40 @@ class FormTest extends FieldTestBase {
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
|
||||
$web_user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
|
||||
$this->drupalLogin($web_user);
|
||||
|
||||
$this->fieldStorageSingle = array(
|
||||
$this->fieldStorageSingle = [
|
||||
'field_name' => 'field_single',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'test_field',
|
||||
);
|
||||
$this->fieldStorageMultiple = array(
|
||||
];
|
||||
$this->fieldStorageMultiple = [
|
||||
'field_name' => 'field_multiple',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'test_field',
|
||||
'cardinality' => 4,
|
||||
);
|
||||
$this->fieldStorageUnlimited = array(
|
||||
];
|
||||
$this->fieldStorageUnlimited = [
|
||||
'field_name' => 'field_unlimited',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'test_field',
|
||||
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
|
||||
);
|
||||
];
|
||||
|
||||
$this->field = array(
|
||||
$this->field = [
|
||||
'entity_type' => 'entity_test',
|
||||
'bundle' => 'entity_test',
|
||||
'label' => $this->randomMachineName() . '_label',
|
||||
'description' => '[site:name]_description',
|
||||
'weight' => mt_rand(0, 127),
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'test_field_setting' => $this->randomMachineName(),
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
function testFieldFormSingle() {
|
||||
public function testFieldFormSingle() {
|
||||
$field_storage = $this->fieldStorageSingle;
|
||||
$field_name = $field_storage['field_name'];
|
||||
$this->field['field_name'] = $field_name;
|
||||
@@ -114,23 +115,23 @@ class FormTest extends FieldTestBase {
|
||||
$this->assertNoText('From hook_field_widget_form_alter(): Default form is true.', 'Not default value form in hook_field_widget_form_alter().');
|
||||
|
||||
// Submit with invalid value (field-level validation).
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => -1
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name does not accept the value -1.', array('%name' => $this->field['label'])), 'Field validation fails with invalid input.');
|
||||
$this->assertRaw(t('%name does not accept the value -1.', ['%name' => $this->field['label']]), 'Field validation fails with invalid input.');
|
||||
// TODO : check that the correct field is flagged for error.
|
||||
|
||||
// Create an entity
|
||||
$value = mt_rand(1, 127);
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
$entity = EntityTest::load($id);
|
||||
$this->assertEqual($entity->{$field_name}->value, $value, 'Field value was saved');
|
||||
|
||||
// Display edit form.
|
||||
@@ -140,36 +141,36 @@ class FormTest extends FieldTestBase {
|
||||
|
||||
// Update the entity.
|
||||
$value = mt_rand(1, 127);
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertText(t('entity_test @id has been updated.', array('@id' => $id)), 'Entity was updated');
|
||||
$this->container->get('entity.manager')->getStorage('entity_test')->resetCache(array($id));
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$this->assertText(t('entity_test @id has been updated.', ['@id' => $id]), 'Entity was updated');
|
||||
$this->container->get('entity.manager')->getStorage('entity_test')->resetCache([$id]);
|
||||
$entity = EntityTest::load($id);
|
||||
$this->assertEqual($entity->{$field_name}->value, $value, 'Field value was updated');
|
||||
|
||||
// Empty the field.
|
||||
$value = '';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('entity_test/manage/' . $id . '/edit', $edit, t('Save'));
|
||||
$this->assertText(t('entity_test @id has been updated.', array('@id' => $id)), 'Entity was updated');
|
||||
$this->container->get('entity.manager')->getStorage('entity_test')->resetCache(array($id));
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$this->assertText(t('entity_test @id has been updated.', ['@id' => $id]), 'Entity was updated');
|
||||
$this->container->get('entity.manager')->getStorage('entity_test')->resetCache([$id]);
|
||||
$entity = EntityTest::load($id);
|
||||
$this->assertTrue($entity->{$field_name}->isEmpty(), 'Field was emptied');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests field widget default values on entity forms.
|
||||
*/
|
||||
function testFieldFormDefaultValue() {
|
||||
public function testFieldFormDefaultValue() {
|
||||
$field_storage = $this->fieldStorageSingle;
|
||||
$field_name = $field_storage['field_name'];
|
||||
$this->field['field_name'] = $field_name;
|
||||
$default = rand(1, 127);
|
||||
$this->field['default_value'] = array(array('value' => $default));
|
||||
$this->field['default_value'] = [['value' => $default]];
|
||||
FieldStorageConfig::create($field_storage)->save();
|
||||
FieldConfig::create($this->field)->save();
|
||||
entity_get_form_display($this->field['entity_type'], $this->field['bundle'], 'default')
|
||||
@@ -182,18 +183,18 @@ class FormTest extends FieldTestBase {
|
||||
$this->assertFieldByXpath("//input[@name='{$field_name}[0][value]' and @value='$default']");
|
||||
|
||||
// Try to submit an empty value.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => '',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created.');
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created.');
|
||||
$entity = EntityTest::load($id);
|
||||
$this->assertTrue($entity->{$field_name}->isEmpty(), 'Field is now empty.');
|
||||
}
|
||||
|
||||
function testFieldFormSingleRequired() {
|
||||
public function testFieldFormSingleRequired() {
|
||||
$field_storage = $this->fieldStorageSingle;
|
||||
$field_name = $field_storage['field_name'];
|
||||
$this->field['field_name'] = $field_name;
|
||||
@@ -205,32 +206,32 @@ class FormTest extends FieldTestBase {
|
||||
->save();
|
||||
|
||||
// Submit with missing required value.
|
||||
$edit = array();
|
||||
$edit = [];
|
||||
$this->drupalPostForm('entity_test/add', $edit, t('Save'));
|
||||
$this->assertRaw(t('@name field is required.', array('@name' => $this->field['label'])), 'Required field with no value fails validation');
|
||||
$this->assertRaw(t('@name field is required.', ['@name' => $this->field['label']]), 'Required field with no value fails validation');
|
||||
|
||||
// Create an entity
|
||||
$value = mt_rand(1, 127);
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
$entity = EntityTest::load($id);
|
||||
$this->assertEqual($entity->{$field_name}->value, $value, 'Field value was saved');
|
||||
|
||||
// Edit with missing required value.
|
||||
$value = '';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('entity_test/manage/' . $id . '/edit', $edit, t('Save'));
|
||||
$this->assertRaw(t('@name field is required.', array('@name' => $this->field['label'])), 'Required field with no value fails validation');
|
||||
$this->assertRaw(t('@name field is required.', ['@name' => $this->field['label']]), 'Required field with no value fails validation');
|
||||
}
|
||||
|
||||
function testFieldFormUnlimited() {
|
||||
public function testFieldFormUnlimited() {
|
||||
$field_storage = $this->fieldStorageUnlimited;
|
||||
$field_name = $field_storage['field_name'];
|
||||
$this->field['field_name'] = $field_name;
|
||||
@@ -250,20 +251,20 @@ class FormTest extends FieldTestBase {
|
||||
$this->assertTrue(isset($elements[0]), t('aria-describedby attribute is properly placed on multiple value widgets.'));
|
||||
|
||||
// Press 'add more' button -> 2 widgets.
|
||||
$this->drupalPostForm(NULL, array(), t('Add another item'));
|
||||
$this->drupalPostForm(NULL, [], t('Add another item'));
|
||||
$this->assertFieldByName("{$field_name}[0][value]", '', 'Widget 1 is displayed');
|
||||
$this->assertFieldByName("{$field_name}[1][value]", '', 'New widget is displayed');
|
||||
$this->assertNoField("{$field_name}[2][value]", 'No extraneous widget is displayed');
|
||||
// TODO : check that non-field inputs are preserved ('title'), etc.
|
||||
|
||||
// Yet another time so that we can play with more values -> 3 widgets.
|
||||
$this->drupalPostForm(NULL, array(), t('Add another item'));
|
||||
$this->drupalPostForm(NULL, [], t('Add another item'));
|
||||
|
||||
// Prepare values and weights.
|
||||
$count = 3;
|
||||
$delta_range = $count - 1;
|
||||
$values = $weights = $pattern = $expected_values = array();
|
||||
$edit = array();
|
||||
$values = $weights = $pattern = $expected_values = [];
|
||||
$edit = [];
|
||||
for ($delta = 0; $delta <= $delta_range; $delta++) {
|
||||
// Assign unique random values and weights.
|
||||
do {
|
||||
@@ -298,8 +299,8 @@ class FormTest extends FieldTestBase {
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
$entity = EntityTest::load($id);
|
||||
ksort($field_values);
|
||||
$field_values = array_values($field_values);
|
||||
$this->assertIdentical($entity->{$field_name}->getValue(), $field_values, 'Field values were saved in the correct order');
|
||||
@@ -329,18 +330,18 @@ class FormTest extends FieldTestBase {
|
||||
// Display creation form -> 1 widget.
|
||||
$this->drupalGet('entity_test/add');
|
||||
// Check that the Required symbol is present for the multifield label.
|
||||
$element = $this->xpath('//h4[contains(@class, "label") and contains(@class, "js-form-required") and contains(text(), :value)]', array(':value' => $this->field['label']));
|
||||
$element = $this->xpath('//h4[contains(@class, "label") and contains(@class, "js-form-required") and contains(text(), :value)]', [':value' => $this->field['label']]);
|
||||
$this->assertTrue(isset($element[0]), 'Required symbol added field label.');
|
||||
// Check that the label of the field input is visually hidden and contains
|
||||
// the field title and an indication of the delta for a11y.
|
||||
$element = $this->xpath('//label[@for=:for and contains(@class, "js-form-required") and contains(text(), :value)]', array(':for' => 'edit-field-unlimited-0-value', ':value' => $this->field['label'] . ' (value 1)'));
|
||||
$element = $this->xpath('//label[@for=:for and contains(@class, "visually-hidden") and contains(text(), :value)]', [':for' => 'edit-field-unlimited-0-value', ':value' => $this->field['label'] . ' (value 1)']);
|
||||
$this->assertTrue(isset($element[0]), 'Required symbol not added for field input.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests widget handling of multiple required radios.
|
||||
*/
|
||||
function testFieldFormMultivalueWithRequiredRadio() {
|
||||
public function testFieldFormMultivalueWithRequiredRadio() {
|
||||
// Create a multivalue test field.
|
||||
$field_storage = $this->fieldStorageUnlimited;
|
||||
$field_name = $field_storage['field_name'];
|
||||
@@ -352,32 +353,32 @@ class FormTest extends FieldTestBase {
|
||||
->save();
|
||||
|
||||
// Add a required radio field.
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => 'required_radio_test',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'list_string',
|
||||
'settings' => array(
|
||||
'allowed_values' => array('yes' => 'yes', 'no' => 'no'),
|
||||
),
|
||||
))->save();
|
||||
$field = array(
|
||||
'settings' => [
|
||||
'allowed_values' => ['yes' => 'yes', 'no' => 'no'],
|
||||
],
|
||||
])->save();
|
||||
$field = [
|
||||
'field_name' => 'required_radio_test',
|
||||
'entity_type' => 'entity_test',
|
||||
'bundle' => 'entity_test',
|
||||
'required' => TRUE,
|
||||
);
|
||||
];
|
||||
FieldConfig::create($field)->save();
|
||||
entity_get_form_display($field['entity_type'], $field['bundle'], 'default')
|
||||
->setComponent($field['field_name'], array(
|
||||
->setComponent($field['field_name'], [
|
||||
'type' => 'options_buttons',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display creation form.
|
||||
$this->drupalGet('entity_test/add');
|
||||
|
||||
// Press the 'Add more' button.
|
||||
$this->drupalPostForm(NULL, array(), t('Add another item'));
|
||||
$this->drupalPostForm(NULL, [], t('Add another item'));
|
||||
|
||||
// Verify that no error is thrown by the radio element.
|
||||
$this->assertNoFieldByXpath('//div[contains(@class, "error")]', FALSE, 'No error message is displayed.');
|
||||
@@ -388,7 +389,7 @@ class FormTest extends FieldTestBase {
|
||||
$this->assertNoField("{$field_name}[2][value]", 'No extraneous widget is displayed');
|
||||
}
|
||||
|
||||
function testFieldFormJSAddMore() {
|
||||
public function testFieldFormJSAddMore() {
|
||||
$field_storage = $this->fieldStorageUnlimited;
|
||||
$field_name = $field_storage['field_name'];
|
||||
$this->field['field_name'] = $field_name;
|
||||
@@ -404,13 +405,13 @@ class FormTest extends FieldTestBase {
|
||||
// Press 'add more' button a couple times -> 3 widgets.
|
||||
// drupalPostAjaxForm() will not work iteratively, so we add those through
|
||||
// non-JS submission.
|
||||
$this->drupalPostForm(NULL, array(), t('Add another item'));
|
||||
$this->drupalPostForm(NULL, array(), t('Add another item'));
|
||||
$this->drupalPostForm(NULL, [], t('Add another item'));
|
||||
$this->drupalPostForm(NULL, [], t('Add another item'));
|
||||
|
||||
// Prepare values and weights.
|
||||
$count = 3;
|
||||
$delta_range = $count - 1;
|
||||
$values = $weights = $pattern = $expected_values = $edit = array();
|
||||
$values = $weights = $pattern = $expected_values = $edit = [];
|
||||
for ($delta = 0; $delta <= $delta_range; $delta++) {
|
||||
// Assign unique random values and weights.
|
||||
do {
|
||||
@@ -447,7 +448,7 @@ class FormTest extends FieldTestBase {
|
||||
/**
|
||||
* Tests widgets handling multiple values.
|
||||
*/
|
||||
function testFieldFormMultipleWidget() {
|
||||
public function testFieldFormMultipleWidget() {
|
||||
// Create a field with fixed cardinality, configure the form to use a
|
||||
// "multiple" widget.
|
||||
$field_storage = $this->fieldStorageMultiple;
|
||||
@@ -456,9 +457,9 @@ class FormTest extends FieldTestBase {
|
||||
FieldStorageConfig::create($field_storage)->save();
|
||||
FieldConfig::create($this->field)->save();
|
||||
entity_get_form_display($this->field['entity_type'], $this->field['bundle'], 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'test_field_widget_multiple',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display creation form.
|
||||
@@ -466,33 +467,33 @@ class FormTest extends FieldTestBase {
|
||||
$this->assertFieldByName($field_name, '', 'Widget is displayed.');
|
||||
|
||||
// Create entity with three values.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
$field_name => '1, 2, 3',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
|
||||
// Check that the values were saved.
|
||||
$entity_init = entity_load('entity_test', $id);
|
||||
$this->assertFieldValues($entity_init, $field_name, array(1, 2, 3));
|
||||
$entity_init = EntityTest::load($id);
|
||||
$this->assertFieldValues($entity_init, $field_name, [1, 2, 3]);
|
||||
|
||||
// Display the form, check that the values are correctly filled in.
|
||||
$this->drupalGet('entity_test/manage/' . $id . '/edit');
|
||||
$this->assertFieldByName($field_name, '1, 2, 3', 'Widget is displayed.');
|
||||
|
||||
// Submit the form with more values than the field accepts.
|
||||
$edit = array($field_name => '1, 2, 3, 4, 5');
|
||||
$edit = [$field_name => '1, 2, 3, 4, 5'];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw('this field cannot hold more than 4 values', 'Form validation failed.');
|
||||
// Check that the field values were not submitted.
|
||||
$this->assertFieldValues($entity_init, $field_name, array(1, 2, 3));
|
||||
$this->assertFieldValues($entity_init, $field_name, [1, 2, 3]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests fields with no 'edit' access.
|
||||
*/
|
||||
function testFieldFormAccess() {
|
||||
public function testFieldFormAccess() {
|
||||
$entity_type = 'entity_test_rev';
|
||||
// Create a "regular" field.
|
||||
$field_storage = $this->fieldStorageSingle;
|
||||
@@ -510,18 +511,18 @@ class FormTest extends FieldTestBase {
|
||||
|
||||
// Create a field with no edit access. See
|
||||
// field_test_entity_field_access().
|
||||
$field_storage_no_access = array(
|
||||
$field_storage_no_access = [
|
||||
'field_name' => 'field_no_edit_access',
|
||||
'entity_type' => $entity_type,
|
||||
'type' => 'test_field',
|
||||
);
|
||||
];
|
||||
$field_name_no_access = $field_storage_no_access['field_name'];
|
||||
$field_no_access = array(
|
||||
$field_no_access = [
|
||||
'field_name' => $field_name_no_access,
|
||||
'entity_type' => $entity_type,
|
||||
'bundle' => $entity_type,
|
||||
'default_value' => array(0 => array('value' => 99)),
|
||||
);
|
||||
'default_value' => [0 => ['value' => 99]],
|
||||
];
|
||||
FieldStorageConfig::create($field_storage_no_access)->save();
|
||||
FieldConfig::create($field_no_access)->save();
|
||||
entity_get_form_display($field_no_access['entity_type'], $field_no_access['bundle'], 'default')
|
||||
@@ -532,10 +533,10 @@ class FormTest extends FieldTestBase {
|
||||
// apart from #access.
|
||||
$entity = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity_type)
|
||||
->create(array('id' => 0, 'revision_id' => 0));
|
||||
->create(['id' => 0, 'revision_id' => 0]);
|
||||
|
||||
$display = entity_get_form_display($entity_type, $entity_type, 'default');
|
||||
$form = array();
|
||||
$form = [];
|
||||
$form_state = new FormState();
|
||||
$display->buildForm($entity, $form, $form_state);
|
||||
|
||||
@@ -546,33 +547,37 @@ class FormTest extends FieldTestBase {
|
||||
$this->assertNoFieldByName("{$field_name_no_access}[0][value]", '', 'Widget is not displayed if field access is denied.');
|
||||
|
||||
// Create entity.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => 1,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match("|$entity_type/manage/(\d+)|", $this->url, $match);
|
||||
$id = $match[1];
|
||||
|
||||
// Check that the default value was saved.
|
||||
$entity = entity_load($entity_type, $id);
|
||||
$storage = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity_type);
|
||||
$entity = $storage->load($id);
|
||||
$this->assertEqual($entity->$field_name_no_access->value, 99, 'Default value was saved for the field with no edit access.');
|
||||
$this->assertEqual($entity->$field_name->value, 1, 'Entered value vas saved for the field with edit access.');
|
||||
|
||||
// Create a new revision.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => 2,
|
||||
'revision' => TRUE,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm($entity_type . '/manage/' . $id . '/edit', $edit, t('Save'));
|
||||
|
||||
// Check that the new revision has the expected values.
|
||||
$this->container->get('entity.manager')->getStorage($entity_type)->resetCache(array($id));
|
||||
$entity = entity_load($entity_type, $id);
|
||||
$storage->resetCache([$id]);
|
||||
$entity = $storage->load($id);
|
||||
$this->assertEqual($entity->$field_name_no_access->value, 99, 'New revision has the expected value for the field with no edit access.');
|
||||
$this->assertEqual($entity->$field_name->value, 2, 'New revision has the expected value for the field with edit access.');
|
||||
|
||||
// Check that the revision is also saved in the revisions table.
|
||||
// $entity = entity_revision_load($entity_type, $entity->getRevisionId());
|
||||
$entity = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity_type)
|
||||
->loadRevision($entity->getRevisionId());
|
||||
$this->assertEqual($entity->$field_name_no_access->value, 99, 'New revision has the expected value for the field with no edit access.');
|
||||
$this->assertEqual($entity->$field_name->value, 2, 'New revision has the expected value for the field with edit access.');
|
||||
}
|
||||
@@ -580,13 +585,13 @@ class FormTest extends FieldTestBase {
|
||||
/**
|
||||
* Tests hiding a field in a form.
|
||||
*/
|
||||
function testHiddenField() {
|
||||
public function testHiddenField() {
|
||||
$entity_type = 'entity_test_rev';
|
||||
$field_storage = $this->fieldStorageSingle;
|
||||
$field_storage['entity_type'] = $entity_type;
|
||||
$field_name = $field_storage['field_name'];
|
||||
$this->field['field_name'] = $field_name;
|
||||
$this->field['default_value'] = array(0 => array('value' => 99));
|
||||
$this->field['default_value'] = [0 => ['value' => 99]];
|
||||
$this->field['entity_type'] = $entity_type;
|
||||
$this->field['bundle'] = $entity_type;
|
||||
FieldStorageConfig::create($field_storage)->save();
|
||||
@@ -601,21 +606,24 @@ class FormTest extends FieldTestBase {
|
||||
// Create an entity and test that the default value is assigned correctly to
|
||||
// the field that uses the hidden widget.
|
||||
$this->assertNoField("{$field_name}[0][value]", 'The field does not appear in the form');
|
||||
$this->drupalPostForm(NULL, array(), t('Save'));
|
||||
$this->drupalPostForm(NULL, [], t('Save'));
|
||||
preg_match('|' . $entity_type . '/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test_rev @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$entity = entity_load($entity_type, $id);
|
||||
$this->assertText(t('entity_test_rev @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
$storage = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity_type);
|
||||
|
||||
$entity = $storage->load($id);
|
||||
$this->assertEqual($entity->{$field_name}->value, 99, 'Default value was saved');
|
||||
|
||||
// Update the field to remove the default value, and switch to the default
|
||||
// widget.
|
||||
$this->field->setDefaultValue(array());
|
||||
$this->field->setDefaultValue([]);
|
||||
$this->field->save();
|
||||
entity_get_form_display($entity_type, $this->field->getTargetBundle(), 'default')
|
||||
->setComponent($this->field->getName(), array(
|
||||
->setComponent($this->field->getName(), [
|
||||
'type' => 'test_field_widget',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display edit form.
|
||||
@@ -624,11 +632,11 @@ class FormTest extends FieldTestBase {
|
||||
|
||||
// Update the entity.
|
||||
$value = mt_rand(1, 127);
|
||||
$edit = array("{$field_name}[0][value]" => $value);
|
||||
$edit = ["{$field_name}[0][value]" => $value];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertText(t('entity_test_rev @id has been updated.', array('@id' => $id)), 'Entity was updated');
|
||||
\Drupal::entityManager()->getStorage($entity_type)->resetCache(array($id));
|
||||
$entity = entity_load($entity_type, $id);
|
||||
$this->assertText(t('entity_test_rev @id has been updated.', ['@id' => $id]), 'Entity was updated');
|
||||
$storage->resetCache([$id]);
|
||||
$entity = $storage->load($id);
|
||||
$this->assertEqual($entity->{$field_name}->value, $value, 'Field value was updated');
|
||||
|
||||
// Set the field back to hidden.
|
||||
@@ -637,12 +645,12 @@ class FormTest extends FieldTestBase {
|
||||
->save();
|
||||
|
||||
// Create a new revision.
|
||||
$edit = array('revision' => TRUE);
|
||||
$edit = ['revision' => TRUE];
|
||||
$this->drupalPostForm($entity_type . '/manage/' . $id . '/edit', $edit, t('Save'));
|
||||
|
||||
// Check that the expected value has been carried over to the new revision.
|
||||
\Drupal::entityManager()->getStorage($entity_type)->resetCache(array($id));
|
||||
$entity = entity_load($entity_type, $id);
|
||||
$storage->resetCache([$id]);
|
||||
$entity = $storage->load($id);
|
||||
$this->assertEqual($entity->{$field_name}->value, $value, 'New revision has the expected value for the field with the Hidden widget');
|
||||
}
|
||||
|
||||
|
||||
@@ -17,42 +17,42 @@ class NestedFormTest extends FieldTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('field_test', 'entity_test');
|
||||
public static $modules = ['field_test', 'entity_test'];
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
|
||||
$web_user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
|
||||
$this->drupalLogin($web_user);
|
||||
|
||||
$this->fieldStorageSingle = array(
|
||||
$this->fieldStorageSingle = [
|
||||
'field_name' => 'field_single',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'test_field',
|
||||
);
|
||||
$this->fieldStorageUnlimited = array(
|
||||
];
|
||||
$this->fieldStorageUnlimited = [
|
||||
'field_name' => 'field_unlimited',
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'test_field',
|
||||
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
|
||||
);
|
||||
];
|
||||
|
||||
$this->field = array(
|
||||
$this->field = [
|
||||
'entity_type' => 'entity_test',
|
||||
'bundle' => 'entity_test',
|
||||
'label' => $this->randomMachineName() . '_label',
|
||||
'description' => '[site:name]_description',
|
||||
'weight' => mt_rand(0, 127),
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'test_field_setting' => $this->randomMachineName(),
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests Field API form integration within a subform.
|
||||
*/
|
||||
function testNestedFieldForm() {
|
||||
public function testNestedFieldForm() {
|
||||
// Add two fields on the 'entity_test'
|
||||
FieldStorageConfig::create($this->fieldStorageSingle)->save();
|
||||
FieldStorageConfig::create($this->fieldStorageUnlimited)->save();
|
||||
@@ -71,17 +71,16 @@ class NestedFormTest extends FieldTestBase {
|
||||
|
||||
// Create two entities.
|
||||
$entity_type = 'entity_test';
|
||||
$entity_1 = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity_type)
|
||||
->create(array('id' => 1));
|
||||
$storage = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity_type);
|
||||
|
||||
$entity_1 = $storage->create(['id' => 1]);
|
||||
$entity_1->enforceIsNew();
|
||||
$entity_1->field_single->value = 0;
|
||||
$entity_1->field_unlimited->value = 1;
|
||||
$entity_1->save();
|
||||
|
||||
$entity_2 = $this->container->get('entity_type.manager')
|
||||
->getStorage($entity_type)
|
||||
->create(array('id' => 2));
|
||||
$entity_2 = $storage->create(['id' => 2]);
|
||||
$entity_2->enforceIsNew();
|
||||
$entity_2->field_single->value = 10;
|
||||
$entity_2->field_unlimited->value = 11;
|
||||
@@ -95,75 +94,101 @@ class NestedFormTest extends FieldTestBase {
|
||||
$this->assertFieldByName('entity_2[field_unlimited][0][value]', 11, 'Entity 2: field_unlimited value 0 appears correctly is the form.');
|
||||
|
||||
// Submit the form and check that the entities are updated accordingly.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'field_single[0][value]' => 1,
|
||||
'field_unlimited[0][value]' => 2,
|
||||
'field_unlimited[1][value]' => 3,
|
||||
'entity_2[field_single][0][value]' => 11,
|
||||
'entity_2[field_unlimited][0][value]' => 12,
|
||||
'entity_2[field_unlimited][1][value]' => 13,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$entity_1 = entity_load($entity_type, 1);
|
||||
$entity_2 = entity_load($entity_type, 2);
|
||||
$this->assertFieldValues($entity_1, 'field_single', array(1));
|
||||
$this->assertFieldValues($entity_1, 'field_unlimited', array(2, 3));
|
||||
$this->assertFieldValues($entity_2, 'field_single', array(11));
|
||||
$this->assertFieldValues($entity_2, 'field_unlimited', array(12, 13));
|
||||
$entity_1 = $storage->load(1);
|
||||
$entity_2 = $storage->load(2);
|
||||
$this->assertFieldValues($entity_1, 'field_single', [1]);
|
||||
$this->assertFieldValues($entity_1, 'field_unlimited', [2, 3]);
|
||||
$this->assertFieldValues($entity_2, 'field_single', [11]);
|
||||
$this->assertFieldValues($entity_2, 'field_unlimited', [12, 13]);
|
||||
|
||||
// Submit invalid values and check that errors are reported on the
|
||||
// correct widgets.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'field_unlimited[1][value]' => -1,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('test-entity/nested/1/2', $edit, t('Save'));
|
||||
$this->assertRaw(t('%label does not accept the value -1', array('%label' => 'Unlimited field')), 'Entity 1: the field validation error was reported.');
|
||||
$error_field = $this->xpath('//input[@id=:id and contains(@class, "error")]', array(':id' => 'edit-field-unlimited-1-value'));
|
||||
$this->assertRaw(t('%label does not accept the value -1', ['%label' => 'Unlimited field']), 'Entity 1: the field validation error was reported.');
|
||||
$error_field = $this->xpath('//input[@id=:id and contains(@class, "error")]', [':id' => 'edit-field-unlimited-1-value']);
|
||||
$this->assertTrue($error_field, 'Entity 1: the error was flagged on the correct element.');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'entity_2[field_unlimited][1][value]' => -1,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('test-entity/nested/1/2', $edit, t('Save'));
|
||||
$this->assertRaw(t('%label does not accept the value -1', array('%label' => 'Unlimited field')), 'Entity 2: the field validation error was reported.');
|
||||
$error_field = $this->xpath('//input[@id=:id and contains(@class, "error")]', array(':id' => 'edit-entity-2-field-unlimited-1-value'));
|
||||
$this->assertRaw(t('%label does not accept the value -1', ['%label' => 'Unlimited field']), 'Entity 2: the field validation error was reported.');
|
||||
$error_field = $this->xpath('//input[@id=:id and contains(@class, "error")]', [':id' => 'edit-entity-2-field-unlimited-1-value']);
|
||||
$this->assertTrue($error_field, 'Entity 2: the error was flagged on the correct element.');
|
||||
|
||||
// Test that reordering works on both entities.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'field_unlimited[0][_weight]' => 0,
|
||||
'field_unlimited[1][_weight]' => -1,
|
||||
'entity_2[field_unlimited][0][_weight]' => 0,
|
||||
'entity_2[field_unlimited][1][_weight]' => -1,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm('test-entity/nested/1/2', $edit, t('Save'));
|
||||
$this->assertFieldValues($entity_1, 'field_unlimited', array(3, 2));
|
||||
$this->assertFieldValues($entity_2, 'field_unlimited', array(13, 12));
|
||||
$this->assertFieldValues($entity_1, 'field_unlimited', [3, 2]);
|
||||
$this->assertFieldValues($entity_2, 'field_unlimited', [13, 12]);
|
||||
|
||||
// Test the 'add more' buttons. Only Ajax submission is tested, because
|
||||
// the two 'add more' buttons present in the form have the same #value,
|
||||
// which confuses drupalPostForm().
|
||||
// 'Add more' button in the first entity:
|
||||
$this->drupalGet('test-entity/nested/1/2');
|
||||
$this->drupalPostAjaxForm(NULL, array(), 'field_unlimited_add_more');
|
||||
$this->drupalPostAjaxForm(NULL, [], 'field_unlimited_add_more');
|
||||
$this->assertFieldByName('field_unlimited[0][value]', 3, 'Entity 1: field_unlimited value 0 appears correctly is the form.');
|
||||
$this->assertFieldByName('field_unlimited[1][value]', 2, 'Entity 1: field_unlimited value 1 appears correctly is the form.');
|
||||
$this->assertFieldByName('field_unlimited[2][value]', '', 'Entity 1: field_unlimited value 2 appears correctly is the form.');
|
||||
$this->assertFieldByName('field_unlimited[3][value]', '', 'Entity 1: an empty widget was added for field_unlimited value 3.');
|
||||
// 'Add more' button in the first entity (changing field values):
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'entity_2[field_unlimited][0][value]' => 13,
|
||||
'entity_2[field_unlimited][1][value]' => 14,
|
||||
'entity_2[field_unlimited][2][value]' => 15,
|
||||
);
|
||||
];
|
||||
$this->drupalPostAjaxForm(NULL, $edit, 'entity_2_field_unlimited_add_more');
|
||||
$this->assertFieldByName('entity_2[field_unlimited][0][value]', 13, 'Entity 2: field_unlimited value 0 appears correctly is the form.');
|
||||
$this->assertFieldByName('entity_2[field_unlimited][1][value]', 14, 'Entity 2: field_unlimited value 1 appears correctly is the form.');
|
||||
$this->assertFieldByName('entity_2[field_unlimited][2][value]', 15, 'Entity 2: field_unlimited value 2 appears correctly is the form.');
|
||||
$this->assertFieldByName('entity_2[field_unlimited][3][value]', '', 'Entity 2: an empty widget was added for field_unlimited value 3.');
|
||||
// Save the form and check values are saved correctly.
|
||||
$this->drupalPostForm(NULL, array(), t('Save'));
|
||||
$this->assertFieldValues($entity_1, 'field_unlimited', array(3, 2));
|
||||
$this->assertFieldValues($entity_2, 'field_unlimited', array(13, 14, 15));
|
||||
$this->drupalPostForm(NULL, [], t('Save'));
|
||||
$this->assertFieldValues($entity_1, 'field_unlimited', [3, 2]);
|
||||
$this->assertFieldValues($entity_2, 'field_unlimited', [13, 14, 15]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests entity level validation within subforms.
|
||||
*/
|
||||
public function testNestedEntityFormEntityLevelValidation() {
|
||||
// Create two entities.
|
||||
$storage = $this->container->get('entity_type.manager')
|
||||
->getStorage('entity_test_constraints');
|
||||
|
||||
$entity_1 = $storage->create();
|
||||
$entity_1->save();
|
||||
|
||||
$entity_2 = $storage->create();
|
||||
$entity_2->save();
|
||||
|
||||
// Display the 'combined form'.
|
||||
$this->drupalGet("test-entity-constraints/nested/{$entity_1->id()}/{$entity_2->id()}");
|
||||
$this->assertFieldByName('entity_2[changed]', 0, 'Entity 2: changed value appears correctly in the form.');
|
||||
|
||||
// Submit the form and check that the entities are updated accordingly.
|
||||
$edit = ['entity_2[changed]' => REQUEST_TIME - 86400];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
|
||||
$elements = $this->cssSelect('.entity-2.error');
|
||||
$this->assertEqual(1, count($elements), 'The whole nested entity form has been correctly flagged with an error class.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,11 +20,11 @@ class NumberFieldTest extends WebTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('node', 'entity_test', 'field_ui');
|
||||
public static $modules = ['node', 'entity_test', 'field_ui'];
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
$this->drupalLogin($this->drupalCreateUser(array(
|
||||
$this->drupalLogin($this->drupalCreateUser([
|
||||
'view test entity',
|
||||
'administer entity_test content',
|
||||
'administer content types',
|
||||
@@ -32,23 +32,23 @@ class NumberFieldTest extends WebTestBase {
|
||||
'administer node display',
|
||||
'bypass node access',
|
||||
'administer entity_test fields',
|
||||
)));
|
||||
]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test decimal field.
|
||||
*/
|
||||
function testNumberDecimalField() {
|
||||
public function testNumberDecimalField() {
|
||||
// Create a field with settings to validate.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'decimal',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'precision' => 8, 'scale' => 4,
|
||||
)
|
||||
))->save();
|
||||
]
|
||||
])->save();
|
||||
FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
@@ -56,17 +56,17 @@ class NumberFieldTest extends WebTestBase {
|
||||
])->save();
|
||||
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'number',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => '0.00'
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
entity_get_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'number_decimal',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display creation form.
|
||||
@@ -76,107 +76,107 @@ class NumberFieldTest extends WebTestBase {
|
||||
|
||||
// Submit a signed decimal value within the allowed precision and scale.
|
||||
$value = '-1234.5678';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
$this->assertRaw($value, 'Value is displayed.');
|
||||
|
||||
// Try to create entries with more than one decimal separator; assert fail.
|
||||
$wrong_entries = array(
|
||||
$wrong_entries = [
|
||||
'3.14.159',
|
||||
'0..45469',
|
||||
'..4589',
|
||||
'6.459.52',
|
||||
'6.3..25',
|
||||
);
|
||||
];
|
||||
|
||||
foreach ($wrong_entries as $wrong_entry) {
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $wrong_entry,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name must be a number.', array('%name' => $field_name)), 'Correctly failed to save decimal value with more than one decimal point.');
|
||||
$this->assertRaw(t('%name must be a number.', ['%name' => $field_name]), 'Correctly failed to save decimal value with more than one decimal point.');
|
||||
}
|
||||
|
||||
// Try to create entries with minus sign not in the first position.
|
||||
$wrong_entries = array(
|
||||
$wrong_entries = [
|
||||
'3-3',
|
||||
'4-',
|
||||
'1.3-',
|
||||
'1.2-4',
|
||||
'-10-10',
|
||||
);
|
||||
];
|
||||
|
||||
foreach ($wrong_entries as $wrong_entry) {
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $wrong_entry,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name must be a number.', array('%name' => $field_name)), 'Correctly failed to save decimal value with minus sign in the wrong position.');
|
||||
$this->assertRaw(t('%name must be a number.', ['%name' => $field_name]), 'Correctly failed to save decimal value with minus sign in the wrong position.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test integer field.
|
||||
*/
|
||||
function testNumberIntegerField() {
|
||||
public function testNumberIntegerField() {
|
||||
$minimum = rand(-4000, -2000);
|
||||
$maximum = rand(2000, 4000);
|
||||
|
||||
// Create a field with settings to validate.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
$storage = FieldStorageConfig::create(array(
|
||||
$storage = FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'integer',
|
||||
));
|
||||
]);
|
||||
$storage->save();
|
||||
|
||||
FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'bundle' => 'entity_test',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'min' => $minimum, 'max' => $maximum, 'prefix' => 'ThePrefix',
|
||||
)
|
||||
]
|
||||
])->save();
|
||||
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'number',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => '4'
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
entity_get_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'number_integer',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'prefix_suffix' => FALSE,
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
|
||||
// Check the storage schema.
|
||||
$expected = array(
|
||||
'columns' => array(
|
||||
'value' => array(
|
||||
$expected = [
|
||||
'columns' => [
|
||||
'value' => [
|
||||
'type' => 'int',
|
||||
'unsigned' => '',
|
||||
'size' => 'normal'
|
||||
),
|
||||
),
|
||||
'unique keys' => array(),
|
||||
'indexes' => array(),
|
||||
'foreign keys' => array()
|
||||
);
|
||||
],
|
||||
],
|
||||
'unique keys' => [],
|
||||
'indexes' => [],
|
||||
'foreign keys' => []
|
||||
];
|
||||
$this->assertEqual($storage->getSchema(), $expected);
|
||||
|
||||
// Display creation form.
|
||||
@@ -186,84 +186,84 @@ class NumberFieldTest extends WebTestBase {
|
||||
|
||||
// Submit a valid integer
|
||||
$value = rand($minimum, $maximum);
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
|
||||
// Try to set a value below the minimum value
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $minimum - 1,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name must be higher than or equal to %minimum.', array('%name' => $field_name, '%minimum' => $minimum)), 'Correctly failed to save integer value less than minimum allowed value.');
|
||||
$this->assertRaw(t('%name must be higher than or equal to %minimum.', ['%name' => $field_name, '%minimum' => $minimum]), 'Correctly failed to save integer value less than minimum allowed value.');
|
||||
|
||||
// Try to set a decimal value
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => 1.5,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name is not a valid number.', array('%name' => $field_name)), 'Correctly failed to save decimal value to integer field.');
|
||||
$this->assertRaw(t('%name is not a valid number.', ['%name' => $field_name]), 'Correctly failed to save decimal value to integer field.');
|
||||
|
||||
// Try to set a value above the maximum value
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $maximum + 1,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name must be lower than or equal to %maximum.', array('%name' => $field_name, '%maximum' => $maximum)), 'Correctly failed to save integer value greater than maximum allowed value.');
|
||||
$this->assertRaw(t('%name must be lower than or equal to %maximum.', ['%name' => $field_name, '%maximum' => $maximum]), 'Correctly failed to save integer value greater than maximum allowed value.');
|
||||
|
||||
// Try to set a wrong integer value.
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => '20-40',
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name must be a number.', array('%name' => $field_name)), 'Correctly failed to save wrong integer value.');
|
||||
$this->assertRaw(t('%name must be a number.', ['%name' => $field_name]), 'Correctly failed to save wrong integer value.');
|
||||
|
||||
// Test with valid entries.
|
||||
$valid_entries = array(
|
||||
$valid_entries = [
|
||||
'-1234',
|
||||
'0',
|
||||
'1234',
|
||||
);
|
||||
];
|
||||
|
||||
foreach ($valid_entries as $valid_entry) {
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $valid_entry,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
$this->assertRaw($valid_entry, 'Value is displayed.');
|
||||
$this->assertNoFieldByXpath('//div[@content="' . $valid_entry . '"]', NULL, 'The "content" attribute is not present since the Prefix is not being displayed');
|
||||
}
|
||||
|
||||
// Test for the content attribute when a Prefix is displayed. Presumably this also tests for the attribute when a Suffix is displayed.
|
||||
entity_get_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'number_integer',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'prefix_suffix' => TRUE,
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
$integer_value = '123';
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $integer_value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
$this->drupalGet('entity_test/' . $id);
|
||||
$this->assertFieldByXPath('//div[@content="' . $integer_value . '"]', 'ThePrefix' . $integer_value, 'The "content" attribute has been set to the value of the field, and the prefix is being displayed.');
|
||||
}
|
||||
@@ -271,14 +271,14 @@ class NumberFieldTest extends WebTestBase {
|
||||
/**
|
||||
* Test float field.
|
||||
*/
|
||||
function testNumberFloatField() {
|
||||
public function testNumberFloatField() {
|
||||
// Create a field with settings to validate.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'float',
|
||||
))->save();
|
||||
])->save();
|
||||
|
||||
FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
@@ -287,18 +287,18 @@ class NumberFieldTest extends WebTestBase {
|
||||
])->save();
|
||||
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'number',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => '0.00'
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
|
||||
entity_get_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => 'number_decimal',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display creation form.
|
||||
@@ -308,13 +308,13 @@ class NumberFieldTest extends WebTestBase {
|
||||
|
||||
// Submit a signed decimal value within the allowed precision and scale.
|
||||
$value = '-1234.5678';
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
|
||||
// Ensure that the 'number_decimal' formatter displays the number with the
|
||||
// expected rounding.
|
||||
@@ -322,113 +322,113 @@ class NumberFieldTest extends WebTestBase {
|
||||
$this->assertRaw(round($value, 2));
|
||||
|
||||
// Try to create entries with more than one decimal separator; assert fail.
|
||||
$wrong_entries = array(
|
||||
$wrong_entries = [
|
||||
'3.14.159',
|
||||
'0..45469',
|
||||
'..4589',
|
||||
'6.459.52',
|
||||
'6.3..25',
|
||||
);
|
||||
];
|
||||
|
||||
foreach ($wrong_entries as $wrong_entry) {
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $wrong_entry,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name must be a number.', array('%name' => $field_name)), 'Correctly failed to save float value with more than one decimal point.');
|
||||
$this->assertRaw(t('%name must be a number.', ['%name' => $field_name]), 'Correctly failed to save float value with more than one decimal point.');
|
||||
}
|
||||
|
||||
// Try to create entries with minus sign not in the first position.
|
||||
$wrong_entries = array(
|
||||
$wrong_entries = [
|
||||
'3-3',
|
||||
'4-',
|
||||
'1.3-',
|
||||
'1.2-4',
|
||||
'-10-10',
|
||||
);
|
||||
];
|
||||
|
||||
foreach ($wrong_entries as $wrong_entry) {
|
||||
$this->drupalGet('entity_test/add');
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $wrong_entry,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw(t('%name must be a number.', array('%name' => $field_name)), 'Correctly failed to save float value with minus sign in the wrong position.');
|
||||
$this->assertRaw(t('%name must be a number.', ['%name' => $field_name]), 'Correctly failed to save float value with minus sign in the wrong position.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test default formatter behavior
|
||||
*/
|
||||
function testNumberFormatter() {
|
||||
public function testNumberFormatter() {
|
||||
$type = Unicode::strtolower($this->randomMachineName());
|
||||
$float_field = Unicode::strtolower($this->randomMachineName());
|
||||
$integer_field = Unicode::strtolower($this->randomMachineName());
|
||||
$thousand_separators = array('', '.', ',', ' ', chr(8201), "'");
|
||||
$decimal_separators = array('.', ',');
|
||||
$thousand_separators = ['', '.', ',', ' ', chr(8201), "'"];
|
||||
$decimal_separators = ['.', ','];
|
||||
$prefix = $this->randomMachineName();
|
||||
$suffix = $this->randomMachineName();
|
||||
$random_float = rand(0, pow(10, 6));
|
||||
$random_integer = rand(0, pow(10, 6));
|
||||
|
||||
// Create a content type containing float and integer fields.
|
||||
$this->drupalCreateContentType(array('type' => $type));
|
||||
$this->drupalCreateContentType(['type' => $type]);
|
||||
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => $float_field,
|
||||
'entity_type' => 'node',
|
||||
'type' => 'float',
|
||||
))->save();
|
||||
])->save();
|
||||
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => $integer_field,
|
||||
'entity_type' => 'node',
|
||||
'type' => 'integer',
|
||||
))->save();
|
||||
])->save();
|
||||
|
||||
FieldConfig::create([
|
||||
'field_name' => $float_field,
|
||||
'entity_type' => 'node',
|
||||
'bundle' => $type,
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'prefix' => $prefix,
|
||||
'suffix' => $suffix
|
||||
),
|
||||
],
|
||||
])->save();
|
||||
|
||||
FieldConfig::create([
|
||||
'field_name' => $integer_field,
|
||||
'entity_type' => 'node',
|
||||
'bundle' => $type,
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'prefix' => $prefix,
|
||||
'suffix' => $suffix
|
||||
),
|
||||
],
|
||||
])->save();
|
||||
|
||||
entity_get_form_display('node', $type, 'default')
|
||||
->setComponent($float_field, array(
|
||||
->setComponent($float_field, [
|
||||
'type' => 'number',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => '0.00'
|
||||
),
|
||||
))
|
||||
->setComponent($integer_field, array(
|
||||
],
|
||||
])
|
||||
->setComponent($integer_field, [
|
||||
'type' => 'number',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => '0.00'
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
|
||||
entity_get_display('node', $type, 'default')
|
||||
->setComponent($float_field, array(
|
||||
->setComponent($float_field, [
|
||||
'type' => 'number_decimal',
|
||||
))
|
||||
->setComponent($integer_field, array(
|
||||
])
|
||||
->setComponent($integer_field, [
|
||||
'type' => 'number_unformatted',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Create a node to test formatters.
|
||||
@@ -448,15 +448,15 @@ class NumberFieldTest extends WebTestBase {
|
||||
$decimal_separator = $decimal_separators[array_rand($decimal_separators)];
|
||||
$scale = rand(0, 10);
|
||||
|
||||
$this->drupalPostAjaxForm(NULL, array(), "${float_field}_settings_edit");
|
||||
$edit = array(
|
||||
$this->drupalPostAjaxForm(NULL, [], "${float_field}_settings_edit");
|
||||
$edit = [
|
||||
"fields[${float_field}][settings_edit_form][settings][prefix_suffix]" => TRUE,
|
||||
"fields[${float_field}][settings_edit_form][settings][scale]" => $scale,
|
||||
"fields[${float_field}][settings_edit_form][settings][decimal_separator]" => $decimal_separator,
|
||||
"fields[${float_field}][settings_edit_form][settings][thousand_separator]" => $thousand_separator,
|
||||
);
|
||||
];
|
||||
$this->drupalPostAjaxForm(NULL, $edit, "${float_field}_plugin_settings_update");
|
||||
$this->drupalPostForm(NULL, array(), t('Save'));
|
||||
$this->drupalPostForm(NULL, [], t('Save'));
|
||||
|
||||
// Check number_decimal and number_unformatted formatters behavior.
|
||||
$this->drupalGet('node/' . $node->id());
|
||||
@@ -466,21 +466,21 @@ class NumberFieldTest extends WebTestBase {
|
||||
|
||||
// Configure the number_decimal formatter.
|
||||
entity_get_display('node', $type, 'default')
|
||||
->setComponent($integer_field, array(
|
||||
->setComponent($integer_field, [
|
||||
'type' => 'number_integer',
|
||||
))
|
||||
])
|
||||
->save();
|
||||
$this->drupalGet("admin/structure/types/manage/$type/display");
|
||||
|
||||
$thousand_separator = $thousand_separators[array_rand($thousand_separators)];
|
||||
|
||||
$this->drupalPostAjaxForm(NULL, array(), "${integer_field}_settings_edit");
|
||||
$edit = array(
|
||||
$this->drupalPostAjaxForm(NULL, [], "${integer_field}_settings_edit");
|
||||
$edit = [
|
||||
"fields[${integer_field}][settings_edit_form][settings][prefix_suffix]" => FALSE,
|
||||
"fields[${integer_field}][settings_edit_form][settings][thousand_separator]" => $thousand_separator,
|
||||
);
|
||||
];
|
||||
$this->drupalPostAjaxForm(NULL, $edit, "${integer_field}_plugin_settings_update");
|
||||
$this->drupalPostForm(NULL, array(), t('Save'));
|
||||
$this->drupalPostForm(NULL, [], t('Save'));
|
||||
|
||||
// Check number_integer formatter behavior.
|
||||
$this->drupalGet('node/' . $node->id());
|
||||
@@ -492,14 +492,14 @@ class NumberFieldTest extends WebTestBase {
|
||||
/**
|
||||
* Tests setting the minimum value of a float field through the interface.
|
||||
*/
|
||||
function testCreateNumberFloatField() {
|
||||
public function testCreateNumberFloatField() {
|
||||
// Create a float field.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'float',
|
||||
))->save();
|
||||
])->save();
|
||||
|
||||
$field = FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
@@ -517,14 +517,14 @@ class NumberFieldTest extends WebTestBase {
|
||||
/**
|
||||
* Tests setting the minimum value of a decimal field through the interface.
|
||||
*/
|
||||
function testCreateNumberDecimalField() {
|
||||
public function testCreateNumberDecimalField() {
|
||||
// Create a decimal field.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
FieldStorageConfig::create(array(
|
||||
FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => 'decimal',
|
||||
))->save();
|
||||
])->save();
|
||||
|
||||
$field = FieldConfig::create([
|
||||
'field_name' => $field_name,
|
||||
@@ -542,18 +542,18 @@ class NumberFieldTest extends WebTestBase {
|
||||
/**
|
||||
* Helper function to set the minimum value of a field.
|
||||
*/
|
||||
function assertSetMinimumValue($field, $minimum_value) {
|
||||
public function assertSetMinimumValue($field, $minimum_value) {
|
||||
$field_configuration_url = 'entity_test/structure/entity_test/fields/entity_test.entity_test.' . $field->getName();
|
||||
|
||||
// Set the minimum value.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'settings[min]' => $minimum_value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm($field_configuration_url, $edit, t('Save settings'));
|
||||
// Check if an error message is shown.
|
||||
$this->assertNoRaw(t('%name is not a valid number.', array('%name' => t('Minimum'))), 'Saved ' . gettype($minimum_value) . ' value as minimal value on a ' . $field->getType() . ' field');
|
||||
$this->assertNoRaw(t('%name is not a valid number.', ['%name' => t('Minimum')]), 'Saved ' . gettype($minimum_value) . ' value as minimal value on a ' . $field->getType() . ' field');
|
||||
// Check if a success message is shown.
|
||||
$this->assertRaw(t('Saved %label configuration.', array('%label' => $field->getLabel())));
|
||||
$this->assertRaw(t('Saved %label configuration.', ['%label' => $field->getLabel()]));
|
||||
// Check if the minimum value was actually set.
|
||||
$this->drupalGet($field_configuration_url);
|
||||
$this->assertFieldById('edit-settings-min', $minimum_value, 'Minimal ' . gettype($minimum_value) . ' value was set on a ' . $field->getType() . ' field.');
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Drupal\field\Tests\String;
|
||||
|
||||
use Drupal\Component\Utility\Unicode;
|
||||
use Drupal\entity_test\Entity\EntityTest;
|
||||
use Drupal\field\Entity\FieldConfig;
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
use Drupal\field\Entity\FieldStorageConfig;
|
||||
@@ -19,7 +20,7 @@ class StringFieldTest extends WebTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('entity_test', 'file');
|
||||
public static $modules = ['entity_test', 'file'];
|
||||
|
||||
/**
|
||||
* A user without any special permissions.
|
||||
@@ -31,7 +32,7 @@ class StringFieldTest extends WebTestBase {
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->webUser = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
|
||||
$this->webUser = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
|
||||
$this->drupalLogin($this->webUser);
|
||||
}
|
||||
|
||||
@@ -40,7 +41,7 @@ class StringFieldTest extends WebTestBase {
|
||||
/**
|
||||
* Test widgets.
|
||||
*/
|
||||
function testTextfieldWidgets() {
|
||||
public function testTextfieldWidgets() {
|
||||
$this->_testTextfieldWidgets('string', 'string_textfield');
|
||||
$this->_testTextfieldWidgets('string_long', 'string_textarea');
|
||||
}
|
||||
@@ -48,14 +49,14 @@ class StringFieldTest extends WebTestBase {
|
||||
/**
|
||||
* Helper function for testTextfieldWidgets().
|
||||
*/
|
||||
function _testTextfieldWidgets($field_type, $widget_type) {
|
||||
public function _testTextfieldWidgets($field_type, $widget_type) {
|
||||
// Create a field.
|
||||
$field_name = Unicode::strtolower($this->randomMachineName());
|
||||
$field_storage = FieldStorageConfig::create(array(
|
||||
$field_storage = FieldStorageConfig::create([
|
||||
'field_name' => $field_name,
|
||||
'entity_type' => 'entity_test',
|
||||
'type' => $field_type
|
||||
));
|
||||
]);
|
||||
$field_storage->save();
|
||||
FieldConfig::create([
|
||||
'field_storage' => $field_storage,
|
||||
@@ -63,12 +64,12 @@ class StringFieldTest extends WebTestBase {
|
||||
'label' => $this->randomMachineName() . '_label',
|
||||
])->save();
|
||||
entity_get_form_display('entity_test', 'entity_test', 'default')
|
||||
->setComponent($field_name, array(
|
||||
->setComponent($field_name, [
|
||||
'type' => $widget_type,
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => 'A placeholder on ' . $widget_type,
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
entity_get_display('entity_test', 'entity_test', 'full')
|
||||
->setComponent($field_name)
|
||||
@@ -78,20 +79,20 @@ class StringFieldTest extends WebTestBase {
|
||||
$this->drupalGet('entity_test/add');
|
||||
$this->assertFieldByName("{$field_name}[0][value]", '', 'Widget is displayed');
|
||||
$this->assertNoFieldByName("{$field_name}[0][format]", '1', 'Format selector is not displayed');
|
||||
$this->assertRaw(format_string('placeholder="A placeholder on @widget_type"', array('@widget_type' => $widget_type)));
|
||||
$this->assertRaw(format_string('placeholder="A placeholder on @widget_type"', ['@widget_type' => $widget_type]));
|
||||
|
||||
// Submit with some value.
|
||||
$value = $this->randomMachineName();
|
||||
$edit = array(
|
||||
$edit = [
|
||||
"{$field_name}[0][value]" => $value,
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
preg_match('|entity_test/manage/(\d+)|', $this->url, $match);
|
||||
$id = $match[1];
|
||||
$this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
|
||||
$this->assertText(t('entity_test @id has been created.', ['@id' => $id]), 'Entity was created');
|
||||
|
||||
// Display the entity.
|
||||
$entity = entity_load('entity_test', $id);
|
||||
$entity = EntityTest::load($id);
|
||||
$display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full');
|
||||
$content = $display->build($entity);
|
||||
$this->setRawContent(\Drupal::service('renderer')->renderRoot($content));
|
||||
|
||||
@@ -25,7 +25,7 @@ abstract class FieldTestBase extends ViewTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('node', 'field_test_views');
|
||||
public static $modules = ['node', 'field_test_views'];
|
||||
|
||||
/**
|
||||
* Stores the field definitions used by the test.
|
||||
@@ -51,25 +51,25 @@ abstract class FieldTestBase extends ViewTestBase {
|
||||
'name' => 'page',
|
||||
])->save();
|
||||
|
||||
ViewTestData::createTestViews(get_class($this), array('field_test_views'));
|
||||
ViewTestData::createTestViews(get_class($this), ['field_test_views']);
|
||||
}
|
||||
|
||||
function setUpFieldStorages($amount = 3, $type = 'string') {
|
||||
public function setUpFieldStorages($amount = 3, $type = 'string') {
|
||||
// Create three fields.
|
||||
$field_names = array();
|
||||
$field_names = [];
|
||||
for ($i = 0; $i < $amount; $i++) {
|
||||
$field_names[$i] = 'field_name_' . $i;
|
||||
$this->fieldStorages[$i] = FieldStorageConfig::create(array(
|
||||
$this->fieldStorages[$i] = FieldStorageConfig::create([
|
||||
'field_name' => $field_names[$i],
|
||||
'entity_type' => 'node',
|
||||
'type' => $type,
|
||||
));
|
||||
]);
|
||||
$this->fieldStorages[$i]->save();
|
||||
}
|
||||
return $field_names;
|
||||
}
|
||||
|
||||
function setUpFields($bundle = 'page') {
|
||||
public function setUpFields($bundle = 'page') {
|
||||
foreach ($this->fieldStorages as $key => $field_storage) {
|
||||
$this->fields[$key] = FieldConfig::create([
|
||||
'field_storage' => $field_storage,
|
||||
|
||||
@@ -19,14 +19,14 @@ class FieldUITest extends FieldTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $testViews = array('test_view_fieldapi');
|
||||
public static $testViews = ['test_view_fieldapi'];
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('views_ui');
|
||||
public static $modules = ['views_ui'];
|
||||
|
||||
/**
|
||||
* A user with the 'administer views' permission.
|
||||
@@ -41,7 +41,7 @@ class FieldUITest extends FieldTestBase {
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->account = $this->drupalCreateUser(array('administer views'));
|
||||
$this->account = $this->drupalCreateUser(['administer views']);
|
||||
$this->drupalLogin($this->account);
|
||||
|
||||
$this->setUpFieldStorages(1, 'text');
|
||||
@@ -56,26 +56,26 @@ class FieldUITest extends FieldTestBase {
|
||||
$this->drupalGet($url);
|
||||
|
||||
// Tests the available formatter options.
|
||||
$result = $this->xpath('//select[@id=:id]/option', array(':id' => 'edit-options-type'));
|
||||
$result = $this->xpath('//select[@id=:id]/option', [':id' => 'edit-options-type']);
|
||||
$options = array_map(function($item) {
|
||||
return (string) $item->attributes()->value[0];
|
||||
}, $result);
|
||||
// @todo Replace this sort by assertArray once it's in.
|
||||
sort($options, SORT_STRING);
|
||||
$this->assertEqual($options, array('text_default', 'text_trimmed'), 'The text formatters for a simple text field appear as expected.');
|
||||
$this->assertEqual($options, ['text_default', 'text_trimmed'], 'The text formatters for a simple text field appear as expected.');
|
||||
|
||||
$this->drupalPostForm(NULL, array('options[type]' => 'text_trimmed'), t('Apply'));
|
||||
$this->drupalPostForm(NULL, ['options[type]' => 'text_trimmed'], t('Apply'));
|
||||
|
||||
$this->drupalGet($url);
|
||||
$this->assertOptionSelected('edit-options-type', 'text_trimmed');
|
||||
|
||||
$random_number = rand(100, 400);
|
||||
$this->drupalPostForm(NULL, array('options[settings][trim_length]' => $random_number), t('Apply'));
|
||||
$this->drupalPostForm(NULL, ['options[settings][trim_length]' => $random_number], t('Apply'));
|
||||
$this->drupalGet($url);
|
||||
$this->assertFieldByName('options[settings][trim_length]', $random_number, 'The formatter setting got saved.');
|
||||
|
||||
// Save the view and test whether the settings are saved.
|
||||
$this->drupalPostForm('admin/structure/views/view/test_view_fieldapi', array(), t('Save'));
|
||||
$this->drupalPostForm('admin/structure/views/view/test_view_fieldapi', [], t('Save'));
|
||||
$view = Views::getView('test_view_fieldapi');
|
||||
$view->initHandlers();
|
||||
$this->assertEqual($view->field['field_name_0']->options['type'], 'text_trimmed');
|
||||
@@ -101,7 +101,7 @@ class FieldUITest extends FieldTestBase {
|
||||
*/
|
||||
public function testHandlerUIAggregation() {
|
||||
// Enable aggregation.
|
||||
$edit = array('group_by' => '1');
|
||||
$edit = ['group_by' => '1'];
|
||||
$this->drupalPostForm('admin/structure/views/nojs/display/test_view_fieldapi/default/group_by', $edit, t('Apply'));
|
||||
|
||||
$url = "admin/structure/views/nojs/handler/test_view_fieldapi/default/field/field_name_0";
|
||||
@@ -110,13 +110,13 @@ class FieldUITest extends FieldTestBase {
|
||||
|
||||
// Test the click sort column options.
|
||||
// Tests the available formatter options.
|
||||
$result = $this->xpath('//select[@id=:id]/option', array(':id' => 'edit-options-click-sort-column'));
|
||||
$result = $this->xpath('//select[@id=:id]/option', [':id' => 'edit-options-click-sort-column']);
|
||||
$options = array_map(function($item) {
|
||||
return (string) $item->attributes()->value[0];
|
||||
}, $result);
|
||||
sort($options, SORT_STRING);
|
||||
|
||||
$this->assertEqual($options, array('format', 'value'), 'The expected sort field options were found.');
|
||||
$this->assertEqual($options, ['format', 'value'], 'The expected sort field options were found.');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,7 +138,7 @@ class FieldUITest extends FieldTestBase {
|
||||
$field->save();
|
||||
|
||||
$url = "admin/structure/views/nojs/add-handler/test_view_fieldapi/default/filter";
|
||||
$this->drupalPostForm($url, ['name[node__' . $field_name . '.' . $field_name . '_value]' => TRUE], t('Add and configure @handler', array('@handler' => t('filter criteria'))));
|
||||
$this->drupalPostForm($url, ['name[node__' . $field_name . '.' . $field_name . '_value]' => TRUE], t('Add and configure @handler', ['@handler' => t('filter criteria')]));
|
||||
$this->assertResponse(200);
|
||||
// Verify that using a boolean field as a filter also results in using the
|
||||
// boolean plugin.
|
||||
@@ -146,6 +146,16 @@ class FieldUITest extends FieldTestBase {
|
||||
$this->assertEqual(t('True'), (string) $option[0]);
|
||||
$option = $this->xpath('//label[@for="edit-options-value-0"]');
|
||||
$this->assertEqual(t('False'), (string) $option[0]);
|
||||
|
||||
// Expose the filter and see if the 'Any' option is added and if we can save
|
||||
// it.
|
||||
$this->drupalPostForm(NULL, [], 'Expose filter');
|
||||
$option = $this->xpath('//label[@for="edit-options-value-all"]');
|
||||
$this->assertEqual(t('- Any -'), (string) $option[0]);
|
||||
$this->drupalPostForm(NULL, ['options[value]' => 'All', 'options[expose][required]' => FALSE], 'Apply');
|
||||
$this->drupalPostForm(NULL, [], 'Save');
|
||||
$this->drupalGet('/admin/structure/views/nojs/handler/test_view_fieldapi/default/filter/field_boolean_value');
|
||||
$this->assertFieldChecked('edit-options-value-all');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,14 +22,14 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $modules = array('node', 'field_test');
|
||||
public static $modules = ['node', 'field_test'];
|
||||
|
||||
/**
|
||||
* Views used by this test.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $testViews = array('test_view_fieldapi');
|
||||
public static $testViews = ['test_view_fieldapi'];
|
||||
|
||||
/**
|
||||
* Test nodes.
|
||||
@@ -48,47 +48,47 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
$this->setUpFieldStorages(3);
|
||||
|
||||
// Setup a field with cardinality > 1.
|
||||
$this->fieldStorages[3] = FieldStorageConfig::create(array(
|
||||
$this->fieldStorages[3] = FieldStorageConfig::create([
|
||||
'field_name' => 'field_name_3',
|
||||
'entity_type' => 'node',
|
||||
'type' => 'string',
|
||||
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
|
||||
));
|
||||
]);
|
||||
$this->fieldStorages[3]->save();
|
||||
// Setup a field that will have no value.
|
||||
$this->fieldStorages[4] = FieldStorageConfig::create(array(
|
||||
$this->fieldStorages[4] = FieldStorageConfig::create([
|
||||
'field_name' => 'field_name_4',
|
||||
'entity_type' => 'node',
|
||||
'type' => 'string',
|
||||
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
|
||||
));
|
||||
]);
|
||||
$this->fieldStorages[4]->save();
|
||||
|
||||
// Setup a text field.
|
||||
$this->fieldStorages[5] = FieldStorageConfig::create(array(
|
||||
$this->fieldStorages[5] = FieldStorageConfig::create([
|
||||
'field_name' => 'field_name_5',
|
||||
'entity_type' => 'node',
|
||||
'type' => 'text',
|
||||
));
|
||||
]);
|
||||
$this->fieldStorages[5]->save();
|
||||
|
||||
// Setup a text field with access control.
|
||||
// @see field_test_entity_field_access()
|
||||
$this->fieldStorages[6] = FieldStorageConfig::create(array(
|
||||
$this->fieldStorages[6] = FieldStorageConfig::create([
|
||||
'field_name' => 'field_no_view_access',
|
||||
'entity_type' => 'node',
|
||||
'type' => 'text',
|
||||
));
|
||||
]);
|
||||
$this->fieldStorages[6]->save();
|
||||
|
||||
$this->setUpFields();
|
||||
|
||||
// Create some nodes.
|
||||
$this->nodes = array();
|
||||
$this->nodes = [];
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$edit = array('type' => 'page');
|
||||
$edit = ['type' => 'page'];
|
||||
|
||||
foreach (array(0, 1, 2, 5) as $key) {
|
||||
foreach ([0, 1, 2, 5] as $key) {
|
||||
$field_storage = $this->fieldStorages[$key];
|
||||
$edit[$field_storage->getName()][0]['value'] = $this->randomMachineName(8);
|
||||
}
|
||||
@@ -98,7 +98,7 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
$edit[$this->fieldStorages[3]->getName()][$j]['value'] = $this->randomMachineName(8);
|
||||
}
|
||||
// Set this field to be empty.
|
||||
$edit[$this->fieldStorages[4]->getName()] = array(array('value' => NULL));
|
||||
$edit[$this->fieldStorages[4]->getName()] = [['value' => NULL]];
|
||||
|
||||
$this->nodes[$i] = $this->drupalCreateNode($edit);
|
||||
}
|
||||
@@ -171,9 +171,9 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
$view = Views::getView('test_view_fieldapi');
|
||||
$this->prepareView($view);
|
||||
$view->displayHandlers->get('default')->options['fields'][$this->fieldStorages[5]->getName()]['type'] = 'text_trimmed';
|
||||
$view->displayHandlers->get('default')->options['fields'][$this->fieldStorages[5]->getName()]['settings'] = array(
|
||||
$view->displayHandlers->get('default')->options['fields'][$this->fieldStorages[5]->getName()]['settings'] = [
|
||||
'trim_length' => 3,
|
||||
);
|
||||
];
|
||||
$this->executeView($view);
|
||||
|
||||
// Make sure that the formatter works as expected.
|
||||
@@ -196,7 +196,7 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$rendered_field = $view->style_plugin->getField($i, $field_name);
|
||||
$items = array();
|
||||
$items = [];
|
||||
$pure_items = $this->nodes[$i]->{$field_name}->getValue();
|
||||
$pure_items = array_splice($pure_items, 0, 3);
|
||||
foreach ($pure_items as $j => $item) {
|
||||
@@ -218,7 +218,7 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$rendered_field = $view->style_plugin->getField($i, $field_name);
|
||||
$items = array();
|
||||
$items = [];
|
||||
$pure_items = $this->nodes[$i]->{$field_name}->getValue();
|
||||
$pure_items = array_splice($pure_items, 1, 3);
|
||||
foreach ($pure_items as $j => $item) {
|
||||
@@ -238,7 +238,7 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$rendered_field = $view->style_plugin->getField($i, $field_name);
|
||||
$items = array();
|
||||
$items = [];
|
||||
$pure_items = $this->nodes[$i]->{$field_name}->getValue();
|
||||
array_splice($pure_items, 0, -3);
|
||||
$pure_items = array_reverse($pure_items);
|
||||
@@ -259,7 +259,7 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$rendered_field = $view->style_plugin->getField($i, $field_name);
|
||||
$items = array();
|
||||
$items = [];
|
||||
$pure_items = $this->nodes[$i]->{$field_name}->getValue();
|
||||
$items[] = $pure_items[0]['value'];
|
||||
$items[] = $pure_items[4]['value'];
|
||||
@@ -277,7 +277,7 @@ class HandlerFieldFieldTest extends FieldTestBase {
|
||||
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$rendered_field = $view->style_plugin->getField($i, $field_name);
|
||||
$items = array();
|
||||
$items = [];
|
||||
$pure_items = $this->nodes[$i]->{$field_name}->getValue();
|
||||
$pure_items = array_splice($pure_items, 0, 3);
|
||||
foreach ($pure_items as $j => $item) {
|
||||
|
||||
@@ -18,22 +18,22 @@ class reEnableModuleFieldTest extends WebTestBase {
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array(
|
||||
public static $modules = [
|
||||
'field',
|
||||
'node',
|
||||
// We use telephone module instead of test_field because test_field is
|
||||
// hidden and does not display on the admin/modules page.
|
||||
'telephone'
|
||||
);
|
||||
];
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->drupalCreateContentType(array('type' => 'article'));
|
||||
$this->drupalLogin($this->drupalCreateUser(array(
|
||||
$this->drupalCreateContentType(['type' => 'article']);
|
||||
$this->drupalLogin($this->drupalCreateUser([
|
||||
'create article content',
|
||||
'edit own article content',
|
||||
)));
|
||||
]));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -41,14 +41,14 @@ class reEnableModuleFieldTest extends WebTestBase {
|
||||
*
|
||||
* @see field_system_info_alter()
|
||||
*/
|
||||
function testReEnabledField() {
|
||||
public function testReEnabledField() {
|
||||
|
||||
// Add a telephone field to the article content type.
|
||||
$field_storage = FieldStorageConfig::create(array(
|
||||
$field_storage = FieldStorageConfig::create([
|
||||
'field_name' => 'field_telephone',
|
||||
'entity_type' => 'node',
|
||||
'type' => 'telephone',
|
||||
));
|
||||
]);
|
||||
$field_storage->save();
|
||||
FieldConfig::create([
|
||||
'field_storage' => $field_storage,
|
||||
@@ -57,19 +57,19 @@ class reEnableModuleFieldTest extends WebTestBase {
|
||||
])->save();
|
||||
|
||||
entity_get_form_display('node', 'article', 'default')
|
||||
->setComponent('field_telephone', array(
|
||||
->setComponent('field_telephone', [
|
||||
'type' => 'telephone_default',
|
||||
'settings' => array(
|
||||
'settings' => [
|
||||
'placeholder' => '123-456-7890',
|
||||
),
|
||||
))
|
||||
],
|
||||
])
|
||||
->save();
|
||||
|
||||
entity_get_display('node', 'article', 'default')
|
||||
->setComponent('field_telephone', array(
|
||||
->setComponent('field_telephone', [
|
||||
'type' => 'telephone_link',
|
||||
'weight' => 1,
|
||||
))
|
||||
])
|
||||
->save();
|
||||
|
||||
// Display the article node form and verify the telephone widget is present.
|
||||
@@ -78,16 +78,16 @@ class reEnableModuleFieldTest extends WebTestBase {
|
||||
|
||||
// Submit an article node with a telephone field so data exist for the
|
||||
// field.
|
||||
$edit = array(
|
||||
$edit = [
|
||||
'title[0][value]' => $this->randomMachineName(),
|
||||
'field_telephone[0][value]' => "123456789",
|
||||
);
|
||||
];
|
||||
$this->drupalPostForm(NULL, $edit, t('Save'));
|
||||
$this->assertRaw('<a href="tel:123456789">');
|
||||
|
||||
// Test that the module can't be uninstalled from the UI while there is data
|
||||
// for it's fields.
|
||||
$admin_user = $this->drupalCreateUser(array('access administration pages', 'administer modules'));
|
||||
$admin_user = $this->drupalCreateUser(['access administration pages', 'administer modules']);
|
||||
$this->drupalLogin($admin_user);
|
||||
$this->drupalGet('admin/modules/uninstall');
|
||||
$this->assertText("The Telephone number field type is used in the following field: node.field_telephone");
|
||||
@@ -95,11 +95,11 @@ class reEnableModuleFieldTest extends WebTestBase {
|
||||
// Add another telephone field to a different entity type in order to test
|
||||
// the message for the case when multiple fields are blocking the
|
||||
// uninstallation of a module.
|
||||
$field_storage2 = entity_create('field_storage_config', array(
|
||||
$field_storage2 = entity_create('field_storage_config', [
|
||||
'field_name' => 'field_telephone_2',
|
||||
'entity_type' => 'user',
|
||||
'type' => 'telephone',
|
||||
));
|
||||
]);
|
||||
$field_storage2->save();
|
||||
FieldConfig::create([
|
||||
'field_storage' => $field_storage2,
|
||||
|
||||
Reference in New Issue
Block a user