function BlockVisibility::transform

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

Overrides ProcessPluginBase::transform

File

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

Class

BlockVisibility
Plugin annotation @MigrateProcessPlugin( id = "block_visibility" )

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,
        ];
        foreach ($roles as $key => $role_id) {
            $lookup_result = $this->migrateLookup
                ->lookup([
                'd6_user_role',
                'd7_user_role',
            ], [
                $role_id,
            ]);
            if ($lookup_result) {
                $roles[$key] = $lookup_result[0]['id'];
            }
        }
        $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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.