From: Chuck Scott Date: Mon, 6 Nov 2017 21:44:31 +0000 (-0500) Subject: Fixed lib directory define, completed payment processor integration, updated database X-Git-Tag: v1.0.0^2~294 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=b28ab4938f19fa53a6f9e5e329adad3c4ce06db7;p=WP-Plugins%2Fglm-member-db-registrations.git Fixed lib directory define, completed payment processor integration, updated database Changed some default settings for the registration account data class. Updated database to add new field 2 fields for Merchant Solutions in management Fixed some compatibility issues in the paymnent gateway classes Completed payment processor integration in checkout and texted off-line Some updates and fixes in the checkout view. --- diff --git a/classes/data/dataAccount.php b/classes/data/dataAccount.php index 77c7518..93e32f5 100644 --- a/classes/data/dataAccount.php +++ b/classes/data/dataAccount.php @@ -157,7 +157,7 @@ class GlmDataRegistrationsAccount extends GlmDataAbstract ), */ - // Account Primary Address + // Member ID if account derived from a member contact 'member_id' => array ( 'field' => 'member_id', 'type' => 'text', @@ -365,7 +365,7 @@ class GlmDataRegistrationsAccount extends GlmDataAbstract 'email' => array ( 'field' => 'email', 'type' => 'text', - 'required' => true, + 'required' => false, 'use' => 'a' ), @@ -395,6 +395,15 @@ class GlmDataRegistrationsAccount extends GlmDataAbstract ), // Pointer to GLM Associate member contact record if account is for a member contact + 'contact_id' => array ( + 'field' => 'contact_id', + 'type' => 'integer', + 'required' => false, + 'use' => 'lgneud' + ), + + // Pointer to GLM Associate member contact record if account is for a member contact +/* 'contact_id' => array ( 'field' => 'contact_id', 'type' => 'pointer', @@ -404,7 +413,7 @@ class GlmDataRegistrationsAccount extends GlmDataAbstract 'required' => true, 'use' => 'lgneud' ), - +*/ // 'contact_fname' => array ( 'field' => 'contact_fname', diff --git a/classes/data/dataManagement.php b/classes/data/dataManagement.php index 839e78e..515c81b 100644 --- a/classes/data/dataManagement.php +++ b/classes/data/dataManagement.php @@ -290,6 +290,21 @@ class GlmDataRegistrationsManagement extends GlmDataAbstract 'use' => 'a' ), + // Always Use Full Billing Info + 'reg_merchant_solutions_conf' => array ( + 'field' => 'reg_merchant_solutions_conf', + 'type' => 'checkbox', + 'use' => 'a', + 'default' => 0, + ), + + // Merchant Email + 'reg_merchant_solutions_merchant_email' => array ( + 'field' => 'reg_merchant_solutions_merchant_email', + 'type' => 'text', + 'use' => 'a' + ), + // Always Use Full Billing Info 'reg_full_billing_info' => array ( 'field' => 'reg_full_billing_info', diff --git a/config/plugin.ini b/config/plugin.ini index ce8c073..a39400d 100644 --- a/config/plugin.ini +++ b/config/plugin.ini @@ -48,6 +48,9 @@ payment_method_numb['CallFromMerchant'] = 5 payment_method_numb['CreditCard'] = 6 payment_method_numb['PayPal'] = 7 +; Default payment method is Credit Card +default_payment_method = 6 + ; ; Payment Code Types - List only ; @@ -91,17 +94,24 @@ reg_ref_type_numb['Registrant'] = 50 ; ; Credit Cards - Use as Bitmap Index or List ; -credit_card[0] = 'Visa' -credit_card[1] = 'MasterCard' -credit_card[2] = 'American Express' -credit_card[3] = 'Discover' -credit_card[4] = 'Diners Club' +credit_card[1] = 'Visa' +credit_card[2] = 'MasterCard' +credit_card[3] = 'American Express' +credit_card[4] = 'Discover' +credit_card[5] = 'Diners Club' + +credit_card_numb['Visa'] = 1 +credit_card_numb['MasterCard'] = 2 +credit_card_numb['American Express'] = 3 +credit_card_numb['Discover'] = 4 +credit_card_numb['Diners Club'] = 5 + +credit_card_match[1] = '/^4[0-9]{12}(?:[0-9]{3})?$/' +credit_card_match[2] = '/^([51|52|53|54|55]{2})([0-9]{14})$/' +credit_card_match[3] = '/^([34|37]{2})([0-9]{13})$/' +credit_card_match[4] = '/^([6011]{4})([0-9]{12})$/' +credit_card_match[5] = '/^([30|36|38]{2})([0-9]{12})$/' -credit_card_numb['Visa'] = 0 -credit_card_numb['MasterCard'] = 1 -credit_card_numb['American Express'] = 2 -credit_card_numb['Discover'] = 3 -credit_card_numb['Diners Club'] = 4 ; ; Card Processing Methods - Use as Bitmap Index or List @@ -118,6 +128,12 @@ proc_method_numb['MerchantSolutions'] = 3 proc_method_numb['TestAlwaysGood'] = 4 proc_method_numb['TestByCardNumber'] = 5 +proc_dir[1] = 'ByMerchant' +proc_dir[2] = 'Authorize.Net' +proc_dir[3] = 'MerchantSolutions' +proc_dir[98] = 'TestGood' +proc_dir[99] = 'TestByCardNumber' + ; ; Card processing test modes ; diff --git a/defines.php b/defines.php index 4edcd47..29b717b 100644 --- a/defines.php +++ b/defines.php @@ -68,7 +68,8 @@ define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_CONFIG_PATH', GLM_MEMBERS_REGISTRATIONS // Parameters related to the Main GLM Member DB plugin - Depending on what's going on these may already defined by the main plugin $pluginsPath = str_replace(GLM_MEMBERS_REGISTRATIONS_PLUGIN_SLUG, '', GLM_MEMBERS_REGISTRATIONS_PLUGIN_PATH); define('GLM_MEMBERS_REGISTRATIONS_MAIN_PLUGIN_PATH', $pluginsPath.'/glm-member-db'); -define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_LIB_PATH', GLM_MEMBERS_REGISTRATIONS_MAIN_PLUGIN_PATH.'/lib'); +define('GLM_MEMBERS_REGISTRATIONS_MAIN_PLUGIN_LIB_PATH', GLM_MEMBERS_REGISTRATIONS_MAIN_PLUGIN_PATH.'/lib'); +define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_LIB_PATH', GLM_MEMBERS_REGISTRATIONS_PLUGIN_PATH.'/lib'); // Update Server define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_UPDATE_SERVER', 'http://www.gaslightmedia.com/update_server'); \ No newline at end of file diff --git a/index.php b/index.php index 47ca90c..01c8305 100644 --- a/index.php +++ b/index.php @@ -44,7 +44,7 @@ if (!defined('ABSPATH')) { * version from this plugin. */ define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_VERSION', '0.0.1'); -define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_VERSION', '0.0.16'); +define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_VERSION', '0.0.17'); // This is the minimum version of the GLM Members DB plugin require for this plugin. define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.10.10'); diff --git a/lib/paymentProcessors/Authorize.Net/AIM_guide-1.pdf b/lib/paymentProcessors/Authorize.Net/AIM_guide-1.pdf old mode 100755 new mode 100644 diff --git a/lib/paymentProcessors/Authorize.Net/paymentGateway.php b/lib/paymentProcessors/Authorize.Net/paymentGateway.php old mode 100755 new mode 100644 index 0aba97d..37be0cf --- a/lib/paymentProcessors/Authorize.Net/paymentGateway.php +++ b/lib/paymentProcessors/Authorize.Net/paymentGateway.php @@ -132,7 +132,8 @@ class PaymentGateway // Check for required data if (!is_array($payment) || !is_array($payment)) { $resp = array( - 'status' => 2, + 'gateway' => 'Authorize.Net', + 'status' => 2, 'statusText' => 'Bad Data Supplied', 'authCode' => '', 'description' => 'The required payment and contact information was not supplied.' @@ -151,10 +152,11 @@ class PaymentGateway case 1: // Always return a card approval $resp = array( - 'status' => 1, - 'statusText' => 'Card Approved', - 'authCode' => '000000', - 'description' => '(TESTMODE) Local Test - Card Approved' + 'gateway' => 'Authorize.Net', + 'status' => 1, + 'statusText' => 'Card Approved', + 'authCode' => '000000', + 'description' => '(TESTMODE) Local Test - Card Approved' ); return $resp; break; @@ -162,10 +164,11 @@ class PaymentGateway // Fail Test case 2: $resp = array( - 'status' => 7, - 'statusText' => 'Card Declined', - 'authCode' => '', - 'description' => '(TESTMODE) Local Test - Card Declined' + 'gateway' => 'Authorize.Net', + 'status' => 7, + 'statusText' => 'Card Declined', + 'authCode' => '', + 'description' => '(TESTMODE) Local Test - Card Declined' ); return $resp; break; @@ -225,46 +228,51 @@ class PaymentGateway switch ($response->response_code) { case 1: $resp = array( - 'status' => 1, - 'statusText' => 'Card Approved', - 'authCode' => $response->authorization_code, - 'description' => $response->response_reason_text + 'gateway' => 'Authorize.Net', + 'status' => 1, + 'statusText' => 'Card Approved', + 'authCode' => $response->authorization_code, + 'description' => $response->response_reason_text ); break; case 2: $resp = array( - 'status' => 7, - 'statusText' => 'Card Declined', - 'authCode' => '', - 'description' => $respDescr + 'gateway' => 'Authorize.Net', + 'status' => 7, + 'statusText' => 'Card Declined', + 'authCode' => '', + 'description' => $respDescr ); break; case 3: $resp = array( - 'status' => 3, - 'statusText' => 'Transaction Error', - 'authCode' => '', - 'description' => $respDescr + 'gateway' => 'Authorize.Net', + 'status' => 3, + 'statusText' => 'Transaction Error', + 'authCode' => '', + 'description' => $respDescr ); break; case 4: $resp = array( - 'status' => 7, - 'statusText' => 'Held for review', - 'authCode' => '', - 'description' => $response->response_reason_text - ); + 'gateway' => 'Authorize.Net', + 'status' => 7, + 'statusText' => 'Held for review', + 'authCode' => '', + 'description' => $response->response_reason_text + ); break; default: $resp = array( - 'status' => 4, - 'statusText' => 'Bad Response', - 'authCode' => '', - 'description' => $respDescr + 'gateway' => 'Authorize.Net', + 'status' => 4, + 'statusText' => 'Bad Response', + 'authCode' => '', + 'description' => $respDescr ); break; diff --git a/lib/paymentProcessors/MerchantSolutions/paymentGateway.php b/lib/paymentProcessors/MerchantSolutions/paymentGateway.php old mode 100755 new mode 100644 index 805e8cd..6968fe8 --- a/lib/paymentProcessors/MerchantSolutions/paymentGateway.php +++ b/lib/paymentProcessors/MerchantSolutions/paymentGateway.php @@ -126,6 +126,11 @@ class PaymentGateway $this->request->acctid = $account['acctid']; $this->request->merchantpin = $account['merchantpin']; + // Test to see if soap support has been installed + if (!extension_loaded('soap')) { + trigger_error('*** PHP SOAP not installed and required by MerchantSolutions payment gateway! ***', E_USER_ERROR); + } + // Setup options related to doing the SOAP calls ini_set('soap.wsdl_cache_enabled', 1); use_soap_error_handler(false); @@ -238,10 +243,11 @@ class PaymentGateway case 1: // Always return a card approval $resp = array( - 'status' => 1, - 'statusText' => 'Card Approved', - 'authCode' => '000000', - 'description' => '(TESTMODE) Local Test - Card Approved' + 'gateway' => 'MerchantSolutions', + 'status' => 1, + 'statusText' => 'Card Approved', + 'authCode' => '000000', + 'description' => '(TESTMODE) Local Test - Card Approved' ); return $resp; break; @@ -249,10 +255,11 @@ class PaymentGateway // Fail Test case 2: $resp = array( - 'status' => 7, - 'statusText' => 'Card Declined', - 'authCode' => '', - 'description' => '(TESTMODE) Local Test - Card Declined' + 'gateway' => 'MerchantSolutions', + 'status' => 7, + 'statusText' => 'Card Declined', + 'authCode' => '', + 'description' => '(TESTMODE) Local Test - Card Declined' ); return $resp; break; @@ -289,10 +296,11 @@ class PaymentGateway if (strtoupper($this->result) == 'APPROVED') { $resp = array( - 'status' => 1, - 'statusText' => 'Card Approved', - 'authCode' => $this->response->authcode, - 'description' => $this->response->status + 'gateway' => 'MerchantSolutions', + 'status' => 1, + 'statusText' => 'Card Approved', + 'authCode' => $this->response->authcode, + 'description' => $this->response->status ); return $resp; @@ -301,10 +309,11 @@ class PaymentGateway $x = explode(":", $this->response->result); $resp = array( - 'status' => 7, - 'statusText' => 'Card Declined', - 'authCode' => '', - 'description' => $x[2] + 'gateway' => 'MerchantSolutions', + 'status' => 7, + 'statusText' => 'Card Declined', + 'authCode' => '', + 'description' => $x[2] ); return $resp; @@ -316,20 +325,22 @@ class PaymentGateway // Return communications failure $resp = array( - 'status' => 3, - 'statusText' => 'Transaction Error', - 'authCode' => '', - 'description' => 'Unable to communicate with credit card processing service.' + 'gateway' => 'MerchantSolutions', + 'status' => 3, + 'statusText' => 'Transaction Error', + 'authCode' => '', + 'description' => 'Unable to communicate with credit card processing service.' ); return $resp; } $resp = array( - 'status' => 4, - 'statusText' => 'Bad Response', - 'authCode' => '', - 'description' => 'Received unknown response from the credit card processing service.' + 'gateway' => 'MerchantSolutions', + 'status' => 4, + 'statusText' => 'Bad Response', + 'authCode' => '', + 'description' => 'Received unknown response from the credit card processing service.' ); return $resp; diff --git a/lib/paymentProcessors/None/paymentGateway.php b/lib/paymentProcessors/None/paymentGateway.php deleted file mode 100755 index 7b76de7..0000000 --- a/lib/paymentProcessors/None/paymentGateway.php +++ /dev/null @@ -1,93 +0,0 @@ - - * @license http://www.gaslightmedia.com Gaslightmedia - * @release SVN: $Id: classes/paymentProcessors/no_payment.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ - * @link <> - */ - -/** - * No Payment PaymentGateway class - * - * PHP version 5 - * - * @category Event Management Admin Tickets - * @package EventManagement - * @author Chuck Scott - * @license http://www.gaslightmedia.com Gaslightmedia - * @release SVN: $Id: classes/paymentProcessors/no_payment.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ - * @link <> - */ - -/** - * No Payment Gateway class - * - * PHP version 5 - */ - -class PaymentGateway -{ - - /** - * Constructor - * - * @param $account Array of account information - Not used for Test Processor - * - * @return boolean Returns value of $success parameter - * @access public - */ - function __construct($account = false) - { - - // Nothing to do here - return $this->success; - - } - - /* - * No Payment Required - * - * @param array $pmt Payment information - * - * array( - * 'gateway' => {selected payment gateway}, - * 'name' => {name of venue} - * 'charge' => {amount to charge card} - * 'cctype' => {type of card - text} - * 'ccnumb' => {card number - digits only} - * 'ccexp' => {expiration date as m/Y} - * 'ccode' => {security code on back of card} - * ) - * - * This Processor always returns a "Card Approved" status - * and synthesizes a corresponding response. - * - * 1 Card Approved - * - * @return array Returns array of results - */ - function processPayment($pmt) - { - - // Get last digit of card number that indicates desired response - $respCode = 'NO-PAYMENT'; - - // Approved flag - $approved = false; - - $resp = array( - 'status' => 1, - 'statusText' => 'No Payment', - 'authCode' => '000000', - 'description' => 'No Payment Required' - ); - - return $resp; - } - -} \ No newline at end of file diff --git a/lib/paymentProcessors/Test/Test.php b/lib/paymentProcessors/Test/Test.php deleted file mode 100755 index 162594c..0000000 --- a/lib/paymentProcessors/Test/Test.php +++ /dev/null @@ -1,180 +0,0 @@ - - * @license http://www.gaslightmedia.com Gaslightmedia - * @release SVN: $Id: classes/paymentProcessors/test.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ - * @link <> - */ - -/** - * EventManagementAuthorizeNetPaymentProcessing class - * - * PHP version 5 - * - * @category Event Management Admin Tickets - * @package EventManagement - * @author Chuck Scott - * @license http://www.gaslightmedia.com Gaslightmedia - * @release SVN: $Id: classes/paymentProcessors/test.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ - * @link <> - */ - -/** - * Test Payment Gateway class - * - * PHP version 5 - */ - -class PaymentGateway -{ - - /** - * Constructor - * - * @param $account Array of account information - Not used for Test Processor - * - * @return boolean Returns value of $success parameter - * @access public - */ - function __construct($account = false) - { - - // Nothing to do here for the test processor - return $this->success; - - } - - /* - * Process Credit Card Payment - * - * @param array $pmt Payment information - * - * array( - * 'gateway' => {selected payment gateway}, - * 'name' => {name of venue} - * 'charge' => {amount to charge card} - * 'cctype' => {type of card - text} - * 'ccnumb' => {card number - digits only} - * 'ccexp' => {expiration date as m/Y} - * 'ccode' => {security code on back of card} - * ) - * - * This Test Processor looks at the last digit of the card number - * and synthesizes a corresponding response. - * - * 1 Card Approved - * 2 Bad Data Supplied - * 3 Communications Failure - * 4 Bad response or no response from processor - * 5 Transaction validation not accepted - * 6 Merchant authentication failure or bad account - * 7 Card Declined - * - * @return array Returns array of results - */ - function processPayment($pmt) - { - - // Get last digit of card number that indicates desired response - $respCode = substr($pmt['ccnumb'], 15, 1); - - // Approved flag - $approved = false; - - // Prepare synthesized response - switch ($respCode) { - - case 1: - - $resp = array( - 'status' => 1, - 'statusText' => 'Card Approved', - 'authCode' => '00110011', - 'description' => 'Card Approved' - ); - break; - - case 2: - - $resp = array( - 'status' => 2, - 'statusText' => 'Bad data supplied', - 'authCode' => '', - 'description' => 'Card number was not recognizable' - ); - break; - - case 3: - - $resp = array( - 'status' => 3, - 'statusText' => 'Communications failure', - 'authCode' => '', - 'description' => 'We were unable to communicate with the credit card processing service.' - ); - break; - - case 4: - - $resp = array( - 'status' => 4, - 'statusText' => 'Bad Response', - 'authCode' => '', - 'description' => 'We received an unrecognizable response from the credit card processing service.' - ); - break; - - case 5: - - $resp = array( - 'status' => 5, - 'statusText' => 'Transaction not valid', - 'authCode' => '', - 'description' => 'We were unable to validate the response from the credit card processor.' - ); - break; - - case 6: - - $resp = array( - 'status' => 6, - 'statusText' => 'Merchant account problem', - 'authCode' => '00110011', - 'description' => 'The merchant account for this venue was not recognized by the credit card processor.' - ); - break; - - case 7: - - $resp = array( - 'status' => 7, - 'statusText' => 'Card Declined', - 'authCode' => '', - 'description' => 'Your credit card purchase was declined.' - ); - break; - - default: // Consider any other last digit as approved - - $resp = array( - 'status' => 1, - 'statusText' => 'Card Approved', - 'authCode' => '00110011', - 'description' => 'Card Approved' - ); - break; - - } - - return $resp; - } - -} - - -?> \ No newline at end of file diff --git a/lib/paymentProcessors/TestByCardNumber/paymentGateway.php b/lib/paymentProcessors/TestByCardNumber/paymentGateway.php new file mode 100644 index 0000000..9098c5f --- /dev/null +++ b/lib/paymentProcessors/TestByCardNumber/paymentGateway.php @@ -0,0 +1,190 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @release SVN: $Id: classes/paymentProcessors/test.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ + * @link <> + */ + +/** + * EventManagementAuthorizeNetPaymentProcessing class + * + * PHP version 5 + * + * @category Event Management Admin Tickets + * @package EventManagement + * @author Chuck Scott + * @license http://www.gaslightmedia.com Gaslightmedia + * @release SVN: $Id: classes/paymentProcessors/test.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ + * @link <> + */ + +/** + * Test Payment Gateway class + * + * PHP version 5 + */ + +class PaymentGateway +{ + + /** + * Constructor + * + * @param $account Array of account information - Not used for Test Processor + * + * @return boolean Returns value of $success parameter + * @access public + */ + function __construct($account = false) + { + + // Nothing to do here for the test processor + return true; + + } + + /* + * Process Credit Card Payment + * + * @param array $pmt Payment information + * + * array( + * 'gateway' => {selected payment gateway}, + * 'name' => {name of venue} + * 'charge' => {amount to charge card} + * 'cctype' => {type of card - text} + * 'ccnumb' => {card number - digits only} + * 'ccexp' => {expiration date as m/Y} + * 'ccode' => {security code on back of card} + * ) + * + * @param array $contact Billing contact information (not used in this class) + * + * This Test Processor looks at the last digit of the card number + * and synthesizes a corresponding response. + * + * 1 Card Approved + * 2 Bad Data Supplied + * 3 Communications Failure + * 4 Bad response or no response from processor + * 5 Transaction validation not accepted + * 6 Merchant authentication failure or bad account + * 7 Card Declined + * + * @return array Returns array of results + */ + function processPayment($pmt, $contact = false) + { + + // Get last digit of card number that indicates desired response + $respCode = substr($pmt['ccnumb'], 15, 1); + + // Approved flag + $approved = false; + + // Prepare synthesized response + switch ($respCode) { + + case 1: + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 1, + 'statusText' => 'Card Approved', + 'authCode' => '00110011', + 'description' => 'Card Approved' + ); + break; + + case 2: + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 2, + 'statusText' => 'Bad data supplied', + 'authCode' => '', + 'description' => 'Card number was not recognizable' + ); + break; + + case 3: + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 3, + 'statusText' => 'Communications failure', + 'authCode' => '', + 'description' => 'We were unable to communicate with the credit card processing service.' + ); + break; + + case 4: + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 4, + 'statusText' => 'Bad Response', + 'authCode' => '', + 'description' => 'We received an unrecognizable response from the credit card processing service.' + ); + break; + + case 5: + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 5, + 'statusText' => 'Transaction not valid', + 'authCode' => '', + 'description' => 'We were unable to validate the response from the credit card processor.' + ); + break; + + case 6: + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 6, + 'statusText' => 'Merchant account problem', + 'authCode' => '00110011', + 'description' => 'The merchant account for this venue was not recognized by the credit card processor.' + ); + break; + + case 7: + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 7, + 'statusText' => 'Card Declined', + 'authCode' => '', + 'description' => 'Your credit card purchase was declined.' + ); + break; + + default: // Consider any other last digit as approved + + $resp = array( + 'gateway' => 'Card # Tests', + 'status' => 1, + 'statusText' => 'Card Approved', + 'authCode' => '00110011', + 'description' => 'Card Approved' + ); + break; + + } + + return $resp; + } + +} + + +?> \ No newline at end of file diff --git a/lib/paymentProcessors/TestGood/paymentGateway.php b/lib/paymentProcessors/TestGood/paymentGateway.php new file mode 100644 index 0000000..2dd38a8 --- /dev/null +++ b/lib/paymentProcessors/TestGood/paymentGateway.php @@ -0,0 +1,96 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @release SVN: $Id: classes/paymentProcessors/no_payment.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ + * @link <> + */ + +/** + * No Payment PaymentGateway class + * + * PHP version 5 + * + * @category Event Management Admin Tickets + * @package EventManagement + * @author Chuck Scott + * @license http://www.gaslightmedia.com Gaslightmedia + * @release SVN: $Id: classes/paymentProcessors/no_payment.php,v 1.0 2011/01/25 19:31:47 cscott Exp $ + * @link <> + */ + +/** + * No Payment Gateway class + * + * PHP version 5 + */ + +class PaymentGateway +{ + + /** + * Constructor + * + * @param $account Array of account information - Not used for Test Processor + * + * @return boolean Returns value of $success parameter + * @access public + */ + function __construct($account = false) + { + + // Nothing to do here + return true; + + } + + /* + * No Payment Required + * + * @param array $pmt Payment information + * + * array( + * 'gateway' => {selected payment gateway}, + * 'name' => {name of venue} + * 'charge' => {amount to charge card} + * 'cctype' => {type of card - text} + * 'ccnumb' => {card number - digits only} + * 'ccexp' => {expiration date as m/Y} + * 'ccode' => {security code on back of card} + * ) + * + * @param array $contact Billing contact information (not used in this class) + * + * This Processor always returns a "Card Approved" status + * and synthesizes a corresponding response. + * + * 1 Card Approved + * + * @return array Returns array of results + */ + function processPayment($pmt, $contact = false) + { + + // Get last digit of card number that indicates desired response + $respCode = 'NO-PAYMENT'; + + // Approved flag + $approved = false; + + $resp = array( + 'gateway' => 'Card Good', + 'status' => 1, + 'statusText' => 'No Payment', + 'authCode' => '000000', + 'description' => 'No Payment Required' + ); + + return $resp; + } + +} \ No newline at end of file diff --git a/models/front/registrations/checkout.php b/models/front/registrations/checkout.php index 907812a..f50cf23 100644 --- a/models/front/registrations/checkout.php +++ b/models/front/registrations/checkout.php @@ -55,6 +55,8 @@ class GlmMembersFront_registrations_checkout extends GlmRegCartSupport $regAccountId = false; $regAccount = false; $messages = array(); + $payMethod = false; + $compCode = false; $Account = new GlmDataRegistrationsAccount($this->wpdb, $this->config); @@ -109,6 +111,9 @@ class GlmMembersFront_registrations_checkout extends GlmRegCartSupport } } + // Get any already submitted comp code + /**** NEED TO DO THIS ****/ + $view = 'checkout'; if ($haveCart) { @@ -134,13 +139,13 @@ class GlmMembersFront_registrations_checkout extends GlmRegCartSupport $regAccount = $Account->newEntry(); - require_once GLM_MEMBERS_CONTACTS_PLUGIN_LIB_PATH.'/EasyPassword/EasyPassword.php'; + require_once GLM_MEMBERS_REGISTRATIONS_MAIN_PLUGIN_LIB_PATH.'/EasyPassword/EasyPassword.php'; $EasyPassword = new EasyPassword(); $regAccount['fieldData']['password'] = $EasyPassword->generateEasyPassword($type = 'firstlast'); } - // Setup credit cart input fields - Use dataRegRequest to generate the field data + // Setup credit card input fields - Use dataRegRequest to generate the field data require_once GLM_MEMBERS_REGISTRATIONS_PLUGIN_CLASS_PATH.'/data/dataRegRequest.php'; $RegRequest = new GlmDataRegistrationsRegRequest($this->wpdb, $this->config); $regReq = $RegRequest->newEntry(); @@ -154,13 +159,62 @@ class GlmMembersFront_registrations_checkout extends GlmRegCartSupport } } - // Add credit card field data to $regAccount['fieldData'] for use on form - $regAccount['fieldData']['cc_type'] = $cc_type; + // If credit card data was submitted, use that + if (isset($actionData['cardData']) && is_array($actionData['cardData'])) { + + // Set selected card type + reset($cc_type['list']); + + foreach ($cc_type['list'] as $k=>$v) { + + $cc_type['list'][$k]['default'] = false; + if ($k == $actionData['cardData']['cc_type']) { + $cc_type['list'][$k]['default'] = true; + } + } + + $regReq['fieldData']['cc_type'] = $cc_type; + $regReq['fieldData']['cc_name'] = $actionData['cardData']['cc_name']; + $regReq['fieldData']['cc_numb'] = $actionData['cardData']['cc_numb']; + $regReq['fieldData']['cc_exp'] = $actionData['cardData']['cc_exp']; + $regReq['fieldData']['cc_cvv'] = $actionData['cardData']['cc_cvv']; + } + + // Set default payment method + $payMethod = $this->config['default_payment_method']; + + // Get any payment method specified or selected on checkout attempt + if (isset($actionData['payMethod'])) { + $payMethod = $actionData['payMethod']; + } + + // Add credit card and other payment field data to $regAccount['fieldData'] for use on form + $regAccount['fieldData']['cc_type'] = $regReq['fieldData']['cc_type']; + $regAccount['fieldRequired']['cc_type'] = true; + $regAccount['fieldFail']['cc_type'] = ''; + $regAccount['fieldData']['cc_name'] = $regReq['fieldData']['cc_name']; + $regAccount['fieldRequired']['cc_name'] = true; + $regAccount['fieldFail']['cc_name'] = ''; + $regAccount['fieldData']['cc_numb'] = $regReq['fieldData']['cc_numb']; + $regAccount['fieldRequired']['cc_numb'] = true; + $regAccount['fieldFail']['cc_numb'] = ''; + $regAccount['fieldData']['cc_exp'] = $regReq['fieldData']['cc_exp']; + $regAccount['fieldRequired']['cc_exp'] = true; + $regAccount['fieldFail']['cc_exp'] = ''; + $regAccount['fieldData']['cc_cvv'] = $regReq['fieldData']['cc_cvv']; + $regAccount['fieldRequired']['cc_cvv'] = true; + $regAccount['fieldFail']['cc_cvv'] = ''; + $regAccount['fieldData']['cc_conf'] = $regReq['fieldData']['cc_conf']; + + $regAccount['fieldData']['comp_code'] = $compCode; + $regAccount['fieldRequired']['comp_code'] = true; + $regAccount['fieldFail']['comp_code'] = ''; + // *** If redirected back, be sure to get the submitted data // Accounts list not needed @@ -187,6 +241,7 @@ class GlmMembersFront_registrations_checkout extends GlmRegCartSupport 'assetUrl' => GLM_MEMBERS_REGISTRATIONS_PLUGIN_ASSETS_URL, 'haveMessages' => count($messages) > 0, 'messages' => $messages, + 'payMethod' => $payMethod, 'payMethods' => $management['reg_payment_methods']['bitmap'], 'payMethodsNumb' => $this->config['payment_method_numb'] ); diff --git a/models/front/registrations/checkoutProcess.php b/models/front/registrations/checkoutProcess.php index d695894..60b0bc6 100644 --- a/models/front/registrations/checkoutProcess.php +++ b/models/front/registrations/checkoutProcess.php @@ -86,6 +86,7 @@ class GlmMembersFront_registrations_checkoutProcess extends GlmRegCartSupport public function modelAction($actionData = false) { + $messages = array(); $haveCheckout = false; $requestId = false; $accountId = false; @@ -93,8 +94,11 @@ class GlmMembersFront_registrations_checkoutProcess extends GlmRegCartSupport $modelRedirect = false; $view = 'checkout'; $page = "checkout"; - $messages = array(); + $payMethod = false; + $payMethodName = false; $regPayment = false; + $cardData = false; + $cardTypeMatch = false; $Account = new GlmDataRegistrationsAccount($this->wpdb, $this->config); @@ -131,11 +135,18 @@ class GlmMembersFront_registrations_checkoutProcess extends GlmRegCartSupport $accountId = ($_SESSION['LoginAccount']['id'] - 0); - // Try to update the account information + // Try to update the account information and if that works get the data for editing again if ($accountId > 0) { + $regAccount = $Account->updateEntry($accountId); + + // If there was a problem, indicate that if (!$regAccount) { $messages[] = 'Unable to recall your account information. Please try again later.'; + + // Otherwise get the data again prepaired for editing + } else { + $regAccount = $Account->editEntry($accountId); } } @@ -182,6 +193,179 @@ class GlmMembersFront_registrations_checkoutProcess extends GlmRegCartSupport * Process Payment? */ + require_once GLM_MEMBERS_REGISTRATIONS_PLUGIN_CLASS_PATH.'/data/dataManagement.php'; + $Management = new GlmDataRegistrationsManagement($this->wpdb, $this->config); + $management = $Management->getEntry(1); + + // Get payment method selected + if (isset($_REQUEST['payMethod'])) { + $payMethod = ($_REQUEST['payMethod'] - 0); + } + + // Make sure that the selected payment method is available + if ($payMethod > 0 && ($management['reg_payment_methods']['bitmap'][$payMethod]['default'])) { + $payMethodName = $management['reg_payment_methods']['bitmap'][$payMethod]['name']; + } else { + $payMethod = false; + } + + // Execute selected payment method + switch ($payMethod) { + + // No Charge + case $this->config['payment_method_numb']['NoCharge']: + break; + + // Comp Code + case $this->config['payment_method_numb']['CompCode']: + break; + + // Cash + case $this->config['payment_method_numb']['Cash']: + break; + + // Check + case $this->config['payment_method_numb']['Check']: + break; + + // Call From Merchant + case $this->config['payment_method_numb']['CallFromMerchant']: + break; + + // Credit Card + case $this->config['payment_method_numb']['CreditCard']: + + // Get the selected credit card processor type + $ccProcessor = $this->config['settings']['reg_proc_methods']; + + // Setup the required account information for the selected payment processor + switch ($ccProcessor) { + + case $this->config['proc_method_numb']['Authorize.net']: + + // Get account data + $account = array( + 'login' => $this->config['settings']['reg_authorize_net_login'], + 'key' => $this->config['settings']['reg_authorize_net_key'], + 'test' => $this->config['settings']['reg_authorize_net_test'], + 'conf' => $this->config['settings']['reg_authorize_net_conf'], + 'email' => $this->config['settings']['reg_authorize_net_merchant_email'] + ); + + break; + + case $this->config['proc_method_numb']['MerchantSolutions']: + + // Get account data + $account = array( + 'acctid' => $this->config['settings']['reg_merchant_solutions_acctid'], + 'merchantpin' => $this->config['settings']['reg_merchant_solutions_merchantpin'], + 'test' => $this->config['settings']['reg_merchant_solutions_test'], + 'conf' => $this->config['settings']['reg_merchant_solutions_conf'], + 'email' => $this->config['settings']['reg_merchant_solutions_merchant_email'] + ); + + break; + + // These don't require account data + case $this->config['proc_method_numb']['Merchant']: + case $this->config['proc_method_numb']['TestAlwaysGood']: + case $this->config['proc_method_numb']['TestByCardNumber']: + default: + $account = array(); + break; + + } + + // Get the credit card input + $cardData = array( + 'cc_type' => filter_input(INPUT_POST, 'cc_type', FILTER_SANITIZE_NUMBER_INT), + 'cc_name' => filter_input(INPUT_POST, 'cc_name', FILTER_SANITIZE_STRING), + 'cc_numb' => filter_input(INPUT_POST, 'cc_numb', FILTER_SANITIZE_NUMBER_INT), + 'cc_exp' => filter_input(INPUT_POST, 'cc_exp', FILTER_SANITIZE_STRING), + 'cc_cvv' => filter_input(INPUT_POST, 'cc_cvv', FILTER_SANITIZE_NUMBER_INT) + ); + + // Check all credit card input + if ( + $cardData['cc_type'] && $cardData['cc_type'] > 0 && + $cardData['cc_name'] && $cardData['cc_name'] != '' && + $cardData['cc_numb'] && $cardData['cc_numb'] > 0 && + $cardData['cc_exp'] && $cardData['cc_exp'] != '' && + $cardData['cc_cvv'] && $cardData['cc_cvv'] > 0 + ) { + + + if (!isset($this->config['credit_card_match'][$cardData['cc_type']]) || + !preg_match($this->config['credit_card_match'][$cardData['cc_type']], $cardData['cc_numb']) + ) { + $messages[] = 'The credit card number you entered does not match the selected type of credit card.'; + } + + } else { + $messages[] = 'You did not supply all required credit card information.'; + } + + // Get the correct billing data + // Build array of billing information using either the account data or the billing data as requested + $billPrefix = 'bill_'; + if (isset($_REQUEST['billing_same']) && $_REQUEST['billing_same']) { + $billPrefix = ''; + } + + $billing = array( + 'fname' => $regAccount['fieldData'][$billPrefix.'fname'], + 'lname' => $regAccount['fieldData'][$billPrefix.'lname'], + 'addr1' => $regAccount['fieldData'][$billPrefix.'addr1'], + 'addr2' => $regAccount['fieldData'][$billPrefix.'addr2'], + 'city' => $regAccount['fieldData'][$billPrefix.'city'], + 'state' => $regAccount['fieldData'][$billPrefix.'state']['value'], + 'country' => $regAccount['fieldData'][$billPrefix.'country']['value'], + 'zip' => $regAccount['fieldData'][$billPrefix.'zip'], + 'phone' => $regAccount['fieldData'][$billPrefix.'phone'], + 'email' => $regAccount['fieldData']['email'] + ); + + if (count($messages) == 0) { + + // Determine the directory of the payment processor to load and instatiate it. + if ($ccProcessor && isset($this->config['proc_dir'][$ccProcessor])) { + require_once GLM_MEMBERS_REGISTRATIONS_PLUGIN_LIB_PATH.'/paymentProcessors/'.$this->config['proc_dir'][$ccProcessor].'/paymentGateway.php'; + $CcProcessor = new PaymentGateway($account); + } + + $payment = array( + 'name' => $this->config['settings']['reg_org_name'], // Name of venue + 'charge' => $this->cart['totalCharges'], // Total charges this venue + 'cctype' => $cardData['cc_type'], // Card Type + 'ccname' => $cardData['cc_name'], // Name on Card + 'ccnumb' => $cardData['cc_numb'], // Card Number + 'ccexp' => $cardData['cc_exp'], // Expriation Date + 'cccode' => $cardData['cc_cvv'], // CCV - security code + 'invoice' => 0101010101 // Invoice # is session ID (or some part thereof) + ); + + // Now try to run the card processor + $ccResult = $CcProcessor->processPayment($payment, $billing); +echo "
".print_r($ccResult,1)."
"; + +/**** NEED TO FIX INVOICE # ABOVE ****/ + } + + break; + + // Pay Pal + case $this->config['payment_method_numb']['PayPal']: + break; + + // Payment Method unknown + default: +// $payMethod = false; + break; + + } + + if (count($messages) == 0) { @@ -203,7 +387,9 @@ class GlmMembersFront_registrations_checkoutProcess extends GlmRegCartSupport 'haveMessages' => count($messages), 'messages' => $messages, 'regAccount' => $regAccount, - 'regPayment' => $regPayment + 'regPayment' => $regPayment, + 'payMethod' => $payMethod, + 'cardData' => $cardData ); return array( 'status' => true, @@ -213,12 +399,19 @@ class GlmMembersFront_registrations_checkoutProcess extends GlmRegCartSupport 'data' => $templateData ); } + + // Update the cart flags and include updated billing data +/**** NEED TO DO THIS ****/ + echo "

