function BlockVisibility::transform

Same name in other branches
  1. 9 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 109

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) {
    list($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) {
            // This BC layer is included because if the plugin constructor was
            // called in the legacy way with a migration_lookup process plugin, it
            // may have been preconfigured with a different migration to look up
            // against. While this is unlikely, for maximum BC we will continue to
            // use the plugin to do the lookup if it is provided, and support for
            // this will be removed in Drupal 9.
            if ($this->migrationPlugin) {
                $roles[$key] = $this->migrationPlugin
                    ->transform($role_id, $migrate_executable, $row, $destination_property);
            }
            else {
                $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'), $destination_property));
            }
        }
        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.