function EntityFile::processStubRow

Same name in other branches
  1. 8.9.x core/modules/file/src/Plugin/migrate/destination/EntityFile.php \Drupal\file\Plugin\migrate\destination\EntityFile::processStubRow()
  2. 10 core/modules/file/src/Plugin/migrate/destination/EntityFile.php \Drupal\file\Plugin\migrate\destination\EntityFile::processStubRow()
  3. 11.x core/modules/file/src/Plugin/migrate/destination/EntityFile.php \Drupal\file\Plugin\migrate\destination\EntityFile::processStubRow()

Overrides EntityContentBase::processStubRow

File

core/modules/file/src/Plugin/migrate/destination/EntityFile.php, line 45

Class

EntityFile
Plugin annotation @MigrateDestination( id = "entity:file" )

Namespace

Drupal\file\Plugin\migrate\destination

Code

protected function processStubRow(Row $row) {
    // We stub the uri value ourselves so we can create a real stub file for it.
    if (!$row->getDestinationProperty('uri')) {
        $field_definitions = $this->entityFieldManager
            ->getFieldDefinitions($this->storage
            ->getEntityTypeId(), $this->getKey('bundle'));
        $value = UriItem::generateSampleValue($field_definitions['uri']);
        if (empty($value)) {
            throw new MigrateException('Stubbing failed, unable to generate value for field uri');
        }
        // generateSampleValue() wraps the value in an array.
        $value = reset($value);
        // Make it into a proper public file uri, stripping off the existing
        // scheme if present.
        $value = 'public://' . preg_replace('|^[a-z]+://|i', '', $value);
        $value = mb_substr($value, 0, $field_definitions['uri']->getSetting('max_length'));
        // Create a real file, so File::preSave() can do filesize() on it.
        touch($value);
        $row->setDestinationProperty('uri', $value);
    }
    parent::processStubRow($row);
}

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