Checkout Done...

"; + // Compile template data $templateData = array( 'page' => $page, 'haveMessages' => count($messages), - 'messages' => $messages + 'messages' => $messages, + 'payMethod' => $payMethod, + 'payMethodName' => $payMethodName ); // Return status, any suggested view, and any data to controller diff --git a/setup/databaseScripts/create_database_V0.0.16.sql b/setup/databaseScripts/create_database_V0.0.16.sql deleted file mode 100644 index 3ca1fcd..0000000 --- a/setup/databaseScripts/create_database_V0.0.16.sql +++ /dev/null @@ -1,716 +0,0 @@ --- Gaslight Media Registration Database --- File Created: 01/18/2017 14:40:00 --- Database Version: 0.0.16 --- Database Creation Script --- --- To permit each query below to be executed separately, --- all queries must be separated by a line with four dashes --- -/* - * General Database Organization - * ----------------------------- - * - * management - General options and configuration - Site manager access only - * - * misc - Misc settings and text - Site owner may update - * - * payment codes - Promotional payment codes - Used with various things - * --> Event, Submission, Event Registration, Event Registrant, Account or global - * - * reg_event - Describes registration for that event - * reg_time - One record for each date/time this event has people registered - Primarily tracks attendee counts and charge totals - * reg_class - Type of registration for this event (one or more) - * reg_rates - Date range / rate for a reg class (one or more) - * - * reg_account - Describes someone who submits / pays for a registration - * Make these two things the same table.... - * registrant - A person who is registered for an event - * - * reg_request - Information on a specific request for registrations - * reg_request_event - Event selected (one or more) - * reg_request_class - Class of registration (one or more) - * reg_request_rate - Specific registration date/rate (one or more) - * reg_request_registrant - Registrant (one or more) - * - * NOTE: additional fields and added fields data will be coming from the Custom Fields add-on - * - * Overall Flow - * ------------ - * - * User selects an event - * If the event has available registrations - * User selects a date for the registration (or if only one that's selected automatically) - * User can log back into registrations at this point if they've been there before and have a password, create an account, or continue as guest ??? - * User selects an available rate type and adds one or more registrants for that rate type - * User may loop back to select additional rate type(s) and registrants - * User may go back to date selection and request additional rate types and registrants for the addional dates - * User may go back to select additional dates and do registrations for those dates as above - * User may go back to select other events and do registrations for them as above - * User may select the "Cart" and deselect something added to it - * User may checkout - * - */ - -/* - * NOTE: Anything below here may not be completed or accurate yet. I'm still working though this - * Lines commented out are selected for possible deletion. - * The INSERT statements are not up-to-date with the tables. - * The "config/plugin.ini" file in this plugin is also a work in progress. - */ - --- Management Options --- General configurationm parameters for the Registrations application --- Only one entry in this table! -CREATE TABLE {prefix}management ( - id INT NOT NULL AUTO_INCREMENT, - canonical_reg_page TINYTEXT NULL, -- Canonical page slug for registrations - -- System Owner Information - reg_org_name TINYTEXT NULL, -- Customer Information - Name of Organization - reg_org_short TINYTEXT NULL, - reg_org_address TINYTEXT NULL, - reg_org_city TINYTEXT NULL, - reg_org_state TINYTEXT NULL, - reg_org_zip TINYTEXT NULL, - reg_org_phone TINYTEXT NULL, - reg_org_toll_free TINYTEXT NULL, - reg_org_internal_email TINYTEXT NULL, - reg_org_from_email TINYTEXT NULL, - reg_payment_methods SMALLINT NULL, -- Payment methods available for all registrations - Bitmap - see payment_method in plugin.ini - reg_proc_methods SMALLINT NULL, -- Payment processing methods available - Bitmap - see proc_method in plugin.ini - reg_cc_accepts SMALLINT NULL, -- Credit Cards Accepted - Bitmap - See credit_card in plugin.ini - -- Authorize.net Credentials - reg_authorize_net_login TINYTEXT NULL, - reg_authorize_net_key TINYTEXT NULL, - reg_authorize_net_test TINYINT NULL, -- Authorize.net test mode - List - see proc_test_mode in plugin.ini - reg_authorize_net_conf BOOLEAN NULL, -- Flag to send payment confirmation Email from Authorize.net - reg_authorize_net_merchant_email TINYTEXT NULL, -- E-Mail Authorize.net will send copy of confirmation E-Mail - -- Merchant Solutions Credentials - reg_merchant_solutions_acctid TINYTEXT NULL, -- Merchant Solutions credentials - reg_merchant_solutions_merchantpin TINYTEXT NULL, - reg_merchant_solutions_test TINYINT NULL, -- Merchant Solutions test mode - List - see proc_test_mode in plugin.ini - -- Billing settings - reg_full_billing_info BOOLEAN NULL, -- Always request full billing information in checkout page regardless of the following settings - reg_bill_info_req_no_charge SMALLINT NULL, -- Bitmap of fields to use in checkout for these types of payments - See billing_field in plugin.conf - reg_bill_info_req_comp_code SMALLINT NULL, - reg_bill_info_req_cash SMALLINT NULL, - reg_bill_info_req_check SMALLINT NULL, - reg_bill_info_req_credit_card SMALLINT NULL, - reg_bill_info_req_merchant_call SMALLINT NULL, - -- Misc Options - reg_medical_info BOOLEAN NULL, -- This site can ask for "Medical Info" - set in main category of an event - PRIMARY KEY (id) -); - ----- - --- Terms used in site modifiable on Management page in admin - Only 1 entry in this table --- Terms in this table should be all self-explanatory -CREATE TABLE {prefix}settings_terms ( - id INT NOT NULL AUTO_INCREMENT, - reg_term_registrations_name TINYTEXT NULL, -- Term "Event Registration" - reg_term_registration TINYTEXT NULL, - reg_term_registration_cap TINYTEXT NULL, - reg_term_registration_plur TINYTEXT NULL, - reg_term_registration_plur_cap TINYTEXT NULL, - reg_term_register TINYTEXT NULL, - reg_term_register_cap TINYTEXT NULL, - reg_term_registers TINYTEXT NULL, -- Intransitive verb of register - reg_term_registering TINYTEXT NULL, - reg_term_registering_cap TINYTEXT NULL, - reg_term_registered TINYTEXT NULL, - reg_term_registered_cap TINYTEXT NULL, - reg_term_attendee TINYTEXT NULL, - reg_term_attendee_cap TINYTEXT NULL, - reg_term_attendee_plur TINYTEXT NULL, - reg_term_attendee_plur_cap TINYTEXT NULL, - reg_term_attending TINYTEXT NULL, - reg_term_attended TINYTEXT NULL, - reg_term_registered_user TINYTEXT NULL, - reg_term_registered_user_cap TINYTEXT NULL, - reg_term_registered_user_plur TINYTEXT NULL, - reg_term_registered_user_plur_cap TINYTEXT NULL, - reg_term_id TINYTEXT NULL, - reg_term_id_cap TINYTEXT NULL, - reg_term_id_plur TINYTEXT NULL, - reg_term_id_plur_cap TINYTEXT NULL, - reg_term_password TINYTEXT NULL, - reg_term_password_cap TINYTEXT NULL, - reg_term_password_plur TINYTEXT NULL, - reg_term_password_plur_cap TINYTEXT NULL, - reg_term_instructor TINYTEXT NULL, - reg_term_instructor_cap TINYTEXT NULL, - reg_term_instructor_plur TINYTEXT NULL, - reg_term_instructor_plur_cap TINYTEXT NULL, - reg_term_payment_code TINYTEXT NULL, - reg_term_payment_code_cap TINYTEXT NULL, - reg_term_payment_code_plur TINYTEXT NULL, - reg_term_payment_code_plur_cap TINYTEXT NULL, - reg_term_registration_button TINYTEXT NULL, - reg_term_contact_information TINYTEXT NULL, - PRIMARY KEY (id) -); - ----- - --- Misc system-wide customer configurable configuration --- Various text and flags to be configured by customer --- Only one entry in this table! -CREATE TABLE {prefix}misc ( - id INT NOT NULL AUTO_INCREMENT, - reg_bulletin TEXT NULL, -- Text to display at top of first registration page - cart_page_text TEXT NULL, -- Text to display at top of cart page - checkout_page_text TEXT NULL, -- Text to display at top of checkout page - summary_page_text TEXT NULL, -- Text to display at top of summary page (after checkout) - reg_terms TEXT NULL, -- Registration terms and conditions - notify_subject TEXT NULL, -- Subject of notification E-Mail to site owner - notify_text TEXT NULL, -- Notification E-Mail text for site owner - instr_notify_subject TEXT NULL, -- Subject of notification E-Mail to instructor - instr_notify_text TEXT NULL, -- Notification E-Mail text for instructor - submission_notify_subject TEXT NULL, -- Subject of notification E-Mail to person submitting the registrations - submission_notify_text TEXT NULL, -- Notification E-Mail text to person submitting the registrations - registrant_notify_subject TEXT NULL, -- Subject of notification E-Mail to registrant - registrant_notify_text TEXT NULL, -- Text of notification E-Mail to registrant - submission_ack_subject TEXT NULL, -- Subject of acknowledgement E-Mail to person submitting the registrations - submission_ack_text TEXT NULL, -- Text of acknowledgement E-Mail text to person submitting the registrations - registrant_ack_subject TEXT NULL, -- Subject of acknowledgement E-Mail to registrant - registrant_ack_text TEXT NULL, -- Text of acknowledgement E-Mail to registrant - PRIMARY KEY (id) -); - ----- - --- Payment Codes --- Promotional payment codes for free/discounted payment -CREATE TABLE {prefix}payment_code ( - id INT NOT NULL AUTO_INCREMENT, - code_type TINYINT NULL, -- Type of adjustment - Free only to start with - See pay_code_type in plugin.ini - ref_type TINYINT NULL, -- See payment_ref_type in plugin.ini - ref_dest INT NULL, -- Pointer to the specific entity of ref_type - code TINYTEXT NULL, -- Text code user must enter to use - amount FLOAT, -- Amount of discount if not type "Free" - Either $ amount or percent - descr TEXT NULL, - PRIMARY KEY (id), - INDEX (ref_dest), - INDEX (code(10)) -); - ----- - --- Registration event specific information --- One record for each event in Events add-on --- Only created when an event is selected to offer registrations -CREATE TABLE {prefix}reg_event ( - id INT NOT NULL AUTO_INCREMENT, - event INT NULL, -- Pointer to event in Events add-on - False if event record in Events add-on no longer exists - event_name TINYTEXT NULL, -- Name of Event so it will always be in the cart data - event_code TINYTEXT NULL, -- A short code used to reference this event - can be used to directly select an event to register for - notify_email TINYTEXT NULL, -- E-Mail addresses to recieve notification of a registration other than org_internal_email in management, comma separated - admin_active BOOLEAN NULL, -- Active flag for admin from Events - If logged in Admin user for this event and this is true then admin user may enter registrations even if active is off. - active BOOLEAN NULL, -- Active flag to indicate that this event is available for registrations - time_specific BOOLEAN NULL, -- Registration for this event is not date/time specific. Can attend any date/time of event. - attendees BOOLEAN NULL, -- Registration requires attendees - Otherwise the person submitting the registration is the registrant - attendee_max MEDIUMINT NULL, -- Attendee limit - 0 = unlimited - attendee_max_per_reg TINYINT NULL, -- Maximum attendees per registration submission - 0 = unlimited - reg_hold_minutes MEDIUMINT NULL, -- Number of minutes hold time for an inactive cart before registrant count hold expires (after which cart attempts to hold again on next access) - cart_hold_days MEDIUMINT NULL, -- Number of days hold time for inactive cart before cart is purged - reg_hours_before MEDIUMINT NULL, -- Number of hours before an event that is the latest a registration may be submitted. - registration_account_options SMALLINT NULL, -- Bitmap of how user accounts may be used for this event - See registration_account_option in plugin.ini - payment_methods SMALLINT NULL, -- Bitmap of payment methods available to users for this event - See payment_method in plugin.ini - restricted_payment_methods SMALLINT NULL, -- Bitmap of restricted (admin use only) payment methods for this event - see payment_method - descr TEXT NULL, -- Registrations specific description field for this event - terms TEXT NULL, -- Terms and Conditions for registration - first_datetime DATETIME NULL, -- Start of first listed date/time for this event - last_datetime DATETIME NULL, -- Start of last listed date/time for this event - reg_file TINYTEXT NULL, -- Name of a downloadable file - reg_file_title TINYTEXT NULL, -- Title for downloadable file - form_revision SMALLINT NULL, -- Current MagicForm form revision - notes TEXT NULL, -- System operator's notes for this event - Not visible to users - PRIMARY KEY (id), - INDEX (event), - INDEX (event_code(10)) -); - ----- - --- Registration Event Time - Information and summary data for a specific event instance (relates to a perticular time record in events) --- A pseudo entry is created if registration is not date/time sensitive for this event. The pseudo entry does not point to an event time. --- These are created the first time a person tries to register for an event instance (time) --- One or more for each event -CREATE TABLE {prefix}reg_time ( - id INT NOT NULL AUTO_INCREMENT, - reg_event INT NULL, -- Pointer to reg_event table - event_time INT NULL, -- ID of events times table entry in Events add-on - If false (0), then this is a pseudo entry to use for all registrations (non-date/time specific) - start_datetime DATETIME NULL, -- Date and time when event instance starts - end_datetime DATETIME NULL, -- Date and time when event instance ends - all_day BOOLEAN NULL, -- All Day flag - Informational - attendees BOOLEAN NULL, -- Flag if tracking attendees or if only one per registration submission (registers account submitting) - get from reg_event - attendee_max MEDIUMINT NULL, -- Attendee count limit - 0 = unlimited - get from reg_event record - attendee_count MEDIUMINT NULL, -- Current attendee count - calculated on the fly and stored here for reference - attendees_pending MEDIUMINT NULL, -- Current number of attendees for this time in active pending carts (Not checked out and attendees slots held) - attendees_available MEDIUMINT NULL, -- Currently available attendee count (limit - current - pending) - total_base_charge DOUBLE NULL, -- Total base charges - total_per_attendee DOUBLE NULL, -- Total per-attendee charges - total_other DOUBLE NULL, -- Total other charges (meals, extras, fees, ...) - total_taxes DOUBLE NULL, -- Total taxes charged - total_charges DOUBLE NULL, -- Total charges (sum of all above) - total_discounts DOUBLE NULL, -- Total discounts of all types (applied payment codes, etc...) - total_payments DOUBLE NULL, -- Total net payments (total charges - total discounts) - descr TEXT NULL, -- Optional description field for this time entry - PRIMARY KEY (id), - INDEX (reg_event), - INDEX (event_time), - INDEX (start_datetime) -); - ----- - --- Pending Attendees - In carts but not checked out --- Attendee counts may be held for a particular reg_time entry for carts that have not been checked out --- These are held for reg_event reg_hold_minutes, afterwhich they are timed out and removed from this table --- Cart entries are given the ID's for these entries when a hold is requested, if the entry is gone, the hold has expired -CREATE TABLE {prefix}reg_time_pending ( - id INT NOT NULL AUTO_INCREMENT, - reg_event INT NULL, -- Pointer to reg_event table - reg_time INT NULL, -- ID of time record - registrant INT NULL, -- ID of reg_request_registrant record -- - expire_time DATETIME NULL, -- Time at which this hold expires - PRIMARY KEY (id), - INDEX (reg_event), - INDEX (reg_time) -); - ----- - --- Registration Class - Type of registration for a specific event - Equates to "Rate Options" in the old system --- One or more for each event -CREATE TABLE {prefix}reg_class ( - id INT NOT NULL AUTO_INCREMENT, - reg_event INT NULL, -- Pointer to reg_event table - name TINYTEXT NULL, -- Name of this registration type - descr TEXT NULL, -- Description - PRIMARY KEY (id), - INDEX (reg_event) -); - ----- - --- Rates and dates for a particular reg_class --- One or more per reg_class - **** Days should not overlap for a particular reg_class -CREATE TABLE {prefix}reg_rate ( - id INT NOT NULL AUTO_INCREMENT, - reg_event INT NULL, -- Pointer to reg_event table - reg_class INT NULL, -- Pointer to reg_class table - name TINYTEXT NULL, -- Namme of this rate - start_days INT NULL, -- # of days before event time rate becomes available - may be selected as a date then coverted for storage - end_days INT NULL, -- # of days before event time rate becomes unavailable - base_rate FLOAT, -- Base rate to register - per_registrant FLOAT, -- Rate per registrant - registrant_credits TINYINT NULL, -- Number of registrants included in base rate - PRIMARY KEY (id), - INDEX (reg_event), - INDEX (reg_class) -); - ----- - --- An account for a person submitting a registration or a registrant for an event --- Depending on the use of these entries may not have all data included --- A single account may be referenced as a person submitting registrations and/or a person registered for an event -CREATE TABLE {prefix}account ( - id INT NOT NULL AUTO_INCREMENT, - active BOOLEAN NULL, -- Is active flag (may be accessed or used) - default is true - validated BOOLEAN NULL, -- Flag indicating that the account has been validated - Set to false when recovering password - validation_code TINYTEXT NULL, -- Validation code and timestamp ("{validation code}-{timestamp}) - Clear this after validation - registered_by INT NULL, -- Account - member_id TINYTEXT NULL, -- Free-form field for a member ID (not a GLM Associate member ID) - fname TINYTEXT NULL, -- Account primary address - lname TINYTEXT NULL, - org TINYTEXT NULL, - title TINYTEXT NULL, - addr1 TINYTEXT NULL, - addr2 TINYTEXT NULL, - city TINYTEXT NULL, - state TINYTEXT NULL, - zip TINYTEXT NULL, - country TINYTEXT NULL, - phone TINYTEXT NULL, - fax TINYTEXT NULL, - bill_fname TINYTEXT NULL, -- Last used billing information - Also stored in each registration request - bill_lname TINYTEXT NULL, - bill_org TINYTEXT NULL, - bill_title TINYTEXT NULL, - bill_addr1 TINYTEXT NULL, - bill_addr2 TINYTEXT NULL, - bill_city TINYTEXT NULL, - bill_state TINYTEXT NULL, - bill_zip TINYTEXT NULL, - bill_country TINYTEXT NULL, - bill_phone TINYTEXT NULL, - bill_fax TINYTEXT NULL, - email TINYTEXT NULL, - password TINYTEXT NULL, -- Crypted password for login back into this account - email_ok BOOLEAN NULL, - is_member BOOLEAN NULL, -- Is a member of the entity that owns the site - contact_id INT NULL, -- Pointer to GLM Associate member contact record if account is for a member contact - contact_fname TINYTEXT NULL, - contact_lname TINYTEXT NULL, - contact_org TINYTEXT NULL, - contact_title TINYTEXT NULL, - contact_addr1 TINYTEXT NULL, - contact_addr2 TINYTEXT NULL, - contact_city TINYTEXT NULL, - contact_state TINYTEXT NULL, - contact_zip TINYTEXT NULL, - contact_country TINYTEXT NULL, - contact_phone TINYTEXT NULL, - contact_fax TINYTEXT NULL, - contact_email TINYTEXT NULL, - contact_email_ok BOOLEAN NULL, - guardian TINYTEXT NULL, - emer_contact TINYTEXT NULL, - emer_phone TINYTEXT NULL, - med_history TINYTEXT NULL, - allergy_med TINYTEXT NULL, - date_created DATE NULL, - notes TEXT NULL, -- System operator's notes for this account - not visible to account owner - user_trace_info TINYTEXT NULL, -- IP Address of user computer and timestamp of last update - PRIMARY KEY (id), - INDEX (registered_by), - INDEX (member_id(10)), - INDEX (fname(10)), - INDEX (lname(10)), - INDEX (org(10)), - INDEX (city(10)), - INDEX (state(5)), - INDEX (zip(5)), - INDEX (email(10)), - INDEX (contact_id) -); - ----- - --- A request for registration --- Has one or more reg_detail records associated with it -CREATE TABLE {prefix}reg_request ( - id INT NOT NULL AUTO_INCREMENT, - account INT NULL, -- Pointer to user account (reg_account) who submitted the registrations. If 0 then guest request (prior to checkout) - validated BOOLEAN NULL, -- Flag that indicates if request passed last validation with checkRegistrationRequest() - validation_message TEXT NULL, -- Reasons that request did not pass validation with checkRegistrationRequest() - Serialized array - bill_fname TINYTEXT NULL, -- Billing information used for this registration submission - Updates account billing address - Kept here for each request - bill_lname TINYTEXT NULL, - bill_org TINYTEXT NULL, - bill_title TINYTEXT NULL, - bill_addr1 TINYTEXT NULL, - bill_addr2 TINYTEXT NULL, - bill_city TINYTEXT NULL, - bill_state TINYTEXT NULL, - bill_zip TINYTEXT NULL, - bill_country TINYTEXT NULL, - date_submitted DATE NULL, - pay_method INT NULL, -- See payment_method in plugin.ini - payment_code TINYTEXT NULL, -- Payment_code (code text) - if submitted and validated - status SMALLINT NULL, -- See submission_status in plugin.ini - total DOUBLE PRECISION NULL, -- Total charge including all fees and taxes - cc_type TINYINT NULL, -- Credit Card type (if used) - See credit_card in plugin.ini - cc_name TINYTEXT NULL, - cc_numb TINYTEXT NULL, - cc_exp TINYTEXT NULL, - cc_cvv TINYTEXT NULL, - cc_conf TINYTEXT NULL, -- Confirmation code back from card processor - summary TEXT NULL, -- HTML summary of cart contents, costs and payment - Use same HTML displayed to user - mf_data TEXT NULL, -- Any MagicForm data associated with registrant - notes TEXT NULL, -- System operator's notes for this registration request - user_trace_info TINYTEXT NULL, -- IP Address of user computer and timestamp - date_created DATETIME NULL, -- Date request was first created - last_update DATETIME NULL, -- Last update date/time - Used for timing out pending carts and attendee counts - PRIMARY KEY (id), - INDEX (account), - INDEX (date_submitted) -); - ----- - --- Registration for a specific event --- Has one or more reg_selected_rate records associated with it -CREATE TABLE {prefix}reg_request_event ( - id INT NOT NULL AUTO_INCREMENT, - reg_request INT NULL, -- Pointer to reg_request table - reg_event INT NULL, -- Pointer to reg_event - event_name TINYTEXT NULL, -- Name of Event so it will always be in the cart data - notes TEXT NULL, -- System operator's notes for this registration request - PRIMARY KEY (id), - INDEX (reg_request), - INDEX (reg_event), - INDEX (reg_time) -); - ----- - --- A particular reg_class selected --- Has one or more reg_request_rate records associated with it -CREATE TABLE {prefix}reg_request_class ( - id INT NOT NULL AUTO_INCREMENT, - reg_event INT NULL, -- Pointer to reg_event entry - reg_request INT NULL, -- Pointer to the registration request record - reg_request_event INT NULL, -- Pointer to reg_request_event table entry - class INT NULL, -- Pointer to event reg_class table - False (0) if registration class no longer exits - class_name TINYTEXT NULL, -- Name of event class at the time selected - notes TEXT NULL, -- System operator's notes for this registration request - PRIMARY KEY (id), - INDEX (reg_event), - INDEX (reg_time), - INDEX (reg_request_event) -); - ----- - --- A particular reg_rate selected --- Has one or more reg_request_registrant records associated with it -CREATE TABLE {prefix}reg_request_rate ( - id INT NOT NULL AUTO_INCREMENT, - reg_event INT NULL, -- Pointer to reg_event entry - reg_request INT NULL, -- Pointer to the registration request record - reg_request_event INT NULL, -- Pointer to reg_request_event table entry - reg_request_class INT NULL, -- Pointer to reg_request_class table entry - rate INT NULL, -- Pointer to event reg_rate table - False (0) if registration rate no longer exists - rate_name TINYTEXT NULL, -- Name of event class rate at the time selected - base_rate FLOAT, -- Base rate at time of registration - per_registrant FLOAT, -- Per Registrant Rate at time of registration - registrant_credits TINYINT NULL, -- Number of registrants included in base rate at time of registration - notes TEXT NULL, -- System operator's notes for this registration request - PRIMARY KEY (id), - INDEX (reg_event), - INDEX (reg_time), - INDEX (reg_request_event), - INDEX (reg_request_class) -); - ----- - --- A specific registrant for a selected registration rate -CREATE TABLE {prefix}reg_request_registrant ( - id INT NOT NULL AUTO_INCREMENT, - account INT NULL, -- Pointer to the account entry for the person being registered - False (0) if account no longer exists or registrant account not needed - reg_event INT NULL, -- Pointer to reg_event entry - reg_time INT NULL, -- Pointer reg_time entry - event_datetime DATETIME NULL, -- Date and time of event time selected so it will always be in the cart - reg_request INT NULL, -- Pointer to the registration request record - reg_request_event INT NULL, -- Pointer to reg_request_event table entry - reg_request_class INT NULL, -- Pointer to reg_request_class table entry - reg_request_rate INT NULL, -- Pointer to reg_request_rate table entry - fname TINYTEXT NULL, -- First name of registrant at the time of selection - lname TINYTEXT NULL, -- Last name of registrant at the time of selection - notes TEXT NULL, -- System operator's notes for this registration request - PRIMARY KEY (id), - INDEX (account), - INDEX (reg_event), - INDEX (reg_time), - INDEX (reg_request), - INDEX (reg_request_event), - INDEX (reg_request_class), - INDEX (reg_request_rate) -); - ----- - --- Insert into management table -INSERT INTO {prefix}management - ( - canonical_reg_page, - reg_org_name, - reg_org_short, - reg_org_address, - reg_org_city, - reg_org_state, - reg_org_zip, - reg_org_phone, - reg_org_toll_free, - reg_org_internal_email, - reg_org_from_email, - reg_payment_methods, - reg_proc_methods, - reg_cc_accepts, - reg_authorize_net_login, - reg_authorize_net_key, - reg_authorize_net_test, - reg_authorize_net_conf, - reg_authorize_net_merchant_email, - reg_merchant_solutions_acctid, - reg_merchant_solutions_merchantpin, - reg_merchant_solutions_test, - reg_full_billing_info, - reg_bill_info_req_no_charge, - reg_bill_info_req_comp_code, - reg_bill_info_req_cash, - reg_bill_info_req_check, - reg_bill_info_req_credit_card, - reg_bill_info_req_merchant_call, - reg_medical_info - ) - VALUES - ( - 'registrations', -- reg_canonical_reg_page, - 'Gaslight Media', -- reg_org_name, - 'GLM', -- reg_org_short, - '120 E. Lake St.', -- reg_org_address, - 'Petoskey', -- reg_org_city, - 'MI', -- reg_org_state, - '49770', -- reg_org_zip, - '231-487-0692', -- reg_org_phone, - '800-123-1234', -- reg_org_toll_free, - 'internal@gaslightmedia.com', -- reg_org_internal_email, - 'info@gaslightmedia.com', -- reg_org_from_email, - 0, -- reg_payment_methods, - 0, -- reg_proc_methods, - 0, -- reg_cc_accepts, - '', -- reg_authorize_net_login, - '', -- reg_authorize_net_key, - 1, -- reg_authorize_net_test, - true, -- reg_authorize_net_conf - '', -- reg_authorize_net_merchant_email, - '', -- reg_merchant_solutions_acctid, - '', -- reg_merchant_solutions_merchantpin, - 1, -- reg_merchant_solutions_test, - true, -- reg_full_billing_info, - 0, -- reg_bill_info_req_no_charge, - 0, -- reg_bill_info_req_comp_code, - 0, -- reg_bill_info_req_cash, - 0, -- reg_bill_info_req_check, - 0, -- reg_bill_info_req_credit_card, - 0, -- reg_bill_info_req_merchant_call, - true -- reg_medical_info, - ); - ----- - --- Insert into settings_terms table -INSERT INTO {prefix}settings_terms - ( - reg_term_registrations_name, - reg_term_registration, - reg_term_registration_cap, - reg_term_registration_plur, - reg_term_registration_plur_cap, - reg_term_register, - reg_term_register_cap, - reg_term_registers, - reg_term_registering, - reg_term_registering_cap, - reg_term_registered, - reg_term_registered_cap, - reg_term_attendee, - reg_term_attendee_cap, - reg_term_attendee_plur, - reg_term_attendee_plur_cap, - reg_term_attending, - reg_term_attended, - reg_term_registered_user, - reg_term_registered_user_cap, - reg_term_registered_user_plur, - reg_term_registered_user_plur_cap, - reg_term_id, - reg_term_id_cap, - reg_term_id_plur, - reg_term_id_plur_cap, - reg_term_password, - reg_term_password_cap, - reg_term_password_plur, - reg_term_password_plur_cap, - reg_term_instructor, - reg_term_instructor_cap, - reg_term_instructor_plur, - reg_term_instructor_plur_cap, - reg_term_payment_code, - reg_term_payment_code_cap, - reg_term_payment_code_plur, - reg_term_payment_code_plur_cap, - reg_term_registration_button, - reg_term_contact_information - ) - VALUES - ( - 'Event Registrations', -- reg_term_registrations_name - 'registration', -- reg_term_registration - 'Registration', -- reg_term_registration_cap - 'registrations', -- reg_term_registration_plur - 'Registrations', -- reg_term_registration_plur_cap - 'register', -- reg_term_registe - 'Register', -- reg_term_register_cap - 'registers', -- reg_term_registers - 'registering', -- reg_term_registering - 'Registering', -- reg_term_registering_cap - 'registered', -- reg_term_registered - 'Registered', -- reg_term_registered_cap - 'attendee', -- reg_term_attendee - 'Attendee', -- reg_term_attendee_cap - 'attendees', -- reg_term_attendee_plur - 'Attendees', -- reg_term_attendee_plur_cap - 'attending', -- reg_term_attending - 'attended', -- reg_term_attended - 'user', -- reg_term_registered_user - 'User', -- reg_term_registered_user_cap - 'users', -- reg_term_registered_user_plur - 'Users', -- reg_term_registered_user_plur_cap - 'ID', -- reg_term_id - 'ID', -- reg_term_id_cap - 'IDs', -- reg_term_id_plur - 'IDs', -- reg_term_id_plur_cap - 'password', -- reg_term_password - 'passwords', -- reg_term_password_cap - 'Password', -- reg_term_password_plur - 'Passwords', -- reg_term_password_plur_cap - 'instructor', -- reg_term_instructor - 'Instructor', -- reg_term_instructor_cap - 'instructors', -- reg_term_instructor_plur - 'Instructors', -- reg_term_instructor_plur_cap - 'payment code', -- reg_term_payment_code - 'Payment code', -- reg_term_payment_code_cap - 'payment codes', -- reg_term_payment_code_plur - 'Payment codes', -- reg_term_payment_code_plur_cap - 'Register for Event', -- reg_term_registration_button - 'Contact Information' -- reg_term_contact_information - ); - ----- - --- Insert into misc table -INSERT INTO {prefix}misc - ( - reg_bulletin, - cart_page_text, - checkout_page_text, - summary_page_text, - reg_terms, - notify_subject, - notify_text, - instr_notify_subject, - instr_notify_text, - submission_notify_subject, - submission_notify_text, - registrant_notify_subject, - registrant_notify_text, - submission_ack_subject, - submission_ack_text, - registrant_ack_subject, - registrant_ack_text - ) - VALUES - ( - 'Registration Bulletin Text', - 'Text for top of Cart Page', - 'Text for top of Checkout Page', - 'Text for top of Summary Page', - 'Terms and Conditions', - 'Subject of notification to site owner of a registration', - 'Text of notification to site owner of a registration', - 'Subject of notification to instructor of registration', - 'Text for notification to instructor of registration', - 'Subject of notification to person submitting registration', - 'Text of notification to person submitting registration', - 'Subject for notification to registrant', - 'Text for notification to registrant', - 'Subject of acknowledgement to person submitting registration', - 'Text of acknowledgement to person submitting registration', - 'Subject of acknowledgement to registrant', - 'Text of acknowledgement to registrant' - ); diff --git a/setup/databaseScripts/create_database_V0.0.17.sql b/setup/databaseScripts/create_database_V0.0.17.sql new file mode 100644 index 0000000..3c203e1 --- /dev/null +++ b/setup/databaseScripts/create_database_V0.0.17.sql @@ -0,0 +1,718 @@ +-- Gaslight Media Registration Database +-- File Created: 01/18/2017 14:40:00 +-- Database Version: 0.0.16 +-- Database Creation Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashes +-- +/* + * General Database Organization + * ----------------------------- + * + * management - General options and configuration - Site manager access only + * + * misc - Misc settings and text - Site owner may update + * + * payment codes - Promotional payment codes - Used with various things + * --> Event, Submission, Event Registration, Event Registrant, Account or global + * + * reg_event - Describes registration for that event + * reg_time - One record for each date/time this event has people registered - Primarily tracks attendee counts and charge totals + * reg_class - Type of registration for this event (one or more) + * reg_rates - Date range / rate for a reg class (one or more) + * + * reg_account - Describes someone who submits / pays for a registration + * Make these two things the same table.... + * registrant - A person who is registered for an event + * + * reg_request - Information on a specific request for registrations + * reg_request_event - Event selected (one or more) + * reg_request_class - Class of registration (one or more) + * reg_request_rate - Specific registration date/rate (one or more) + * reg_request_registrant - Registrant (one or more) + * + * NOTE: additional fields and added fields data will be coming from the Custom Fields add-on + * + * Overall Flow + * ------------ + * + * User selects an event + * If the event has available registrations + * User selects a date for the registration (or if only one that's selected automatically) + * User can log back into registrations at this point if they've been there before and have a password, create an account, or continue as guest ??? + * User selects an available rate type and adds one or more registrants for that rate type + * User may loop back to select additional rate type(s) and registrants + * User may go back to date selection and request additional rate types and registrants for the addional dates + * User may go back to select additional dates and do registrations for those dates as above + * User may go back to select other events and do registrations for them as above + * User may select the "Cart" and deselect something added to it + * User may checkout + * + */ + +/* + * NOTE: Anything below here may not be completed or accurate yet. I'm still working though this + * Lines commented out are selected for possible deletion. + * The INSERT statements are not up-to-date with the tables. + * The "config/plugin.ini" file in this plugin is also a work in progress. + */ + +-- Management Options +-- General configurationm parameters for the Registrations application +-- Only one entry in this table! +CREATE TABLE {prefix}management ( + id INT NOT NULL AUTO_INCREMENT, + canonical_reg_page TINYTEXT NULL, -- Canonical page slug for registrations + -- System Owner Information + reg_org_name TINYTEXT NULL, -- Customer Information - Name of Organization + reg_org_short TINYTEXT NULL, + reg_org_address TINYTEXT NULL, + reg_org_city TINYTEXT NULL, + reg_org_state TINYTEXT NULL, + reg_org_zip TINYTEXT NULL, + reg_org_phone TINYTEXT NULL, + reg_org_toll_free TINYTEXT NULL, + reg_org_internal_email TINYTEXT NULL, + reg_org_from_email TINYTEXT NULL, + reg_payment_methods SMALLINT NULL, -- Payment methods available for all registrations - Bitmap - see payment_method in plugin.ini + reg_proc_methods SMALLINT NULL, -- Creadit Cart payment processing methods available - Bitmap - see proc_method in plugin.ini + reg_cc_accepts SMALLINT NULL, -- Credit Cards Accepted - Bitmap - See credit_card in plugin.ini + -- Authorize.net Credentials + reg_authorize_net_login TINYTEXT NULL, + reg_authorize_net_key TINYTEXT NULL, + reg_authorize_net_test TINYINT NULL, -- Authorize.net test mode - List - see proc_test_mode in plugin.ini + reg_authorize_net_conf BOOLEAN NULL, -- Flag to send payment confirmation Email from Authorize.net + reg_authorize_net_merchant_email TINYTEXT NULL, -- E-Mail Authorize.net will send copy of confirmation E-Mail + -- Merchant Solutions Credentials + reg_merchant_solutions_acctid TINYTEXT NULL, -- Merchant Solutions credentials + reg_merchant_solutions_merchantpin TINYTEXT NULL, + reg_merchant_solutions_test TINYINT NULL, -- Merchant Solutions test mode - List - see proc_test_mode in plugin.ini + reg_merchant_solutions_conf BOOLEAN NULL, -- Flag to send payment confirmation Email + reg_merchant_solutions_merchant_email TINYTEXT NULL, -- Merchant Solutions will send copy of confirmation E-Mail + -- Billing settings + reg_full_billing_info BOOLEAN NULL, -- Always request full billing information in checkout page regardless of the following settings + reg_bill_info_req_no_charge SMALLINT NULL, -- Bitmap of fields to use in checkout for these types of payments - See billing_field in plugin.conf + reg_bill_info_req_comp_code SMALLINT NULL, + reg_bill_info_req_cash SMALLINT NULL, + reg_bill_info_req_check SMALLINT NULL, + reg_bill_info_req_credit_card SMALLINT NULL, + reg_bill_info_req_merchant_call SMALLINT NULL, + -- Misc Options + reg_medical_info BOOLEAN NULL, -- This site can ask for "Medical Info" - set in main category of an event + PRIMARY KEY (id) +); + +---- + +-- Terms used in site modifiable on Management page in admin - Only 1 entry in this table +-- Terms in this table should be all self-explanatory +CREATE TABLE {prefix}settings_terms ( + id INT NOT NULL AUTO_INCREMENT, + reg_term_registrations_name TINYTEXT NULL, -- Term "Event Registration" + reg_term_registration TINYTEXT NULL, + reg_term_registration_cap TINYTEXT NULL, + reg_term_registration_plur TINYTEXT NULL, + reg_term_registration_plur_cap TINYTEXT NULL, + reg_term_register TINYTEXT NULL, + reg_term_register_cap TINYTEXT NULL, + reg_term_registers TINYTEXT NULL, -- Intransitive verb of register + reg_term_registering TINYTEXT NULL, + reg_term_registering_cap TINYTEXT NULL, + reg_term_registered TINYTEXT NULL, + reg_term_registered_cap TINYTEXT NULL, + reg_term_attendee TINYTEXT NULL, + reg_term_attendee_cap TINYTEXT NULL, + reg_term_attendee_plur TINYTEXT NULL, + reg_term_attendee_plur_cap TINYTEXT NULL, + reg_term_attending TINYTEXT NULL, + reg_term_attended TINYTEXT NULL, + reg_term_registered_user TINYTEXT NULL, + reg_term_registered_user_cap TINYTEXT NULL, + reg_term_registered_user_plur TINYTEXT NULL, + reg_term_registered_user_plur_cap TINYTEXT NULL, + reg_term_id TINYTEXT NULL, + reg_term_id_cap TINYTEXT NULL, + reg_term_id_plur TINYTEXT NULL, + reg_term_id_plur_cap TINYTEXT NULL, + reg_term_password TINYTEXT NULL, + reg_term_password_cap TINYTEXT NULL, + reg_term_password_plur TINYTEXT NULL, + reg_term_password_plur_cap TINYTEXT NULL, + reg_term_instructor TINYTEXT NULL, + reg_term_instructor_cap TINYTEXT NULL, + reg_term_instructor_plur TINYTEXT NULL, + reg_term_instructor_plur_cap TINYTEXT NULL, + reg_term_payment_code TINYTEXT NULL, + reg_term_payment_code_cap TINYTEXT NULL, + reg_term_payment_code_plur TINYTEXT NULL, + reg_term_payment_code_plur_cap TINYTEXT NULL, + reg_term_registration_button TINYTEXT NULL, + reg_term_contact_information TINYTEXT NULL, + PRIMARY KEY (id) +); + +---- + +-- Misc system-wide customer configurable configuration +-- Various text and flags to be configured by customer +-- Only one entry in this table! +CREATE TABLE {prefix}misc ( + id INT NOT NULL AUTO_INCREMENT, + reg_bulletin TEXT NULL, -- Text to display at top of first registration page + cart_page_text TEXT NULL, -- Text to display at top of cart page + checkout_page_text TEXT NULL, -- Text to display at top of checkout page + summary_page_text TEXT NULL, -- Text to display at top of summary page (after checkout) + reg_terms TEXT NULL, -- Registration terms and conditions + notify_subject TEXT NULL, -- Subject of notification E-Mail to site owner + notify_text TEXT NULL, -- Notification E-Mail text for site owner + instr_notify_subject TEXT NULL, -- Subject of notification E-Mail to instructor + instr_notify_text TEXT NULL, -- Notification E-Mail text for instructor + submission_notify_subject TEXT NULL, -- Subject of notification E-Mail to person submitting the registrations + submission_notify_text TEXT NULL, -- Notification E-Mail text to person submitting the registrations + registrant_notify_subject TEXT NULL, -- Subject of notification E-Mail to registrant + registrant_notify_text TEXT NULL, -- Text of notification E-Mail to registrant + submission_ack_subject TEXT NULL, -- Subject of acknowledgement E-Mail to person submitting the registrations + submission_ack_text TEXT NULL, -- Text of acknowledgement E-Mail text to person submitting the registrations + registrant_ack_subject TEXT NULL, -- Subject of acknowledgement E-Mail to registrant + registrant_ack_text TEXT NULL, -- Text of acknowledgement E-Mail to registrant + PRIMARY KEY (id) +); + +---- + +-- Payment Codes +-- Promotional payment codes for free/discounted payment +CREATE TABLE {prefix}payment_code ( + id INT NOT NULL AUTO_INCREMENT, + code_type TINYINT NULL, -- Type of adjustment - Free only to start with - See pay_code_type in plugin.ini + ref_type TINYINT NULL, -- See payment_ref_type in plugin.ini + ref_dest INT NULL, -- Pointer to the specific entity of ref_type + code TINYTEXT NULL, -- Text code user must enter to use + amount FLOAT, -- Amount of discount if not type "Free" - Either $ amount or percent + descr TEXT NULL, + PRIMARY KEY (id), + INDEX (ref_dest), + INDEX (code(10)) +); + +---- + +-- Registration event specific information +-- One record for each event in Events add-on +-- Only created when an event is selected to offer registrations +CREATE TABLE {prefix}reg_event ( + id INT NOT NULL AUTO_INCREMENT, + event INT NULL, -- Pointer to event in Events add-on - False if event record in Events add-on no longer exists + event_name TINYTEXT NULL, -- Name of Event so it will always be in the cart data + event_code TINYTEXT NULL, -- A short code used to reference this event - can be used to directly select an event to register for + notify_email TINYTEXT NULL, -- E-Mail addresses to recieve notification of a registration other than org_internal_email in management, comma separated + admin_active BOOLEAN NULL, -- Active flag for admin from Events - If logged in Admin user for this event and this is true then admin user may enter registrations even if active is off. + active BOOLEAN NULL, -- Active flag to indicate that this event is available for registrations + time_specific BOOLEAN NULL, -- Registration for this event is not date/time specific. Can attend any date/time of event. + attendees BOOLEAN NULL, -- Registration requires attendees - Otherwise the person submitting the registration is the registrant + attendee_max MEDIUMINT NULL, -- Attendee limit - 0 = unlimited + attendee_max_per_reg TINYINT NULL, -- Maximum attendees per registration submission - 0 = unlimited + reg_hold_minutes MEDIUMINT NULL, -- Number of minutes hold time for an inactive cart before registrant count hold expires (after which cart attempts to hold again on next access) + cart_hold_days MEDIUMINT NULL, -- Number of days hold time for inactive cart before cart is purged + reg_hours_before MEDIUMINT NULL, -- Number of hours before an event that is the latest a registration may be submitted. + registration_account_options SMALLINT NULL, -- Bitmap of how user accounts may be used for this event - See registration_account_option in plugin.ini + payment_methods SMALLINT NULL, -- Bitmap of payment methods available to users for this event - See payment_method in plugin.ini + restricted_payment_methods SMALLINT NULL, -- Bitmap of restricted (admin use only) payment methods for this event - see payment_method + descr TEXT NULL, -- Registrations specific description field for this event + terms TEXT NULL, -- Terms and Conditions for registration + first_datetime DATETIME NULL, -- Start of first listed date/time for this event + last_datetime DATETIME NULL, -- Start of last listed date/time for this event + reg_file TINYTEXT NULL, -- Name of a downloadable file + reg_file_title TINYTEXT NULL, -- Title for downloadable file + form_revision SMALLINT NULL, -- Current MagicForm form revision + notes TEXT NULL, -- System operator's notes for this event - Not visible to users + PRIMARY KEY (id), + INDEX (event), + INDEX (event_code(10)) +); + +---- + +-- Registration Event Time - Information and summary data for a specific event instance (relates to a perticular time record in events) +-- A pseudo entry is created if registration is not date/time sensitive for this event. The pseudo entry does not point to an event time. +-- These are created the first time a person tries to register for an event instance (time) +-- One or more for each event +CREATE TABLE {prefix}reg_time ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event table + event_time INT NULL, -- ID of events times table entry in Events add-on - If false (0), then this is a pseudo entry to use for all registrations (non-date/time specific) + start_datetime DATETIME NULL, -- Date and time when event instance starts + end_datetime DATETIME NULL, -- Date and time when event instance ends + all_day BOOLEAN NULL, -- All Day flag - Informational + attendees BOOLEAN NULL, -- Flag if tracking attendees or if only one per registration submission (registers account submitting) - get from reg_event + attendee_max MEDIUMINT NULL, -- Attendee count limit - 0 = unlimited - get from reg_event record + attendee_count MEDIUMINT NULL, -- Current attendee count - calculated on the fly and stored here for reference + attendees_pending MEDIUMINT NULL, -- Current number of attendees for this time in active pending carts (Not checked out and attendees slots held) + attendees_available MEDIUMINT NULL, -- Currently available attendee count (limit - current - pending) + total_base_charge DOUBLE NULL, -- Total base charges + total_per_attendee DOUBLE NULL, -- Total per-attendee charges + total_other DOUBLE NULL, -- Total other charges (meals, extras, fees, ...) + total_taxes DOUBLE NULL, -- Total taxes charged + total_charges DOUBLE NULL, -- Total charges (sum of all above) + total_discounts DOUBLE NULL, -- Total discounts of all types (applied payment codes, etc...) + total_payments DOUBLE NULL, -- Total net payments (total charges - total discounts) + descr TEXT NULL, -- Optional description field for this time entry + PRIMARY KEY (id), + INDEX (reg_event), + INDEX (event_time), + INDEX (start_datetime) +); + +---- + +-- Pending Attendees - In carts but not checked out +-- Attendee counts may be held for a particular reg_time entry for carts that have not been checked out +-- These are held for reg_event reg_hold_minutes, afterwhich they are timed out and removed from this table +-- Cart entries are given the ID's for these entries when a hold is requested, if the entry is gone, the hold has expired +CREATE TABLE {prefix}reg_time_pending ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event table + reg_time INT NULL, -- ID of time record + registrant INT NULL, -- ID of reg_request_registrant record -- + expire_time DATETIME NULL, -- Time at which this hold expires + PRIMARY KEY (id), + INDEX (reg_event), + INDEX (reg_time) +); + +---- + +-- Registration Class - Type of registration for a specific event - Equates to "Rate Options" in the old system +-- One or more for each event +CREATE TABLE {prefix}reg_class ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event table + name TINYTEXT NULL, -- Name of this registration type + descr TEXT NULL, -- Description + PRIMARY KEY (id), + INDEX (reg_event) +); + +---- + +-- Rates and dates for a particular reg_class +-- One or more per reg_class - **** Days should not overlap for a particular reg_class +CREATE TABLE {prefix}reg_rate ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event table + reg_class INT NULL, -- Pointer to reg_class table + name TINYTEXT NULL, -- Namme of this rate + start_days INT NULL, -- # of days before event time rate becomes available - may be selected as a date then coverted for storage + end_days INT NULL, -- # of days before event time rate becomes unavailable + base_rate FLOAT, -- Base rate to register + per_registrant FLOAT, -- Rate per registrant + registrant_credits TINYINT NULL, -- Number of registrants included in base rate + PRIMARY KEY (id), + INDEX (reg_event), + INDEX (reg_class) +); + +---- + +-- An account for a person submitting a registration or a registrant for an event +-- Depending on the use of these entries may not have all data included +-- A single account may be referenced as a person submitting registrations and/or a person registered for an event +CREATE TABLE {prefix}account ( + id INT NOT NULL AUTO_INCREMENT, + active BOOLEAN NULL, -- Is active flag (may be accessed or used) - default is true + validated BOOLEAN NULL, -- Flag indicating that the account has been validated - Set to false when recovering password + validation_code TINYTEXT NULL, -- Validation code and timestamp ("{validation code}-{timestamp}) - Clear this after validation + registered_by INT NULL, -- Account + member_id TINYTEXT NULL, -- Free-form field for a member ID (not a GLM Associate member ID) + fname TINYTEXT NULL, -- Account primary address + lname TINYTEXT NULL, + org TINYTEXT NULL, + title TINYTEXT NULL, + addr1 TINYTEXT NULL, + addr2 TINYTEXT NULL, + city TINYTEXT NULL, + state TINYTEXT NULL, + zip TINYTEXT NULL, + country TINYTEXT NULL, + phone TINYTEXT NULL, + fax TINYTEXT NULL, + bill_fname TINYTEXT NULL, -- Last used billing information - Also stored in each registration request + bill_lname TINYTEXT NULL, + bill_org TINYTEXT NULL, + bill_title TINYTEXT NULL, + bill_addr1 TINYTEXT NULL, + bill_addr2 TINYTEXT NULL, + bill_city TINYTEXT NULL, + bill_state TINYTEXT NULL, + bill_zip TINYTEXT NULL, + bill_country TINYTEXT NULL, + bill_phone TINYTEXT NULL, + bill_fax TINYTEXT NULL, + email TINYTEXT NULL, + password TINYTEXT NULL, -- Crypted password for login back into this account + email_ok BOOLEAN NULL, + is_member BOOLEAN NULL, -- Is a member of the entity that owns the site + contact_id INT NULL, -- Pointer to GLM Associate member contact record if account is for a member contact + contact_fname TINYTEXT NULL, + contact_lname TINYTEXT NULL, + contact_org TINYTEXT NULL, + contact_title TINYTEXT NULL, + contact_addr1 TINYTEXT NULL, + contact_addr2 TINYTEXT NULL, + contact_city TINYTEXT NULL, + contact_state TINYTEXT NULL, + contact_zip TINYTEXT NULL, + contact_country TINYTEXT NULL, + contact_phone TINYTEXT NULL, + contact_fax TINYTEXT NULL, + contact_email TINYTEXT NULL, + contact_email_ok BOOLEAN NULL, + guardian TINYTEXT NULL, + emer_contact TINYTEXT NULL, + emer_phone TINYTEXT NULL, + med_history TINYTEXT NULL, + allergy_med TINYTEXT NULL, + date_created DATE NULL, + notes TEXT NULL, -- System operator's notes for this account - not visible to account owner + user_trace_info TINYTEXT NULL, -- IP Address of user computer and timestamp of last update + PRIMARY KEY (id), + INDEX (registered_by), + INDEX (member_id(10)), + INDEX (fname(10)), + INDEX (lname(10)), + INDEX (org(10)), + INDEX (city(10)), + INDEX (state(5)), + INDEX (zip(5)), + INDEX (email(10)), + INDEX (contact_id) +); + +---- + +-- A request for registration +-- Has one or more reg_detail records associated with it +CREATE TABLE {prefix}reg_request ( + id INT NOT NULL AUTO_INCREMENT, + account INT NULL, -- Pointer to user account (reg_account) who submitted the registrations. If 0 then guest request (prior to checkout) + validated BOOLEAN NULL, -- Flag that indicates if request passed last validation with checkRegistrationRequest() + validation_message TEXT NULL, -- Reasons that request did not pass validation with checkRegistrationRequest() - Serialized array + bill_fname TINYTEXT NULL, -- Billing information used for this registration submission - Updates account billing address - Kept here for each request + bill_lname TINYTEXT NULL, + bill_org TINYTEXT NULL, + bill_title TINYTEXT NULL, + bill_addr1 TINYTEXT NULL, + bill_addr2 TINYTEXT NULL, + bill_city TINYTEXT NULL, + bill_state TINYTEXT NULL, + bill_zip TINYTEXT NULL, + bill_country TINYTEXT NULL, + date_submitted DATE NULL, + pay_method INT NULL, -- See payment_method in plugin.ini + payment_code TINYTEXT NULL, -- Payment_code (code text) - if submitted and validated + status SMALLINT NULL, -- See submission_status in plugin.ini + total DOUBLE PRECISION NULL, -- Total charge including all fees and taxes + cc_type TINYINT NULL, -- Credit Card type (if used) - See credit_card in plugin.ini + cc_name TINYTEXT NULL, + cc_numb TINYTEXT NULL, + cc_exp TINYTEXT NULL, + cc_cvv TINYTEXT NULL, + cc_conf TINYTEXT NULL, -- Confirmation code back from card processor + summary TEXT NULL, -- HTML summary of cart contents, costs and payment - Use same HTML displayed to user + mf_data TEXT NULL, -- Any MagicForm data associated with registrant + notes TEXT NULL, -- System operator's notes for this registration request + user_trace_info TINYTEXT NULL, -- IP Address of user computer and timestamp + date_created DATETIME NULL, -- Date request was first created + last_update DATETIME NULL, -- Last update date/time - Used for timing out pending carts and attendee counts + PRIMARY KEY (id), + INDEX (account), + INDEX (date_submitted) +); + +---- + +-- Registration for a specific event +-- Has one or more reg_selected_rate records associated with it +CREATE TABLE {prefix}reg_request_event ( + id INT NOT NULL AUTO_INCREMENT, + reg_request INT NULL, -- Pointer to reg_request table + reg_event INT NULL, -- Pointer to reg_event + event_name TINYTEXT NULL, -- Name of Event so it will always be in the cart data + notes TEXT NULL, -- System operator's notes for this registration request + PRIMARY KEY (id), + INDEX (reg_request), + INDEX (reg_event), + INDEX (reg_time) +); + +---- + +-- A particular reg_class selected +-- Has one or more reg_request_rate records associated with it +CREATE TABLE {prefix}reg_request_class ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event entry + reg_request INT NULL, -- Pointer to the registration request record + reg_request_event INT NULL, -- Pointer to reg_request_event table entry + class INT NULL, -- Pointer to event reg_class table - False (0) if registration class no longer exits + class_name TINYTEXT NULL, -- Name of event class at the time selected + notes TEXT NULL, -- System operator's notes for this registration request + PRIMARY KEY (id), + INDEX (reg_event), + INDEX (reg_time), + INDEX (reg_request_event) +); + +---- + +-- A particular reg_rate selected +-- Has one or more reg_request_registrant records associated with it +CREATE TABLE {prefix}reg_request_rate ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event entry + reg_request INT NULL, -- Pointer to the registration request record + reg_request_event INT NULL, -- Pointer to reg_request_event table entry + reg_request_class INT NULL, -- Pointer to reg_request_class table entry + rate INT NULL, -- Pointer to event reg_rate table - False (0) if registration rate no longer exists + rate_name TINYTEXT NULL, -- Name of event class rate at the time selected + base_rate FLOAT, -- Base rate at time of registration + per_registrant FLOAT, -- Per Registrant Rate at time of registration + registrant_credits TINYINT NULL, -- Number of registrants included in base rate at time of registration + notes TEXT NULL, -- System operator's notes for this registration request + PRIMARY KEY (id), + INDEX (reg_event), + INDEX (reg_time), + INDEX (reg_request_event), + INDEX (reg_request_class) +); + +---- + +-- A specific registrant for a selected registration rate +CREATE TABLE {prefix}reg_request_registrant ( + id INT NOT NULL AUTO_INCREMENT, + account INT NULL, -- Pointer to the account entry for the person being registered - False (0) if account no longer exists or registrant account not needed + reg_event INT NULL, -- Pointer to reg_event entry + reg_time INT NULL, -- Pointer reg_time entry + event_datetime DATETIME NULL, -- Date and time of event time selected so it will always be in the cart + reg_request INT NULL, -- Pointer to the registration request record + reg_request_event INT NULL, -- Pointer to reg_request_event table entry + reg_request_class INT NULL, -- Pointer to reg_request_class table entry + reg_request_rate INT NULL, -- Pointer to reg_request_rate table entry + fname TINYTEXT NULL, -- First name of registrant at the time of selection + lname TINYTEXT NULL, -- Last name of registrant at the time of selection + notes TEXT NULL, -- System operator's notes for this registration request + PRIMARY KEY (id), + INDEX (account), + INDEX (reg_event), + INDEX (reg_time), + INDEX (reg_request), + INDEX (reg_request_event), + INDEX (reg_request_class), + INDEX (reg_request_rate) +); + +---- + +-- Insert into management table +INSERT INTO {prefix}management + ( + canonical_reg_page, + reg_org_name, + reg_org_short, + reg_org_address, + reg_org_city, + reg_org_state, + reg_org_zip, + reg_org_phone, + reg_org_toll_free, + reg_org_internal_email, + reg_org_from_email, + reg_payment_methods, + reg_proc_methods, + reg_cc_accepts, + reg_authorize_net_login, + reg_authorize_net_key, + reg_authorize_net_test, + reg_authorize_net_conf, + reg_authorize_net_merchant_email, + reg_merchant_solutions_acctid, + reg_merchant_solutions_merchantpin, + reg_merchant_solutions_test, + reg_full_billing_info, + reg_bill_info_req_no_charge, + reg_bill_info_req_comp_code, + reg_bill_info_req_cash, + reg_bill_info_req_check, + reg_bill_info_req_credit_card, + reg_bill_info_req_merchant_call, + reg_medical_info + ) + VALUES + ( + 'registrations', -- reg_canonical_reg_page, + 'Gaslight Media', -- reg_org_name, + 'GLM', -- reg_org_short, + '120 E. Lake St.', -- reg_org_address, + 'Petoskey', -- reg_org_city, + 'MI', -- reg_org_state, + '49770', -- reg_org_zip, + '231-487-0692', -- reg_org_phone, + '800-123-1234', -- reg_org_toll_free, + 'internal@gaslightmedia.com', -- reg_org_internal_email, + 'info@gaslightmedia.com', -- reg_org_from_email, + 0, -- reg_payment_methods, + 0, -- reg_proc_methods, + 0, -- reg_cc_accepts, + '', -- reg_authorize_net_login, + '', -- reg_authorize_net_key, + 1, -- reg_authorize_net_test, + true, -- reg_authorize_net_conf + '', -- reg_authorize_net_merchant_email, + '', -- reg_merchant_solutions_acctid, + '', -- reg_merchant_solutions_merchantpin, + 1, -- reg_merchant_solutions_test, + true, -- reg_full_billing_info, + 0, -- reg_bill_info_req_no_charge, + 0, -- reg_bill_info_req_comp_code, + 0, -- reg_bill_info_req_cash, + 0, -- reg_bill_info_req_check, + 0, -- reg_bill_info_req_credit_card, + 0, -- reg_bill_info_req_merchant_call, + true -- reg_medical_info, + ); + +---- + +-- Insert into settings_terms table +INSERT INTO {prefix}settings_terms + ( + reg_term_registrations_name, + reg_term_registration, + reg_term_registration_cap, + reg_term_registration_plur, + reg_term_registration_plur_cap, + reg_term_register, + reg_term_register_cap, + reg_term_registers, + reg_term_registering, + reg_term_registering_cap, + reg_term_registered, + reg_term_registered_cap, + reg_term_attendee, + reg_term_attendee_cap, + reg_term_attendee_plur, + reg_term_attendee_plur_cap, + reg_term_attending, + reg_term_attended, + reg_term_registered_user, + reg_term_registered_user_cap, + reg_term_registered_user_plur, + reg_term_registered_user_plur_cap, + reg_term_id, + reg_term_id_cap, + reg_term_id_plur, + reg_term_id_plur_cap, + reg_term_password, + reg_term_password_cap, + reg_term_password_plur, + reg_term_password_plur_cap, + reg_term_instructor, + reg_term_instructor_cap, + reg_term_instructor_plur, + reg_term_instructor_plur_cap, + reg_term_payment_code, + reg_term_payment_code_cap, + reg_term_payment_code_plur, + reg_term_payment_code_plur_cap, + reg_term_registration_button, + reg_term_contact_information + ) + VALUES + ( + 'Event Registrations', -- reg_term_registrations_name + 'registration', -- reg_term_registration + 'Registration', -- reg_term_registration_cap + 'registrations', -- reg_term_registration_plur + 'Registrations', -- reg_term_registration_plur_cap + 'register', -- reg_term_registe + 'Register', -- reg_term_register_cap + 'registers', -- reg_term_registers + 'registering', -- reg_term_registering + 'Registering', -- reg_term_registering_cap + 'registered', -- reg_term_registered + 'Registered', -- reg_term_registered_cap + 'attendee', -- reg_term_attendee + 'Attendee', -- reg_term_attendee_cap + 'attendees', -- reg_term_attendee_plur + 'Attendees', -- reg_term_attendee_plur_cap + 'attending', -- reg_term_attending + 'attended', -- reg_term_attended + 'user', -- reg_term_registered_user + 'User', -- reg_term_registered_user_cap + 'users', -- reg_term_registered_user_plur + 'Users', -- reg_term_registered_user_plur_cap + 'ID', -- reg_term_id + 'ID', -- reg_term_id_cap + 'IDs', -- reg_term_id_plur + 'IDs', -- reg_term_id_plur_cap + 'password', -- reg_term_password + 'passwords', -- reg_term_password_cap + 'Password', -- reg_term_password_plur + 'Passwords', -- reg_term_password_plur_cap + 'instructor', -- reg_term_instructor + 'Instructor', -- reg_term_instructor_cap + 'instructors', -- reg_term_instructor_plur + 'Instructors', -- reg_term_instructor_plur_cap + 'payment code', -- reg_term_payment_code + 'Payment code', -- reg_term_payment_code_cap + 'payment codes', -- reg_term_payment_code_plur + 'Payment codes', -- reg_term_payment_code_plur_cap + 'Register for Event', -- reg_term_registration_button + 'Contact Information' -- reg_term_contact_information + ); + +---- + +-- Insert into misc table +INSERT INTO {prefix}misc + ( + reg_bulletin, + cart_page_text, + checkout_page_text, + summary_page_text, + reg_terms, + notify_subject, + notify_text, + instr_notify_subject, + instr_notify_text, + submission_notify_subject, + submission_notify_text, + registrant_notify_subject, + registrant_notify_text, + submission_ack_subject, + submission_ack_text, + registrant_ack_subject, + registrant_ack_text + ) + VALUES + ( + 'Registration Bulletin Text', + 'Text for top of Cart Page', + 'Text for top of Checkout Page', + 'Text for top of Summary Page', + 'Terms and Conditions', + 'Subject of notification to site owner of a registration', + 'Text of notification to site owner of a registration', + 'Subject of notification to instructor of registration', + 'Text for notification to instructor of registration', + 'Subject of notification to person submitting registration', + 'Text of notification to person submitting registration', + 'Subject for notification to registrant', + 'Text for notification to registrant', + 'Subject of acknowledgement to person submitting registration', + 'Text of acknowledgement to person submitting registration', + 'Subject of acknowledgement to registrant', + 'Text of acknowledgement to registrant' + ); diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index 1c44fac..5af2dd2 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -29,7 +29,8 @@ $glmMembersRegistrationsDbVersions = array( '0.0.13' => array('version' => '0.0.13', 'tables' => 20, 'date' => '10/03/2017'), '0.0.14' => array('version' => '0.0.14', 'tables' => 20, 'date' => '10/13/2017'), '0.0.15' => array('version' => '0.0.15', 'tables' => 15, 'date' => '10/18/2017'), - '0.0.16' => array('version' => '0.0.16', 'tables' => 15, 'date' => '10/24/2017') + '0.0.16' => array('version' => '0.0.16', 'tables' => 15, 'date' => '10/24/2017'), + '0.0.17' => array('version' => '0.0.17', 'tables' => 15, 'date' => '11/3/2017') ); diff --git a/setup/databaseScripts/drop_database_V0.0.16.sql b/setup/databaseScripts/drop_database_V0.0.16.sql deleted file mode 100644 index 1451bb2..0000000 --- a/setup/databaseScripts/drop_database_V0.0.16.sql +++ /dev/null @@ -1,24 +0,0 @@ --- Gaslight Media Members Database --- File Created: 12/09/14 15:27:15 --- Database Version: 1.1.23 --- Database Deletion Script --- Note: Tables with DELETE CASCADE must appear before referenced table - -DROP TABLE IF EXISTS - {prefix}management, - {prefix}settings_terms, - {prefix}misc, - {prefix}payment_code, - {prefix}reg_event, - {prefix}reg_time, - {prefix}reg_time_pending, - {prefix}reg_class, - {prefix}reg_rate, - {prefix}account, - {prefix}reg_request, - {prefix}reg_request_event, - {prefix}reg_request_class, - {prefix}reg_request_rate, - {prefix}reg_request_registrant -; - diff --git a/setup/databaseScripts/drop_database_V0.0.17.sql b/setup/databaseScripts/drop_database_V0.0.17.sql new file mode 100644 index 0000000..1451bb2 --- /dev/null +++ b/setup/databaseScripts/drop_database_V0.0.17.sql @@ -0,0 +1,24 @@ +-- Gaslight Media Members Database +-- File Created: 12/09/14 15:27:15 +-- Database Version: 1.1.23 +-- Database Deletion Script +-- Note: Tables with DELETE CASCADE must appear before referenced table + +DROP TABLE IF EXISTS + {prefix}management, + {prefix}settings_terms, + {prefix}misc, + {prefix}payment_code, + {prefix}reg_event, + {prefix}reg_time, + {prefix}reg_time_pending, + {prefix}reg_class, + {prefix}reg_rate, + {prefix}account, + {prefix}reg_request, + {prefix}reg_request_event, + {prefix}reg_request_class, + {prefix}reg_request_rate, + {prefix}reg_request_registrant +; + diff --git a/setup/databaseScripts/update_database_V0.0.17.sql b/setup/databaseScripts/update_database_V0.0.17.sql new file mode 100644 index 0000000..881fc7b --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.17.sql @@ -0,0 +1,13 @@ +-- Gaslight Media Members Database - Registratiuons Add-On +-- File Created: 10/03/17 11:00:00 +-- Database Version: 0.0.16 +-- Database Update From Previous Version Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashes + +ALTER TABLE {prefix}management ADD COLUMN reg_merchant_solutions_conf BOOLEAN; + +---- + +ALTER TABLE {prefix}management ADD COLUMN reg_merchant_solutions_merchant_email TINYTEXT; diff --git a/views/admin/management/registrations.html b/views/admin/management/registrations.html index 94386ad..f809ef7 100644 --- a/views/admin/management/registrations.html +++ b/views/admin/management/registrations.html @@ -136,27 +136,26 @@ - +

