public function transformForImport($fieldData, $moduleMeta, $fillDefault = true, $mergeMode = false) { $moduleFields = $moduleMeta->getModuleFields(); $defaultFieldValues = $this->getDefaultFieldValues($moduleMeta); foreach ($fieldData as $fieldName => $fieldValue) { $fieldInstance = $moduleFields[$fieldName]; if (!is_object($fieldInstance)) { continue; } // specially for Inventory module import which has virtual item line fields if ($fieldInstance->getFieldDataType() == 'owner') { global $adb; if (strpos($fieldValue, '::::') > 0) { $fieldValueDetails = explode('::::', $fieldValue); } else { $fieldValueDetails = explode(':::', $fieldValue); } if (count($fieldValueDetails) == 2) { $fieldValue = $fieldValueDetails[1]; } if (count($fieldValueDetails) == 3) { $user_qry = 'select vtiger_users.id from vtiger_users where ' . $fieldValueDetails[2] . ' = ?'; $res = $adb->pquery($user_qry, array($fieldValueDetails[1])); $ownerId = 0; if ($res and $adb->num_rows($res) > 0) { $ownerId = $adb->query_result($res, 0, 'id'); } } else { $ownerId = getUserId_Ol($fieldValue); if (empty($ownerId)) { $ownerId = getGrpId($fieldValue); } } if (empty($ownerId) && isset($defaultFieldValues[$fieldName])) { $ownerId = $defaultFieldValues[$fieldName]; } if (empty($ownerId) || !Import_Utils::hasAssignPrivilege($moduleMeta->getEntityName(), $ownerId)) { $ownerId = $this->user->id; } $fieldData[$fieldName] = $ownerId; } elseif ($fieldInstance->getFieldDataType() == 'reference') { $entityId = false; if (!empty($fieldValue)) { if (strpos($fieldValue, '::::') > 0) { $fieldValueDetails = explode('::::', $fieldValue); } else { $fieldValueDetails = explode(':::', $fieldValue); } if (count($fieldValueDetails) > 1) { $referenceModuleName = trim($fieldValueDetails[0]); $entityLabel = trim($fieldValueDetails[1]); if (!empty($fieldValueDetails[2])) { $entityId = getEntityId($referenceModuleName, $entityLabel, $fieldValueDetails[2]); } else { $entityId = getEntityId($referenceModuleName, $entityLabel); } } else { $referencedModules = $fieldInstance->getReferenceList(); $entityLabel = $fieldValue; foreach ($referencedModules as $referenceModule) { $referenceModuleName = $referenceModule; if ($referenceModule == 'Users') { $referenceEntityId = getUserId_Ol($entityLabel); if (empty($referenceEntityId) || !Import_Utils::hasAssignPrivilege($moduleMeta->getEntityName(), $referenceEntityId)) { $referenceEntityId = $this->user->id; } } else { $referenceEntityId = getEntityId($referenceModule, $entityLabel); } if ($referenceEntityId != 0) { $entityId = $referenceEntityId; break; } } } if ((empty($entityId) || $entityId == 0) && (!empty($referenceModuleName) and !in_array($referenceModuleName, getInventoryModules()))) { if (isPermitted($referenceModuleName, 'EditView') == 'yes') { $wsEntityIdInfo = $this->createEntityRecord($referenceModuleName, $entityLabel); $wsEntityId = $wsEntityIdInfo['id']; $entityIdComponents = vtws_getIdComponents($wsEntityId); $entityId = $entityIdComponents[1]; } } $fieldData[$fieldName] = $entityId; } else { $referencedModules = $fieldInstance->getReferenceList(); if ($referencedModules[0] == 'Users') { if (isset($defaultFieldValues[$fieldName])) { $fieldData[$fieldName] = $defaultFieldValues[$fieldName]; } if (empty($fieldData[$fieldName]) || !Import_Utils::hasAssignPrivilege($moduleMeta->getEntityName(), $fieldData[$fieldName])) { $fieldData[$fieldName] = $this->user->id; } } else { $fieldData[$fieldName] = ''; } } } elseif ($fieldInstance->getFieldDataType() == 'picklist') { global $default_charset; if (empty($fieldValue) && isset($defaultFieldValues[$fieldName])) { $fieldData[$fieldName] = $fieldValue = $defaultFieldValues[$fieldName]; } $allPicklistDetails = $fieldInstance->getPicklistDetails(); $allPicklistValues = array(); foreach ($allPicklistDetails as $picklistDetails) { $allPicklistValues[] = $picklistDetails['value']; } $encodePicklistValue = $fieldValue; if (!in_array($encodePicklistValue, $allPicklistValues)) { $moduleObject = Vtiger_Module::getInstance($moduleMeta->getEntityName()); $fieldObject = Vtiger_Field::getInstance($fieldName, $moduleObject); $fieldObject->setPicklistValues(array($fieldValue)); } } else { if ($fieldInstance->getFieldDataType() == 'datetime' && !empty($fieldValue)) { if ($fieldValue == null || $fieldValue == '0000-00-00 00:00:00') { $fieldValue = ''; } $valuesList = explode(' ', $fieldValue); if (count($valuesList) == 1) { $fieldValue = ''; } $fieldValue = getValidDBInsertDateTimeValue($fieldValue); if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2} ([0-1][0-9]|[2][0-3])([:][0-5][0-9]){1,2}\$/", $fieldValue) == 0) { $fieldValue = ''; } $fieldData[$fieldName] = $fieldValue; } if ($fieldInstance->getFieldDataType() == 'date' && !empty($fieldValue)) { if ($fieldValue == null || $fieldValue == '0000-00-00') { $fieldValue = ''; } $fieldValue = getValidDBInsertDateValue($fieldValue); if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2}\$/", $fieldValue) == 0) { $fieldValue = ''; } $fieldData[$fieldName] = $fieldValue; } if (empty($fieldValue) && isset($defaultFieldValues[$fieldName]) && !$mergeMode) { $fieldData[$fieldName] = $fieldValue = $defaultFieldValues[$fieldName]; } } } if ($fillDefault) { foreach ($defaultFieldValues as $fieldName => $fieldValue) { if (!isset($fieldData[$fieldName])) { $fieldData[$fieldName] = $defaultFieldValues[$fieldName]; } } } if (!$mergeMode) { //Do not check mandatory fields on merge ! foreach ($moduleFields as $fieldName => $fieldInstance) { if (empty($fieldData[$fieldName]) && $fieldInstance->isMandatory()) { return null; } } } return DataTransform::sanitizeData($fieldData, $moduleMeta); }
public function transformForImport($fieldData, $moduleMeta, $fillDefault=true) { $moduleFields = $moduleMeta->getModuleFields(); $defaultFieldValues = $this->getDefaultFieldValues($moduleMeta); foreach ($fieldData as $fieldName => $fieldValue) { $fieldInstance = $moduleFields[$fieldName]; if ($fieldInstance->getFieldDataType() == 'owner') { $ownerId = getUserId_Ol($fieldValue); if (empty($ownerId)) { $ownerId = getGrpId($fieldValue); } if (empty($ownerId) && isset($defaultFieldValues[$fieldName])) { $ownerId = $defaultFieldValues[$fieldName]; } if(empty($ownerId) || !Import_Utils::hasAssignPrivilege($moduleMeta->getEntityName(), $ownerId)) { $ownerId = $this->user->id; } $fieldData[$fieldName] = $ownerId; } elseif ($fieldInstance->getFieldDataType() == 'reference') { $entityId = false; if (!empty($fieldValue)) { if(strpos($fieldValue, '::::') > 0) { $fieldValueDetails = explode('::::', $fieldValue); } else { $fieldValueDetails = explode(':::', $fieldValue); } if (count($fieldValueDetails) > 1) { $referenceModuleName = trim($fieldValueDetails[0]); $entityLabel = trim($fieldValueDetails[1]); $entityId = getEntityId($referenceModuleName, $entityLabel); } else { $referencedModules = $fieldInstance->getReferenceList(); $entityLabel = $fieldValue; foreach ($referencedModules as $referenceModule) { $referenceModuleName = $referenceModule; if ($referenceModule == 'Users') { $referenceEntityId = getUserId_Ol($entityLabel); if(empty($referenceEntityId) || !Import_Utils::hasAssignPrivilege($moduleMeta->getEntityName(), $referenceEntityId)) { $referenceEntityId = $this->user->id; } } else { $referenceEntityId = getEntityId($referenceModule, $entityLabel); } if ($referenceEntityId != 0) { $entityId = $referenceEntityId; break; } } } if ((empty($entityId) || $entityId == 0) && !empty($referenceModuleName)) { if(isPermitted($referenceModuleName, 'EditView') == 'yes') { $wsEntityIdInfo = $this->createEntityRecord($referenceModuleName, $entityLabel); $wsEntityId = $wsEntityIdInfo['id']; $entityIdComponents = vtws_getIdComponents($wsEntityId); $entityId = $entityIdComponents[1]; } } $fieldData[$fieldName] = $entityId; } else { $referencedModules = $fieldInstance->getReferenceList(); if ($referencedModules[0] == 'Users') { if(isset($defaultFieldValues[$fieldName])) { $fieldData[$fieldName] = $defaultFieldValues[$fieldName]; } if(empty($fieldData[$fieldName]) || !Import_Utils::hasAssignPrivilege($moduleMeta->getEntityName(), $fieldData[$fieldName])) { $fieldData[$fieldName] = $this->user->id; } } else { $fieldData[$fieldName] = ''; } } } elseif ($fieldInstance->getFieldDataType() == 'picklist') { global $default_charset; if (empty($fieldValue) && isset($defaultFieldValues[$fieldName])) { $fieldData[$fieldName] = $fieldValue = $defaultFieldValues[$fieldName]; } $allPicklistDetails = $fieldInstance->getPicklistDetails(); $allPicklistValues = array(); foreach ($allPicklistDetails as $picklistDetails) { $allPicklistValues[] = $picklistDetails['value']; } $encodePicklistValue = htmlentities($fieldValue,ENT_QUOTES,$default_charset); if (!in_array($encodePicklistValue, $allPicklistValues)) { $moduleObject = Vtiger_Module::getInstance($moduleMeta->getEntityName()); $fieldObject = Vtiger_Field::getInstance($fieldName, $moduleObject); $fieldObject->setPicklistValues(array($fieldValue)); } } else { if ($fieldInstance->getFieldDataType() == 'datetime' && !empty($fieldValue)) { if($fieldValue == null || $fieldValue == '0000-00-00 00:00:00') { $fieldValue = ''; } $valuesList = explode(' ', $fieldValue); if(count($valuesList) == 1) $fieldValue = ''; $fieldValue = getValidDBInsertDateTimeValue($fieldValue); if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2} ([0-1][0-9]|[2][0-3])([:][0-5][0-9]){1,2}$/", $fieldValue) == 0) { $fieldValue = ''; } $fieldData[$fieldName] = $fieldValue; } if ($fieldInstance->getFieldDataType() == 'date' && !empty($fieldValue)) { if($fieldValue == null || $fieldValue == '0000-00-00') { $fieldValue = ''; } $fieldValue = getValidDBInsertDateValue($fieldValue); if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2}$/", $fieldValue) == 0) { $fieldValue = ''; } $fieldData[$fieldName] = $fieldValue; } if (empty($fieldValue) && isset($defaultFieldValues[$fieldName])) { $fieldData[$fieldName] = $fieldValue = $defaultFieldValues[$fieldName]; } } } if($fillDefault) { foreach($defaultFieldValues as $fieldName => $fieldValue) { if (!isset($fieldData[$fieldName])) { $fieldData[$fieldName] = $defaultFieldValues[$fieldName]; } } } foreach ($moduleFields as $fieldName => $fieldInstance) { if(empty($fieldData[$fieldName]) && $fieldInstance->isMandatory()) { return null; } } return DataTransform::sanitizeData($fieldData, $moduleMeta); }