|
@@ -0,0 +1,119 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+namespace Drupal\popsu_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;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|