Issue #2729369 by quietone, Jo Fitzgerald, maxocub, mikeryan, heddn: Remove support for migrating temporary files
							parent
							
								
									237b3f4112
								
							
						
					
					
						commit
						953b7c7302
					
				| 
						 | 
				
			
			@ -42,6 +42,7 @@ class File extends DrupalSqlBase {
 | 
			
		|||
  public function query() {
 | 
			
		||||
    return $this->select('files', 'f')
 | 
			
		||||
      ->fields('f')
 | 
			
		||||
      ->condition('filepath', '/tmp%', 'NOT LIKE')
 | 
			
		||||
      ->orderBy('timestamp')
 | 
			
		||||
      // If two or more files have the same timestamp, they'll end up in a
 | 
			
		||||
      // non-deterministic order. Ordering by fid (or any other unique field)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,18 +43,21 @@ class File extends DrupalSqlBase {
 | 
			
		|||
  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) $this->configuration['scheme'] as $scheme) {
 | 
			
		||||
      foreach ((array) $valid_schemes as $scheme) {
 | 
			
		||||
        $schemes[] = rtrim($scheme) . '://';
 | 
			
		||||
      }
 | 
			
		||||
      $schemes = array_map([$this->getDatabase(), 'escapeLike'], $schemes);
 | 
			
		||||
 | 
			
		||||
      // uri LIKE 'public://%' OR uri LIKE 'private://%'
 | 
			
		||||
      // Add conditions, uri LIKE 'public://%' OR uri LIKE 'private://%'.
 | 
			
		||||
      $conditions = new Condition('OR');
 | 
			
		||||
      foreach ($schemes as $scheme) {
 | 
			
		||||
        $conditions->condition('uri', $scheme . '%', 'LIKE');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
 | 
			
		||||
namespace Drupal\Tests\file\Kernel\Migrate\d6;
 | 
			
		||||
 | 
			
		||||
use Drupal\Component\Utility\Random;
 | 
			
		||||
use Drupal\file\Entity\File;
 | 
			
		||||
use Drupal\file\FileInterface;
 | 
			
		||||
use Drupal\KernelTests\KernelTestBase;
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +10,7 @@ use Drupal\Tests\migrate\Kernel\MigrateDumpAlterInterface;
 | 
			
		|||
use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * file migration.
 | 
			
		||||
 * Test file migration.
 | 
			
		||||
 *
 | 
			
		||||
 * @group migrate_drupal_6
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -68,8 +67,10 @@ class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlter
 | 
			
		|||
  public function testFiles() {
 | 
			
		||||
    $this->assertEntity(1, 'Image1.png', '39325', 'public://image-1.png', 'image/png', '1');
 | 
			
		||||
    $this->assertEntity(2, 'Image2.jpg', '1831', 'public://image-2.jpg', 'image/jpeg', '1');
 | 
			
		||||
    $this->assertEntity(3, 'Image-test.gif', '183', 'public://image-test.gif', 'image/jpeg', '1');
 | 
			
		||||
    $this->assertEntity(3, 'image-3.jpg', '1831', 'public://image-3.jpg', 'image/jpeg', '1');
 | 
			
		||||
    $this->assertEntity(4, 'html-1.txt', '24', 'public://html-1.txt', 'text/plain', '1');
 | 
			
		||||
    // Ensure temporary file was not migrated.
 | 
			
		||||
    $this->assertNull(File::load(6));
 | 
			
		||||
 | 
			
		||||
    $map_table = $this->getMigration('d6_file')->getIdMap()->mapTableName();
 | 
			
		||||
    $map = \Drupal::database()
 | 
			
		||||
| 
						 | 
				
			
			@ -81,10 +82,9 @@ class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlter
 | 
			
		|||
      // The 4 files from the fixture.
 | 
			
		||||
      1 => '1',
 | 
			
		||||
      2 => '2',
 | 
			
		||||
      // The file updated in migrateDumpAlter().
 | 
			
		||||
      3 => '3',
 | 
			
		||||
      5 => '4',
 | 
			
		||||
      // The file updated in migrateDumpAlter().
 | 
			
		||||
      6 => NULL,
 | 
			
		||||
      // The file created in migrateDumpAlter().
 | 
			
		||||
      7 => '4',
 | 
			
		||||
    ];
 | 
			
		||||
| 
						 | 
				
			
			@ -124,10 +124,9 @@ class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlter
 | 
			
		|||
      // The 4 files from the fixture.
 | 
			
		||||
      1 => '5',
 | 
			
		||||
      2 => '6',
 | 
			
		||||
      // The file updated in migrateDumpAlter().
 | 
			
		||||
      3 => '7',
 | 
			
		||||
      5 => '8',
 | 
			
		||||
      // The file updated in migrateDumpAlter().
 | 
			
		||||
      6 => NULL,
 | 
			
		||||
      // The files created in migrateDumpAlter().
 | 
			
		||||
      7 => '8',
 | 
			
		||||
      8 => '8',
 | 
			
		||||
| 
						 | 
				
			
			@ -142,33 +141,17 @@ class MigrateFileTest extends MigrateDrupal6TestBase implements MigrateDumpAlter
 | 
			
		|||
    $this->assertEquals(8, count(File::loadMultiple()));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * @return string
 | 
			
		||||
   *   A filename based upon the test.
 | 
			
		||||
   */
 | 
			
		||||
  public static function getUniqueFilename() {
 | 
			
		||||
    return static::$tempFilename;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * {@inheritdoc}
 | 
			
		||||
   */
 | 
			
		||||
  public static function migrateDumpAlter(KernelTestBase $test) {
 | 
			
		||||
    // Creates a random filename and updates the source database.
 | 
			
		||||
    $random = new Random();
 | 
			
		||||
    $temp_directory = file_directory_temp();
 | 
			
		||||
    file_prepare_directory($temp_directory, FILE_CREATE_DIRECTORY);
 | 
			
		||||
    static::$tempFilename = $test->getDatabasePrefix() . $random->name() . '.jpg';
 | 
			
		||||
    $file_path = $temp_directory . '/' . static::$tempFilename;
 | 
			
		||||
    file_put_contents($file_path, '');
 | 
			
		||||
 | 
			
		||||
    $db = Database::getConnection('default', 'migrate');
 | 
			
		||||
 | 
			
		||||
    $db->update('files')
 | 
			
		||||
      ->condition('fid', 6)
 | 
			
		||||
      ->condition('fid', 3)
 | 
			
		||||
      ->fields([
 | 
			
		||||
        'filename' => static::$tempFilename,
 | 
			
		||||
        'filepath' => $file_path,
 | 
			
		||||
        'filename' => 'image-3.jpg',
 | 
			
		||||
        'filepath' => 'core/modules/simpletest/files/image-3.jpg',
 | 
			
		||||
      ])
 | 
			
		||||
      ->execute();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Drupal\Tests\file\Kernel\Migrate\d7;
 | 
			
		||||
 | 
			
		||||
use Drupal\file\Entity\File;
 | 
			
		||||
use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +44,8 @@ class MigrateFileTest extends MigrateDrupal7TestBase {
 | 
			
		|||
   */
 | 
			
		||||
  public function testFileMigration() {
 | 
			
		||||
    $this->assertEntity(1, 'cube.jpeg', 'public://cube.jpeg', 'image/jpeg', '3620', '1421727515', '1421727515', '1');
 | 
			
		||||
    // Ensure temporary file was not migrated.
 | 
			
		||||
    $this->assertNull(File::load(4));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,11 +46,42 @@ class FileTest extends MigrateSqlSourceTestBase {
 | 
			
		|||
        'status' => 1,
 | 
			
		||||
        'timestamp' => 1382255662,
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        'fid' => 3,
 | 
			
		||||
        'uid' => 1,
 | 
			
		||||
        'filename' => 'migrate-test-file-3.pdf',
 | 
			
		||||
        'filepath' => '/tmp/migrate-test-file-3.pdf',
 | 
			
		||||
        'filemime' => 'application/pdf',
 | 
			
		||||
        'filesize' => 304124,
 | 
			
		||||
        'status' => 1,
 | 
			
		||||
        'timestamp' => 1382277662,
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    // The expected results are identical to the source data.
 | 
			
		||||
    $tests[0]['expected_data'] = $tests[0]['source_data']['files'];
 | 
			
		||||
 | 
			
		||||
    // The expected results are the same as the source data but excluding
 | 
			
		||||
    // the temporary file.
 | 
			
		||||
    $tests[0]['expected_data'] = [
 | 
			
		||||
      [
 | 
			
		||||
        'fid' => 1,
 | 
			
		||||
        'uid' => 1,
 | 
			
		||||
        'filename' => 'migrate-test-file-1.pdf',
 | 
			
		||||
        'filepath' => 'sites/default/files/migrate-test-file-1.pdf',
 | 
			
		||||
        'filemime' => 'application/pdf',
 | 
			
		||||
        'filesize' => 890404,
 | 
			
		||||
        'status' => 1,
 | 
			
		||||
        'timestamp' => 1382255613,
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        'fid' => 2,
 | 
			
		||||
        'uid' => 1,
 | 
			
		||||
        'filename' => 'migrate-test-file-2.pdf',
 | 
			
		||||
        'filepath' => 'sites/default/files/migrate-test-file-2.pdf',
 | 
			
		||||
        'filemime' => 'application/pdf',
 | 
			
		||||
        'filesize' => 204124,
 | 
			
		||||
        'status' => 1,
 | 
			
		||||
        'timestamp' => 1382255662,
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
    return $tests;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,15 +84,14 @@ class FileTest extends MigrateSqlSourceTestBase {
 | 
			
		|||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    // The expected results will include only the first three files, since we
 | 
			
		||||
    // are configuring the plugin to filter out the file with the null URI
 | 
			
		||||
    // scheme.
 | 
			
		||||
    $tests[0]['expected_data'] = array_slice($tests[0]['source_data']['file_managed'], 0, 3);
 | 
			
		||||
    // The expected results will include only the first two files, since the
 | 
			
		||||
    // plugin will filter out files with either the null URI scheme or the
 | 
			
		||||
    // temporary scheme.
 | 
			
		||||
    $tests[0]['expected_data'] = array_slice($tests[0]['source_data']['file_managed'], 0, 2);
 | 
			
		||||
 | 
			
		||||
    // The filepath property will vary by URI scheme.
 | 
			
		||||
    $tests[0]['expected_data'][0]['filepath'] = 'sites/default/files/cube.jpeg';
 | 
			
		||||
    $tests[0]['expected_data'][1]['filepath'] = '/path/to/private/files/cube.jpeg';
 | 
			
		||||
    $tests[0]['expected_data'][2]['filepath'] = '/tmp/cube.jpeg';
 | 
			
		||||
 | 
			
		||||
    // Do an automatic count.
 | 
			
		||||
    $tests[0]['expected_count'] = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -102,10 +101,61 @@ class FileTest extends MigrateSqlSourceTestBase {
 | 
			
		|||
      'constants' => [
 | 
			
		||||
        'source_base_path' => '/path/to/files',
 | 
			
		||||
      ],
 | 
			
		||||
      // Only return files which use one of these URI schemes.
 | 
			
		||||
      'scheme' => ['public', 'private', 'temporary'],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    // Test getting only public files.
 | 
			
		||||
    $tests[1]['source_data'] = $tests[0]['source_data'];
 | 
			
		||||
 | 
			
		||||
    $tests[1]['expected_data'] = [
 | 
			
		||||
      [
 | 
			
		||||
        'fid' => '1',
 | 
			
		||||
        'uid' => '1',
 | 
			
		||||
        'filename' => 'cube.jpeg',
 | 
			
		||||
        'uri' => 'public://cube.jpeg',
 | 
			
		||||
        'filemime' => 'image/jpeg',
 | 
			
		||||
        'filesize' => '3620',
 | 
			
		||||
        'status' => '1',
 | 
			
		||||
        'timestamp' => '1421727515',
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
    // Do an automatic count.
 | 
			
		||||
    $tests[1]['expected_count'] = NULL;
 | 
			
		||||
 | 
			
		||||
    // Set up plugin configuration.
 | 
			
		||||
    $tests[1]['configuration'] = [
 | 
			
		||||
      'constants' => [
 | 
			
		||||
        'source_base_path' => '/path/to/files',
 | 
			
		||||
      ],
 | 
			
		||||
      'scheme' => ['public'],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    // Test getting only public files when configuration scheme is not an array.
 | 
			
		||||
    $tests[2]['source_data'] = $tests[0]['source_data'];
 | 
			
		||||
 | 
			
		||||
    $tests[2]['expected_data'] = [
 | 
			
		||||
      [
 | 
			
		||||
        'fid' => '1',
 | 
			
		||||
        'uid' => '1',
 | 
			
		||||
        'filename' => 'cube.jpeg',
 | 
			
		||||
        'uri' => 'public://cube.jpeg',
 | 
			
		||||
        'filemime' => 'image/jpeg',
 | 
			
		||||
        'filesize' => '3620',
 | 
			
		||||
        'status' => '1',
 | 
			
		||||
        'timestamp' => '1421727515',
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
    // Do an automatic count.
 | 
			
		||||
    $tests[2]['expected_count'] = NULL;
 | 
			
		||||
 | 
			
		||||
    // Set up plugin configuration.
 | 
			
		||||
    $tests[2]['configuration'] = [
 | 
			
		||||
      'constants' => [
 | 
			
		||||
        'source_base_path' => '/path/to/files',
 | 
			
		||||
      ],
 | 
			
		||||
      'scheme' => 'public',
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    return $tests;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13373,6 +13373,17 @@ $connection->insert('file_managed')
 | 
			
		|||
  'status' => '1',
 | 
			
		||||
  'timestamp' => '1486104045',
 | 
			
		||||
))
 | 
			
		||||
->values(array(
 | 
			
		||||
  'fid' => '4',
 | 
			
		||||
  'uid' => '1',
 | 
			
		||||
  'filename' => 'TerokNor.txt',
 | 
			
		||||
  'uri' => 'temporary://TerokNor.txt',
 | 
			
		||||
  'filemime' => 'text/plain',
 | 
			
		||||
  'filesize' => '2369',
 | 
			
		||||
  'status' => '1',
 | 
			
		||||
  'timestamp' => '1421747516',
 | 
			
		||||
))
 | 
			
		||||
 | 
			
		||||
->execute();
 | 
			
		||||
 | 
			
		||||
$connection->schema()->createTable('file_usage', array(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,7 +69,7 @@ class MigrateUpgrade6Test extends MigrateUpgradeExecuteTestBase {
 | 
			
		|||
      'editor' => 2,
 | 
			
		||||
      'field_config' => 89,
 | 
			
		||||
      'field_storage_config' => 63,
 | 
			
		||||
      'file' => 8,
 | 
			
		||||
      'file' => 7,
 | 
			
		||||
      'filter_format' => 7,
 | 
			
		||||
      'image_style' => 5,
 | 
			
		||||
      'language_content_settings' => 3,
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +109,7 @@ class MigrateUpgrade6Test extends MigrateUpgradeExecuteTestBase {
 | 
			
		|||
    $counts['comment'] = 7;
 | 
			
		||||
    $counts['entity_view_display'] = 55;
 | 
			
		||||
    $counts['entity_view_mode'] = 14;
 | 
			
		||||
    $counts['file'] = 9;
 | 
			
		||||
    $counts['file'] = 8;
 | 
			
		||||
    $counts['menu_link_content'] = 11;
 | 
			
		||||
    $counts['node'] = 18;
 | 
			
		||||
    $counts['taxonomy_term'] = 9;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.8 KiB  | 
		Loading…
	
		Reference in New Issue