Rewind(); // Iterate throw objects... while ($oObject = $oDbObjectSet->Fetch()) { // In case ot indirect link if ($sTargetField !== null) { $oObject = MetaModel::GetObject($sTargetClass, $oObject->Get($sTargetField)); } if (!utils::ShowObsoleteData() && $oObject->IsObsolete()) { continue; } // Append object key $aResult[] = $oObject->GetKey(); } return $aResult; } catch (Exception $e) { ExceptionLog::LogException($e); return []; } } /** * Encode. * * Convert array from view to arrays used by UI.php to apply link set modifications. * * @see cmdbAbstractObject::PrepareValueFromPostedForm * * @param array $aElements Link set elements * @param string $sLinkClass Link class name * @param string|null $sExtKeyToRemote External key to remote * * @return array{to_be_created: array, to_be_deleted: array, to_be_added: array, to_be_removed: array} */ public static function Encode(array $aElements, string $sLinkClass, string $sExtKeyToRemote = null): array { // Result arrays $aToBeCreate = []; $aToBeDelete = []; $aToBeAdd = []; $aToBeRemove = []; // Iterate throw data... foreach ($aElements as $aData) { switch ($aData['operation']) { // OPERATION ADD case 'add': if ($sExtKeyToRemote === null) { // Direct link attach $aToBeAdd[] = $aData['data']['key']; } else { // Indirect link creation $aToBeCreate[] = [ 'class' => $sLinkClass, 'data' => [ $sExtKeyToRemote => $aData['data']['key'], ], ]; } break; // OPERATION REMOVE case 'remove': if ($sExtKeyToRemote === null) { // Direct link detach $aToBeRemove[] = $aData['data']['key']; } else { // Indirect link deletion foreach ($aData['data']['link_keys'] as $sKey) { $aToBeDelete[] = $sKey; } } break; } } return [ 'to_be_created' => $aToBeCreate, 'to_be_deleted' => $aToBeDelete, 'to_be_added' => $aToBeAdd, 'to_be_removed' => $aToBeRemove, ]; } /** * Convert string representation of an orm linked set to object ormLinkSet. * * @param string $sValue * @param \ormLinkSet $oOrmLinkSet * */ public static function StringToOrmLinkSet(string $sValue, ormLinkSet $oOrmLinkSet) { try { $aItems = explode(" ", $sValue); foreach ($aItems as $sItem) { if (!empty($sItem)) { $oItem = MetaModel::GetObject($oOrmLinkSet->GetClass(), intval($sItem)); if (!utils::ShowObsoleteData() && $oItem->IsObsolete()) { continue; } $oOrmLinkSet->AddItem($oItem); } } } catch (Exception $e) { ExceptionLog::LogException($e); } } }