Authorize.net

- - - Authorize.net Login: + + Login: {if $regSettings.fieldFail.reg_authorize_net_login}

{$regSettings.fieldFail.reg_authorize_net_login}

{/if} - - Authorize.net Key: + + Key: {if $regSettings.fieldFail.reg_authorize_net_key}

{$regSettings.fieldFail.reg_authorize_net_key}

{/if} - - Authorize.net Test Mode: + + Test Mode: - + Send Confirmation E-Mail - - Authorize.net Merchant Email: + + Merchant Email: {if $regSettings.fieldFail.reg_authorize_net_merchant_email}

{$regSettings.fieldFail.reg_authorize_net_merchant_email}

{/if} - +

Merchant Solutions

- - Merchant Solutions Account ID: + + Account ID: {if $regSettings.fieldFail.reg_merchant_solutions_acctid}

{$regSettings.fieldFail.reg_merchant_solutions_acctid}

{/if} - - Merchant Solutions Merchant PIN: + + Merchant PIN: {if $regSettings.fieldFail.reg_merchant_solutions_merchantpin}

{$regSettings.fieldFail.reg_merchant_solutions_merchantpin}

{/if} - - Merchant Solutions Test Mode: + + Test Mode: + + Send Confirmation E-Mail + + + + + + Merchant Email: + + + {if $regSettings.fieldFail.reg_merchant_solutions_merchant_email}

