Loading core/modules/migrate_drupal/src/Plugin/migrate/source/Variable.php +16 −23 Original line number Diff line number Diff line Loading @@ -13,9 +13,10 @@ * Depending on the configuration, this returns zero or a single row and as such * is not a good example for any normal source class returning multiple rows. * * The configuration may contain optional and required variable names. If any of * the required variables is missing in the source, then the source will return * zero rows. * The configuration may contain two lists of variable names, variables and * variables_no_row_if_missing. If any of the variables listed in * variables_no_row_if_missing is missing in the source, then the source will * return zero rows. * * With this configuration, the source will return one row even when the * "filter_fallback_format" variable isn't available: Loading @@ -31,12 +32,12 @@ * @code * source: * plugin: variable * variables_required: * variables_no_row_if_missing: * - filter_fallback_format * @endcode * * The optional and the required variable names are always merged together. All * of the following configurations are valid: * The variables and the variables_no_row_if_missing lists are always merged * together. All of the following configurations are valid: * @code * source: * plugin: variable Loading @@ -44,7 +45,7 @@ * - book_child_type * - book_block_mode * - book_allowed_types * variables_required: * variables_no_row_if_missing: * - book_child_type * - book_block_mode * - book_allowed_types Loading @@ -54,12 +55,12 @@ * variables: * - book_child_type * - book_block_mode * variables_required: * variables_no_row_if_missing: * - book_allowed_types * * source: * plugin: variable * variables_required: * variables_no_row_if_missing: * - book_child_type * - book_block_mode * - book_allowed_types Loading @@ -80,28 +81,20 @@ class Variable extends DrupalSqlBase { protected $variables; /** * The optional variables. * The variables that result in no row if any are missing from the source. * * @var array */ protected $optionalVariables; /** * The required variables. * * @var array */ protected $requiredVariables; protected $variablesNoRowIfMissing; /** * {@inheritdoc} */ public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityTypeManagerInterface $entity_type_manager) { parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_type_manager); $this->requiredVariables = $this->configuration['variables_required'] ?? []; $this->variablesNoRowIfMissing = $this->configuration['variables_no_row_if_missing'] ?? []; $variables = $this->configuration['variables'] ?? []; $this->variables = array_unique(array_merge(array_values($variables), array_values($this->requiredVariables))); $this->optionalVariables = array_diff($this->variables, $this->requiredVariables); $this->variables = array_unique(array_merge(array_values($variables), array_values($this->variablesNoRowIfMissing))); } /** Loading Loading @@ -134,12 +127,12 @@ protected function values() { * {@inheritdoc} */ public function count($refresh = FALSE) { if (empty($this->requiredVariables)) { if (empty($this->variablesNoRowIfMissing)) { return 1; } $variable_names = array_keys($this->query()->execute()->fetchAllAssoc('name')); if (!empty(array_diff($this->requiredVariables, $variable_names))) { if (!empty(array_diff($this->variablesNoRowIfMissing, $variable_names))) { return 0; } return 1; Loading core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/VariableTest.php +12 −12 Original line number Diff line number Diff line Loading @@ -93,8 +93,8 @@ public function providerSource() { ], ]; // Test cases with only 'variables_required' configuration. $variables_required_tests = [ // Test cases with only 'variables_no_row_if_missing' configuration. $variables_no_row_if_missing_tests = [ 'Two required variables, all of them are available' => [ 'source_data' => $source_data, 'expected_data' => [ Loading @@ -106,7 +106,7 @@ public function providerSource() { ], 'expected_count' => 1, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'foo', 'bar', ], Loading @@ -117,7 +117,7 @@ public function providerSource() { 'expected_data' => [], 'expected_count' => 0, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'foo', 'bar0', ], Loading @@ -133,7 +133,7 @@ public function providerSource() { ], 'expected_count' => 1, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'baz', ], ], Loading @@ -143,12 +143,12 @@ public function providerSource() { 'expected_data' => [], 'expected_count' => 0, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'bar0', ], ], ], // Test cases with both 'variables' and 'variables_required' // Test cases with both 'variables' and 'variables_no_row_if_missing' // configuration. 'One optional and two required variables, all of them are available' => [ 'source_data' => $source_data, Loading @@ -163,7 +163,7 @@ public function providerSource() { 'expected_count' => 1, 'configuration' => [ 'variables' => ['foo'], 'variables_required' => ['bar', 'baz'], 'variables_no_row_if_missing' => ['bar', 'baz'], ], ], 'One optional and two required variables, only one required is available' => [ Loading @@ -172,7 +172,7 @@ public function providerSource() { 'expected_count' => 0, 'configuration' => [ 'variables' => ['foo'], 'variables_required' => ['bar', 'foobar'], 'variables_no_row_if_missing' => ['bar', 'foobar'], ], ], 'Two optional and one required and available variable, every optional is missing' => [ Loading @@ -186,7 +186,7 @@ public function providerSource() { 'expected_count' => 1, 'configuration' => [ 'variables' => ['qux', 'waldo'], 'variables_required' => ['bar'], 'variables_no_row_if_missing' => ['bar'], ], ], 'Two available optional and a required, but missing variable' => [ Loading @@ -195,14 +195,14 @@ public function providerSource() { 'expected_count' => 0, 'configuration' => [ 'variables' => ['baz', 'foo'], 'variables_required' => [ 'variables_no_row_if_missing' => [ 'foo_bar_baz', ], ], ], ]; return $tests + $variables_required_tests; return $tests + $variables_no_row_if_missing_tests; } } Loading
core/modules/migrate_drupal/src/Plugin/migrate/source/Variable.php +16 −23 Original line number Diff line number Diff line Loading @@ -13,9 +13,10 @@ * Depending on the configuration, this returns zero or a single row and as such * is not a good example for any normal source class returning multiple rows. * * The configuration may contain optional and required variable names. If any of * the required variables is missing in the source, then the source will return * zero rows. * The configuration may contain two lists of variable names, variables and * variables_no_row_if_missing. If any of the variables listed in * variables_no_row_if_missing is missing in the source, then the source will * return zero rows. * * With this configuration, the source will return one row even when the * "filter_fallback_format" variable isn't available: Loading @@ -31,12 +32,12 @@ * @code * source: * plugin: variable * variables_required: * variables_no_row_if_missing: * - filter_fallback_format * @endcode * * The optional and the required variable names are always merged together. All * of the following configurations are valid: * The variables and the variables_no_row_if_missing lists are always merged * together. All of the following configurations are valid: * @code * source: * plugin: variable Loading @@ -44,7 +45,7 @@ * - book_child_type * - book_block_mode * - book_allowed_types * variables_required: * variables_no_row_if_missing: * - book_child_type * - book_block_mode * - book_allowed_types Loading @@ -54,12 +55,12 @@ * variables: * - book_child_type * - book_block_mode * variables_required: * variables_no_row_if_missing: * - book_allowed_types * * source: * plugin: variable * variables_required: * variables_no_row_if_missing: * - book_child_type * - book_block_mode * - book_allowed_types Loading @@ -80,28 +81,20 @@ class Variable extends DrupalSqlBase { protected $variables; /** * The optional variables. * The variables that result in no row if any are missing from the source. * * @var array */ protected $optionalVariables; /** * The required variables. * * @var array */ protected $requiredVariables; protected $variablesNoRowIfMissing; /** * {@inheritdoc} */ public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityTypeManagerInterface $entity_type_manager) { parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_type_manager); $this->requiredVariables = $this->configuration['variables_required'] ?? []; $this->variablesNoRowIfMissing = $this->configuration['variables_no_row_if_missing'] ?? []; $variables = $this->configuration['variables'] ?? []; $this->variables = array_unique(array_merge(array_values($variables), array_values($this->requiredVariables))); $this->optionalVariables = array_diff($this->variables, $this->requiredVariables); $this->variables = array_unique(array_merge(array_values($variables), array_values($this->variablesNoRowIfMissing))); } /** Loading Loading @@ -134,12 +127,12 @@ protected function values() { * {@inheritdoc} */ public function count($refresh = FALSE) { if (empty($this->requiredVariables)) { if (empty($this->variablesNoRowIfMissing)) { return 1; } $variable_names = array_keys($this->query()->execute()->fetchAllAssoc('name')); if (!empty(array_diff($this->requiredVariables, $variable_names))) { if (!empty(array_diff($this->variablesNoRowIfMissing, $variable_names))) { return 0; } return 1; Loading
core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/VariableTest.php +12 −12 Original line number Diff line number Diff line Loading @@ -93,8 +93,8 @@ public function providerSource() { ], ]; // Test cases with only 'variables_required' configuration. $variables_required_tests = [ // Test cases with only 'variables_no_row_if_missing' configuration. $variables_no_row_if_missing_tests = [ 'Two required variables, all of them are available' => [ 'source_data' => $source_data, 'expected_data' => [ Loading @@ -106,7 +106,7 @@ public function providerSource() { ], 'expected_count' => 1, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'foo', 'bar', ], Loading @@ -117,7 +117,7 @@ public function providerSource() { 'expected_data' => [], 'expected_count' => 0, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'foo', 'bar0', ], Loading @@ -133,7 +133,7 @@ public function providerSource() { ], 'expected_count' => 1, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'baz', ], ], Loading @@ -143,12 +143,12 @@ public function providerSource() { 'expected_data' => [], 'expected_count' => 0, 'configuration' => [ 'variables_required' => [ 'variables_no_row_if_missing' => [ 'bar0', ], ], ], // Test cases with both 'variables' and 'variables_required' // Test cases with both 'variables' and 'variables_no_row_if_missing' // configuration. 'One optional and two required variables, all of them are available' => [ 'source_data' => $source_data, Loading @@ -163,7 +163,7 @@ public function providerSource() { 'expected_count' => 1, 'configuration' => [ 'variables' => ['foo'], 'variables_required' => ['bar', 'baz'], 'variables_no_row_if_missing' => ['bar', 'baz'], ], ], 'One optional and two required variables, only one required is available' => [ Loading @@ -172,7 +172,7 @@ public function providerSource() { 'expected_count' => 0, 'configuration' => [ 'variables' => ['foo'], 'variables_required' => ['bar', 'foobar'], 'variables_no_row_if_missing' => ['bar', 'foobar'], ], ], 'Two optional and one required and available variable, every optional is missing' => [ Loading @@ -186,7 +186,7 @@ public function providerSource() { 'expected_count' => 1, 'configuration' => [ 'variables' => ['qux', 'waldo'], 'variables_required' => ['bar'], 'variables_no_row_if_missing' => ['bar'], ], ], 'Two available optional and a required, but missing variable' => [ Loading @@ -195,14 +195,14 @@ public function providerSource() { 'expected_count' => 0, 'configuration' => [ 'variables' => ['baz', 'foo'], 'variables_required' => [ 'variables_no_row_if_missing' => [ 'foo_bar_baz', ], ], ], ]; return $tests + $variables_required_tests; return $tests + $variables_no_row_if_missing_tests; } }