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;
 }