{$regSettings.fieldFail.reg_merchant_solutions_merchant_email}

{/if} + +

Billing Information Fields

@@ -292,4 +304,39 @@ + + {include file='admin/management/footer.html'} \ No newline at end of file diff --git a/views/front/registrations/checkout.html b/views/front/registrations/checkout.html index 549d72d..2772ed1 100644 --- a/views/front/registrations/checkout.html +++ b/views/front/registrations/checkout.html @@ -11,8 +11,8 @@ {/if} -{if $haveCart} -
+{if $haveCart} + See summary of registration request and charges below @@ -108,7 +108,7 @@

Billing Information

-
 Same as Account Information
+
 Same as Account Information
First Name:
@@ -174,55 +174,96 @@

Payment Information

- {if $payMethods.{$payMethodsNumb.NoCharge}.default} -
{$payMethods.{$payMethodsNumb.NoCharge}.name}
+ {$pm = $payMethodsNumb.NoCharge} + {if $payMethods.{$pm}.default} +
+
+

*** No Charge ****

+
{/if} - {if $payMethods.{$payMethodsNumb.CompCode}.default} -
{$payMethods.{$payMethodsNumb.CompCode}.name}
+ {$pm = $payMethodsNumb.CompCode} + {if $payMethods.{$pm}.default} +
+
+
+
Enter code:
+
+ +
+
+
{/if} - {if $payMethods.{$payMethodsNumb.Cash}.default} -
{$payMethods.{$payMethodsNumb.Cash}.name}
+ {$pm = $payMethodsNumb.Cash} + {if $payMethods.{$pm}.default} +
+
+

