| [ Index ] |
PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008] |
[Summary view] [Print] [Text view]
1 <?php // $Id: enrol_form.php,v 1.16.2.3 2008/01/14 17:55:43 ethem Exp $ 2 3 require_once($CFG->libdir.'/formslib.php'); 4 5 class enrol_authorize_form extends moodleform 6 { 7 function definition() 8 { 9 global $CFG, $USER; 10 11 $paymentmethodsenabled = get_list_of_payment_methods(); 12 $paymentmethod = optional_param('paymentmethod', $paymentmethodsenabled[0], PARAM_ALPHA); 13 if (!in_array($paymentmethod, $paymentmethodsenabled)) { 14 error("Invalid payment method: $paymentmethod"); 15 } 16 17 $mform =& $this->_form; 18 $course = $this->_customdata['course']; 19 20 $mform->addElement('header', 'general', get_string('paymentrequired')); 21 $othermethodstr = $this->other_method_available($paymentmethod); 22 if ($othermethodstr) { 23 $mform->addElement('static', '', '<div align="right">' . $othermethodstr . '</div>', ''); 24 } 25 26 $mform->addElement('hidden', 'id', $course->id); 27 $mform->setType('id', PARAM_INT); 28 29 $mform->addElement('hidden', 'paymentmethod', $paymentmethod); 30 $mform->setType('paymentmethod', PARAM_ALPHA); 31 32 $firstlastnamestr = (AN_METHOD_CC == $paymentmethod) ? get_string('nameoncard', 'enrol_authorize') : get_string('echeckfirslasttname', 'enrol_authorize'); 33 $firstlastnamegrp = array(); 34 $firstlastnamegrp[] = &$mform->createElement('text', 'firstname', '', 'size="16"'); 35 $firstlastnamegrp[] = &$mform->createElement('text', 'lastname', '', 'size="16"'); 36 $mform->addGroup($firstlastnamegrp, 'firstlastgrp', $firstlastnamestr, ' ', false); 37 $firstlastnamegrprules = array(); 38 $firstlastnamegrprules['firstname'][] = array(get_string('missingfirstname'), 'required', null, 'client'); 39 $firstlastnamegrprules['lastname'][] = array(get_string('missinglastname'), 'required', null, 'client'); 40 $mform->addGroupRule('firstlastgrp', $firstlastnamegrprules); 41 $mform->setType('firstname', PARAM_ALPHANUM); 42 $mform->setType('lastname', PARAM_ALPHANUM); 43 $mform->setDefault('firstname', $USER->firstname); 44 $mform->setDefault('lastname', $USER->lastname); 45 46 if (AN_METHOD_CC == $paymentmethod) 47 { 48 $mform->addElement('passwordunmask', 'cc', get_string('ccno', 'enrol_authorize'), 'size="20"'); 49 $mform->setType('cc', PARAM_ALPHANUM); 50 $mform->setDefault('cc', ''); 51 $mform->addRule('cc', get_string('missingcc', 'enrol_authorize'), 'required', null, 'client'); 52 $mform->addRule('cc', get_string('ccinvalid', 'enrol_authorize'), 'numeric', null, 'client'); 53 54 $monthsmenu = array('' => get_string('choose')); 55 for ($i = 1; $i <= 12; $i++) { 56 $monthsmenu[$i] = userdate(gmmktime(12, 0, 0, $i, 15, 2000), "%B"); 57 } 58 $nowdate = getdate(); 59 $startyear = $nowdate["year"] - 1; 60 $endyear = $startyear + 20; 61 $yearsmenu = array('' => get_string('choose')); 62 for ($i = $startyear; $i < $endyear; $i++) { 63 $yearsmenu[$i] = $i; 64 } 65 $ccexpiregrp = array(); 66 $ccexpiregrp[] = &$mform->createElement('select', 'ccexpiremm', '', $monthsmenu); 67 $ccexpiregrp[] = &$mform->createElement('select', 'ccexpireyyyy', '', $yearsmenu); 68 $mform->addGroup($ccexpiregrp, 'ccexpiregrp', get_string('ccexpire', 'enrol_authorize'), ' ', false); 69 $ccexpiregrprules = array(); 70 $ccexpiregrprules['ccexpiremm'][] = array(get_string('missingccexpire', 'enrol_authorize'), 'required', null, 'client'); 71 $ccexpiregrprules['ccexpireyyyy'][] = array(get_string('missingccexpire', 'enrol_authorize'), 'required', null, 'client'); 72 $mform->addGroupRule('ccexpiregrp', $ccexpiregrprules); 73 $mform->setType('ccexpiremm', PARAM_INT); 74 $mform->setType('ccexpireyyyy', PARAM_INT); 75 $mform->setDefault('ccexpiremm', ''); 76 $mform->setDefault('ccexpireyyyy', ''); 77 78 $creditcardsmenu = array('' => get_string('choose')) + get_list_of_creditcards(); 79 $mform->addElement('select', 'cctype', get_string('cctype', 'enrol_authorize'), $creditcardsmenu); 80 $mform->setType('cctype', PARAM_ALPHA); 81 $mform->addRule('cctype', get_string('missingcctype', 'enrol_authorize'), 'required', null, 'client'); 82 $mform->setDefault('cctype', ''); 83 84 $mform->addElement('text', 'cvv', get_string('ccvv', 'enrol_authorize'), 'size="4"'); 85 $mform->setHelpButton('cvv', array('cvv',get_string('ccvv', 'enrol_authorize'),'enrol/authorize'), true); 86 $mform->setType('cvv', PARAM_ALPHANUM); 87 $mform->setDefault('cvv', ''); 88 $mform->addRule('cvv', get_string('missingcvv', 'enrol_authorize'), 'required', null, 'client'); 89 $mform->addRule('cvv', get_string('missingcvv', 'enrol_authorize'), 'numeric', null, 'client'); 90 91 if (!empty($CFG->an_authcode)) { 92 $ccauthgrp = array(); 93 $ccauthgrp[] = &$mform->createElement('checkbox', 'haveauth', null, get_string('haveauthcode', 'enrol_authorize')); 94 $ccauthgrp[] = &$mform->createElement('static', 'nextline', null, '<br />'); 95 $ccauthgrp[] = &$mform->createElement('text', 'ccauthcode', '', 'size="8"'); 96 $mform->addGroup($ccauthgrp, 'ccauthgrp', get_string('authcode', 'enrol_authorize'), ' ', false); 97 $mform->setHelpButton('ccauthgrp', array('authcode',get_string('authcode', 'enrol_authorize'),'enrol/authorize'), true); 98 99 $ccauthgrprules = array(); 100 $ccauthgrprules['ccauthcode'][] = array(get_string('missingccauthcode', 'enrol_authorize'), 'numeric', null, 'client'); 101 $mform->addGroupRule('ccauthgrp', $ccauthgrprules); 102 $mform->setDefault('haveauth', ''); 103 $mform->setDefault('ccauthcode', ''); 104 } 105 106 if (!empty($CFG->an_avs)) { 107 $mform->addElement('header', '', ' ' . get_string('address'), ''); 108 109 $mform->addElement('text', 'ccaddress', get_string('address'), 'size="30"'); 110 $mform->setType('ccaddress', PARAM_ALPHANUM); 111 $mform->setDefault('ccaddress', $USER->address); 112 $mform->addRule('ccaddress', get_string('missingaddress', 'enrol_authorize'), 'required', null, 'client'); 113 114 $citystategrp = array(); 115 $citystategrp[] = &$mform->createElement('text', 'cccity', '', 'size="14"'); 116 $citystategrp[] = &$mform->createElement('static', 'sep', null, ' - '); 117 $citystategrp[] = &$mform->createElement('text', 'ccstate', '', 'size="8"'); 118 $mform->addGroup($citystategrp, 'citystategrp', get_string('city') . ' - ' . get_string('state'), ' ', false); 119 $citystategrprules = array(); 120 $citystategrprules['cccity'][] = array(get_string('missingcity'), 'required', null, 'client'); 121 $mform->addGroupRule('citystategrp', $citystategrprules); 122 $mform->setType('cccity', PARAM_ALPHANUM); 123 $mform->setType('ccstate', PARAM_ALPHANUM); 124 $mform->setDefault('cccity', $USER->city); 125 $mform->setDefault('ccstate', ''); 126 127 $mform->addElement('select', 'cccountry', get_string('country'), get_list_of_countries()); 128 $mform->addRule('cccountry', get_string('missingcountry'), 'required', null, 'client'); 129 $mform->setType('cccountry', PARAM_ALPHA); 130 $mform->setDefault('cccountry', $USER->country); 131 } 132 else { 133 $mform->addElement('hidden', 'ccstate', ''); 134 $mform->addElement('hidden', 'ccaddress', $USER->address); 135 $mform->addElement('hidden', 'cccity', $USER->city); 136 $mform->addElement('hidden', 'cccountry', $USER->country); 137 } 138 } 139 elseif (AN_METHOD_ECHECK == $paymentmethod) 140 { 141 $mform->addElement('text', 'abacode', get_string('echeckabacode', 'enrol_authorize'), 'size="9" maxlength="9"'); 142 $mform->setHelpButton('abacode', array('aba',get_string('echeckabacode', 'enrol_authorize'),'enrol/authorize'), true); 143 $mform->setType('abacode', PARAM_ALPHANUM); 144 $mform->setDefault('abacode', ''); 145 $mform->addRule('abacode', get_string('missingaba', 'enrol_authorize'), 'required', null, 'client'); 146 $mform->addRule('abacode', get_string('missingaba', 'enrol_authorize'), 'numeric', null, 'client'); 147 148 $mform->addElement('text', 'accnum', get_string('echeckaccnum', 'enrol_authorize'), 'size="20" maxlength="20"'); 149 $mform->setType('accnum', PARAM_ALPHANUM); 150 $mform->setDefault('accnum', ''); 151 $mform->addRule('accnum', get_string('invalidaccnum', 'enrol_authorize'), 'required', null, 'client'); 152 $mform->addRule('accnum', get_string('invalidaccnum', 'enrol_authorize'), 'numeric', null, 'client'); 153 154 $acctypes = array(); 155 $acctypesenabled = get_list_of_bank_account_types(); 156 foreach ($acctypesenabled as $key) { 157 $acctypes[$key] = get_string("echeck".strtolower($key), "enrol_authorize"); 158 } 159 $acctypes = array('' => get_string('choose')) + $acctypes; 160 $mform->addElement('select', 'acctype', get_string('echeckacctype', 'enrol_authorize'), $acctypes); 161 $mform->setType('acctype', PARAM_ALPHA); 162 $mform->addRule('acctype', get_string('invalidacctype', 'enrol_authorize'), 'required', null, 'client'); 163 $mform->setDefault('acctype', ''); 164 165 $mform->addElement('text', 'bankname', get_string('echeckbankname', 'enrol_authorize'), 'size="20" maxlength="50"'); 166 $mform->setType('bankname', PARAM_ALPHANUM); 167 $mform->setDefault('bankname', ''); 168 $mform->addRule('bankname', get_string('missingbankname', 'enrol_authorize'), 'required', null, 'client'); 169 } 170 171 $mform->addElement('text', 'cczip', get_string('zipcode', 'enrol_authorize'), 'size="5"'); 172 $mform->setType('cczip', PARAM_ALPHANUM); 173 $mform->setDefault('cczip', ''); 174 $mform->addRule('cczip', get_string('missingzip', 'enrol_authorize'), 'required', null, 'client'); 175 176 $this->add_action_buttons(false, get_string('sendpaymentbutton', 'enrol_authorize')); 177 } 178 179 function validation($data, $files) 180 { 181 global $CFG; 182 $errors = parent::validation($data, $files); 183 184 if (AN_METHOD_CC == $data['paymentmethod']) 185 { 186 if (!in_array($data['cctype'], array_keys(get_list_of_creditcards()))) { 187 $errors['cctype'] = get_string('missingcctype', 'enrol_authorize'); 188 } 189 190 $expdate = sprintf("%02d", intval($data['ccexpiremm'])) . $data['ccexpireyyyy']; 191 $validcc = $this->validate_cc($data['cc'], $data['cctype'], $expdate); 192 if (!$validcc) { 193 if ($validcc === 0) { 194 $errors['ccexpiregrp'] = get_string('ccexpired', 'enrol_authorize'); 195 } 196 else { 197 $errors['cc'] = get_string('ccinvalid', 'enrol_authorize'); 198 } 199 } 200 201 if (!empty($CFG->an_authcode) && !empty($data['haveauth']) && empty($data['ccauthcode'])) { 202 $errors['ccauthgrp'] = get_string('missingccauthcode', 'enrol_authorize'); 203 } 204 } 205 elseif (AN_METHOD_ECHECK == $data['paymentmethod']) 206 { 207 if (!$this->validate_aba($data['abacode'])) { 208 $errors['abacode'] = get_string('invalidaba', 'enrol_authorize'); 209 } 210 211 if (!in_array($data['acctype'], get_list_of_bank_account_types())) { 212 $errors['acctype'] = get_string('invalidacctype', 'enrol_authorize'); 213 } 214 } 215 216 return $errors; 217 } 218 219 function other_method_available($currentmethod) 220 { 221 $course = $this->_customdata['course']; 222 223 if ($currentmethod == AN_METHOD_CC) { 224 $otheravailable = in_array(AN_METHOD_ECHECK, get_list_of_payment_methods()); 225 $url = 'enrol.php?id='.$course->id.'&paymentmethod='.AN_METHOD_ECHECK; 226 $stringtofetch = 'usingecheckmethod'; 227 } 228 else { 229 $otheravailable = in_array(AN_METHOD_CC, get_list_of_payment_methods()); 230 $url = 'enrol.php?id='.$course->id.'&paymentmethod='.AN_METHOD_CC; 231 $stringtofetch = 'usingccmethod'; 232 } 233 if ($otheravailable) { 234 $a = new stdClass; 235 $a->url = $url; 236 return get_string($stringtofetch, "enrol_authorize", $a); 237 } 238 else { 239 return ''; 240 } 241 } 242 243 function validate_aba($aba) 244 { 245 if (ereg("^[0-9]{9}$", $aba)) { 246 $n = 0; 247 for($i = 0; $i < 9; $i += 3) { 248 $n += (substr($aba, $i, 1) * 3) + (substr($aba, $i + 1, 1) * 7) + (substr($aba, $i + 2, 1)); 249 } 250 if ($n != 0 and $n % 10 == 0) { 251 return true; 252 } 253 } 254 return false; 255 } 256 257 function validate_cc($Num, $Name = "n/a", $Exp = "") 258 { 259 // Check the expiration date first 260 if (strlen($Exp)) 261 { 262 $Month = substr($Exp, 0, 2); 263 $Year = substr($Exp, -2); 264 $WorkDate = "$Month/01/$Year"; 265 $WorkDate = strtotime($WorkDate); 266 $LastDay = date("t", $WorkDate); 267 $Expires = strtotime("$Month/$LastDay/$Year 11:59:59"); 268 if ($Expires < time()) return 0; 269 } 270 271 // Innocent until proven guilty 272 $GoodCard = true; 273 274 // Get rid of any non-digits 275 $Num = ereg_replace("[^0-9]", "", $Num); 276 277 // Perform card-specific checks, if applicable 278 switch ($Name) 279 { 280 case "mcd" : 281 $GoodCard = ereg("^5[1-5].{14}$", $Num); 282 break; 283 284 case "vis" : 285 $GoodCard = ereg("^4.{15}$|^4.{12}$", $Num); 286 break; 287 288 case "amx" : 289 $GoodCard = ereg("^3[47].{13}$", $Num); 290 break; 291 292 case "dsc" : 293 $GoodCard = ereg("^6011.{12}$", $Num); 294 break; 295 296 case "dnc" : 297 $GoodCard = ereg("^30[0-5].{11}$|^3[68].{12}$", $Num); 298 break; 299 300 case "jcb" : 301 $GoodCard = ereg("^3.{15}$|^2131|1800.{11}$", $Num); 302 break; 303 304 case "dlt" : 305 $GoodCard = ereg("^4.{15}$", $Num); 306 break; 307 308 case "swi" : 309 $GoodCard = ereg("^[456].{15}$|^[456].{17,18}$", $Num); 310 break; 311 312 case "enr" : 313 $GoodCard = ereg("^2014.{11}$|^2149.{11}$", $Num); 314 break; 315 } 316 317 // The Luhn formula works right to left, so reverse the number. 318 $Num = strrev($Num); 319 $Total = 0; 320 321 for ($x=0; $x < strlen($Num); $x++) 322 { 323 $digit = substr($Num, $x, 1); 324 325 // If it's an odd digit, double it 326 if ($x/2 != floor($x/2)) { 327 $digit *= 2; 328 329 // If the result is two digits, add them 330 if (strlen($digit) == 2) 331 $digit = substr($digit, 0, 1) + substr($digit, 1, 1); 332 } 333 // Add the current digit, doubled and added if applicable, to the Total 334 $Total += $digit; 335 } 336 337 // If it passed (or bypassed) the card-specific check and the Total is 338 // evenly divisible by 10, it's cool! 339 return ($GoodCard && $Total % 10 == 0); 340 } 341 342 } 343 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jan 14 11:33:29 2009 | Cross-referenced by PHPXref 0.7 |