public function postUp(Schema $schema)
    {
        if (!$this->sm->tablesExist(['typo3_flow_resource_resource'])) {
            return;
        }
        $resourcesResult = $this->connection->executeQuery('SELECT persistence_object_identifier, sha1, filename FROM typo3_flow_resource_resource');
        while ($resourceInfo = $resourcesResult->fetch(\PDO::FETCH_ASSOC)) {
            $resourcePathAndFilename = FLOW_PATH_DATA . 'Persistent/Resources/' . $resourceInfo['sha1'];
            $newResourcePathAndFilename = FLOW_PATH_DATA . 'Persistent/Resources/' . $resourceInfo['sha1'][0] . '/' . $resourceInfo['sha1'][1] . '/' . $resourceInfo['sha1'][2] . '/' . $resourceInfo['sha1'][3] . '/' . $resourceInfo['sha1'];

            $mediaType = MediaTypes::getMediaTypeFromFilename($resourceInfo['filename']);
            if (file_exists($resourcePathAndFilename)) {
                $md5 = md5_file($resourcePathAndFilename);
                $filesize = filesize($resourcePathAndFilename);

                if (!file_exists(dirname($newResourcePathAndFilename))) {
                    Files::createDirectoryRecursively(dirname($newResourcePathAndFilename));
                }
                $result = @rename($resourcePathAndFilename, $newResourcePathAndFilename);
            } elseif (file_exists($newResourcePathAndFilename)) {
                $md5 = md5_file($newResourcePathAndFilename);
                $filesize = filesize($newResourcePathAndFilename);

                $result = true;
            } else {
                $this->write(sprintf('Error while migrating database for the new resource management: the resource file "%s" (original filename: %s) was not found, but the resource object with uuid %s needs this file.', $resourcePathAndFilename, $resourceInfo['filename'], $resourceInfo['persistence_object_identifier']));
                continue;
            }

            $this->connection->executeUpdate(
                'UPDATE typo3_flow_resource_resource SET collectionname = ?, mediatype = ?, md5 = ?, filesize = ? WHERE persistence_object_identifier = ?',
                array('persistent', $mediaType, $md5, $filesize, $resourceInfo['persistence_object_identifier'])
            );

            if ($result === false) {
                $this->write(sprintf('Could not move the data file of resource "%s" from its legacy location at %s to the correct location %s.', $resourceInfo['sha1'], $resourcePathAndFilename, $newResourcePathAndFilename));
            }
        }
        $this->connection->exec('ALTER TABLE typo3_flow_resource_resource CHANGE collectionname collectionname VARCHAR(255) NOT NULL, CHANGE mediatype mediatype VARCHAR(100) NOT NULL, CHANGE md5 md5 VARCHAR(32) NOT NULL, CHANGE filesize filesize NUMERIC(20, 0) NOT NULL');
    }
public function postUp(Schema $schema)
    {
        if (!$this->sm->tablesExist(['typo3_flow_resource_resource'])) {
            return;
        }
        $resourcesResult = $this->connection->executeQuery('SELECT persistence_object_identifier, sha1, filename FROM typo3_flow_resource_resource');
        while ($resourceInfo = $resourcesResult->fetch(\PDO::FETCH_ASSOC)) {
            $resourcePathAndFilename = FLOW_PATH_DATA . 'Persistent/Resources/' . $resourceInfo['sha1'];
            $newResourcePathAndFilename = FLOW_PATH_DATA . 'Persistent/Resources/' . $resourceInfo['sha1'][0] . '/' . $resourceInfo['sha1'][1] . '/' . $resourceInfo['sha1'][2] . '/' . $resourceInfo['sha1'][3] . '/' . $resourceInfo['sha1'];

            $mediaType = MediaTypes::getMediaTypeFromFilename($resourceInfo['filename']);
            if (file_exists($resourcePathAndFilename)) {
                $md5 = md5_file($resourcePathAndFilename);
                $filesize = filesize($resourcePathAndFilename);

                if (!file_exists(dirname($newResourcePathAndFilename))) {
                    Files::createDirectoryRecursively(dirname($newResourcePathAndFilename));
                }
                $result = @rename($resourcePathAndFilename, $newResourcePathAndFilename);
            } elseif (file_exists($newResourcePathAndFilename)) {
                $md5 = md5_file($newResourcePathAndFilename);
                $filesize = filesize($newResourcePathAndFilename);

                $result = true;
            } else {
                $this->write(sprintf('Error while migrating database for the new resource management: the resource file "%s" (original filename: %s) was not found, but the resource object with uuid %s needs this file.', $resourcePathAndFilename, $resourceInfo['filename'], $resourceInfo['persistence_object_identifier']));
                continue;
            }

            $this->connection->executeUpdate(
                'UPDATE typo3_flow_resource_resource SET collectionname = ?, mediatype = ?, md5 = ?, filesize = ? WHERE persistence_object_identifier = ?',
                array('persistent', $mediaType, $md5, $filesize, $resourceInfo['persistence_object_identifier'])
            );

            if ($result === false) {
                $this->write(sprintf('Could not move the data file of resource "%s" from its legacy location at %s to the correct location %s.', $resourceInfo['sha1'], $resourcePathAndFilename, $newResourcePathAndFilename));
            }
        }
        $this->connection->exec('ALTER TABLE typo3_flow_resource_resource CHANGE collectionname collectionname VARCHAR(255) NOT NULL, CHANGE mediatype mediatype VARCHAR(100) NOT NULL, CHANGE md5 md5 VARCHAR(32) NOT NULL, CHANGE filesize filesize NUMERIC(20, 0) NOT NULL');
    }