*** Cash ****

+
+ {/if} - {if $payMethods.{$payMethodsNumb.Check}.default} -
{$payMethods.{$payMethodsNumb.Check}.name}
+ {$pm = $payMethodsNumb.Check} + {if $payMethods.{$pm}.default} +
+
+

*** No Check ****

+
{/if} - {if $payMethods.{$payMethodsNumb.CallFromMerchant}.default} -
{$payMethods.{$payMethodsNumb.CallFromMerchant}.name}
+ {$pm = $payMethodsNumb.CallFromMerchant} + {if $payMethods.{$pm}.default} +
+
+

*** Call From Merchant ****

+
{/if} - {if $payMethods.{$payMethodsNumb.CreditCard}.default} -
{$payMethods.{$payMethodsNumb.CreditCard}.name}
-
-
Card Type:
-
- + {$pm = $payMethodsNumb.CreditCard} + {if $payMethods.{$pm}.default} +
+
+
+
Name on Card:
+
+ +
+
+
Card Type:
+
+ +
+
+
+
Card Number:
+
+ +
+
+
+
Card Expiration:
+
+ +
+
+
+
CVV:
+
+ +
+
-
-
Name on Card:
-
-
-
-
Card Number:
-
-
-
-
Card Expiration:
-
-
-
-
CVV:
-
-
{/if} - {if $payMethods.{$payMethodsNumb.PayPal}.default} -
{$payMethods.{$payMethodsNumb.PayPal}.name}
+ {$pm = $payMethodsNumb.PayPal} + {if $payMethods.{$pm}.default} +
+
+

