Index: modules/in-commerce/units/orders/orders_tag_processor.php =================================================================== --- modules/in-commerce/units/orders/orders_tag_processor.php +++ modules/in-commerce/units/orders/orders_tag_processor.php @@ -516,29 +516,45 @@ } /** - * Returns true in case if credit card was used as payment type for order + * Returns true in case if credit card was used as payment type for order. * - * @param Array $params - * @return bool + * @param array $params Tag params. + * + * @return boolean + * @throws Exception When payment type not found. */ - function UsingCreditCard($params) + protected function UsingCreditCard(array $params) { - $object = $this->getObject($params); + static $payment_types, $primary_payment_type; - $pt = $object->GetDBField('PaymentType'); + if ( !isset($payment_types) ) { + $pt_table = $this->Application->getUnitOption('pt', 'TableName'); + $sql = 'SELECT g.RequireCCFields, pt.PaymentTypeId + FROM ' . $pt_table . ' pt + JOIN ' . TABLE_PREFIX . 'Gateways g ON g.GatewayId = pt.GatewayId'; - if (!$pt) { - $pt = $this->Conn->GetOne('SELECT PaymentTypeId FROM '.TABLE_PREFIX.'PaymentTypes WHERE IsPrimary = 1'); - $object->SetDBField('PaymentType', $pt); + $payment_types = $this->Conn->GetCol($sql, 'PaymentTypeId'); } - $pt_table = $this->Application->getUnitOption('pt','TableName'); - $sql = 'SELECT GatewayId FROM %s WHERE PaymentTypeId = %s'; - $gw_id = $this->Conn->GetOne( sprintf( $sql, $pt_table, $pt ) ); + /** @var kDBItem $object */ + $object = $this->getObject($params); + $payment_type = $object->GetDBField('PaymentType'); + + if ( !$payment_type ) { + if ( !isset($primary_payment_type) ) { + $sql = 'SELECT PaymentTypeId FROM ' . $pt_table . ' WHERE IsPrimary = 1'; + $primary_payment_type = $this->Conn->GetOne($sql); + } - $sql = 'SELECT RequireCCFields FROM %s WHERE GatewayId = %s'; + $payment_type = $primary_payment_type; + $object->SetDBField('PaymentType', $payment_type); + } + + if ( !isset($payment_types[$payment_type]) ) { + throw new Exception('Unknown payment type: ' . $payment_type); + } - return $this->Conn->GetOne( sprintf($sql, TABLE_PREFIX.'Gateways', $gw_id) ); + return $payment_types[$payment_type]; } function PaymentTypeDescription($params) @@ -1650,4 +1666,4 @@ return true; } - } \ No newline at end of file + }