123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- namespace Drupal\materio_migrate\Plugin\migrate\source;
- use Drupal\Core\Database\Query\Condition;
- use Drupal\migrate\Row;
- use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
- /**
- * Drupal 7 file source from database.
- *
- * @MigrateSource(
- * id = "d7_pubic_file",
- * source_module = "file"
- * )
- */
- class D7PublicFile extends DrupalSqlBase {
- /**
- * The public file directory path.
- *
- * @var string
- */
- protected $publicPath;
- /**
- * The private file directory path, if any.
- *
- * @var string
- */
- protected $privatePath;
- /**
- * The temporary file directory path.
- *
- * @var string
- */
- protected $temporaryPath;
- /**
- * {@inheritdoc}
- */
- public function query() {
- $query = $this->select('file_managed', 'f')
- ->fields('f')
- ->condition('uri', 'temporary://%', 'NOT LIKE')
- ->orderBy('f.timestamp');
- // Filter by scheme(s), if configured.
- if (isset($this->configuration['scheme'])) {
- $schemes = [];
- // Remove 'temporary' scheme.
- $valid_schemes = array_diff((array) $this->configuration['scheme'], ['temporary']);
- // Accept either a single scheme, or a list.
- foreach ((array) $valid_schemes as $scheme) {
- $schemes[] = rtrim($scheme) . '://';
- }
- $schemes = array_map([$this->getDatabase(), 'escapeLike'], $schemes);
- // Add conditions, uri LIKE 'public://%' OR uri LIKE 'private://%'.
- $conditions = new Condition('OR');
- foreach ($schemes as $scheme) {
- $conditions->condition('uri', $scheme . '%', 'LIKE');
- }
- $query->condition($conditions);
- }
- return $query;
- }
- /**
- * {@inheritdoc}
- */
- protected function initializeIterator() {
- $this->publicPath = $this->variableGet('file_public_path', 'sites/default/files');
- $this->privatePath = $this->variableGet('file_private_path', NULL);
- $this->temporaryPath = $this->variableGet('file_temporary_path', '/tmp');
- return parent::initializeIterator();
- }
- /**
- * {@inheritdoc}
- */
- public function prepareRow(Row $row) {
- // Compute the filepath property, which is a physical representation of
- // the URI relative to the Drupal root.
- $path = str_replace(['public:/', 'private:/', 'temporary:/'], [$this->publicPath, $this->privatePath, $this->temporaryPath], $row->getSourceProperty('uri'));
- // At this point, $path could be an absolute path or a relative path,
- // depending on how the scheme's variable was set. So we need to shear out
- // the source_base_path in order to make them all relative.
- $path = str_replace($this->configuration['constants']['source_base_path'], NULL, $path);
- $row->setSourceProperty('filepath', $path);
- return parent::prepareRow($row);
- }
- /**
- * {@inheritdoc}
- */
- public function fields() {
- return [
- 'fid' => $this->t('File ID'),
- 'uid' => $this->t('The {users}.uid who added the file. If set to 0, this file was added by an anonymous user.'),
- 'filename' => $this->t('File name'),
- 'filepath' => $this->t('File path'),
- 'filemime' => $this->t('File MIME Type'),
- 'status' => $this->t('The published status of a file.'),
- 'timestamp' => $this->t('The time that the file was added.'),
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function getIds() {
- $ids['fid']['type'] = 'integer';
- return $ids;
- }
- }
|