Same name and namespace in other branches
  1. 8.9.x core/modules/block/src/Plugin/migrate/process/BlockVisibility.php \Drupal\block\Plugin\migrate\process\BlockVisibility::transform()
  2. 9 core/modules/block/src/Plugin/migrate/process/BlockVisibility.php \Drupal\block\Plugin\migrate\process\BlockVisibility::transform()

File

core/modules/block/src/Plugin/migrate/process/BlockVisibility.php, line 82

Class

BlockVisibility

Namespace

Drupal\block\Plugin\migrate\process

Code

public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
  [
    $old_visibility,
    $pages,
    $roles,
  ] = $value;
  $visibility = [];

  // If the block is assigned to specific roles, add the user_role condition.
  if ($roles) {
    $visibility['user_role'] = [
      'id' => 'user_role',
      'roles' => [],
      'context_mapping' => [
        'user' => '@user.current_user_context:current_user',
      ],
      'negate' => FALSE,
    ];

    // Legacy generated migrations will not have the destination property
    // '_role_ids'.
    $role_ids = $row
      ->getDestinationProperty('_role_ids');
    foreach ($roles as $key => $role_id) {
      if (!$role_ids) {
        $lookup = $this->migrateLookup
          ->lookup([
          'd6_user_role',
          'd7_user_role',
        ], [
          $role_id,
        ]);
        $lookup_result = $lookup[0]['id'];
      }
      else {
        $lookup_result = $role_ids[$role_id] ?? NULL;
      }
      if ($lookup_result) {
        $roles[$key] = $lookup_result;
      }
    }
    $visibility['user_role']['roles'] = array_combine($roles, $roles);
  }
  if ($pages) {

    // 2 == BLOCK_VISIBILITY_PHP in Drupal 6 and 7.
    if ($old_visibility == 2) {

      // If the PHP module is present, migrate the visibility code unaltered.
      if ($this->moduleHandler
        ->moduleExists('php')) {
        $visibility['php'] = [
          'id' => 'php',
          // PHP code visibility could not be negated in Drupal 6 or 7.
          'negate' => FALSE,
          'php' => $pages,
        ];
      }
      elseif ($this->skipPHP) {
        throw new MigrateSkipRowException(sprintf("The block with bid '%d' from module '%s' will have no PHP or request_path visibility configuration.", $row
          ->getSourceProperty('bid'), $row
          ->getSourceProperty('module')));
      }
    }
    else {
      $paths = preg_split("(\r\n?|\n)", $pages);
      foreach ($paths as $key => $path) {
        $paths[$key] = $path === '<front>' ? $path : '/' . ltrim($path, '/');
      }
      $visibility['request_path'] = [
        'id' => 'request_path',
        'negate' => !$old_visibility,
        'pages' => implode("\n", $paths),
      ];
    }
  }
  return $visibility;
}