Merge branch '4.2' into 4.3

This commit is contained in:
Dan Hensby 2019-03-06 11:04:14 +00:00
commit a8605b04e0
No known key found for this signature in database
GPG Key ID: 3906B235643EF10B
4 changed files with 45 additions and 7 deletions

View File

@ -196,7 +196,7 @@ class RequestHandler extends ViewableData
if (!$this->hasAction($action)) {
return $this->httpError(404, "Action '$action' isn't available $classMessage.");
}
if (!$this->checkAccessAction($action) || in_array(strtolower($action), ['run', 'doInit'])) {
if (!$this->checkAccessAction($action) || in_array(strtolower($action), ['run', 'doinit'])) {
return $this->httpError(403, "Action '$action' isn't allowed $classMessage.");
}
$result = $this->handleAction($request, $action);
@ -414,7 +414,7 @@ class RequestHandler extends ViewableData
$actionsWithoutExtra = $this->config()->get('allowed_actions', true);
if (!is_array($actions) || !$actionsWithoutExtra) {
if ($action != 'doInit' && $action != 'run' && method_exists($this, $action)) {
if (!in_array(strtolower($action), ['run', 'doinit']) && method_exists($this, $action)) {
return true;
}
}

View File

@ -1416,8 +1416,10 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
// Inserts done one the base table are performed in another step, so the manipulation should instead
// attempt an update, as though it were a normal update.
$manipulation[$table]['command'] = $isNewRecord ? 'insert' : 'update';
$manipulation[$table]['id'] = $this->record['ID'];
$manipulation[$table]['class'] = $class;
if ($this->isInDB()) {
$manipulation[$table]['id'] = $this->record['ID'];
}
}
/**
@ -1436,10 +1438,10 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
}
// Perform an insert on the base table
$insert = new SQLInsert('"' . $baseTable . '"');
$insert
->assign('"Created"', $now)
->execute();
$manipulation = [];
$this->prepareManipulationTable($baseTable, $now, true, $manipulation, $this->baseClass());
DB::manipulate($manipulation);
$this->changed['ID'] = self::CHANGE_VALUE;
$this->record['ID'] = DB::get_generated_id($baseTable);
}

View File

@ -343,4 +343,35 @@ class DataObjectSchemaTest extends SapphireTest
'columns' => ['IndexedMoneyCurrency', 'IndexedMoneyAmount']
], $indexes['IndexedMoney']);
}
/**
* Ensure that records with unique indexes can be written
*/
public function testWriteUniqueIndexes()
{
// Create default object
$zeroObject = new AllIndexes();
$zeroObject->Number = 0;
$zeroObject->write();
$this->assertListEquals(
[
['Number' => 0],
],
AllIndexes::get()
);
// Test a new record can be created without clashing with default value
$validObject = new AllIndexes();
$validObject->Number = 1;
$validObject->write();
$this->assertListEquals(
[
['Number' => 0],
['Number' => 1],
],
AllIndexes::get()
);
}
}

View File

@ -5,6 +5,11 @@ use SilverStripe\Dev\TestOnly;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\FieldType\DBIndexable;
/**
* @property int $Number
* @property string $Content
* @property string $Title
*/
class AllIndexes extends DataObject implements TestOnly
{
private static $table_name = 'DataObjectSchemaTest_AllIndexes';