private static function get($codeName, $order, $payment, $shipment) { static $cache = array(); if (is_numeric($order)) { $order = ($v = $cache[$order]) ? $v : OrderTable::getById($order)->fetch(); } elseif ($order instanceof Order) { $order = $order->getFieldValues(); } if (is_array($order)) { $cache[$order['ID']] = $order; } else { return null; } $result = null; list($entity, $item) = self::getMap($codeName, $order['PERSON_TYPE_ID']); switch ($entity) { case 'VALUE': $result = $item; break; case 'ORDER': $result = $order[$item]; break; case 'PAYMENT': if ($payment) { $result = $payment[$item]; } break; case 'SHIPMENT': if ($shipment) { $result = $shipment[$item]; } break; case 'PROPERTY': $property = OrderPropsValueTable::getList(array('select' => array('VALUE'), 'filter' => array('ORDER_ID' => $order['ID'], 'ORDER_PROPS_ID' => $item), 'limit' => 1))->fetch(); if ($property) { $result = $property['VALUE']; } break; case 'COMPANY': $companyId = null; if ($payment) { $companyId = $payment['COMPANY_ID']; } elseif ($shipment) { $companyId = $shipment['COMPANY_ID']; } if ($companyId) { if (substr($item, 0, 3) == 'UF_') { global $USER_FIELD_MANAGER; if ($value = $USER_FIELD_MANAGER->GetUserFieldValue(CompanyTable::getUfId(), $item, $companyId)) { $result = $value; } } else { if ($company = CompanyTable::getById($companyId)->fetch()) { $result = $company[$item]; } } } break; case 'USER': global $USER; if (($userId = $order['USER_ID']) && ($user = $USER->GetByID($userId)->Fetch())) { $result = $user[$item]; } break; } return $result; }