public static function appendDateTimeUserFieldsAsShort(\Bitrix\Main\Entity\Base $entity) { /** @global CDatabase $DB */ global $DB; // Advanced fields for datetime user fields $dateFields = array(); foreach ($entity->getFields() as $field) { if (in_array($field->getName(), array('LEAD_BY', 'COMPANY_BY', 'CONTACT_BY'), true) && $field instanceof Bitrix\Main\Entity\ReferenceField) { self::appendDateTimeUserFieldsAsShort($field->getRefEntity()); } else { if ($field instanceof Bitrix\Main\Entity\ExpressionField) { $arUF = self::detectUserField($field); if ($arUF['isUF']) { $ufDataType = self::getUserFieldDataType($arUF); if ($ufDataType === 'datetime') { $dateFields[] = array('def' => array('data_type' => 'datetime', 'expression' => array($DB->DatetimeToDateFunction('%s'), $arUF['ufInfo']['FIELD_NAME'])), 'name' => $arUF['ufInfo']['FIELD_NAME'] . self::UF_DATETIME_SHORT_POSTFIX); } } } } } foreach ($dateFields as $fieldInfo) { $entity->addField($fieldInfo['def'], $fieldInfo['name']); } }
public static function appendTextUserFieldsAsTrimmed(\Bitrix\Main\Entity\Base $entity) { /** @global string $DBType */ global $DBType; $dbType = ToUpper(strval($DBType)); // Advanced fields for text user fields $textFields = array(); foreach ($entity->getFields() as $field) { if (in_array($field->getName(), array('LEAD_BY', 'COMPANY_BY', 'CONTACT_BY'), true) && $field instanceof Bitrix\Main\Entity\ReferenceField) { self::appendTextUserFieldsAsTrimmed($field->getRefEntity()); } else { if ($field instanceof Bitrix\Main\Entity\ExpressionField) { $arUF = self::detectUserField($field); if ($arUF['isUF']) { $ufDataType = self::getUserFieldDataType($arUF); if ($arUF['ufInfo']['MULTIPLE'] === 'Y') { if ($dbType === 'ORACLE' || $dbType === 'MSSQL') { $exprVal = ''; switch ($dbType) { case 'ORACLE': $maxStrLen = 4000; $exprVal = 'TO_CHAR(SUBSTR(%s, 1, ' . $maxStrLen . '))'; break; case 'MSSQL': $maxStrLen = 8000; $exprVal = 'SUBSTRING(%s, 1, ' . $maxStrLen . ')'; break; } /*$textFields[] = array( 'def' => array( 'data_type' => 'string', 'expression' => array( $exprVal, $arUF['ufInfo']['FIELD_NAME'] ) ), 'name' => $arUF['ufInfo']['FIELD_NAME'].self::UF_TEXT_TRIM_POSTFIX );*/ if ($arUF['ufInfo']['USER_TYPE_ID'] === 'datetime') { $fdmsGetterName = 'getFDMsMultipleTrimmedDateTime'; } else { $fdmsGetterName = 'getFDMsMultipleTrimmed'; } $textFields[] = new Main\Entity\ExpressionField($arUF['ufInfo']['FIELD_NAME'] . self::UF_TEXT_TRIM_POSTFIX, $exprVal, array($arUF['ufInfo']['FIELD_NAME']), array('fetch_data_modification' => array(__CLASS__, $fdmsGetterName))); } } } } } } foreach ($textFields as $fieldInfo) { if (is_object($fieldInfo)) { $entity->addField($fieldInfo); } else { $entity->addField($fieldInfo['def'], $fieldInfo['name']); } } }