Skip to content

Instantly share code, notes, and snippets.

@thezenmonkey
Forked from a2nt/PublishAllFiles.php
Last active May 18, 2018 18:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thezenmonkey/1b7846a01255e94c02906da6d121385a to your computer and use it in GitHub Desktop.
Save thezenmonkey/1b7846a01255e94c02906da6d121385a to your computer and use it in GitHub Desktop.
SS3 > SS4.1 protected folder migration script
<?php
/*
* Generates FileHash and moves files to .protected folder
* Re-generates CMS thumbs on the second run and publish files
*/
use SilverStripe\Dev\BuildTask;
use SilverStripe\Control\Director;
use SilverStripe\Assets\File;
use SilverStripe\AssetAdmin\Controller\AssetAdmin;
use SilverStripe\ORM\DB;
class PublishAllFiles extends BuildTask
{
protected $title = 'Publish All Files';
public function run($request)
{
$admin = self::singleton(AssetAdmin::class);
$sqlQuery = new SQLSelect();
$sqlQuery->setFrom('File');
$sqlQuery->selectField('ID');
//$sqlQuery->addWhere(['ClassName' => 'SilverStripe\Assets\File']);
// Execute and return a Query object
$result = $sqlQuery->execute();
foreach ($result as $row) {
set_time_limit(60);
$file = File::get()->byID($row['ID']);
$name = $file->getFilename();
$originalDir = BASE_PATH . '/'.Director::publicDir().'/assets/';
if(!$file->getField('FileHash') && file_exists($originalDir.$name) && !is_dir($originalDir.$name)) {
$hash = sha1_file($originalDir.$name);
DB::query('UPDATE "File" SET "FileHash" = \''.$hash.'\' WHERE "ID" = \''.$file->ID.'\' LIMIT 1;');
$targetDir = str_replace('./','',BASE_PATH . '/' . Director::publicDir() . '/assets/.protected/'. dirname($name)
.'/'. substr($hash, 0, 10) . '/');
if(!file_exists($targetDir)) {
mkdir($targetDir, 0755, true);
}
rename($originalDir . $name, $targetDir . basename($name));
echo '<b style="color:red">'.$originalDir . $name .' > '. $targetDir . basename($name).'</b><br>';
}else{
$admin->generateThumbnails($file);
$file->copyVersionToStage('Stage', 'Live');
echo '<b style="color:green">Published: '.$name.'</b><br>';
}
$file->destroy();
}
exit('Done!');
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment