function testPopulateWithArrayData()
 {
     $data = ["FirstName" => "Philipp", "Email" => "*****@*****.**", "ID" => 123, "NumVisit" => 333333];
     $member = $this->objFromFixture('Member', 'api');
     $member->populateWithArrayData($data, null, ["NumVisit"]);
     foreach ($data as $field => $exptectedValue) {
         if ($field === 'NumVisit') {
             $this->assertFalse($exptectedValue === $member->{$field});
         } else {
             $this->assertEquals($exptectedValue, $member->{$field});
         }
     }
     // we also ensure that we can work with underscore field names
     $underscoreData = ["first_name" => "Philipp", "email" => "*****@*****.**", "id" => 123, "num_visit" => 333333];
     $member = $this->objFromFixture('Member', 'api');
     $member->populateWithArrayData($underscoreData, null, ["NumVisit"]);
     foreach ($data as $field => $exptectedValue) {
         $field = ApiDataObject::real_field_name($field, $member);
         $this->assertEquals($exptectedValue, $member->{$field});
     }
 }
 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;
 }