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