function xmldb_enrol_authorize_upgrade($oldversion) { global $CFG, $DB, $OUTPUT; $dbman = $DB->get_manager(); $result = true; //===== 1.9.0 upgrade line ======// if ($result && $oldversion < 2008020500 && is_enabled_enrol('authorize')) { require_once $CFG->dirroot . '/enrol/authorize/localfuncs.php'; if (!check_curl_available()) { echo $OUTPUT->notification("You are using the authorize.net enrolment plugin for payment handling but cUrl is not available.\n PHP must be compiled with cURL+SSL support (--with-curl --with-openssl)"); } /// authorize savepoint reached upgrade_plugin_savepoint($result, 2008020500, 'enrol', 'authorize'); } if ($result && $oldversion < 2008092700) { /// enrol_authorize.transid /// Define index transid (not unique) to be dropped form enrol_authorize $table = new xmldb_table('enrol_authorize'); $index = new xmldb_index('transid', XMLDB_INDEX_NOTUNIQUE, array('transid')); if ($dbman->index_exists($table, $index)) { $dbman->drop_index($table, $index); } /// Changing precision of field transid on table enrol_authorize to (20) $table = new xmldb_table('enrol_authorize'); $field = new xmldb_field('transid', XMLDB_TYPE_INTEGER, '20', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'userid'); $dbman->change_field_precision($table, $field); /// Launch add index transid again $table = new xmldb_table('enrol_authorize'); $index = new xmldb_index('transid', XMLDB_INDEX_NOTUNIQUE, array('transid')); $dbman->add_index($table, $index); /// enrol_authorize_refunds.transid /// Define index transid (not unique) to be dropped form enrol_authorize_refunds $table = new xmldb_table('enrol_authorize_refunds'); $index = new xmldb_index('transid', XMLDB_INDEX_NOTUNIQUE, array('transid')); if ($dbman->index_exists($table, $index)) { $dbman->drop_index($table, $index); } /// Changing precision of field transid on table enrol_authorize_refunds to (20) $table = new xmldb_table('enrol_authorize_refunds'); $field = new xmldb_field('transid', XMLDB_TYPE_INTEGER, '20', XMLDB_UNSIGNED, null, null, '0', 'amount'); $dbman->change_field_precision($table, $field); /// Launch add index transid again $table = new xmldb_table('enrol_authorize_refunds'); $index = new xmldb_index('transid', XMLDB_INDEX_NOTUNIQUE, array('transid')); $dbman->add_index($table, $index); /// authorize savepoint reached upgrade_plugin_savepoint($result, 2008092700, 'enrol', 'authorize'); } /// Dropping all enums/check contraints from core. MDL-18577 if ($result && $oldversion < 2009042700) { /// Changing list of values (enum) of field paymentmethod on table enrol_authorize to none $table = new xmldb_table('enrol_authorize'); $field = new xmldb_field('paymentmethod', XMLDB_TYPE_CHAR, '6', null, XMLDB_NOTNULL, null, 'cc', 'id'); /// Launch change of list of values for field paymentmethod $dbman->drop_enum_from_field($table, $field); /// authorize savepoint reached upgrade_plugin_savepoint($result, 2009042700, 'enrol', 'authorize'); } return $result; }
/** * This function is run by admin/cron.php every time if admin has enabled this plugin. * * Everyday at settlement time (default is 00:05), it cleans up some tables * and sends email to admin/teachers about pending orders expiring if manual-capture has enabled. * * If admin set up 'Order review' and 'Capture day', it captures credits cards and enrols students. * * @access public */ public function cron() { global $CFG, $DB; $oneday = 86400; $timenow = time(); $settlementtime = AuthorizeNet::getsettletime($timenow); $timediff30 = $settlementtime - 30 * $oneday; $mconfig = get_config('enrol/authorize'); mtrace("Processing authorize cron..."); if (intval($mconfig->an_dailysettlement) < $settlementtime) { set_config('an_dailysettlement', $settlementtime, 'enrol/authorize'); mtrace(" Daily cron:"); $this->cron_daily(); mtrace(" Done"); } mtrace(" Scheduled capture", ": "); if (empty($CFG->an_review) or !empty($CFG->an_test) or intval($CFG->an_capture_day) < 1 or !check_curl_available()) { mtrace("disabled"); return; // order review disabled or test mode or manual capture or openssl wasn't loaded. } $timediffcnf = $settlementtime - intval($CFG->an_capture_day) * $oneday; $select = "(status = ?) AND (timecreated < ?) AND (timecreated > ?)"; $params = array(AN_STATUS_AUTH, $timediffcnf, $timediff30); if (!($ordercount = $DB->count_records_select('enrol_authorize', $select, $params))) { mtrace("no pending orders"); return; } $eachconn = intval($mconfig->an_eachconnsecs); $eachconn = $eachconn > 60 ? 60 : ($eachconn <= 0 ? 3 : $eachconn); if ($ordercount * $eachconn + intval($mconfig->an_lastcron) > $timenow) { mtrace("blocked"); return; } set_config('an_lastcron', $timenow, 'enrol/authorize'); mtrace(" {$ordercount} orders are being processed now", ": "); $faults = ''; $sendem = array(); $elapsed = time(); @set_time_limit(0); $this->log = "AUTHORIZE.NET AUTOCAPTURE CRON: " . userdate($timenow) . "\n"; $lastcourseid = 0; $rs = $DB->get_recordset_select('enrol_authorize', $select, $params, 'courseid'); foreach ($rs as $order) { $message = ''; $extra = NULL; if (AN_APPROVED == AuthorizeNet::process($order, $message, $extra, AN_ACTION_PRIOR_AUTH_CAPTURE)) { if ($lastcourseid != $order->courseid) { $lastcourseid = $order->courseid; $course = $DB->get_record('course', array('id' => $lastcourseid)); $role = get_default_course_role($course); $context = get_context_instance(CONTEXT_COURSE, $lastcourseid); } $timestart = $timeend = 0; if ($course->enrolperiod) { $timestart = $timenow; $timeend = $order->settletime + $course->enrolperiod; } $user = $DB->get_record('user', array('id' => $order->userid)); if (role_assign($role->id, $user->id, 0, $context->id, $timestart, $timeend, 0, 'authorize')) { $this->log .= "User({$user->id}) has been enrolled to course({$course->id}).\n"; if (!empty($CFG->enrol_mailstudents)) { $sendem[] = $order->id; } } else { $faults .= "Error while trying to enrol " . fullname($user) . " in '{$course->fullname}' \n"; foreach ($order as $okey => $ovalue) { $faults .= " {$okey} = {$ovalue}\n"; } } } else { $this->log .= "Error, Order# {$order->id}: " . $message . "\n"; } } $rs->close(); mtrace("processed"); $timenow = time(); $elapsed = $timenow - $elapsed; $eachconn = ceil($elapsed / $ordercount); set_config('an_eachconnsecs', $eachconn, 'enrol/authorize'); $this->log .= "AUTHORIZE.NET CRON FINISHED: " . userdate($timenow); $adminuser = get_admin(); if (!empty($faults)) { $eventdata = new object(); $eventdata->modulename = 'moodle'; $eventdata->userfrom = $adminuser; $eventdata->userto = $adminuser; $eventdata->subject = "AUTHORIZE.NET CRON FAULTS"; $eventdata->fullmessage = $faults; $eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessagehtml = ''; $eventdata->smallmessage = ''; events_trigger('message_send', $eventdata); } if (!empty($CFG->enrol_mailadmins)) { $eventdata = new object(); $eventdata->modulename = 'moodle'; $eventdata->userfrom = $adminuser; $eventdata->userto = $adminuser; $eventdata->subject = "AUTHORIZE.NET CRON LOG"; $eventdata->fullmessage = $this->log; $eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessagehtml = ''; $eventdata->smallmessage = ''; events_trigger('message_send', $eventdata); } // Send emails to students about which courses have enrolled. if (!empty($sendem)) { mtrace(" sending welcome messages to students", ": "); send_welcome_messages($sendem); mtrace("sent"); } }