API Remove DataObjectSchema::getFieldMap() (#8960)

Introduced as a less public API in https://github.com/silverstripe/silverstripe-assets/pull/227
This commit is contained in:
Maxime Rainville 2019-05-06 12:33:23 +12:00 committed by Ingo Schommer
parent 692295d48f
commit 8ee50d2ba7
3 changed files with 3 additions and 67 deletions

View File

@ -1242,54 +1242,4 @@ class DataObjectSchema
);
}
}
/**
* Returns an array of the fields available for the provided class and its sub-classes as follows:
* <code>
* [
* 'ClassName' => [
* 'TableName' => [
* 'FieldName',
* 'FieldName2',
* ],
* 'TableName2' => [
* 'FieldName3',
* ],
* ],
* ]
* </code>
*
* @param string|object $baseClass
* @param bool $includeBaseClass Whether to include fields in the base class or not
* @param string|array $fieldNames The field to get mappings for, for example 'HTMLText'. Can also be an array.
* @return array An array of fields that derivec from $baseClass.
* @throws \ReflectionException
*/
public static function getFieldMap($baseClass, $includeBaseClass, $fieldNames)
{
$mapping = [];
foreach (ClassInfo::subclassesFor($baseClass, $includeBaseClass) as $class) {
/** @var DataObjectSchema $schema */
$schema = singleton($class)->getSchema();
/** @var DataObject $fields */
$fields = $schema->fieldSpecs($class);
foreach ($fields as $field => $type) {
if (in_array($type, $fieldNames)) {
$table = $schema->tableForField($class, $field);
if (!isset($mapping[$class])) {
$mapping[$class] = [];
}
if (!isset($mapping[$class][$table])) {
$mapping[$class][$table] = [];
}
if (!in_array($field, $mapping[$class][$table])) {
$mapping[$class][$table][] = $field;
}
}
}
}
return $mapping;
}
}

View File

@ -20,6 +20,7 @@ use SilverStripe\ORM\FieldType\DBPolymorphicForeignKey;
use SilverStripe\ORM\FieldType\DBVarchar;
use SilverStripe\ORM\ManyManyList;
use SilverStripe\ORM\Tests\DataObjectTest\Company;
use SilverStripe\ORM\Tests\DataObjectTest\Fan;
use SilverStripe\ORM\Tests\DataObjectTest\OtherSubclassWithSameField;
use SilverStripe\ORM\Tests\DataObjectTest\Player;
use SilverStripe\ORM\Tests\DataObjectTest\SubTeam;
@ -2408,20 +2409,4 @@ class DataObjectTest extends SapphireTest
$do->write();
}
public function testGetFieldMap()
{
$classes = DataObjectSchema::getFieldMap(DataObject::class, false, ['HTMLVarchar', 'Varchar']);
$this->assertEquals('Title', $classes[Team::class]['DataObjectTest_Team'][1]);
$this->assertEquals(
'SubclassDatabaseField',
$classes[SubTeam::class]['DataObjectTest_SubTeam'][0]
);
$classes = DataObjectSchema::getFieldMap(SubTeam::class, true, ['HTMLVarchar']);
$this->assertFalse(isset($classes[Team::class]));
$this->assertEquals('DatabaseField', $classes[SubTeam::class]['DataObjectTest_Team'][0]);
}
}

View File

@ -4,6 +4,7 @@ namespace SilverStripe\ORM\Tests\DataObjectTest;
use SilverStripe\Dev\TestOnly;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\FieldType\DBVarchar;
class Fan extends DataObject implements TestOnly
{
@ -11,7 +12,7 @@ class Fan extends DataObject implements TestOnly
private static $db = array(
'Name' => 'Varchar(255)',
'Email' => 'Varchar',
'Email' => DBVarchar::class
);
private static $has_one = array(