Skip to content

Instantly share code, notes, and snippets.

@frankmullenger
Created April 30, 2013 03:54
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 frankmullenger/5486506 to your computer and use it in GitHub Desktop.
Save frankmullenger/5486506 to your computer and use it in GitHub Desktop.
Simple task to reset database using YAML file for SilverStripe, copies images over to assets/Uploads dir also.
<?php
class ResetDatabaseTask extends BuildTask {
protected $title = "Reset database";
protected $description = "Reset the database to a blank canvas";
static $fixture_file = 'builder/tasks/Reset.yml';
function run($request) {
$dbAdmin = DatabaseAdmin::create();
increase_time_limit_to(600);
SS_ClassLoader::instance()->getManifest()->regenerate();
//Clear and rebuild database
$dbAdmin->clearAllData();
$dbAdmin->doBuild(true);
//Move images to assets/Uploads/
$assetsDir = Director::baseFolder() . '/assets/Uploads';
$imagesDir = Director::baseFolder() . '/builder/images';
foreach (new DirectoryIterator($assetsDir) as $fileInfo){
if(!$fileInfo->isDot()) {
@unlink($fileInfo->getPathname());
}
}
Filesystem::sync();
foreach (new DirectoryIterator($imagesDir) as $fileInfo){
if($fileInfo->isFile()) {
copy($fileInfo->getPathname(), $assetsDir . '/' . $fileInfo->getFilename());
}
}
//Build database
$fixture = new YamlFixture(Director::getAbsFile(self::$fixture_file));
$model = DataModel::inst();
$fixture->saveIntoDatabase($model);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment