3 namespace Drupal\user\Plugin\migrate\source\d6;
5 use Drupal\migrate\Row;
6 use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
9 * Drupal 6 role source from database.
12 * id = "d6_user_role",
13 * source_module = "user"
16 class Role extends DrupalSqlBase {
19 * List of filter IDs per role IDs.
23 protected $filterPermissions = [];
28 public function query() {
29 $query = $this->select('role', 'r')
30 ->fields('r', ['rid', 'name'])
38 public function fields() {
40 'rid' => $this->t('Role ID.'),
41 'name' => $this->t('The name of the user role.'),
48 protected function initializeIterator() {
49 $filter_roles = $this->select('filter_formats', 'f')
50 ->fields('f', ['format', 'roles'])
53 foreach ($filter_roles as $format => $roles) {
54 // Drupal 6 code: $roles = ','. implode(',', $roles) .',';
55 // Remove the beginning and ending comma.
56 foreach (explode(',', trim($roles, ',')) as $rid) {
57 $this->filterPermissions[$rid][] = $format;
60 return parent::initializeIterator();
66 public function prepareRow(Row $row) {
67 $rid = $row->getSourceProperty('rid');
68 $permissions = $this->select('permission', 'p')
69 ->fields('p', ['perm'])
70 ->condition('rid', $rid)
74 // If a role has no permissions then set to an empty array. The role will
75 // be migrated and given the default D8 permissions.
77 $row->setSourceProperty('permissions', explode(', ', $permissions));
80 $row->setSourceProperty('permissions', []);
82 if (isset($this->filterPermissions[$rid])) {
83 $row->setSourceProperty("filter_permissions:$rid", $this->filterPermissions[$rid]);
85 return parent::prepareRow($row);
91 public function getIds() {
92 $ids['rid']['type'] = 'integer';