protected static function parseDropdowns($fields, $params = array())
{
// default params
$default = array('expand_dropdowns' => false, 'get_hateoas' => true);
$params = array_merge($default, $params);
// parse fields recursively
foreach ($fields as $key => &$value) {
if (is_array($value)) {
$value = self::parseDropdowns($value);
}
if (is_integer($key)) {
continue;
}
if (isForeignKeyField($key)) {
// specific key transformations
if ($key == "items_id" && isset($fields['itemtype'])) {
$key = getForeignKeyFieldForItemType($fields['itemtype']);
}
if ($key == "auths_id" && isset($fields['authtype']) && $fields['authtype'] == Auth::LDAP) {
$key = "authldaps_id";
}
if ($key == "default_requesttypes_id") {
$key = "requesttypes_id";
}
if (!empty($value) || $key == 'entities_id' && $value >= 0) {
$tablename = getTableNameForForeignKeyField($key);
$itemtype = getItemTypeForTable($tablename);
// get hateoas
if ($params['get_hateoas']) {
$fields['links'][] = array('rel' => $itemtype, 'href' => self::$api_url . "/{$itemtype}/" . $value);
}
// expand dropdown
if ($params['expand_dropdowns']) {
$value = Dropdown::getDropdownName($tablename, $value);
// fix value for inexistent items
if ($value == " ") {
$value = "";
}
}
}
}
}
return $fields;
}