diff --git a/packages/vtiger/mandatory/Mobile.zip b/packages/vtiger/mandatory/Mobile.zip index 8f539b289e20c81be0dd894c960e5391b8070d10..126bd9a8608b0f01b2dfc4865c9ba5a10744c527 100644 Binary files a/packages/vtiger/mandatory/Mobile.zip and b/packages/vtiger/mandatory/Mobile.zip differ diff --git a/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php b/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php index 57bdf53f5459fb8b71c8f95841d9ad860576cbd6..fdb64a54636fbb1fcde6445ddee947c2908d2738 100644 --- a/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php +++ b/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php @@ -10,9 +10,9 @@ include_once 'include/Webservices/Retrieve.php'; class Mobile_WS_FetchRecord extends Mobile_WS_Controller { - + private $module = false; - + protected $resolvedValueCache = array(); protected function detectModuleName($recordid) { @@ -30,53 +30,36 @@ class Mobile_WS_FetchRecord extends Mobile_WS_Controller { return $record; } - + function process(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); - $record = $request->get('record'); - $module = $request->get('module'); + $record = $this->processRetrieve($request); - $moduleModel = Vtiger_Module_Model::getInstance($module); - $recordModel = Vtiger_Record_Model::getInstanceById($record, $moduleModel); - $data = $recordModel->getData(); - - $data = $this->resolveRecordValues($data, $moduleModel); + $this->resolveRecordValues($record, $current_user); $response = new Mobile_API_Response(); - $response->setResult(array('record' => $data)); + $response->setResult(array('record' => $record)); return $response; } - - function resolveRecordValues($data, $moduleModel) { - $fields = $moduleModel->getFields(); + + function resolveRecordValues(&$record, $user, $ignoreUnsetFields=false) { + if(empty($record)) return $record; - foreach ($data as $fieldName => $value) { - if ($fields[$fieldName]) { - $fieldModel = $fields[$fieldName]; - $fieldType = $fieldModel->getFieldDataType(); - $referenceModules = $fieldModel->getReferenceList(); - if ($fieldType == 'reference' && !in_array('Users', $referenceModules)) { - $data[$fieldName] = array('value' => $value, 'label' => decode_html(Vtiger_Functions::getCRMRecordLabel($value))); - } else if ($fieldType == 'reference' && in_array('Users', $referenceModules)) { - $data[$fieldName] = array('value' => $value, 'label' => decode_html(Vtiger_Functions::getUserRecordLabel($value))); - } else if ($fieldType == 'url') { - $data[$fieldName] = array('value' => $value, 'label' => $value); - } else if ($fieldType == 'owner') { - $ownerName = Vtiger_Functions::getUserRecordLabel($value); - if (!empty($ownerName)) { - $data[$fieldName] = array('value' => $value, 'label' => decode_html($ownerName)); - } else { - $data[$fieldName] = array('value' => $value, 'label' => decode_html(Vtiger_Functions::getGroupRecordLabel($value))); - } - } else { - $data[$fieldName] = array('value' => $value, 'label' => decode_html($fieldModel->getDisplayValue($value))); + $fieldnamesToResolve = Mobile_WS_Utils::detectFieldnamesToResolve( + $this->detectModuleName($record['id']) ); + + if(!empty($fieldnamesToResolve)) { + foreach($fieldnamesToResolve as $resolveFieldname) { + if ($ignoreUnsetFields === false || isset($record[$resolveFieldname])) { + $fieldvalueid = $record[$resolveFieldname]; + $fieldvalue = $this->fetchRecordLabelForId($fieldvalueid, $user); + $record[$resolveFieldname] = array('value' => $fieldvalueid, 'label'=>$fieldvalue); } } } - return $data; } - + function fetchRecordLabelForId($id, $user) { $value = null;