Fix rebase

This commit is contained in:
Anne-Cath
2026-02-17 15:37:42 +01:00
parent 4406afa089
commit af29a00065
2 changed files with 127 additions and 118 deletions

View File

@@ -97,33 +97,77 @@ class RestUtils
* @throws Exception * @throws Exception
* @api * @api
*/ */
public static function GetFieldList($sClass, $oData, $sParamName) public static function GetFieldList($sClass, $oData, $sParamName, $bFailIfNotFound = true)
{ {
$sFields = self::GetOptionalParam($oData, $sParamName, '*'); $sFields = self::GetOptionalParam($oData, $sParamName, '*');
$aShowFields = []; return match($sFields) {
if ($sFields == '*') { '*' => self::GetFieldListForClass($sClass),
foreach (MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef) { '*+' => self::GetFieldListForParentClass($sClass),
$aShowFields[$sClass][] = $sAttCode; default => self::GetLimitedFieldListForClass($sClass, $sFields, $sParamName, $bFailIfNotFound),
};
} }
} elseif ($sFields == '*+') {
public static function HasRequestedExtendedOutput(string $sFields): bool
{
return match($sFields) {
'*' => false,
'*+' => true,
default => substr_count($sFields, ':') > 1,
};
}
public static function HasRequestedAllOutputFields(string $sFields): bool
{
return match($sFields) {
'*', '*+' => true,
default => false,
};
}
protected static function GetFieldListForClass(string $sClass): array
{
return [$sClass => array_keys(MetaModel::ListAttributeDefs($sClass))];
}
protected static function GetFieldListForParentClass(string $sClass): array
{
$aFieldList = array();
foreach (MetaModel::EnumChildClasses($sClass, ENUM_CHILD_CLASSES_ALL) as $sRefClass) { foreach (MetaModel::EnumChildClasses($sClass, ENUM_CHILD_CLASSES_ALL) as $sRefClass) {
foreach (MetaModel::ListAttributeDefs($sRefClass) as $sAttCode => $oAttDef) { $aFieldList = array_merge($aFieldList, self::GetFieldListForClass($sRefClass));
$aShowFields[$sRefClass][] = $sAttCode;
} }
return $aFieldList;
} }
} else {
protected static function GetLimitedFieldListForSingleClass(string $sClass, string $sFields, string $sParamName, bool $bFailIfNotFound = true): array
{
$aFieldList = [$sClass => []];
foreach (explode(',', $sFields) as $sAttCode) { foreach (explode(',', $sFields) as $sAttCode) {
$sAttCode = trim($sAttCode); $sAttCode = trim($sAttCode);
if (($sAttCode != 'id') && (!MetaModel::IsValidAttCode($sClass, $sAttCode))) { if (($sAttCode == 'id') || (MetaModel::IsValidAttCode($sClass, $sAttCode))) {
throw new Exception("$sParamName: invalid attribute code '$sAttCode'"); $aFieldList[$sClass][] = $sAttCode;
} else {
if ($bFailIfNotFound) {
throw new Exception("$sParamName: invalid attribute code '$sAttCode' for class '$sClass'");
} }
$aShowFields[$sClass][] = $sAttCode;
} }
} }
return $aFieldList;
}
return $aShowFields; protected static function GetLimitedFieldListForClass(string $sClass, string $sFields, string $sParamName, bool $bFailIfNotFound = true): array
{
if (!str_contains($sFields, ':')) {
return self::GetLimitedFieldListForSingleClass($sClass, $sFields, $sParamName, $bFailIfNotFound);
} }
$aFieldList = [];
$aFieldListParts = explode(';', $sFields);
foreach ($aFieldListParts as $sClassFields) {
list($sSubClass, $sSubClassFields) = explode(':', $sClassFields);
$aFieldList = array_merge($aFieldList, self::GetLimitedFieldListForSingleClass(trim($sSubClass), trim($sSubClassFields), $sParamName, $bFailIfNotFound));
}
return $aFieldList;
}
/** /**
* Read and interpret object search criteria from a Rest/Json structure * Read and interpret object search criteria from a Rest/Json structure
* *

View File

@@ -214,40 +214,6 @@ class RestResultWithObjects extends RestResult
/** @var array "DBObject_class:DBObject_key" as key, {@see \ObjectResult} as value */ /** @var array "DBObject_class:DBObject_key" as key, {@see \ObjectResult} as value */
public $objects; public $objects;
public function PrepareObject($iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false)
{
$sClass = get_class($oObject);
$oObjRes = new ObjectResult($sClass, $oObject->GetKey());
$oObjRes->code = $iCode;
$oObjRes->message = $sMessage;
$aFields = null;
if (!is_null($aFieldSpec))
{
// Enum all classes in the hierarchy, starting with the current one
foreach (MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL, false) as $sRefClass)
{
if (array_key_exists($sRefClass, $aFieldSpec))
{
$aFields = $aFieldSpec[$sRefClass];
break;
}
}
}
if (is_null($aFields))
{
// No fieldspec given, or not found...
$aFields = array('id', 'friendlyname');
}
foreach ($aFields as $sAttCode)
{
$oObjRes->AddField($oObject, $sAttCode, $bExtendedOutput);
}
return $oObjRes;
}
/** /**
* Report the given object * Report the given object
* *
@@ -266,7 +232,8 @@ class RestResultWithObjects extends RestResult
*/ */
public function AddObject($iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false) public function AddObject($iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false)
{ {
$oObjRes = $this->PrepareObject($iCode, $sMessage, $oObject, $aFieldSpec, $bExtendedOutput); $oObjRes = ObjectResult::FromDBObject($oObject, $aFieldSpec, $bExtendedOutput, $iCode, $sMessage);
$sObjKey = get_class($oObject).'::'.$oObject->GetKey(); $sObjKey = get_class($oObject).'::'.$oObject->GetKey();
$this->objects[$sObjKey] = $oObjRes; $this->objects[$sObjKey] = $oObjRes;
} }
@@ -315,7 +282,7 @@ class RestResultWithObjectSets extends RestResultWithObjects
*/ */
public function AppendSubObject($sObjectAlias, $iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false) public function AppendSubObject($sObjectAlias, $iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false)
{ {
$oObjRes = $this->PrepareObject($iCode, $sMessage, $oObject, $aFieldSpec, $bExtendedOutput); $oObjRes = ObjectResult::FromDBObject($oObject, $aFieldSpec, $bExtendedOutput, $iCode, $sMessage);
$this->current_object[$sObjectAlias] = $oObjRes; $this->current_object[$sObjectAlias] = $oObjRes;
} }
} }
@@ -598,9 +565,7 @@ class CoreServices implements iRestServiceProvider, iRestInputSanitizer
} elseif ($iPage < 1) { } elseif ($iPage < 1) {
$oResult->code = RestResult::INVALID_PAGE; $oResult->code = RestResult::INVALID_PAGE;
$oResult->message = "The request page number is not valid. It must be an integer greater than 0"; $oResult->message = "The request page number is not valid. It must be an integer greater than 0";
} } elseif (count($oObjectSet->GetSelectedClasses()) > 1) {
elseif (count($oObjectSet->GetSelectedClasses()) > 1)
{
$oResult = new RestResultWithObjectSets(); $oResult = new RestResultWithObjectSets();
$aCache = []; $aCache = [];
$aShowFields = []; $aShowFields = [];