Removed abaval.php and ccval.php, because functions in these files moved to localfuncs.php.
+++ /dev/null
-<?php // $Id$
-
-/**
- * Validates the supplied ABA number
- * using a simple mod 10 check digit routine.
- *
- * @param string $aba Bank ID
- * @return bool true ABA is valid, false otherwise
- */
-function ABAVal($aba)
-{
- if (ereg("^[0-9]{9}$", $aba)) {
- $n = 0;
- for($i = 0; $i < 9; $i += 3) {
- $n += (substr($aba, $i, 1) * 3) +
- (substr($aba, $i + 1, 1) * 7) +
- (substr($aba, $i + 2, 1));
- }
- if ($n != 0 and $n % 10 == 0) {
- return true;
- }
- }
- return false;
-}
-
-?>
define('AN_REASON_NOACHTYPE2', 246);
require_once($CFG->dirroot.'/enrol/authorize/const.php');
+require_once($CFG->dirroot.'/enrol/authorize/localfuncs.php');
require_once($CFG->dirroot.'/enrol/authorize/enrol.php');
/**
$order->settletime = authorize_getsettletime(time());
}
if (! update_record('enrol_authorize', $order)) {
- enrolment_plugin_authorize::email_to_admin("Error while trying to update data " .
+ email_to_admin("Error while trying to update data " .
"in table enrol_authorize. Please edit manually this record: ID=$order->id.", $order);
}
break;
$extra->settletime = authorize_getsettletime(time());
unset($extra->sum); // this is not used in refunds table.
if (! $extra->id = insert_record('enrol_authorize_refunds', $extra)) {
- enrolment_plugin_authorize::email_to_admin("Error while trying to insert data " .
+ email_to_admin("Error while trying to insert data " .
"into table enrol_authorize_refunds. Please add manually this record:", $extra);
}
break;
$order->status = AN_STATUS_VOID;
// don't update order->settletime
if (! update_record($tableupdate, $order)) {
- enrolment_plugin_authorize::email_to_admin("Error while trying to update data " .
+ email_to_admin("Error while trying to update data " .
"in table $tableupdate. Please edit manually this record: ID=$order->id.", $order);
}
break;
case AN_REASON_NOCCTYPE2:
{
if (!empty($cctype)) {
- $ccaccepts = enrolment_plugin_authorize::get_list_of_creditcards();
+ $ccaccepts = get_list_of_creditcards();
unset($ccaccepts[$cctype]);
set_config('an_acceptccs', implode(',', array_keys($ccaccepts)));
- enrolment_plugin_authorize::email_to_admin("$message ($cctype)" .
+ email_to_admin("$message ($cctype)" .
"This is new config(an_acceptccs):", $ccaccepts);
}
break;
case AN_REASON_NOACH:
{
set_config('an_acceptmethods', AN_METHOD_CC);
- enrolment_plugin_authorize::email_to_admin("$message " .
+ email_to_admin("$message " .
"This is new config(an_acceptmethods):", array(AN_METHOD_CC));
break;
}
+++ /dev/null
-<?php // $Id$
-/************************************************************************
-*
-* CCVal - Credit Card Validation function.
-*
-* Copyright (c) 1999, 2003 Holotech Enterprises. All rights reserved.
-* You may freely modify and use this function for your own purposes. You
-* may freely distribute it, without modification and with this notice
-* and entire header intact.
-*
-* This function accepts a credit card number and, optionally, a code for
-* a credit card name. If a Name code is specified, the number is checked
-* against card-specific criteria, then validated with the Luhn Mod 10
-* formula. Otherwise it is only checked against the formula. Valid name
-* codes are:
-*
-* mcd - Master Card
-* vis - Visa
-* amx - American Express
-* dsc - Discover
-* dnc - Diners Club
-* jcb - JCB
-* swi - Switch
-* dlt - Delta
-* enr - EnRoute
-*
-* You can also optionally specify an expiration date in the formay mmyy.
-* If the validation fails on the date, the function returns 0. If it
-* fails on the number validation, it returns false.
-*
-* A description of the criteria used in this function can be found at
-* http://www.paylib.net/ccval.html. If you have any questions or
-* comments, please direct them to ccval@holotech.net
-*
-* Alan Little
-* Holotech Enterprises
-* http://www.holotech.net/
-* August 2003
-*
-************************************************************************/
-
-function CCVal($Num, $Name = "n/a", $Exp = "")
-{
- // Check the expiration date first
- if (strlen($Exp))
- {
- $Month = substr($Exp, 0, 2);
- $Year = substr($Exp, -2);
- $WorkDate = "$Month/01/$Year";
- $WorkDate = strtotime($WorkDate);
- $LastDay = date("t", $WorkDate);
- $Expires = strtotime("$Month/$LastDay/$Year 11:59:59");
- if ($Expires < time()) return 0;
- }
-
- // Innocent until proven guilty
- $GoodCard = true;
-
- // Get rid of any non-digits
- $Num = ereg_replace("[^0-9]", "", $Num);
-
- // Perform card-specific checks, if applicable
- switch ($Name)
- {
- case "mcd" :
- $GoodCard = ereg("^5[1-5].{14}$", $Num);
- break;
-
- case "vis" :
- $GoodCard = ereg("^4.{15}$|^4.{12}$", $Num);
- break;
-
- case "amx" :
- $GoodCard = ereg("^3[47].{13}$", $Num);
- break;
-
- case "dsc" :
- $GoodCard = ereg("^6011.{12}$", $Num);
- break;
-
- case "dnc" :
- $GoodCard = ereg("^30[0-5].{11}$|^3[68].{12}$", $Num);
- break;
-
- case "jcb" :
- $GoodCard = ereg("^3.{15}$|^2131|1800.{11}$", $Num);
- break;
-
- case "dlt" :
- $GoodCard = ereg("^4.{15}$", $Num);
- break;
-
- case "swi" :
- $GoodCard = ereg("^[456].{15}$|^[456].{17,18}$", $Num);
- break;
-
- case "enr" :
- $GoodCard = ereg("^2014.{11}$|^2149.{11}$", $Num);
- break;
- }
-
- // The Luhn formula works right to left, so reverse the number.
- $Num = strrev($Num);
- $Total = 0;
-
- for ($x=0; $x < strlen($Num); $x++)
- {
- $digit = substr($Num, $x, 1);
-
- // If it's an odd digit, double it
- if ($x/2 != floor($x/2)) {
- $digit *= 2;
-
- // If the result is two digits, add them
- if (strlen($digit) == 2)
- $digit = substr($digit, 0, 1) + substr($digit, 1, 1);
- }
- // Add the current digit, doubled and added if applicable, to the Total
- $Total += $digit;
- }
-
- // If it passed (or bypassed) the card-specific check and the Total is
- // evenly divisible by 10, it's cool!
- return ($GoodCard && $Total % 10 == 0);
-}
-?>
}
if (!isset($frm->acceptmethods)) {
- $frm->acceptmethods = enrolment_plugin_authorize::get_list_of_payment_methods();
+ $frm->acceptmethods = get_list_of_payment_methods();
$CFG->an_acceptmethods = implode(',', $frm->acceptmethods);
}
if (!isset($frm->acceptccs)) {
- $frm->acceptccs = array_keys(enrolment_plugin_authorize::get_list_of_creditcards());
+ $frm->acceptccs = array_keys(get_list_of_creditcards());
$CFG->an_acceptccs = implode(',', $frm->acceptccs);
}
<tr valign="top">
<td align="right">an_acceptmethods:</td>
<td><?php print_string("adminacceptmethods", "enrol_authorize") ?><br /><?php
- $allpaymentmethods = enrolment_plugin_authorize::get_list_of_payment_methods(true);
- $paymentmethodsenabled = enrolment_plugin_authorize::get_list_of_payment_methods();
+ $allpaymentmethods = get_list_of_payment_methods(true);
+ $paymentmethodsenabled = get_list_of_payment_methods();
foreach ($allpaymentmethods as $key) {
print_checkbox('acceptmethods[]', $key, in_array($key, $paymentmethodsenabled), get_string('method'.strtolower($key),'enrol_authorize')); echo "<br />\n";
}
<tr valign="top">
<td align="right">an_acceptccs:</td>
<td><?php print_string("adminacceptccs", "enrol_authorize") ?><br /><?php
- $allccs = enrolment_plugin_authorize::get_list_of_creditcards(true);
+ $allccs = get_list_of_creditcards(true);
foreach ($allccs as $key => $val) {
print_checkbox('acceptccs[]', $key, stristr($CFG->an_acceptccs, $key) !== false, $val); echo "<br />\n";
}
<?php // $Id$
/// Prevent double paid
- enrolment_plugin_authorize::prevent_double_paid($course);
+ prevent_double_paid($course);
/// Get payment methods enabled and use the first method as default payment method
- $paymentmethodsenabled = enrolment_plugin_authorize::get_list_of_payment_methods(); // methods enabled
+ $paymentmethodsenabled = get_list_of_payment_methods(); // methods enabled
$paymentmethod = optional_param('paymentmethod', $paymentmethodsenabled[0], PARAM_ALPHA); // user's payment preference
if (!in_array($paymentmethod, $paymentmethodsenabled)) {
}
}
- $curcost = enrolment_plugin_authorize::get_course_cost($course);
+ $curcost = get_course_cost($course);
$userfirstname = empty($form->ccfirstname) ? $USER->firstname : $form->ccfirstname;
$userlastname = empty($form->cclastname) ? $USER->lastname : $form->cclastname;
$useraddress = empty($form->ccaddress) ? $USER->address : $form->ccaddress;
<tr>
<td align="right"><?php print_string("cctype", "enrol_authorize") ?>: </td>
<td align="left"><?php
- choose_from_menu(enrolment_plugin_authorize::get_list_of_creditcards(), 'cctype', $form->cctype);
+ choose_from_menu(get_list_of_creditcards(), 'cctype', $form->cctype);
if (!empty($classreference->authorizeerrors['cctype'])) { formerr($classreference->authorizeerrors['cctype']); }
?>
</td>
}
}
- $curcost = enrolment_plugin_authorize::get_course_cost($course);
+ $curcost = get_course_cost($course);
$userfirstname = empty($form->firstname) ? $USER->firstname : $form->firstname;
$userlastname = empty($form->lastname) ? $USER->lastname : $form->lastname;
?>
global $course;
if ($currentmethod == AN_METHOD_CC) {
- $otheravailable = in_array(AN_METHOD_ECHECK, enrolment_plugin_authorize::get_list_of_payment_methods());
+ $otheravailable = in_array(AN_METHOD_ECHECK, get_list_of_payment_methods());
$url = 'enrol.php?id='.$course->id.'&paymentmethod='.AN_METHOD_ECHECK;
$stringtofetch = 'usingecheckmethod';
}
else {
- $otheravailable = in_array(AN_METHOD_CC, enrolment_plugin_authorize::get_list_of_payment_methods());
+ $otheravailable = in_array(AN_METHOD_CC, get_list_of_payment_methods());
$url = 'enrol.php?id='.$course->id.'&paymentmethod='.AN_METHOD_CC;
$stringtofetch = 'usingccmethod';
}
require_once($CFG->dirroot.'/enrol/enrol.class.php');
require_once($CFG->dirroot.'/enrol/authorize/const.php');
+require_once($CFG->dirroot.'/enrol/authorize/localfuncs.php');
/**
- * enrolment_plugin_authorize
- *
+ * Authorize.net Payment Gateway plugin
*/
class enrolment_plugin_authorize
{
function print_entry($course) {
global $CFG, $USER, $form;
- $zerocost = enrolment_plugin_authorize::zero_cost($course);
+ $zerocost = zero_cost($course);
if ($zerocost) {
$manual = enrolment_factory::factory('manual');
if (!empty($this->errormsg)) {
print_simple_box_start('center');
if (isguest()) {
- $curcost = enrolment_plugin_authorize::get_course_cost($course);
+ $curcost = get_course_cost($course);
echo '<div align="center">';
echo '<p>'.get_string('paymentrequired').'</p>';
echo '<p><b>'.get_string('cost').": $curcost[currency] $curcost[cost]".'</b></p>';
{
global $CFG;
- if (enrolment_plugin_authorize::zero_cost($course) or
+ if (zero_cost($course) or
(!empty($course->password) and !empty($form->password))) { // MANUAL ENROLMENT
$manual = enrolment_factory::factory('manual');
$manual->check_entry($form, $course);
}
}
else { // AUTHORIZE.NET ENROLMENT
- $paymentmethodsenabled = enrolment_plugin_authorize::get_list_of_payment_methods();
+ $paymentmethodsenabled = get_list_of_payment_methods();
if (in_array(AN_METHOD_CC, $paymentmethodsenabled) and
!empty($form->ccsubmit) and
- $this->validate_cc_form($form)) {
+ validate_cc_form($form, $this->authorizeerrors)) {
$this->cc_submit($form, $course);
}
elseif (in_array(AN_METHOD_ECHECK, $paymentmethodsenabled) and
!empty($form->echecksubmit) and
- $this->validate_echeck_form($form)) {
+ validate_echeck_form($form, $this->authorizeerrors)) {
$this->echeck_submit($form, $course);
}
}
global $CFG, $USER, $SESSION;
require_once('authorizenetlib.php');
- enrolment_plugin_authorize::prevent_double_paid($course);
+ prevent_double_paid($course);
$useripno = getremoteaddr();
- $curcost = enrolment_plugin_authorize::get_course_cost($course);
+ $curcost = get_course_cost($course);
$exp_date = sprintf("%02d", $form->ccexpiremm) . $form->ccexpireyyyy;
// NEW CC ORDER
$order->currency = $curcost['currency'];
$order->id = insert_record("enrol_authorize", $order);
if (!$order->id) {
- enrolment_plugin_authorize::email_to_admin("Error while trying to insert new data", $order);
+ email_to_admin("Error while trying to insert new data", $order);
$this->authorizeerrors['header'] = "Insert record error. Admin has been notified!";
return;
}
$action = $an_review ? AN_ACTION_AUTH_ONLY : AN_ACTION_AUTH_CAPTURE;
$success = authorize_action($order, $message, $extra, $action, $form->cctype);
if (!$success) {
- enrolment_plugin_authorize::email_to_admin($message, $order);
+ email_to_admin($message, $order);
$this->authorizeerrors['header'] = $message;
return;
}
}
}
} else {
- enrolment_plugin_authorize::email_to_admin("Error while trying to enrol " .
+ email_to_admin("Error while trying to enrol " .
fullname($USER) . " in '$course->fullname'", $order);
}
global $CFG, $USER, $SESSION;
require_once('authorizenetlib.php');
- enrolment_plugin_authorize::prevent_double_paid($course);
+ prevent_double_paid($course);
$useripno = getremoteaddr();
- $curcost = enrolment_plugin_authorize::get_course_cost($course);
+ $curcost = get_course_cost($course);
// NEW ECHECK ORDER
$timenow = time();
$order->currency = $curcost['currency'];
$order->id = insert_record("enrol_authorize", $order);
if (!$order->id) {
- enrolment_plugin_authorize::email_to_admin("Error while trying to insert new data", $order);
+ email_to_admin("Error while trying to insert new data", $order);
$this->authorizeerrors['header'] = "Insert record error. Admin has been notified!";
return;
}
$message = ''; // 2 actions only for echecks: auth_capture and credit
$success = authorize_action($order, $message, $extra, AN_ACTION_AUTH_CAPTURE);
if (!$success) {
- enrolment_plugin_authorize::email_to_admin($message, $order);
+ email_to_admin($message, $order);
$this->authorizeerrors['header'] = $message;
return;
}
}
}
} else {
- enrolment_plugin_authorize::email_to_admin("Error while trying to enrol " .
+ email_to_admin("Error while trying to enrol " .
fullname($USER) . " in '$course->fullname'", $order);
}
redirect($destination);
}
- function validate_cc_form($form)
- {
- global $CFG;
- require_once('ccval.php');
-
- if (empty($form->cc)) {
- $this->authorizeerrors['cc'] = get_string('missingcc', 'enrol_authorize');
- }
- if (empty($form->ccexpiremm) || empty($form->ccexpireyyyy)) {
- $this->authorizeerrors['ccexpire'] = get_string('missingccexpire', 'enrol_authorize');
- }
- else {
- $expdate = sprintf("%02d", intval($form->ccexpiremm)) . $form->ccexpireyyyy;
- $validcc = CCVal($form->cc, $form->cctype, $expdate);
- if (!$validcc) {
- if ($validcc === 0) {
- $this->authorizeerrors['ccexpire'] = get_string('ccexpired', 'enrol_authorize');
- }
- else {
- $this->authorizeerrors['cc'] = get_string('ccinvalid', 'enrol_authorize');
- }
- }
- }
-
- if (empty($form->ccfirstname) || empty($form->cclastname)) {
- $this->authorizeerrors['ccfirstlast'] = get_string('missingfullname');
- }
-
- if (empty($form->cvv) || !is_numeric($form->cvv)) {
- $this->authorizeerrors['cvv'] = get_string('missingcvv', 'enrol_authorize');
- }
-
- if (empty($form->cctype) or
- !in_array($form->cctype, array_keys(enrolment_plugin_authorize::get_list_of_creditcards()))) {
- $this->authorizeerrors['cctype'] = get_string('missingcctype', 'enrol_authorize');
- }
-
- if (!empty($CFG->an_avs)) {
- if (empty($form->ccaddress)) {
- $this->authorizeerrors['ccaddress'] = get_string('missingaddress', 'enrol_authorize');
- }
- if (empty($form->cccity)) {
- $this->authorizeerrors['cccity'] = get_string('missingcity');
- }
- if (empty($form->cccountry)) {
- $this->authorizeerrors['cccountry'] = get_string('missingcountry');
- }
- }
- if (empty($form->cczip) || !is_numeric($form->cczip)) {
- $this->authorizeerrors['cczip'] = get_string('missingzip', 'enrol_authorize');
- }
-
- if (!empty($this->authorizeerrors)) {
- $this->authorizeerrors['header'] = get_string('someerrorswerefound');
- return false;
- }
-
- return true;
- }
-
- function validate_echeck_form($form)
- {
- global $CFG;
- require_once('abaval.php');
-
- if (empty($form->abacode) || !is_numeric($form->abacode)) {
- $this->authorizeerrors['abacode'] = get_string('missingaba', 'enrol_authorize');
- }
- elseif (!ABAVal($form->abacode)) {
- $this->authorizeerrors['abacode'] = get_string('invalidaba', 'enrol_authorize');
- }
-
- if (empty($form->accnum) || !is_numeric($form->accnum)) {
- $this->authorizeerrors['accnum'] = get_string('invalidaccnum', 'enrol_authorize');
- }
-
- if (empty($form->acctype) || !in_array($form->acctype, array('CHECKING','BUSINESSCHECKING','SAVINGS'))) {
- $this->authorizeerrors['acctype'] = get_string('invalidacctype', 'enrol_authorize');
- }
-
- if (empty($form->bankname)) {
- $this->authorizeerrors['bankname'] = get_string('missingbankname', 'enrol_authorize');
- }
-
- if (empty($form->firstname) || empty($form->lastname)) {
- $this->authorizeerrors['firstlast'] = get_string('missingfullname');
- }
-
- if (!empty($this->authorizeerrors)) {
- $this->authorizeerrors['header'] = get_string('someerrorswerefound');
- return false;
- }
-
- return true;
- }
-
/**
* Gets access icons.
$manual = enrolment_factory::factory('manual');
$str = $manual->get_access_icons($course);
- $curcost = enrolment_plugin_authorize::get_course_cost($course);
+ $curcost = get_course_cost($course);
if (abs($curcost['cost']) > 0.00) {
$strrequirespayment = get_string("requirespayment");
{
global $CFG;
- if (! enrolment_plugin_authorize::check_openssl_loaded()) {
+ if (! check_openssl_loaded()) {
notify('PHP must be compiled with SSL support (--with-openssl)');
}
set_config('an_test', optional_param('an_test', 0, PARAM_BOOL));
set_config('an_referer', optional_param('an_referer', 'http://', PARAM_URL));
- $acceptmethods = optional_param('acceptmethods',
- enrolment_plugin_authorize::get_list_of_payment_methods(),
- PARAM_ALPHA);
+ $acceptmethods = optional_param('acceptmethods', get_list_of_payment_methods(), PARAM_ALPHA);
set_config('an_acceptmethods', implode(',', $acceptmethods));
- $acceptccs = optional_param('acceptccs',
- array_keys(enrolment_plugin_authorize::get_list_of_creditcards()),
- PARAM_ALPHA);
+ $acceptccs = optional_param('acceptccs', array_keys(get_list_of_creditcards()), PARAM_ALPHA);
set_config('an_acceptccs', implode(',', $acceptccs));
$cutoff_hour = optional_param('an_cutoff_hour', 0, PARAM_INT);
$captureday = ($captureday > 29) ? 29 : (($captureday < 0) ? 0 : $captureday);
$emailexpired = ($emailexpired > 5) ? 5 : (($emailexpired < 0) ? 0 : $emailexpired);
- $mconfig = get_config('enrol/authorize');
- if ((!empty($reviewval)) &&
- ($captureday > 0 || $emailexpired > 0) &&
- (time() - intval($mconfig->an_lastcron) > 3600 * 24)) {
- return false;
+ if (!empty($reviewval) && ($captureday > 0 || $emailexpired > 0)) {
+ $mconfig = get_config('enrol/authorize');
+ if (time() - intval($mconfig->an_lastcron) > 3600 * 24) {
+ return false;
+ }
}
set_config('an_review', $reviewval);
// https and openssl library is required
if ((substr($CFG->wwwroot, 0, 5) !== 'https' and empty($CFG->loginhttps)) or
- !enrolment_plugin_authorize::check_openssl_loaded()) {
+ !check_openssl_loaded()) {
return false;
}
return true;
}
- /**
- * Whether a course cost is smaller than 0.01
- *
- * @param object $course Course information
- * @return bool true if the course is free cost
- * @static
- */
- function zero_cost($course) {
- $curcost = enrolment_plugin_authorize::get_course_cost($course);
- return (abs($curcost['cost']) < 0.01);
- }
-
-
- /**
- * Gets course cost
- *
- * @param object $course
- * @return array cost=>'cost', currency=>'currency'
- * @static
- */
- function get_course_cost($course)
- {
- global $CFG;
-
- $cost = (float)0;
- $currency = (!empty($course->currency))
- ? $course->currency :( empty($CFG->enrol_currency)
- ? 'USD' : $CFG->enrol_currency );
-
- if (!empty($course->cost)) {
- $cost = (float)(((float)$course->cost) < 0) ? $CFG->enrol_cost : $course->cost;
- }
-
- $cost = format_float($cost, 2);
- $ret = array('cost' => $cost, 'currency' => $currency);
-
- return $ret;
- }
-
- /**
- * Sends email to main admin.
- * FIXME: Admin ROLES
- *
- * @param string $subject
- * @param mixed $data
- * @static
- */
- function email_to_admin($subject, $data)
- {
- global $SITE;
-
- $admin = get_admin();
- $data = (array)$data;
-
- $message = "$SITE->fullname: Transaction failed.\n\n$subject\n\n";
- $message .= print_r($data, true);
- email_to_user($admin, $admin, "$SITE->fullname: Authorize.net ERROR", $message);
- }
-
- /**
- * prevent_double_paid (static method)
- *
- * @param object $course
- * @static
- */
- function prevent_double_paid($course)
- {
- global $CFG, $SESSION, $USER;
-
- $status = empty($CFG->an_test) ? AN_STATUS_AUTH : AN_STATUS_NONE;
-
- if ($rec=get_record('enrol_authorize','userid',$USER->id,'courseid',$course->id,'status',$status,'id')) {
- $a = new stdClass;
- $a->orderid = $rec->id;
- $a->url = "$CFG->wwwroot/enrol/authorize/index.php?order=$a->orderid";
- redirect($a->url, get_string("paymentpending", "enrol_authorize", $a), '10');
- return;
- }
- if (isset($SESSION->ccpaid)) {
- unset($SESSION->ccpaid);
- redirect($CFG->wwwroot . '/login/logout.php');
- return;
- }
- }
-
- /**
- * check_openssl_loaded (static method)
- *
- * @return bool
- * @static
- */
- function check_openssl_loaded() {
- return extension_loaded('openssl');
- }
-
- /**
- * Gets list of credits cards
- *
- * @param bool $getall, true get all of types, false config values
- * @return array, Key => Value
- * @static
- */
- function get_list_of_creditcards($getall = false)
- {
- global $CFG;
-
- $alltypes = array(
- 'mcd' => 'Master Card',
- 'vis' => 'Visa',
- 'amx' => 'American Express',
- 'dsc' => 'Discover',
- 'dnc' => 'Diners Club',
- 'jcb' => 'JCB',
- 'swi' => 'Switch',
- 'dlt' => 'Delta',
- 'enr' => 'EnRoute'
- );
-
- if ($getall or empty($CFG->an_acceptccs)) {
- return $alltypes;
- }
-
- $ret = array();
- $ccs = explode(',', $CFG->an_acceptccs);
- foreach ($ccs as $key) {
- $ret[$key] = $alltypes[$key];
- }
- return $ret;
- }
-
- /**
- * Gets lists of payment methods (CC,ECHECK)
- *
- * @param bool $getall, get all of types, false config values
- * @return array, Key only
- * @static
- */
- function get_list_of_payment_methods($getall = false)
- {
- global $CFG;
-
- if ($getall) {
- return array(AN_METHOD_CC, AN_METHOD_ECHECK);
- }
- elseif (empty($CFG->an_acceptmethods)) {
- return array(AN_METHOD_CC); // default
- }
- else {
- return explode(',', $CFG->an_acceptmethods);
- }
- }
-
-
/**
* This function is run by admin/cron.php every time if admin has enabled this plugin.
*
if (empty($CFG->an_review) or
(!empty($CFG->an_test)) or
(intval($CFG->an_capture_day) < 1) or
- (!enrolment_plugin_authorize::check_openssl_loaded())) {
+ (!check_openssl_loaded())) {
mtrace("disabled");
return; // order review disabled or test mode or manual capture or openssl wasn't loaded.
}
--- /dev/null
+<?php // $Id$
+
+function get_course_cost($course)
+{
+ global $CFG;
+
+ $cost = (float)0;
+ $currency = (!empty($course->currency))
+ ? $course->currency :( empty($CFG->enrol_currency)
+ ? 'USD' : $CFG->enrol_currency );
+
+ if (!empty($course->cost)) {
+ $cost = (float)(((float)$course->cost) < 0) ? $CFG->enrol_cost : $course->cost;
+ }
+
+ $cost = format_float($cost, 2);
+ $ret = array(
+ 'cost' => $cost,
+ 'currency' => $currency
+ );
+
+ return $ret;
+}
+
+function zero_cost($course) {
+ $curcost = get_course_cost($course);
+ return (abs($curcost['cost']) < 0.01);
+}
+
+function prevent_double_paid($course)
+{
+ global $CFG, $SESSION, $USER;
+
+ $status = empty($CFG->an_test) ? AN_STATUS_AUTH : AN_STATUS_NONE;
+
+ if ($rec=get_record('enrol_authorize','userid',$USER->id,'courseid',$course->id,'status',$status,'id')) {
+ $a = new stdClass;
+ $a->orderid = $rec->id;
+ $a->url = "$CFG->wwwroot/enrol/authorize/index.php?order=$a->orderid";
+ redirect($a->url, get_string("paymentpending", "enrol_authorize", $a), '10');
+ return;
+ }
+ if (isset($SESSION->ccpaid)) {
+ unset($SESSION->ccpaid);
+ redirect($CFG->wwwroot . '/login/logout.php');
+ return;
+ }
+}
+
+function get_list_of_creditcards($getall = false)
+{
+ global $CFG;
+
+ $alltypes = array(
+ 'mcd' => 'Master Card',
+ 'vis' => 'Visa',
+ 'amx' => 'American Express',
+ 'dsc' => 'Discover',
+ 'dnc' => 'Diners Club',
+ 'jcb' => 'JCB',
+ 'swi' => 'Switch',
+ 'dlt' => 'Delta',
+ 'enr' => 'EnRoute'
+ );
+
+ if ($getall or empty($CFG->an_acceptccs)) {
+ return $alltypes;
+ }
+
+ $ret = array();
+ $ccs = explode(',', $CFG->an_acceptccs);
+ foreach ($ccs as $key) {
+ $ret[$key] = $alltypes[$key];
+ }
+ return $ret;
+}
+
+function get_list_of_payment_methods($getall = false)
+{
+ global $CFG;
+
+ if ($getall) {
+ return array(AN_METHOD_CC, AN_METHOD_ECHECK);
+ }
+ elseif (empty($CFG->an_acceptmethods)) {
+ return array(AN_METHOD_CC); // default
+ }
+ else {
+ return explode(',', $CFG->an_acceptmethods);
+ }
+}
+
+function ABAVal($aba)
+{
+ if (ereg("^[0-9]{9}$", $aba)) {
+ $n = 0;
+ for($i = 0; $i < 9; $i += 3) {
+ $n += (substr($aba, $i, 1) * 3) +
+ (substr($aba, $i + 1, 1) * 7) +
+ (substr($aba, $i + 2, 1));
+ }
+ if ($n != 0 and $n % 10 == 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function CCVal($Num, $Name = "n/a", $Exp = "")
+{
+ // Check the expiration date first
+ if (strlen($Exp))
+ {
+ $Month = substr($Exp, 0, 2);
+ $Year = substr($Exp, -2);
+ $WorkDate = "$Month/01/$Year";
+ $WorkDate = strtotime($WorkDate);
+ $LastDay = date("t", $WorkDate);
+ $Expires = strtotime("$Month/$LastDay/$Year 11:59:59");
+ if ($Expires < time()) return 0;
+ }
+
+ // Innocent until proven guilty
+ $GoodCard = true;
+
+ // Get rid of any non-digits
+ $Num = ereg_replace("[^0-9]", "", $Num);
+
+ // Perform card-specific checks, if applicable
+ switch ($Name)
+ {
+ case "mcd" :
+ $GoodCard = ereg("^5[1-5].{14}$", $Num);
+ break;
+
+ case "vis" :
+ $GoodCard = ereg("^4.{15}$|^4.{12}$", $Num);
+ break;
+
+ case "amx" :
+ $GoodCard = ereg("^3[47].{13}$", $Num);
+ break;
+
+ case "dsc" :
+ $GoodCard = ereg("^6011.{12}$", $Num);
+ break;
+
+ case "dnc" :
+ $GoodCard = ereg("^30[0-5].{11}$|^3[68].{12}$", $Num);
+ break;
+
+ case "jcb" :
+ $GoodCard = ereg("^3.{15}$|^2131|1800.{11}$", $Num);
+ break;
+
+ case "dlt" :
+ $GoodCard = ereg("^4.{15}$", $Num);
+ break;
+
+ case "swi" :
+ $GoodCard = ereg("^[456].{15}$|^[456].{17,18}$", $Num);
+ break;
+
+ case "enr" :
+ $GoodCard = ereg("^2014.{11}$|^2149.{11}$", $Num);
+ break;
+ }
+
+ // The Luhn formula works right to left, so reverse the number.
+ $Num = strrev($Num);
+ $Total = 0;
+
+ for ($x=0; $x < strlen($Num); $x++)
+ {
+ $digit = substr($Num, $x, 1);
+
+ // If it's an odd digit, double it
+ if ($x/2 != floor($x/2)) {
+ $digit *= 2;
+
+ // If the result is two digits, add them
+ if (strlen($digit) == 2)
+ $digit = substr($digit, 0, 1) + substr($digit, 1, 1);
+ }
+ // Add the current digit, doubled and added if applicable, to the Total
+ $Total += $digit;
+ }
+
+ // If it passed (or bypassed) the card-specific check and the Total is
+ // evenly divisible by 10, it's cool!
+ return ($GoodCard && $Total % 10 == 0);
+}
+
+function validate_cc_form($form, &$err)
+{
+ global $CFG;
+
+ if (empty($form->cc)) {
+ $err['cc'] = get_string('missingcc', 'enrol_authorize');
+ }
+ if (empty($form->ccexpiremm) || empty($form->ccexpireyyyy)) {
+ $err['ccexpire'] = get_string('missingccexpire', 'enrol_authorize');
+ }
+ else {
+ $expdate = sprintf("%02d", intval($form->ccexpiremm)) . $form->ccexpireyyyy;
+ $validcc = CCVal($form->cc, $form->cctype, $expdate);
+ if (!$validcc) {
+ if ($validcc === 0) {
+ $err['ccexpire'] = get_string('ccexpired', 'enrol_authorize');
+ }
+ else {
+ $err['cc'] = get_string('ccinvalid', 'enrol_authorize');
+ }
+ }
+ }
+
+ if (empty($form->ccfirstname) || empty($form->cclastname)) {
+ $err['ccfirstlast'] = get_string('missingfullname');
+ }
+
+ if (empty($form->cvv) || !is_numeric($form->cvv)) {
+ $err['cvv'] = get_string('missingcvv', 'enrol_authorize');
+ }
+
+ if (empty($form->cctype) or !in_array($form->cctype, array_keys(get_list_of_creditcards()))) {
+ $err['cctype'] = get_string('missingcctype', 'enrol_authorize');
+ }
+
+ if (!empty($CFG->an_avs))
+ {
+ if (empty($form->ccaddress)) {
+ $err['ccaddress'] = get_string('missingaddress', 'enrol_authorize');
+ }
+ if (empty($form->cccity)) {
+ $err['cccity'] = get_string('missingcity');
+ }
+ if (empty($form->cccountry)) {
+ $err['cccountry'] = get_string('missingcountry');
+ }
+ }
+
+ if (empty($form->cczip) || !is_numeric($form->cczip)) {
+ $err['cczip'] = get_string('missingzip', 'enrol_authorize');
+ }
+
+ if (!empty($err)) {
+ $err['header'] = get_string('someerrorswerefound');
+ return false;
+ }
+
+ return true;
+}
+
+function validate_echeck_form($form, &$err)
+{
+ global $CFG;
+
+ if (empty($form->abacode) || !is_numeric($form->abacode)) {
+ $err['abacode'] = get_string('missingaba', 'enrol_authorize');
+ }
+ elseif (!ABAVal($form->abacode)) {
+ $err['abacode'] = get_string('invalidaba', 'enrol_authorize');
+ }
+
+ if (empty($form->accnum) || !is_numeric($form->accnum)) {
+ $err['accnum'] = get_string('invalidaccnum', 'enrol_authorize');
+ }
+
+ if (empty($form->acctype) || !in_array($form->acctype, array('CHECKING', 'BUSINESSCHECKING', 'SAVINGS'))) {
+ $err['acctype'] = get_string('invalidacctype', 'enrol_authorize');
+ }
+
+ if (empty($form->bankname)) {
+ $err['bankname'] = get_string('missingbankname', 'enrol_authorize');
+ }
+
+ if (empty($form->firstname) || empty($form->lastname)) {
+ $err['firstlast'] = get_string('missingfullname');
+ }
+
+ if (!empty($err)) {
+ $err['header'] = get_string('someerrorswerefound');
+ return false;
+ }
+
+ return true;
+}
+
+function email_to_admin($subject, $data)
+{
+ global $SITE;
+
+ $admin = get_admin();
+ $data = (array)$data;
+
+ $message = "$SITE->fullname: Transaction failed.\n\n$subject\n\n";
+ $message .= print_r($data, true);
+ email_to_user($admin, $admin, "$SITE->fullname: Authorize.net ERROR", $message);
+}
+
+function check_openssl_loaded()
+{
+ return extension_loaded('openssl');
+}
+
+?>