mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
ENHANCEMENT DevelopmentAdmin: Added dev/reset which truncates the existing database and rebuilds it, useful for refreshing the working database after testing
ENHANCEMENT DevelopmentAdmin: Changed dev/build to produce nicer formatting when running from sake/dev/build CLI git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.3@78919 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
b44eefa719
commit
c7ea17792e
@ -63,6 +63,7 @@ class DevelopmentAdmin extends Controller {
|
|||||||
function index() {
|
function index() {
|
||||||
$actions = array(
|
$actions = array(
|
||||||
"build" => "Build/rebuild this environment (formerly db/build). Call this whenever you have updated your project sources",
|
"build" => "Build/rebuild this environment (formerly db/build). Call this whenever you have updated your project sources",
|
||||||
|
"reset" => "Reset this environment - truncate the database and rebuild. This is useful after testing to start with a fresh working copy",
|
||||||
"tests" => "See a list of unit tests to run",
|
"tests" => "See a list of unit tests to run",
|
||||||
"tests/all" => "Run all tests",
|
"tests/all" => "Run all tests",
|
||||||
"jstests" => "See a list of JavaScript tests to run",
|
"jstests" => "See a list of JavaScript tests to run",
|
||||||
@ -121,6 +122,10 @@ class DevelopmentAdmin extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function build() {
|
function build() {
|
||||||
|
if(Director::is_cli()) {
|
||||||
|
$da = new DatabaseAdmin();
|
||||||
|
$da->build();
|
||||||
|
} else {
|
||||||
$renderer = new DebugView();
|
$renderer = new DebugView();
|
||||||
$renderer->writeHeader();
|
$renderer->writeHeader();
|
||||||
$renderer->writeInfo("Environment Builder (formerly db/build)", Director::absoluteBaseURL());
|
$renderer->writeInfo("Environment Builder (formerly db/build)", Director::absoluteBaseURL());
|
||||||
@ -132,6 +137,92 @@ class DevelopmentAdmin extends Controller {
|
|||||||
echo "</div>";
|
echo "</div>";
|
||||||
$renderer->writeFooter();
|
$renderer->writeFooter();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function reset() {
|
||||||
|
global $databaseConfig;
|
||||||
|
$databaseName = $databaseConfig['database'];
|
||||||
|
|
||||||
|
if(Director::is_cli()) {
|
||||||
|
$this->performReset();
|
||||||
|
echo "\n$databaseName has been completely truncated and rebuilt.\n\n";
|
||||||
|
} else {
|
||||||
|
$renderer = new DebugView();
|
||||||
|
$renderer->writeHeader();
|
||||||
|
$renderer->writeInfo('Database reset', 'Completely truncate and rebuild the current database');
|
||||||
|
echo '<div style="margin: 0 2em">';
|
||||||
|
|
||||||
|
if(isset($_GET['done'])) {
|
||||||
|
echo "<p style=\"color: green\"><b>$databaseName</b> has been completely truncated and rebuilt.</p>";
|
||||||
|
echo "<p>Note: If you had <i>SS_DEFAULT_ADMIN_USERNAME</i> and <i>SS_DEFAULT_ADMIN_PASSWORD</i>
|
||||||
|
defined in your <b>_ss_environment.php</b> file, a default admin Member record has been created
|
||||||
|
with those credentials.</p>";
|
||||||
|
} else {
|
||||||
|
echo $this->ResetForm()->renderWith('Form');
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '</div>';
|
||||||
|
$renderer->writeFooter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function performReset() {
|
||||||
|
$da = new DatabaseAdmin();
|
||||||
|
$da->clearAllData();
|
||||||
|
|
||||||
|
// If _ss_environment.php has some constants set for default admin, set these up in the request
|
||||||
|
$_REQUEST['username'] = defined('SS_DEFAULT_ADMIN_USERNAME') ? SS_DEFAULT_ADMIN_USERNAME : null;
|
||||||
|
$_REQUEST['password'] = defined('SS_DEFAULT_ADMIN_PASSWORD') ? SS_DEFAULT_ADMIN_PASSWORD : null;
|
||||||
|
|
||||||
|
$da->build();
|
||||||
|
}
|
||||||
|
|
||||||
|
function ResetForm() {
|
||||||
|
global $databaseConfig;
|
||||||
|
$databaseName = $databaseConfig['database'];
|
||||||
|
|
||||||
|
if(!Session::get('devResetRandNumber')) {
|
||||||
|
$rand = rand(5,500);
|
||||||
|
Session::set('devResetRandNumber', $rand);
|
||||||
|
} else {
|
||||||
|
$rand = Session::get('devResetRandNumber');
|
||||||
|
}
|
||||||
|
|
||||||
|
$form = new Form(
|
||||||
|
$this,
|
||||||
|
'ResetForm',
|
||||||
|
new FieldSet(
|
||||||
|
new LiteralField('ResetWarning', "<p style=\"color: red\">WARNING: This will completely
|
||||||
|
destroy ALL existing data in <b>$databaseName</b>! Press the button below to
|
||||||
|
confirm this action.</p>"),
|
||||||
|
new HiddenField('devResetRandNumber', '', $rand)
|
||||||
|
),
|
||||||
|
new FieldSet(
|
||||||
|
new FormAction('doReset', 'Reset and completely rebuild the database')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$form->setFormAction(Director::absoluteBaseURL() . 'dev/ResetForm');
|
||||||
|
|
||||||
|
return $form;
|
||||||
|
}
|
||||||
|
|
||||||
|
function doReset($data, $form, $request) {
|
||||||
|
if(!isset($data['devResetRandNumber'])) {
|
||||||
|
Director::redirectBack();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Avoid accidental database resets by checking the posted number to the one in session
|
||||||
|
if(Session::get('devResetRandNumber') != $data['devResetRandNumber']) {
|
||||||
|
Director::redirectBack();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->performReset();
|
||||||
|
Session::clear('devResetRandNumber');
|
||||||
|
Director::redirect(Director::absoluteBaseURL() . 'dev/reset?done=1');
|
||||||
|
}
|
||||||
|
|
||||||
function errors() {
|
function errors() {
|
||||||
Director::redirect("Debug_");
|
Director::redirect("Debug_");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user