Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
CRAP | |
76.67% |
23 / 30 |
File | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
8.81 | |
76.67% |
23 / 30 |
query | |
100.00% |
1 / 1 |
4 | |
100.00% |
13 / 13 |
|||
initializeIterator | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
prepareRow | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
fields | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
getIds | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\file\Plugin\migrate\source\d7\File. | |
*/ | |
namespace Drupal\file\Plugin\migrate\source\d7; | |
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_file" | |
* ) | |
*/ | |
class File 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') | |
->orderBy('timestamp'); | |
// Filter by scheme(s), if configured. | |
if (isset($this->configuration['scheme'])) { | |
$schemes = array(); | |
// Accept either a single scheme, or a list. | |
foreach ((array) $this->configuration['scheme'] as $scheme) { | |
$schemes[] = rtrim($scheme) . '://'; | |
} | |
$schemes = array_map([$this->getDatabase(), 'escapeLike'], $schemes); | |
// 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. | |
// @todo Don't depend on destination configuration. | |
// @see https://www.drupal.org/node/2577871 | |
$path = str_replace($this->migration->get('destination')['source_base_path'], NULL, $path); | |
$row->setSourceProperty('filepath', $path); | |
return parent::prepareRow($row); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function fields() { | |
return array( | |
'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; | |
} | |
} |