Mercurial > hg > cmmr2012-drupal-site
view modules/contrib/migrate_plus/src/Plugin/migrate/process/SkipOnValue.php @ 5:12f9dff5fda9 tip
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:34:47 +0100 |
parents | a9cd425dd02b |
children |
line wrap: on
line source
<?php namespace Drupal\migrate_plus\Plugin\migrate\process; use Drupal\migrate\MigrateException; use Drupal\migrate\MigrateExecutableInterface; use Drupal\migrate\MigrateSkipProcessException; use Drupal\migrate\MigrateSkipRowException; use Drupal\migrate\ProcessPluginBase; use Drupal\migrate\Row; /** * If the source evaluates to a configured value, skip processing or whole row. * * @MigrateProcessPlugin( * id = "skip_on_value" * ) * * Available configuration keys: * - value: An single value or array of values against which the source value * should be compared. * - not_equals: (optional) If set, skipping occurs when values are not equal. * - method: What to do if the input value equals to value given in * configuration key value. Possible values: * - row: Skips the entire row. * - process: Prevents further processing of the input property * * @codingStandardsIgnoreStart * * Examples: * * Example usage with minimal configuration: * @code * type: * plugin: skip_on_value * source: content_type * method: process * value: blog * @endcode * The above example will skip further processing of the input property if * the content_type source field equals "blog". * * Example usage with full configuration: * @code * type: * plugin: skip_on_value * not_equals: true * source: content_type * method: row * value: * - article * - testimonial * @endcode * The above example will skip processing any row for which the source row's * content type field is not "article" or "testimonial". * * @codingStandardsIgnoreEnd */ class SkipOnValue extends ProcessPluginBase { /** * {@inheritdoc} */ public function row($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { if (empty($this->configuration['value']) && !array_key_exists('value', $this->configuration)) { throw new MigrateException('Skip on value plugin is missing value configuration.'); } if (is_array($this->configuration['value'])) { $value_in_array = FALSE; $not_equals = isset($this->configuration['not_equals']); foreach ($this->configuration['value'] as $skipValue) { $value_in_array |= $this->compareValue($value, $skipValue); } if (($not_equals && !$value_in_array) || (!$not_equals && $value_in_array)) { throw new MigrateSkipRowException(); } } elseif ($this->compareValue($value, $this->configuration['value'], !isset($this->configuration['not_equals']))) { throw new MigrateSkipRowException(); } return $value; } /** * {@inheritdoc} */ public function process($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { if (empty($this->configuration['value']) && !array_key_exists('value', $this->configuration)) { throw new MigrateException('Skip on value plugin is missing value configuration.'); } if (is_array($this->configuration['value'])) { $value_in_array = FALSE; $not_equals = isset($this->configuration['not_equals']); foreach ($this->configuration['value'] as $skipValue) { $value_in_array |= $this->compareValue($value, $skipValue); } if (($not_equals && !$value_in_array) || (!$not_equals && $value_in_array)) { throw new MigrateSkipProcessException(); } } elseif ($this->compareValue($value, $this->configuration['value'], !isset($this->configuration['not_equals']))) { throw new MigrateSkipProcessException(); } return $value; } /** * Compare values to see if they are equal. * * @param mixed $value * Actual value. * @param mixed $skipValue * Value to compare against. * @param bool $equal * Compare as equal or not equal. * * @return bool * True if the compare successfully, FALSE otherwise. */ protected function compareValue($value, $skipValue, $equal = TRUE) { if ($equal) { return (string) $value == (string) $skipValue; } return (string) $value != (string) $skipValue; } }