Index: units/orders/orders_event_handler.php =================================================================== --- units/orders/orders_event_handler.php (revision 14764) +++ units/orders/orders_event_handler.php (working copy) @@ -1878,16 +1878,16 @@ } $event_status_map = Array( - 'OnMassOrderApprove' => ORDER_STATUS_TOSHIP, - 'OnOrderApprove' => ORDER_STATUS_TOSHIP, - 'OnMassOrderDeny' => ORDER_STATUS_DENIED, - 'OnOrderDeny' => ORDER_STATUS_DENIED, - 'OnMassOrderArchive' => ORDER_STATUS_ARCHIVED, - 'OnOrderArchive' => ORDER_STATUS_ARCHIVED, - 'OnMassOrderShip' => ORDER_STATUS_PROCESSED, - 'OnOrderShip' => ORDER_STATUS_PROCESSED, - 'OnMassOrderProcess' => ORDER_STATUS_TOSHIP, - 'OnOrderProcess' => ORDER_STATUS_TOSHIP, + 'OnMassOrderApprove' => ORDER_STATUS_TOSHIP, + 'OnOrderApprove' => ORDER_STATUS_TOSHIP, + 'OnMassOrderDeny' => ORDER_STATUS_DENIED, + 'OnOrderDeny' => ORDER_STATUS_DENIED, + 'OnMassOrderArchive' => ORDER_STATUS_ARCHIVED, + 'OnOrderArchive' => ORDER_STATUS_ARCHIVED, + 'OnMassOrderShip' => ORDER_STATUS_PROCESSED, + 'OnOrderShip' => ORDER_STATUS_PROCESSED, + 'OnMassOrderProcess' => ORDER_STATUS_TOSHIP, + 'OnOrderProcess' => ORDER_STATUS_TOSHIP, ); $order_items =& $this->Application->recallObject('orditems.-inv','orditems_List',Array('skip_counting'=>true,'per_page'=>-1) ); @@ -1905,6 +1905,9 @@ return ; } + // save original order status + $original_order_status = $object->GetDBField('Status'); + // preparing new status, but not setting it yet $object->SetDBField('Status', $event_status_map[$event->Name]); @@ -1990,16 +1993,21 @@ } $this->raiseProductEvent('Deny', $product_item['ProductId'], $product_item); } - $email_event_user =& $this->Application->EmailEventUser('ORDER.DENY', $object->GetDBField('PortalUserId'), $email_params); + + if ( ($original_order_status != ORDER_STATUS_INCOMPLETE ) && + ($event->Name == 'OnMassOrderDeny' || $event->Name == 'OnOrderDeny') ) { - if ($event->Name == 'OnMassOrderDeny' || $event->Name == 'OnOrderDeny') { + $email_event_user =& $this->Application->EmailEventUser('ORDER.DENY', $object->GetDBField('PortalUserId'), $email_params); + // inform payment gateway that order was declined $gw_data = $object->getGatewayData(); - $this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] ); - $gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] ); + if ( $gw_data ) { + $this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH . '/' . $gw_data['ClassFile'] ); + $gateway_object =& $this->Application->recallObject( $gw_data['ClassName'] ); - $gateway_object->OrderDeclined($object->GetFieldValues(), $gw_data['gw_params']); + $gateway_object->OrderDeclined($object->GetFieldValues(), $gw_data['gw_params']); + } } // !!! LOOK HERE !!! Index: units/orders/orders_item.php =================================================================== --- units/orders/orders_item.php (revision 14764) +++ units/orders/orders_item.php (working copy) @@ -37,6 +37,11 @@ // get Gateway fields if (!isset($pt_id) || !$pt_id) { $pt_id = $this->GetDBField('PaymentType'); + + if ( !$pt_id ) { + // no Payment Type Id found for this order - escape SQL fatal below + return false; + } } $pt_table = $this->Application->getUnitOption('pt','TableName'); $sql = 'SELECT GatewayId FROM %s WHERE PaymentTypeId = %s';