silverstripe-userforms/code/Task/UserFormsColumnCleanTask.php

68 lines
2.1 KiB
PHP
Raw Normal View History

<?php
namespace SilverStripe\UserForms\Task;
use SilverStripe\Dev\MigrationTask;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DB;
use SilverStripe\UserForms\Model\EditableFormField;
/**
* UserForms Column Clean Task
*
* Column clean up tasks for Userforms
*
* @package userforms
*/
2016-07-21 07:53:59 +02:00
class UserFormsColumnCleanTask extends MigrationTask
{
protected $title = 'UserForms EditableFormField Column Clean task';
2016-07-21 07:53:59 +02:00
protected $description = 'Removes unused columns from EditableFormField for MySQL databases;';
2016-07-21 07:53:59 +02:00
protected $tables = [EditableFormField::class];
2016-07-21 07:53:59 +02:00
protected $keepColumns = ['ID'];
2016-07-21 07:53:59 +02:00
/**
* Publish the existing forms.
*/
public function run($request)
{
$schema = DataObject::getSchema();
2016-07-21 07:53:59 +02:00
foreach ($this->tables as $db) {
$table = $schema->tableName($db);
$columns = $schema->databaseFields($db);
$query = "SHOW COLUMNS FROM $table";
2016-07-21 07:53:59 +02:00
$liveColumns = DB::query($query)->column();
$query = "SHOW TABLES LIKE 'Backup_$table'";
2016-07-21 07:53:59 +02:00
$tableExists = DB::query($query)->value();
if ($tableExists != null) {
echo "Tasks run already on $table exiting";
2016-07-21 07:53:59 +02:00
return;
}
$backedUp = false;
foreach ($liveColumns as $column) {
if (!$backedUp) {
echo "Backing up $table <br />";
echo "Creating Backup_$table <br />";
2016-07-21 07:53:59 +02:00
// backup table
$query = "CREATE TABLE Backup_$table LIKE $table";
2016-07-21 07:53:59 +02:00
DB::query($query);
echo "Populating Backup_$table <br />";
$query = "INSERT Backup_$table SELECT * FROM $table";
2016-07-21 07:53:59 +02:00
DB::query($query);
$backedUp = true;
2016-07-21 07:53:59 +02:00
}
2022-04-13 03:52:56 +02:00
if (!isset($columns[$column]) && !in_array($column, $this->keepColumns ?? [])) {
echo "Dropping $column from $table <br />";
$query = "ALTER TABLE $table DROP COLUMN $column";
2016-07-21 07:53:59 +02:00
DB::query($query);
}
}
}
}
}