*** Pay Pal ****

+
{/if} @@ -240,18 +281,20 @@

Terms and Conditions (*** Added fields for events ***)

- You must check the boxes below to confirm that you agree to the listed Terms and Conditions for each event. + You must check the boxes below to confirm that you agree to the Terms and Conditions for each event.
{foreach $cart.events as $event} + {if $event.event_terms != ''}
 
{$event.event_name}:
- {$event.event_terms} {$event.id}
+
*** Any added fields go here ***
+ {/if} {/foreach}
@@ -262,17 +305,26 @@
(There is no charge for your request.)
{/if} - {if $cart.blockCheckout} -
-
You have not yet submitted your registration. See above for issues!
-
- {else}
- You have one more step to complete your registration! + You have one more step to complete your registration!
- {/if} + + +
Please wait while we process your registration request. If you don't see a new page, your registration request may not have been processed.
+
+

Something may have gone wrong.

+

+ It may be that your registration request was received and processed and you didn't receive our response yet. + If you still don't see a response in a while, try returning to the cart using the button above. + If still don't see any response, please check your E-Mail to see if you have been sent a confirmation. +

+

+ In any case, we will never process your request more than once. If you can return to the cart, it should say if + your request was recieved and processed. If not, you may try the checkout process again or come back later. +

+

Registration Summary

@@ -312,8 +364,8 @@
{$registrant.fname} {$registrant.lname} {$registrant.event_time} - {if $registrant.registrantDiscount > 0} - {$registrant.registrantDiscount|number_format:2} + {if $registrant.registrantDiscounts > 0} + {$registrant.registrantDiscounts|number_format:2} {else}   {/if} @@ -349,3 +401,69 @@ + + \ No newline at end of file