function index() { $modelName = $this->request->param('Model'); $schema = array(); $underscoreFields = Config::inst()->get($modelName, 'underscoreFields'); foreach (singleton($modelName)->inheritedDatabaseFields() as $key => $value) { if ($underscoreFields) { $key = ApiDataObject::to_underscore($key); } $schema[$key] = $value; } return $this->sendData(["schema" => $schema]); }
function testToNestedArray() { $data = ["message" => "Test"]; ApiDataObject::to_nested_array($data, 1, $a); $this->assertEquals($data, $a); $member = $this->objFromFixture('Member', 'api'); $a = null; ApiDataObject::to_nested_array($member, 1, $a); $this->assertEquals($member->ID, $a['id']); $this->assertEquals($member->Email, $a['email']); $list = new ArrayList([$this->objFromFixture('Member', 'api'), $this->objFromFixture('Member', 'admin')]); $a = null; ApiDataObject::to_nested_array($list, 1, $a); $this->assertEquals(2, sizeof($a)); $this->assertEquals($list[0]->ID, $a[0]['id']); $this->assertEquals($list[1]->ID, $a[1]['id']); }
function populateWithArrayData(array $data, $only = null, $exclude = null) { $hasOnlyFilter = is_array($only); $hasExcludeFilter = is_array($exclude); if ($hasExcludeFilter) { foreach ($exclude as $field) { $altField = ApiDataObject::real_field_name($field, $this->owner); if (isset($data[$field])) { unset($data[$field]); } else { if (isset($data[$altField])) { unset($data[$altField]); } } } } foreach ($data as $key => $value) { $field = ApiDataObject::real_field_name($key, $this->owner); if ($hasOnlyFilter && !in_array($field, $only, true)) { continue; } else { $this->owner->{$field} = $value; } } }
function queryParametersToSQLFilter($parameters = null, $class = null) { if (!is_array($parameters)) { $class = $parameters; $parameters = $this->request->getVars(); unset($parameters['url']); // is used by silverstripe } if (!$class) { $class = $this->stat('api_model'); } $filter = array(); $underscoreFields = $this->config()->get('underscoreFields'); foreach ($parameters as $field => $value) { $searchFilterModifier = ''; // http://doc.silverstripe.com/framework/en/topics/datamodel if ($value[0] === '%' && $value[strlen($value) - 1] === '%') { $searchFilterModifier = ':PartialMatch'; $value = substr($value, 1, -1); } else { if ($value[0] === '%') { $searchFilterModifier = ':EndsWith'; $value = substr($value, 0, -1); } else { if ($value[strlen($value) - 1] === '%') { $searchFilterModifier = ':StartsWith'; $value = substr($value, 0, -1); } elseif ($value[0] === '!') { $searchFilterModifier = ':Negation'; $value = substr($value, 1); } elseif (substr($value, 0, 2) === '<=') { $searchFilterModifier = ':LessThanOrEqual'; $value = substr($value, 2); } elseif ($value[0] === '<') { $searchFilterModifier = ':LessThan'; $value = substr($value, 1); } elseif (substr($value, 0, 2) === '>=') { $searchFilterModifier = ':GreaterThanOrEqual'; $value = substr($value, 2); } elseif ($value[0] === '<') { $searchFilterModifier = ':GreaterThan'; $value = substr($value, 1); } } } if ($underscoreFields && $class) { $field = ApiDataObject::real_field_name($field, $class); } $filter[$field . $searchFilterModifier] = $value; } return $filter; }