#!/usr/bin/perl my $bFound = 0; my $sDir; foreach $sDir (@INC) { if ($sDir eq ".") { $bFound = 1; last; } } if (!$bFound) { push (@INC, "."); } push (@INC, "cgi-bin"); require al000001; require as000001; require ad000001; require ae000001; require ao000001; use Socket; use strict; $::prog_name = "ORDERSCR"; $::prog_name = $::prog_name; $::prog_ver = '$Revision: 357 $ '; $::prog_ver = substr($::prog_ver, 11); $::prog_ver =~ s/ \$//; $::FORWARD = 0; $::BACKWARD = 1; $::eApplet = 0; $::eSharedSSL = 1; $::eDelivery = 0; $::eInvoice = 1; $::ORDER_BLOB_VERSION = 20; $::ORDER_DETAIL_BLOB_VERSION = 8; $::g_sSmtpServer = "smtp.spiritualityworks.com"; $::g_nCurrentSequenceNumber = -1; $::g_nNextSequenceNumber = -1; my $nDebugLogLevel = 0; Init(); ProcessInput(); exit; sub Init { $::g_bFirstError = $::TRUE; my (@Response, $Status, $Message); @Response = ReadAndParseInput(); ($Status, $Message) = @Response; if ($Status != $::SUCCESS) { ACTINIC::TerminalError($Message); } if ($::g_InputHash{'SEQUENCE'} <= 3) { CreateAddressBook(); } @Response = ReadAndParseBlobs(); ($Status, $Message) = @Response; if ($Status != $::SUCCESS) { ACTINIC::ReportError($Message, ACTINIC::GetPath()); } if($::g_InputHash{"ACTION"} eq "OCC_VALIDATE" || ($::g_InputHash{ACTION} =~ /^AUTHORIZE/i) || ($::g_InputHash{"ACTION"} eq "RECORDORDER" && $$::g_pSetupBlob{USE_SHARED_SSL})) { if(defined $::g_PaymentInfo{BUYERHASH}) { $ACTINIC::B2B->Set('UserDigest', $::g_PaymentInfo{BUYERHASH}); $ACTINIC::B2B->Set('UserName', $::g_PaymentInfo{BUYERNAME}); $ACTINIC::B2B->Set('BaseFile', $::g_PaymentInfo{BASEFILE}); } } else { $ACTINIC::B2B->Set('UserDigest',ACTINIC::CAccFindUser()); } ACTINIC::InitMonthMap(); if( $::g_InputHash{'BASE'} ) { $::g_sContentUrl = $::g_InputHash{'BASE'}; } } sub ReadAndParseInput { my ($status, $message, $temp); ($status, $message, $::g_OriginalInputData, $temp, %::g_InputHash) = ACTINIC::ReadAndParseInput(); if ($status != $::SUCCESS) { return ($status, $message, 0, 0); } ($status, $message, @::g_PageList) = ACTINIC::ProcessReferencePageData(%::g_InputHash); if ($status != $::SUCCESS) { return ($status, $message, 0, 0); } ($status, $message, $::g_sWebSiteUrl, $::g_sContentUrl) = ACTINIC::GetWebSiteURL(@::g_PageList); if ($status != $::SUCCESS) { return ($status, $message, 0, 0); } if ($::g_InputHash{'COOKIE'}) { my $sCookie = ACTINIC::DecodeText($::g_InputHash{'COOKIE'}, $ACTINIC::FORM_URL_ENCODED); $ENV{'HTTP_COOKIE'} = $sCookie; } return ($::SUCCESS, "", 0, 0); } sub ReadAndParseBlobs { my ($Status, $Message, @Response, $sPath); $sPath = ACTINIC::GetPath(); @Response = ACTINIC::ReadCatalogFile($sPath); ($Status, $Message) = @Response; if ($Status != $::SUCCESS) { return (@Response); } @Response = ACTINIC::ReadSetupFile($sPath); ($Status, $Message) = @Response; if ($Status != $::SUCCESS) { return (@Response); } @Response = ACTINIC::ReadLocationsFile($sPath); ($Status, $Message) = @Response; if ($Status != $::SUCCESS) { return (@Response); } @Response = ACTINIC::ReadPaymentFile($sPath); if ($Response[0] != $::SUCCESS) { return (@Response); } @Response = ACTINIC::ReadPhaseFile($sPath); if ($Response[0] != $::SUCCESS) { return (@Response); } @Response = ACTINIC::ReadPromptFile($sPath); if ($Response[0] != $::SUCCESS) { return (@Response); } @Response = ACTINIC::ReadTaxSetupFile($sPath); if ($Response[0] != $::SUCCESS) { return (@Response); } @Response = ACTINIC::ReadSSPSetupFile($sPath); if ($Response[0] != $::SUCCESS) { return (@Response); } @Response = ActinicOrder::GetCartID(ACTINIC::GetPath()); ($Status, $Message, $::g_sCartId) = @Response; if ($Status != $::SUCCESS) { return (@Response); } if ($::g_InputHash{CARTID} && $::g_InputHash{CARTID} =~ /^[a-zA-Z0-9]+$/) { $::g_sCartId = $::g_InputHash{CARTID}; } if ($::g_InputHash{CART} && $::g_InputHash{CART} =~ /^[a-zA-Z0-9]+$/) { $::g_sCartId = $::g_InputHash{CART}; } my ($pBillContact, $pShipContact, $pShipInfo, $pTaxInfo, $pGeneralInfo, $pPaymentInfo, $pLocationInfo); @Response = ActinicOrder::RetrieveCheckoutStatus($sPath, $::g_sCartId); if ($Response[0] != $::SUCCESS) { return (@Response); } ($Status, $Message, $pBillContact, $pShipContact, $pShipInfo, $pTaxInfo, $pGeneralInfo, $pPaymentInfo, $pLocationInfo) = @Response; %::g_BillContact = %$pBillContact; %::g_ShipContact = %$pShipContact; %::g_ShipInfo = %$pShipInfo; %::g_TaxInfo = %$pTaxInfo; %::g_GeneralInfo = %$pGeneralInfo; %::g_PaymentInfo = %$pPaymentInfo; %::g_LocationInfo = %$pLocationInfo; return ($::SUCCESS, "", 0, 0); } sub ProcessInput { my (@Response, $sDetailCookie); $::g_nCurrentSequenceNumber = $::g_InputHash{'SEQUENCE'}; if (!defined $::g_nCurrentSequenceNumber) { $::g_nCurrentSequenceNumber = $::STARTSEQUENCE; } my ($sStartButton, $sDoneButton, $sNextButton, $sFinishButton, $sBackButton, $sCancelButton, $sChangeLocationButton); $sStartButton = ACTINIC::GetPhrase(-1, 113); $sDoneButton = ACTINIC::GetPhrase(-1, 114); $sNextButton = ACTINIC::GetPhrase(-1, 502); $sBackButton = ACTINIC::GetPhrase(-1, 503); $sFinishButton = ACTINIC::GetPhrase(-1, 504); $sCancelButton = ACTINIC::GetPhrase(-1, 505); $sChangeLocationButton = ACTINIC::GetPhrase(0, 18); my ($sHTML, $sAction, $eDirection); $sAction = $::g_InputHash{'ACTION'}; if ($sAction eq "" && $::g_InputHash{ACTIONOVERRIDE}) { $sAction = $::g_InputHash{ACTIONOVERRIDE}; } if ($sAction =~ m/SSP_TRACK/i) { FormatTrackingPage(); @Response = FormatTrackingPage(); if ($Response[0] != $::SUCCESS) { ACTINIC::ReportError($Response[1], ACTINIC::GetPath()); return; } $sHTML = $Response[2]; goto THEEND; } elsif ($sAction =~ m/$sStartButton/i || $sAction =~ m/$sNextButton/i || $sAction =~ m/$sFinishButton/i || $sAction =~ m/^AUTHORIZE/i || $sAction =~ m/RECORDORDER/i || exists $::g_InputHash{$sNextButton . ".x"} || exists $::g_InputHash{$sFinishButton . ".x"}) { $eDirection = $::FORWARD; } elsif ($sAction =~ m/$sBackButton/i || $sAction =~ m/$sChangeLocationButton/i || exists $::g_InputHash{$sBackButton . ".x"}) { $eDirection = $::BACKWARD; } elsif ($sAction =~ m/$sDoneButton/i || exists $::g_InputHash{$sDoneButton . ".x"}) { my $sRefPage; if( $ACTINIC::B2B->Get('UserDigest') ) { if (defined $$::g_pSetupBlob{'UNFRAMED_CHECKOUT_URL'} && $$::g_pSetupBlob{'UNFRAMED_CHECKOUT_URL'} ne "") { $sRefPage = $$::g_pSetupBlob{'UNFRAMED_CHECKOUT_URL'}; } else { $sRefPage = ActinicOrder::GetLastPage(); } } else { if ($::g_InputHash{'HOME'} =~ /^http/) { $sRefPage = $::g_InputHash{'HOME'}; } else { $sRefPage = $::g_sWebSiteUrl . $::g_InputHash{'HOME'}; } if (defined $::g_InputHash{'ALTERNATEMALLHOME'}) { $sRefPage = $::g_InputHash{'ALTERNATEMALLHOME'}; } } @Response = ACTINIC::BounceToPagePlain(0, undef, undef, \@::g_PageList, $::g_sWebSiteUrl, $::g_sContentUrl, $::g_pSetupBlob, $sRefPage, \%::g_InputHash); if ($Response[0] != $::SUCCESS) { ACTINIC::ReportError($Response[1], ACTINIC::GetPath()); return; } $sHTML = $Response[2]; if ($ACTINIC::B2B->Get('UserDigest')) { $sHTML =~ s/([\?|\&]ACTINIC_REFERRER[^\&|"|']*)//gi; } goto THEEND; } elsif ($sAction =~ m/OCC_VALIDATE/i) { @Response = GetOCCValidationData(); if ($Response[0] != $::SUCCESS) { ACTINIC::RecordErrors($Response[1], ACTINIC::GetPath()); $sHTML = '0'; } else { $sHTML = $Response[2]; } ACTINIC::PrintText($sHTML); return; } else { $sHTML = GetCancelPage(); goto THEEND; } @Response = ValidateInput($eDirection); if ($Response[0] == $::BADDATA) { $sHTML = $Response[1]; $sDetailCookie = $Response[2]; goto THEEND; } elsif ($Response[0] != $::SUCCESS) { ACTINIC::ReportError($Response[1], ACTINIC::GetPath()); return; } if($sAction =~ m/$sChangeLocationButton/i) { $::g_nCurrentSequenceNumber = $::STARTSEQUENCE; $eDirection = $::FORWARD; } if ($eDirection == $::FORWARD) { $::g_nNextSequenceNumber = $::g_nCurrentSequenceNumber + 1; } else { $::g_nNextSequenceNumber = $::g_nCurrentSequenceNumber - 1; } ActinicOrder::ParseAdvancedTax(); @Response = DisplayPage("", $::g_nNextSequenceNumber, $eDirection); if ($Response[0] != $::SUCCESS) { ACTINIC::ReportError($Response[1], ACTINIC::GetPath()); return; } $sHTML = $Response[2]; $sDetailCookie = $Response[3]; THEEND: ACTINIC::UpdateDisplay($sHTML, $::g_OriginalInputData, \@::g_PageList, undef, undef, $sDetailCookie, ActinicOrder::GenerateCartCookie()); } sub ValidateInput { my ($eDirection); if ($#_ != 0) { $eDirection = $::FORWARD; } ($eDirection) = @_; my ($bActuallyValidate) = ($eDirection == $::FORWARD); my (@Response); if ($::g_nCurrentSequenceNumber == $::STARTSEQUENCE) { @Response = ValidateStart($bActuallyValidate); # validate the input/cart settings return (@Response); } else { my ($sPhaseList) = $$::g_pPhaseList{$::g_nCurrentSequenceNumber}; my (@Phases) = split (//, $sPhaseList); my ($nPhase, $sError); foreach $nPhase (@Phases) { if ($nPhase == $::BILLCONTACTPHASE) { $sError .= ValidateBill($bActuallyValidate); } elsif ($nPhase == $::SHIPCONTACTPHASE) { $sError .= ValidateShipContact($bActuallyValidate); } elsif ($nPhase == $::SHIPCHARGEPHASE) { $sError .= ValidateShipCharge($bActuallyValidate); } elsif ($nPhase == $::TAXCHARGEPHASE) { $sError .= ActinicOrder::ValidateTax($bActuallyValidate); } elsif ($nPhase == $::GENERALPHASE) { $sError .= ValidateGeneral($bActuallyValidate); } elsif ($nPhase == $::PAYMENTPHASE) { $sError .= ValidatePayment($bActuallyValidate); } elsif ($nPhase == $::COMPLETEPHASE) { if($::g_InputHash{'ACTION'} =~ m/^AUTHORIZE_(\d+)$/i) { $::g_PaymentInfo{'METHOD'} = $1; } if (!defined $::g_PaymentInfo{'METHOD'}) { if ($$::g_pSetupBlob{USE_DH}) { $sError .= ACTINIC::GetPhrase(-1, 2040); } else { $sError .= ACTINIC::GetPhrase(-1, 1282); } next; } if (length $::g_PaymentInfo{'METHOD'} == 0) { EnsurePaymentSelection(); } my ($ePaymentMethod) = ActinicOrder::PaymentStringToEnum($::g_PaymentInfo{'METHOD'}); # the payment method is stored as "ENUMERATEDID:DESCRIPTION" if ($ACTINIC::B2B->Get('UserDigest') && ($ePaymentMethod == $::PAYMENT_ON_ACCOUNT || $ePaymentMethod == $::PAYMENT_INVOICE)) { $sError .= ValidateSignature($bActuallyValidate); } } elsif ($nPhase == $::RECEIPTPHASE) { } elsif ($nPhase == $::PRELIMINARYINFOPHASE) { $sError .= ActinicOrder::ValidatePreliminaryInfo($bActuallyValidate); } } if ($sError ne '') { @Response = DisplayPage($sError, $::g_nCurrentSequenceNumber, $eDirection); if ($Response[0] != $::SUCCESS) { return (@Response); } $Response[0] = $::BADDATA; $Response[1] = $Response[2]; $Response[2] = $Response[3]; return (@Response); } } return (UpdateCheckoutRecord()); } sub ValidateStart { if ($#_ != 0) { return ($::FAILURE, ACTINIC::GetPhrase(-1, 12, 'ValidateStart'), 0, 0); } my ($bActuallyValidate) = @_; if (!$bActuallyValidate) { return ($::SUCCESS, "", 0, 0); } my ($nLineCount, @Response, $Status, $Message); @Response = ActinicOrder::CountCartItems($::g_sCartId, ACTINIC::GetPath()); ($Status, $Message, $nLineCount) = @Response; if ($Status == $::FAILURE) { return (@Response); } if ($nLineCount <= 0) { my ($sLocalPage, $sHTML); $sLocalPage = ActinicOrder::GetLastPage(); push (@::g_PageList, $sLocalPage); push (@::g_PageList, $sLocalPage); @Response = ACTINIC::BounceToPageEnhanced(5, ACTINIC::GetPhrase(-1, 1962) . ACTINIC::GetPhrase(-1, 44, $::g_sCart, $::g_sCart) . ACTINIC::GetPhrase(-1, 1970) . ACTINIC::GetPhrase(-1, 2049), $$::g_pSetupBlob{CHECKOUT_DESCRIPTION}, \@::g_PageList, $::g_sWebSiteUrl, $::g_sContentUrl, $::g_pSetupBlob, $sLocalPage, \%::g_InputHash, $::FALSE); ($Status, $Message, $sHTML) = @Response; if ($Status != $::SUCCESS) { return (@Response); } return ($::BADDATA, $sHTML, 0, 0); } my $sHTML; ($Status, $sHTML) = ActinicOrder::CheckBuyerLimit($::g_sCartId,'',$::TRUE); if ($Status != $::SUCCESS) { return ($::BADDATA,$sHTML); } return ($::SUCCESS, "", 0, 0); } sub ValidateBill { if ($#_ != 0) { ACTINIC::ReportError(ACTINIC::GetPhrase(-1, 12, 'ValidateBill')); } my ($bActuallyValidate) = @_; if( $::g_InputHash{ADBACTION} ) { return(''); } if( $::g_InputHash{ADDRESSSELECT} ) { my $sUserDigest = $ACTINIC::B2B->Get('UserDigest'); my ($status, $sMessage, $pBuyer) = ACTINIC::GetBuyer($sUserDigest, ACTINIC::GetPath()); if ($status != $::SUCCESS) { return ($sMessage); } my $pAccount; ($status, $sMessage, $pAccount) = ACTINIC::GetCustomerAccount($$pBuyer{AccountID}, ACTINIC::GetPath()); if ($status != $::SUCCESS) { return ($sMessage); } my $pAddress; ($status, $sMessage, $pAddress) = ACTINIC::GetCustomerAddress($$pBuyer{AccountID}, $::g_InputHash{ADDRESSSELECT}, ACTINIC::GetPath()); ACTINIC::CloseCustomerAddressIndex(); if ($status != $::SUCCESS) { return ($sMessage); } if( $pBuyer->{InvoiceAddressRule} != 0 ) { $::g_BillContact{'NAME'} = $pBuyer->{Name}; $::g_BillContact{'SALUTATION'}= $pBuyer->{Salutation}; $::g_BillContact{'JOBTITLE'} = $pBuyer->{Title}; $::g_BillContact{'PHONE'} = $pBuyer->{'TelephoneNumber'}; $::g_BillContact{'FAX'} = $pBuyer->{'FaxNumber'}; $::g_BillContact{'EMAIL'} = $pBuyer->{'EmailAddress'}; } else { $::g_BillContact{'NAME'} = $pAccount->{'Name'}; $::g_BillContact{'SALUTATION'}= $pAccount->{Salutation}; $::g_BillContact{'JOBTITLE'} = $pAccount->{Title}; $::g_BillContact{'PHONE'} = $pAccount->{'TelephoneNumber'}; $::g_BillContact{'FAX'} = $pAccount->{'FaxNumber'}; $::g_BillContact{'EMAIL'} = $pAccount->{'EmailAddress'}; } $::g_BillContact{'ADDRESS1'} = $pAddress->{'Line1'}; $::g_BillContact{'ADDRESS2'} = $pAddress->{'Line2'}; $::g_BillContact{'ADDRESS3'} = $pAddress->{'Line3'}; $::g_BillContact{'ADDRESS4'} = $pAddress->{'Line4'}; $::g_BillContact{'POSTALCODE'} = $pAddress->{'PostCode'}; $::g_BillContact{'COUNTRY'} = ACTINIC::GetCountryName($pAddress->{'CountryCode'}); $::g_BillContact{'SEPARATE'} = $::TRUE; ActinicOrder::ParseAdvancedTax(); if($$::g_pTaxSetupBlob{TAX_BY} == $::eTaxByInvoice) { if(defined $$::g_pTaxSetupBlob{TAX_1} && $$::g_pTaxSetupBlob{TAX_1}{ID} == $pAddress->{'Tax1ID'}) { $::g_TaxInfo{'EXEMPT1'} = $pAddress->{'ExemptTax1'} ? 1 : 0; $::g_TaxInfo{'EXEMPT1DATA'} = $pAddress->{'Tax1ExemptData'}; } if(defined $$::g_pTaxSetupBlob{TAX_2} && $$::g_pTaxSetupBlob{TAX_2}{ID} == $pAddress->{'Tax2ID'}) { $::g_TaxInfo{'EXEMPT2'} = $pAddress->{'ExemptTax2'} ? 1 : 0; $::g_TaxInfo{'EXEMPT2DATA'} = $pAddress->{'Tax2ExemptData'}; } } $::g_BillContact{'MOVING'} = $::FALSE; $::g_BillContact{'PRIVACY'} = $::TRUE; $::g_BillContact{'REMEMBERME'} = $::FALSE; } else { $::g_BillContact{'SALUTATION'} = $::g_InputHash{'INVOICESALUTATION'}; $::g_BillContact{'NAME'} = $::g_InputHash{'INVOICENAME'}; $::g_BillContact{'JOBTITLE'} = $::g_InputHash{'INVOICEJOBTITLE'}; $::g_BillContact{'COMPANY'} = $::g_InputHash{'INVOICECOMPANY'}; $::g_BillContact{'ADDRESS1'} = $::g_InputHash{'INVOICEADDRESS1'}; $::g_BillContact{'ADDRESS2'} = $::g_InputHash{'INVOICEADDRESS2'}; $::g_BillContact{'ADDRESS3'} = $::g_InputHash{'INVOICEADDRESS3'}; $::g_BillContact{'ADDRESS4'} = $::g_InputHash{'INVOICEADDRESS4'}; $::g_BillContact{'POSTALCODE'} = $::g_InputHash{'INVOICEPOSTALCODE'}; $::g_BillContact{'COUNTRY'} = $::g_InputHash{'INVOICECOUNTRY'}; $::g_BillContact{'PHONE'} = $::g_InputHash{'INVOICEPHONE'}; $::g_BillContact{'FAX'} = $::g_InputHash{'INVOICEFAX'}; $::g_BillContact{'EMAIL'} = $::g_InputHash{'INVOICEEMAIL'}; $::g_BillContact{'USERDEFINED'} = $::g_InputHash{'INVOICEUSERDEFINED'}; $::g_BillContact{'MOVING'} = ($::g_InputHash{'INVOICEMOVING'} ne "") ? $::TRUE : $::FALSE; $::g_BillContact{'PRIVACY'} = ($::g_InputHash{'INVOICEPRIVACY'} ne "") ? $::TRUE : $::FALSE; $::g_BillContact{'SEPARATE'} = ($::g_InputHash{'SEPARATESHIP'} ne "") ? $::TRUE : $::FALSE; $::g_BillContact{'REMEMBERME'} = (defined $::g_InputHash{'REMEMBERME'} && $::g_InputHash{'REMEMBERME'} ne "") ? $::TRUE : $::FALSE; } ACTINIC::TrimHashEntries(\%::g_BillContact); my ($sError); if (!$bActuallyValidate) { return ($sError); } my (@Response); if (ACTINIC::IsPromptRequired(0, 0) && $::g_BillContact{'SALUTATION'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 0); } if (ACTINIC::IsPromptRequired(0, 1) && $::g_BillContact{'NAME'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 1); } if (ACTINIC::IsPromptRequired(0, 2) && $::g_BillContact{'JOBTITLE'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 2); } if (ACTINIC::IsPromptRequired(0, 3) && $::g_BillContact{'COMPANY'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 3); } if (ACTINIC::IsPromptRequired(0, 4) && $::g_BillContact{'ADDRESS1'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 4); } if (ACTINIC::IsPromptRequired(0, 5) && $::g_BillContact{'ADDRESS2'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 5); } if (ACTINIC::IsPromptRequired(0, 6) && $::g_BillContact{'ADDRESS3'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 6); } if (ACTINIC::IsPromptRequired(0, 7) && $::g_BillContact{'ADDRESS4'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 7); } if (ACTINIC::IsPromptRequired(0, 8) && $::g_BillContact{'POSTALCODE'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 8); } if (ACTINIC::IsPromptRequired(0, 9) && $::g_BillContact{'COUNTRY'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 9); } if (ACTINIC::IsPromptRequired(0, 10) && $::g_BillContact{'PHONE'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 10); } if (ACTINIC::IsPromptRequired(0, 11) && $::g_BillContact{'FAX'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 11); } if (ACTINIC::IsPromptRequired(0, 12) && $::g_BillContact{'EMAIL'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 12); } if (ACTINIC::IsPromptRequired(0, 14) && $::g_BillContact{'USERDEFINED'} eq "") { $sError .= ACTINIC::GetRequiredMessage(0, 14); } if($sError eq '') { $sError .= ActinicOrder::ValidatePreliminaryInfo($bActuallyValidate); } return ($sError); } sub ValidateShipContact { if ($#_ != 0) { ACTINIC::ReportError(ACTINIC::GetPhrase(-1, 12, 'ValidateShipContact')); } my ($bActuallyValidate) = @_; if ($::ACT_ADB) { ConfigureAddressBook(); $::ACT_ADB->ToForm(); $::s_VariableTable{$::VARPREFIX.'ADDRESSBOOK'} = $::ACT_ADB->Show(); } else { $::s_VariableTable{$::VARPREFIX.'ADDRESSBOOK'} = ""; } my $bCheckReversed = (defined $$::g_pSetupBlob{'REVERSE_ADDRESS_CHECK'} && $$::g_pSetupBlob{'REVERSE_ADDRESS_CHECK'}); if( $::g_InputHash{ADDRESSSELECT} ) { my $sUserDigest = $ACTINIC::B2B->Get('UserDigest'); my ($status, $sMessage, $pBuyer) = ACTINIC::GetBuyer($sUserDigest, ACTINIC::GetPath()); if ($status != $::SUCCESS) { return ($sMessage); } my $pAccount; ($status, $sMessage, $pAccount) = ACTINIC::GetCustomerAccount($$pBuyer{AccountID}, ACTINIC::GetPath()); if ($status != $::SUCCESS) { return ($sMessage); } my $pAddress; ($status, $sMessage, $pAddress) = ACTINIC::GetCustomerAddress($$pBuyer{AccountID}, $::g_InputHash{ADDRESSSELECT}, ACTINIC::GetPath()); ACTINIC::CloseCustomerAddressIndex(); if ($status != $::SUCCESS) { return ($sMessage); } $::g_ShipContact{'COMPANY'} = $pAccount->{AccountName}; $::g_ShipContact{'NAME'} = $pBuyer->{Name}; $::g_ShipContact{'SALUTATION'}= $pBuyer->{Salutation}; $::g_ShipContact{'JOBTITLE'} = $pBuyer->{Title}; $::g_ShipContact{'PHONE'} = $pBuyer->{'TelephoneNumber'}; $::g_ShipContact{'FAX'} = $pBuyer->{'FaxNumber'}; $::g_ShipContact{'EMAIL'} = $pBuyer->{'EmailAddress'}; $::g_ShipContact{'ADDRESS1'} = $pAddress->{'Line1'}; $::g_ShipContact{'ADDRESS2'} = $pAddress->{'Line2'}; $::g_ShipContact{'ADDRESS3'} = $pAddress->{'Line3'}; $::g_ShipContact{'ADDRESS4'} = $pAddress->{'Line4'}; $::g_ShipContact{'POSTALCODE'} = $pAddress->{'PostCode'}; $::g_ShipContact{'COUNTRY'} = ACTINIC::GetCountryName($pAddress->{'CountryCode'}); $::g_ShipContact{PRIVACY} = $::TRUE; } else { if (((!$bCheckReversed && !$::g_BillContact{'SEPARATE'}) || ($bCheckReversed && $::g_BillContact{'SEPARATE'})) ) { $::g_ShipContact{'SALUTATION'} = $::g_BillContact{'SALUTATION'}; $::g_ShipContact{'NAME'} = $::g_BillContact{'NAME'}; $::g_ShipContact{'JOBTITLE'} = $::g_BillContact{'JOBTITLE'}; $::g_ShipContact{'COMPANY'} = $::g_BillContact{'COMPANY'}; $::g_ShipContact{'ADDRESS1'} = $::g_BillContact{'ADDRESS1'}; $::g_ShipContact{'ADDRESS2'} = $::g_BillContact{'ADDRESS2'}; $::g_ShipContact{'ADDRESS3'} = $::g_BillContact{'ADDRESS3'}; $::g_ShipContact{'ADDRESS4'} = $::g_BillContact{'ADDRESS4'}; $::g_ShipContact{'POSTALCODE'} = $::g_BillContact{'POSTALCODE'}; $::g_ShipContact{'COUNTRY'} = $::g_BillContact{'COUNTRY'}; $::g_ShipContact{'PHONE'} = $::g_BillContact{'PHONE'}; $::g_ShipContact{'FAX'} = $::g_BillContact{'FAX'}; $::g_ShipContact{'EMAIL'} = $::g_BillContact{'EMAIL'}; $::g_ShipContact{'USERDEFINED'} = $::g_BillContact{'USERDEFINED'}; } else { $::g_ShipContact{'SALUTATION'} = $::g_InputHash{'DELIVERSALUTATION'}; $::g_ShipContact{'NAME'} = $::g_InputHash{'DELIVERNAME'}; $::g_ShipContact{'JOBTITLE'} = $::g_InputHash{'DELIVERJOBTITLE'}; $::g_ShipContact{'COMPANY'} = $::g_InputHash{'DELIVERCOMPANY'}; $::g_ShipContact{'ADDRESS1'} = $::g_InputHash{'DELIVERADDRESS1'}; $::g_ShipContact{'ADDRESS2'} = $::g_InputHash{'DELIVERADDRESS2'}; $::g_ShipContact{'ADDRESS3'} = $::g_InputHash{'DELIVERADDRESS3'}; $::g_ShipContact{'ADDRESS4'} = $::g_InputHash{'DELIVERADDRESS4'}; $::g_ShipContact{'POSTALCODE'} = $::g_InputHash{'DELIVERPOSTALCODE'}; $::g_ShipContact{'COUNTRY'} = $::g_InputHash{'DELIVERCOUNTRY'}; $::g_ShipContact{'PHONE'} = $::g_InputHash{'DELIVERPHONE'}; $::g_ShipContact{'FAX'} = $::g_InputHash{'DELIVERFAX'}; $::g_ShipContact{'EMAIL'} = $::g_InputHash{'DELIVEREMAIL'}; $::g_ShipContact{'USERDEFINED'} = $::g_InputHash{'DELIVERUSERDEFINED'}; } $::g_ShipContact{'PRIVACY'} = $::g_BillContact{'PRIVACY'}; } ACTINIC::TrimHashEntries(\%::g_ShipContact); my ($sError); if (!$bActuallyValidate || (!$bCheckReversed && !$::g_BillContact{'SEPARATE'}) || ($bCheckReversed && $::g_BillContact{'SEPARATE'})) { return ($sError); } my (@Response); if (ACTINIC::IsPromptRequired(1, 0) && $::g_ShipContact{'SALUTATION'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 0); } if (ACTINIC::IsPromptRequired(1, 1) && $::g_ShipContact{'NAME'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 1); } if (ACTINIC::IsPromptRequired(1, 2) && $::g_ShipContact{'JOBTITLE'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 2); } if (ACTINIC::IsPromptRequired(1, 3) && $::g_ShipContact{'COMPANY'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 3); } if (ACTINIC::IsPromptRequired(1, 4) && $::g_ShipContact{'ADDRESS1'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 4); } if (ACTINIC::IsPromptRequired(1, 5) && $::g_ShipContact{'ADDRESS2'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 5); } if (ACTINIC::IsPromptRequired(1, 6) && $::g_ShipContact{'ADDRESS3'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 6); } if (ACTINIC::IsPromptRequired(1, 7) && $::g_ShipContact{'ADDRESS4'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 7); } if (ACTINIC::IsPromptRequired(1, 8) && $::g_ShipContact{'POSTALCODE'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 8); } if (ACTINIC::IsPromptRequired(1, 9) && $::g_ShipContact{'COUNTRY'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 9); } if (ACTINIC::IsPromptRequired(1, 10) && $::g_ShipContact{'PHONE'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 10); } if (ACTINIC::IsPromptRequired(1, 11) && $::g_ShipContact{'FAX'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 11); } if (ACTINIC::IsPromptRequired(1, 12) && $::g_ShipContact{'EMAIL'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 12); } if (ACTINIC::IsPromptRequired(1, 13) && $::g_ShipContact{'USERDEFINED'} eq "") { $sError .= ACTINIC::GetRequiredMessage(1, 13); } if($sError eq '') { $sError .= ActinicOrder::ValidatePreliminaryInfo($bActuallyValidate); } return ($sError); } sub ValidateShipCharge { if ($#_ != 0) { ACTINIC::ReportError(ACTINIC::GetPhrase(-1, 12, 'ValidateShipCharge')); } my ($bActuallyValidate) = @_; my ($sError); if ($$::g_pSetupBlob{MAKE_SHIPPING_CHARGE} && !ActinicOrder::IsPhaseHidden($::SHIPCHARGEPHASE)) { my @Response = ActinicOrder::CallShippingPlugIn(); if ($bActuallyValidate) { if ($Response[0] != $::SUCCESS) { $sError .= ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(-1, 102) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970) . " - ". $Response[1] . "
\n"; } elsif (${$Response[2]}{ValidateFinalInput} != $::SUCCESS) { $sError .= ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(-1, 102) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970) . " - ". ${$Response[3]}{ValidateFinalInput} . "
\n"; } } } $::g_ShipInfo{'USERDEFINED'} = $::g_InputHash{'SHIPUSERDEFINED'}; ACTINIC::TrimHashEntries(\%::g_ShipInfo); if ($bActuallyValidate && ACTINIC::IsPromptRequired(2, 1) && $::g_ShipInfo{'USERDEFINED'} eq "") { $sError .= ACTINIC::GetRequiredMessage(2, 1); } if ($sError ne "") { $sError = "" . ACTINIC::GetPhrase(-1, 149) . "" . ACTINIC::GetPhrase(-1, 1961, $sError); } return ($sError); } sub ValidateGeneral { if ($#_ != 0) { ACTINIC::ReportError(ACTINIC::GetPhrase(-1, 12, 'ValidateGeneral')); } my ($bActuallyValidate) = @_; $::g_GeneralInfo{'HOWFOUND'} = $::g_InputHash{'GENERALHOWFOUND'}; $::g_GeneralInfo{'WHYBUY'} = $::g_InputHash{'GENERALWHYBUY'}; $::g_GeneralInfo{'USERDEFINED'} = $::g_InputHash{'GENERALUSERDEFINED'}; ACTINIC::TrimHashEntries(\%::g_GeneralInfo); my ($sError); if (!$bActuallyValidate) { return ($sError); } my (@Response); if (ACTINIC::IsPromptRequired(4, 0) && $::g_GeneralInfo{'HOWFOUND'} eq "") { $sError .= ACTINIC::GetRequiredMessage(4, 0); } if (ACTINIC::IsPromptRequired(4, 1) && $::g_GeneralInfo{'WHYBUY'} eq "") { $sError .= ACTINIC::GetRequiredMessage(4, 1); } if (ACTINIC::IsPromptRequired(4, 2) && $::g_GeneralInfo{'USERDEFINED'} eq "") { $sError .= ACTINIC::GetRequiredMessage(4, 2); } if ($sError ne "") { $sError = "" . ACTINIC::GetPhrase(-1, 151) . "" . ACTINIC::GetPhrase(-1, 1961, $sError); } return ($sError); } sub ValidatePayment { if ($#_ != 0) { ACTINIC::ReportError(ACTINIC::GetPhrase(-1, 12, 'ValidatePayment')); } my ($bActuallyValidate) = @_; $::g_PaymentInfo{'METHOD'} = $::g_InputHash{'PAYMENTMETHOD'}; $::g_PaymentInfo{'USERDEFINED'} = $::g_InputHash{'PAYMENTUSERDEFINED'}; $::g_PaymentInfo{'PONO'} = $::g_InputHash{'PAYMENTPONO'}; $::g_PaymentInfo{'CARDTYPE'} = $::g_InputHash{'PAYMENTCARDTYPE'}; $::g_PaymentInfo{'CARDNUMBER'} = $::g_InputHash{'PAYMENTCARDNUMBER'}; $::g_PaymentInfo{'CARDISSUE'} = $::g_InputHash{'PAYMENTCARDISSUE'}; $::g_PaymentInfo{'CARDVV2'} = $::g_InputHash{'PAYMENTCARDVV2'}; $::g_PaymentInfo{'EXPMONTH'} = $::g_InputHash{'PAYMENTEXPMONTH'}; $::g_PaymentInfo{'EXPYEAR'} = $::g_InputHash{'PAYMENTEXPYEAR'}; $::g_PaymentInfo{'STARTMONTH'} = $::g_InputHash{'PAYMENTSTARTMONTH'}; $::g_PaymentInfo{'STARTYEAR'} = $::g_InputHash{'PAYMENTSTARTYEAR'}; ACTINIC::TrimHashEntries(\%::g_PaymentInfo); EnsurePaymentSelection(); my ($sError); if (!$bActuallyValidate) { return ($sError); } my (@Response); if (ACTINIC::IsPromptRequired(5, 6) && $::g_PaymentInfo{'PONO'} eq "") { $sError .= ACTINIC::GetRequiredMessage(5, 6); } if (ACTINIC::IsPromptRequired(5, 7) && $::g_PaymentInfo{'USERDEFINED'} eq "") { $sError .= ACTINIC::GetRequiredMessage(5, 7); } my ($ePaymentMethod) = ActinicOrder::PaymentStringToEnum($::g_PaymentInfo{'METHOD'}); # the payment method is stored as "ENUMERATEDID:DESCRIPTION" if ($ePaymentMethod == $::PAYMENT_CREDIT_CARD && !$$::g_pSetupBlob{USE_SHARED_SSL} && !$$::g_pSetupBlob{USE_DH} ) { if ($::g_PaymentInfo{'CARDTYPE'} eq "") { $sError .= ACTINIC::GetRequiredMessage(5, 1); } my ($nIndex, $sCCID, $bFound); $bFound = $::FALSE; for ($nIndex = 0; $nIndex < 12; $nIndex++) { $sCCID = sprintf('CC%d', $nIndex); if ($$::g_pSetupBlob{$sCCID} eq $::g_PaymentInfo{'CARDTYPE'}) { $bFound = $::TRUE; last; } } if (!$bFound) { $sError .= ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(5, 1) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970) . ACTINIC::GetPhrase(-1, 107, $::g_PaymentInfo{'CARDTYPE'}) . "
\n" } my ($nNumber) = $::g_PaymentInfo{'CARDNUMBER'}; $nNumber =~ s/\s//g; $nNumber =~ s/-//g; if ($nNumber eq "") { $sError .= ACTINIC::GetRequiredMessage(5, 2); } if ($nNumber =~ /[^0-9]/) { $sError .= ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(5, 2) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970) . ACTINIC::GetPhrase(-1, 108) . "
\n" } my ($nCheckSum, $nDigitCount) = (0, 0); my ($nDigit, $nCheck); for($nIndex = (length $nNumber) - 1; $nIndex >= 0; $nIndex--) { $nDigit = substr($nNumber, $nIndex, 1); $nCheck = (1 + $nDigitCount++ % 2) * $nDigit; if ( $nCheck >= 10) { $nCheck++; } $nCheckSum += $nCheck; } if (($nCheckSum % 10) != 0) { $sError .= ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(5, 2) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970) . ACTINIC::GetPhrase(-1, 109) . "
\n" } if ($$::g_pSetupBlob{$sCCID . '_ISSUENUMBERFLAG'}) { if ($::g_PaymentInfo{'CARDISSUE'} eq "" || $::g_PaymentInfo{'CARDISSUE'} < 0 || $::g_PaymentInfo{'CARDISSUE'} > 255) { $sError .= ACTINIC::GetPhrase(-1, 110, ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(5, 5) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970), $::g_PaymentInfo{'CARDTYPE'}) . "
\n" } } else { $::g_PaymentInfo{'CARDISSUE'} = ""; } if ($$::g_pSetupBlob{$sCCID . '_CVV2FLAG'}) { if (length $::g_PaymentInfo{'CARDVV2'} != $$::g_pSetupBlob{$sCCID . '_CVV2DIGITS'}) { $sError .= ACTINIC::GetPhrase(-1, 560) . "
\n" } } else { $::g_PaymentInfo{'CARDVV2'} = ""; } my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst, $sDate); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $mon++; $year += 1900; if ($$::g_pSetupBlob{$sCCID . '_STARTDATEFLAG'}) { if ($::g_PaymentInfo{'STARTMONTH'} eq "" || $::g_PaymentInfo{'STARTYEAR'} eq "") { $sError .= ACTINIC::GetRequiredMessage(5, 3); } if ($::g_PaymentInfo{'STARTYEAR'} == $year && $::g_PaymentInfo{'STARTMONTH'} > $mon) { $sError .= ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(5, 3) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970) . ACTINIC::GetPhrase(-1, 111) . "
\n" } } else { $::g_PaymentInfo{'STARTMONTH'} = ""; $::g_PaymentInfo{'STARTYEAR'} = ""; } if ($::g_PaymentInfo{'EXPMONTH'} eq "" || $::g_PaymentInfo{'EXPYEAR'} eq "") { $sError .= ACTINIC::GetRequiredMessage(5, 4); } if ($::g_PaymentInfo{'EXPYEAR'} == $year && $::g_PaymentInfo{'EXPMONTH'} < $mon) { $sError .= ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(5, 4) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970) . ACTINIC::GetPhrase(-1, 112) . "
\n" } } else { $::g_PaymentInfo{'CARDTYPE'} = ""; $::g_PaymentInfo{'CARDNUMBER'} = ""; $::g_PaymentInfo{'CARDISSUE'} = ""; $::g_PaymentInfo{'CARDVV2'} = ""; $::g_PaymentInfo{'EXPMONTH'} = ""; $::g_PaymentInfo{'EXPYEAR'} = ""; $::g_PaymentInfo{'STARTMONTH'} = ""; $::g_PaymentInfo{'STARTYEAR'} = ""; } if ($sError ne "") { $sError = "" . ACTINIC::GetPhrase(-1, 152) . "" . ACTINIC::GetPhrase(-1, 1961, $sError); } return ($sError); } sub ValidateSignature { $::g_sSignature = $::g_InputHash{SIGNATURE}; if ($::g_sSignature ne '') { $::g_sSignature =~ /^([a-fA-F0-9]{32})$/; $::g_sSignature = $1; } return (undef); } sub DisplayPage { if ($#_ != 2) { return ($::FAILURE, ACTINIC::GetPhrase(-1, 12, 'DisplayPage'), 0, 0); } my (%VariableTable, $sDetailCookie); my ($sError, $nPageNumber, $eDirection) = @_; my (@Response, $sPath); $sPath = ACTINIC::GetPath(); my ($pCartList); my $bReDisplayReceipt = $::FALSE; @Response = ActinicOrder::ReadCart($::g_sCartId, $sPath); if ($Response[0] == $::EOF) { if ($::g_InputHash{'ACTION'} =~ m/RECORDORDER/i) { if ($$::g_pSetupBlob{USE_DH}) { ACTINIC::PrintText("0" . ACTINIC::GetPhrase(-1, 2040)); } else { ACTINIC::PrintText("0" . ACTINIC::GetPhrase(-1, 1282)); } exit; } my ($sPhaseList) = $$::g_pPhaseList{$nPageNumber}; my (@Phases) = split (//, $sPhaseList); if (($nPageNumber == 3 && $Phases[0] == $::COMPLETEPHASE) || ($nPageNumber == 4 && $Phases[0] == $::RECEIPTPHASE)) { my ($Status, $Message, $pBillContact, $pShipContact, $pShipInfo, $pTaxInfo, $pGeneralInfo, $pPaymentInfo, $pLocationInfo); @Response = ActinicOrder::RetrieveCheckoutStatus($sPath, $::g_sCartId, $::TRUE); if ($Response[0] == $::SUCCESS) { ($Status, $Message, $pBillContact, $pShipContact, $pShipInfo, $pTaxInfo, $pGeneralInfo, $pPaymentInfo, $pLocationInfo) = @Response; %::g_BillContact = %$pBillContact; %::g_ShipContact = %$pShipContact; %::g_ShipInfo = %$pShipInfo; %::g_TaxInfo = %$pTaxInfo; %::g_GeneralInfo = %$pGeneralInfo; %::g_PaymentInfo = %$pPaymentInfo; %::g_LocationInfo = %$pLocationInfo; @Response = ActinicOrder::ReadCart($::g_sCartId, $sPath, $::TRUE); if ($Response[0] == $::SUCCESS) { $bReDisplayReceipt = $::TRUE; } } } if (!$bReDisplayReceipt) { @Response = ACTINIC::BounceToPageEnhanced(7, ACTINIC::GetPhrase(-1, 1282), $$::g_pSetupBlob{CHECKOUT_DESCRIPTION}, \@::g_PageList, $::g_sWebSiteUrl, $::g_sContentUrl, $::g_pSetupBlob, ActinicOrder::GetLastPage(), \%::g_InputHash, $::FALSE); return (@Response); } } if ($Response[0] != $::SUCCESS) { return (@Response); } $pCartList = $Response[2]; my $nLineCount = CountValidCartItems($pCartList); my $sMessage; if ($nLineCount != scalar @$pCartList && $::g_bFirstError) { $::g_bFirstError = $::FALSE; $sMessage = "

" . ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . ACTINIC::GetPhrase(-1, 175) . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970); return(DisplayPage($sMessage, $::g_nCurrentSequenceNumber, $eDirection)); } my (@DeleteDelimiters, @KeepDelimiters, $nInc, $status); my ($pVarTable, $pDeleteDelimiters, $pKeepDelimiters, $nKeyCount, $pSelectTable); if ($bReDisplayReceipt) { ($status, $sMessage, $pVarTable, $pDeleteDelimiters, $pKeepDelimiters) = DisplayReceiptPhase($::g_PaymentInfo{'ORDERNUMBER'}, $::g_PaymentInfo{METHOD}, $bReDisplayReceipt); $nPageNumber = 4; } else { $nInc = ($eDirection == $::FORWARD) ? 1 : -1; $nKeyCount = 0; while ($nKeyCount == 0 && $nPageNumber >= 0) { my $sTempCookie; ($status, $sMessage, $pVarTable, $pDeleteDelimiters, $pKeepDelimiters, $pSelectTable, $sTempCookie) = ProcessPage($nPageNumber); $sDetailCookie .= $sTempCookie; if ($status != $::SUCCESS) { if ($::g_bFirstError) { $::g_bFirstError = $::FALSE; $sMessage = "

" . ACTINIC::GetPhrase(-1, 1974) . ACTINIC::GetPhrase(-1, 1971, $::g_sRequiredColor) . $sMessage . ACTINIC::GetPhrase(-1, 1975) . ACTINIC::GetPhrase(-1, 1970); return(DisplayPage($sMessage, $::g_nCurrentSequenceNumber, $eDirection)); } else { return($status, $sMessage, 0, undef); } } $nKeyCount = (keys %$pVarTable) + (keys %$pSelectTable); $nPageNumber += $nInc; } $nPageNumber -= $nInc; if ($nKeyCount == 0) { if (length $sError > 0) { my ($sRefPage) = ActinicOrder::GetLastPage(); if ($$::g_pSetupBlob{UNFRAMED_CHECKOUT} && $$::g_pSetupBlob{UNFRAMED_CHECKOUT_URL}) { $sRefPage = $$::g_pSetupBlob{UNFRAMED_CHECKOUT_URL}; } my @Response = ACTINIC::BounceToPageEnhanced(-1, $sError, ACTINIC::GetPhrase(-1, 25), \@::g_PageList, $::g_sWebSiteUrl, $::g_sContentUrl, $::g_pSetupBlob, $sRefPage, \%::g_InputHash); if ($Response[0] != $::SUCCESS) { ACTINIC::ReportError($sError, ACTINIC::GetPath()); } return ($::SUCCESS, '', $Response[2], undef); } else { return ($::SUCCESS, "", GetCancelPage(), undef); } } } @Response = ActinicOrder::GenerateShoppingCartLines($pCartList); if ($Response[0] != $::SUCCESS) { return (@Response); } $VariableTable{$::VARPREFIX.'THEORDERDETAILS'} = $Response[2]; my (@a1, @a2); @a1 = %VariableTable; @a2 = %$pVarTable; push (@a1, @a2); %VariableTable = @a1; @DeleteDelimiters = @$pDeleteDelimiters; @KeepDelimiters = @$pKeepDelimiters; $sError = ACTINIC::GroomError($sError); $VariableTable{$::VARPREFIX.'SEQUENCE'} = $nPageNumber; $VariableTable{$::VARPREFIX.'ERROR'} = $sError; my ($sFileName); $sFileName = sprintf('order%2.2d.html', $nPageNumber); if ($::g_sOverrideCheckoutFileName) { $sFileName = $::g_sOverrideCheckoutFileName; } @Response = ACTINIC::TemplateFile($sPath.$sFileName, \%VariableTable); if ($Response[0] != $::SUCCESS) { return (@Response); } my ($sDigest,$sBaseFile) = ACTINIC::CaccGetCookies(); $sPath = ($sBaseFile) ? $sBaseFile : $::g_sContentUrl; @Response = ACTINIC::MakeLinksAbsolute($Response[2], $::g_sWebSiteUrl, $sPath); if ($Response[0] != $::SUCCESS) { return (@Response); } my ($sHTML) = $Response[2]; my ($sDelimiter); foreach $sDelimiter (@DeleteDelimiters) { $sHTML =~ s/$::DELPREFIX$sDelimiter(.*?)$::DELPREFIX$sDelimiter//gs; } foreach $sDelimiter (@KeepDelimiters) { $sHTML =~ s/$::DELPREFIX$sDelimiter//gs; } my ($sSelectName, $sDefaultOption); while ( ($sSelectName, $sDefaultOption) = each %$pSelectTable) { $sHTML =~ s/(<\s*SELECT[^>]+?NAME\s*=\s*("|')?$sSelectName.+?)/$1