Index: orders_event_handler.php =================================================================== --- orders_event_handler.php (revision 14808) +++ orders_event_handler.php (working copy) @@ -1870,16 +1870,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) ); @@ -1897,6 +1897,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]); @@ -1982,16 +1985,19 @@ } $this->raiseProductEvent('Deny', $product_item['ProductId'], $product_item); } - $email_event_user =& $this->Application->EmailEventUser('ORDER.DENY', $object->GetDBField('PortalUserId'), $email_params); - if ($event->Name == 'OnMassOrderDeny' || $event->Name == 'OnOrderDeny') { + if ( ($original_order_status != ORDER_STATUS_INCOMPLETE ) && ($event->Name == 'OnMassOrderDeny' || $event->Name == 'OnOrderDeny') ) { + $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: orders_item.php =================================================================== --- orders_item.php (revision 14805) +++ orders_item.php (working copy) @@ -30,33 +30,48 @@ /** * Returns gateway data based on payment type used in order * + * @param int $pt_id * @return Array + * @access public */ - function getGatewayData($pt_id = null) + public function getGatewayData($pt_id = null) { // get Gateway fields - if (!isset($pt_id) || !$pt_id) { + 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'; - $gw_id = $this->Conn->GetOne( sprintf($sql, $pt_table, $pt_id) ); - $sql = 'SELECT * FROM %s WHERE GatewayId = %s'; - $ret = $this->Conn->GetRow( sprintf($sql, TABLE_PREFIX.'Gateways', $gw_id) ); + $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_id)); + + $sql = 'SELECT * + FROM %s + WHERE GatewayId = %s'; + $ret = $this->Conn->GetRow(sprintf($sql, TABLE_PREFIX . 'Gateways', $gw_id)); + // get Gateway parameters based on payment type - $gwf_table = $this->Application->getUnitOption('gwf','TableName'); - $gwfv_table = $this->Application->getUnitOption('gwfv','TableName'); + $gwf_table = $this->Application->getUnitOption('gwf', 'TableName'); + $gwfv_table = $this->Application->getUnitOption('gwfv', 'TableName'); + $sql = 'SELECT gwfv.Value, gwf.SystemFieldName FROM %s gwf LEFT JOIN %s gwfv ON gwf.GWConfigFieldId = gwfv.GWConfigFieldId WHERE gwfv.PaymentTypeId = %s AND gwf.GatewayId = %s'; - $ret['gw_params'] = $this->Conn->GetCol( sprintf($sql, $gwf_table, $gwfv_table, $pt_id, $gw_id), 'SystemFieldName' ); + $ret['gw_params'] = $this->Conn->GetCol(sprintf($sql, $gwf_table, $gwfv_table, $pt_id, $gw_id), 'SystemFieldName'); + $ret['gw_params']['gateway_id'] = $gw_id; - if ($this->GetDBField('IsRecurringBilling') && $this->Application->ConfigValue('Comm_AutoProcessRecurringOrders')) { - if (isset($ret['gw_params']['shipping_control'])) { + if ( $this->GetDBField('IsRecurringBilling') && $this->Application->ConfigValue('Comm_AutoProcessRecurringOrders') ) { + if ( isset($ret['gw_params']['shipping_control']) ) { $ret['gw_params']['shipping_control'] = SHIPPING_CONTROL_DIRECT; } }