mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-19 07:12:26 +02:00
Fix rebase
This commit is contained in:
@@ -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
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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 = [];
|
||||||
|
|||||||
Reference in New Issue
Block a user