public function postUp ( Schema $ schema ) { if ( ! $ this -> sm -> tablesExist ( [ 'typo3_flow_resource_resource' ] ) ) { return ; } $ resourcesResult = $ this -> connection -> executeQuery ( 'SELECT persistence_object_identifier, sha1, filename FROM typo3_flow_resource_resource' ) ; while ( $ resourceInfo = $ resourcesResult -> fetch ( \ PDO :: FETCH_ASSOC ) ) { $ resourcePathAndFilename = FLOW_PATH_DATA . 'Persistent/Resources/' . $ resourceInfo [ 'sha1' ] ; $ newResourcePathAndFilename = FLOW_PATH_DATA . 'Persistent/Resources/' . $ resourceInfo [ 'sha1' ] [ 0 ] . '/' . $ resourceInfo [ 'sha1' ] [ 1 ] . '/' . $ resourceInfo [ 'sha1' ] [ 2 ] . '/' . $ resourceInfo [ 'sha1' ] [ 3 ] . '/' . $ resourceInfo [ 'sha1' ] ; $ mediaType = MediaTypes :: getMediaTypeFromFilename ( $ resourceInfo [ 'filename' ] ) ; if ( file_exists ( $ resourcePathAndFilename ) ) { $ md5 = md5_file ( $ resourcePathAndFilename ) ; $ filesize = filesize ( $ resourcePathAndFilename ) ; if ( ! file_exists ( dirname ( $ newResourcePathAndFilename ) ) ) { Files :: createDirectoryRecursively ( dirname ( $ newResourcePathAndFilename ) ) ; } $ result = @ rename ( $ resourcePathAndFilename , $ newResourcePathAndFilename ) ; } elseif ( file_exists ( $ newResourcePathAndFilename ) ) { $ md5 = md5_file ( $ newResourcePathAndFilename ) ; $ filesize = filesize ( $ newResourcePathAndFilename ) ; $ result = true ; } else { $ this -> write ( sprintf ( 'Error while migrating database for the new resource management: the resource file "%s" (original filename: %s) was not found, but the resource object with uuid %s needs this file.' , $ resourcePathAndFilename , $ resourceInfo [ 'filename' ] , $ resourceInfo [ 'persistence_object_identifier' ] ) ) ; continue ; } $ this -> connection -> executeUpdate ( 'UPDATE typo3_flow_resource_resource SET collectionname = ?, mediatype = ?, md5 = ?, filesize = ? WHERE persistence_object_identifier = ?' , array ( 'persistent' , $ mediaType , $ md5 , $ filesize , $ resourceInfo [ 'persistence_object_identifier' ] ) ) ; if ( $ result === false ) { $ this -> write ( sprintf ( 'Could not move the data file of resource "%s" from its legacy location at %s to the correct location %s.' , $ resourceInfo [ 'sha1' ] , $ resourcePathAndFilename , $ newResourcePathAndFilename ) ) ; } } $ this -> connection -> exec ( 'ALTER TABLE typo3_flow_resource_resource CHANGE collectionname collectionname VARCHAR(255) NOT NULL, CHANGE mediatype mediatype VARCHAR(100) NOT NULL, CHANGE md5 md5 VARCHAR(32) NOT NULL, CHANGE filesize filesize NUMERIC(20, 0) NOT NULL' ) ; }
Move resource files to the new locations and adjust records.

@param Schema $schema
@return void
Move resource files to the new locations and adjust records .