password = $password; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) { $entity_type = static::getEntityTypeId($plugin_id); return new static( $configuration, $plugin_id, $plugin_definition, $migration, $container->get('entity.manager')->getStorage($entity_type), array_keys($container->get('entity.manager')->getBundleInfo($entity_type)), $container->get('entity.manager'), $container->get('plugin.manager.field.field_type'), $container->get('password') ); } /** * {@inheritdoc} * @throws \Drupal\migrate\MigrateException */ public function import(Row $row, array $old_destination_id_values = []) { // Do not overwrite the root account password. if ($row->getDestinationProperty('uid') == 1) { $row->removeDestinationProperty('pass'); } return parent::import($row, $old_destination_id_values); } /** * {@inheritdoc} */ protected function save(ContentEntityInterface $entity, array $old_destination_id_values = []) { // Do not overwrite the root account password. if ($entity->id() != 1) { // Set the pre_hashed password so that the PasswordItem field does not hash // already hashed passwords. If the md5_passwords configuration option is // set we need to rehash the password and prefix with a U. // @see \Drupal\Core\Field\Plugin\Field\FieldType\PasswordItem::preSave() $entity->pass->pre_hashed = TRUE; if (isset($this->configuration['md5_passwords'])) { $entity->pass->value = 'U' . $this->password->hash($entity->pass->value); } } return parent::save($entity, $old_destination_id_values); } /** * {@inheritdoc} */ protected function processStubRow(Row $row) { parent::processStubRow($row); // Email address is not defined as required in the base field definition but // is effectively required by the UserMailRequired constraint. This means // that Entity::processStubRow() did not populate it - we do it here. $field_definitions = $this->entityManager ->getFieldDefinitions($this->storage->getEntityTypeId(), $this->getKey('bundle')); $mail = EmailItem::generateSampleValue($field_definitions['mail']); $row->setDestinationProperty('mail', reset($mail)); // @todo Work-around for https://www.drupal.org/node/2602066. $name = $row->getDestinationProperty('name'); if (is_array($name)) { $name = reset($name); } if (Unicode::strlen($name) > USERNAME_MAX_LENGTH) { $row->setDestinationProperty('name', Unicode::substr($name, 0, USERNAME_MAX_LENGTH)); } } /** * {@inheritdoc} */ public function getHighestId() { $highest_id = parent::getHighestId(); // Every Drupal site must have a user with UID of 1 and it's normal for // migrations to overwrite this user. if ($highest_id === 1) { return 0; } return $highest_id; } }