/** * Daily cron. It executes at settlement time (default is 00:05). * * @access private */ private function cron_daily() { global $CFG, $SITE, $DB; $oneday = 86400; $timenow = time(); $onepass = $timenow - $oneday; $settlementtime = AuthorizeNet::getsettletime($timenow); $timediff30 = $settlementtime - 30 * $oneday; $select = "(status=?) AND (timecreated<?)"; $params = array(AN_STATUS_NONE, $timediff30); if ($DB->delete_records_select('enrol_authorize', $select, $params)) { mtrace(" orders no transaction made have deleted"); } $select = "(status=?) AND (timecreated<?)"; $params = array(AN_STATUS_EXPIRE, AN_STATUS_AUTH, $timediff30); if ($DB->execute("UPDATE {enrol_authorize} SET status=? WHERE {$select}", $params)) { mtrace(" pending orders to expire have updated"); } $timediff60 = $settlementtime - 60 * $oneday; $select = "(status=?) AND (timecreated<?)"; $params = array(AN_STATUS_EXPIRE, $timediff60); if ($DB->delete_records_select('enrol_authorize', $select, $params)) { mtrace(" orders expired older than 60 days have deleted"); } $adminuser = get_admin(); $select = "status IN(?,?) AND (timecreated<?) AND (timecreated>?)"; $params = array(AN_STATUS_UNDERREVIEW, AN_STATUS_APPROVEDREVIEW, $onepass, $timediff60); if (($count = $DB->count_records_select('enrol_authorize', $select, $params)) && ($csvusers = get_users_by_capability(get_context_instance(CONTEXT_SYSTEM), 'enrol/authorize:uploadcsv'))) { $a = new stdClass(); $a->count = $count; $a->course = $SITE->shortname; $subject = get_string('pendingechecksubject', 'enrol_authorize', $a); $a = new stdClass(); $a->count = $count; $a->url = $CFG->wwwroot . '/enrol/authorize/uploadcsv.php'; $message = get_string('pendingecheckemail', 'enrol_authorize', $a); foreach ($csvusers as $csvuser) { $eventdata = new object(); $eventdata->modulename = 'moodle'; $eventdata->userfrom = $adminuser; $eventdata->userto = $csvuser; $eventdata->subject = $subject; $eventdata->fullmessage = $message; $eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessagehtml = ''; $eventdata->smallmessage = ''; events_trigger('message_send', $eventdata); } mtrace(" users who have 'enrol/authorize:uploadcsv' were mailed"); } mtrace(" early pending order warning email for manual capture", ": "); if (empty($CFG->an_emailexpired)) { mtrace("not enabled"); return; } $timediffem = $settlementtime - (30 - intval($CFG->an_emailexpired)) * $oneday; $select = "(status=?) AND (timecreated<?) AND (timecreated>?)"; $params = array(AN_STATUS_AUTH, $timediffem, $timediff30); $count = $DB->count_records_select('enrol_authorize', $select, $params); if (!$count) { mtrace("no orders prior to {$CFG->an_emailexpired} days"); return; } mtrace("{$count} orders prior to {$CFG->an_emailexpired} days"); $a = new stdClass(); $a->pending = $count; $a->days = $CFG->an_emailexpired; $a->course = $SITE->shortname; $subject = get_string('pendingorderssubject', 'enrol_authorize', $a); $a = new stdClass(); $a->pending = $count; $a->days = $CFG->an_emailexpired; $a->course = $SITE->fullname; $a->enrolurl = "{$CFG->wwwroot}/{$CFG->admin}/enrol_config.php?enrol=authorize"; $a->url = $CFG->wwwroot . '/enrol/authorize/index.php?status=' . AN_STATUS_AUTH; $message = get_string('pendingordersemail', 'enrol_authorize', $a); $eventdata = new object(); $eventdata->modulename = 'moodle'; $eventdata->userfrom = $adminuser; $eventdata->userto = $adminuser; $eventdata->subject = $subject; $eventdata->fullmessage = $message; $eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessagehtml = ''; $eventdata->smallmessage = ''; events_trigger('message_send', $eventdata); // Email to payment managers if (empty($CFG->an_emailexpiredteacher)) { return; // email feature disabled for teachers. } $sorttype = empty($CFG->an_sorttype) ? 'ttl' : $CFG->an_sorttype; $sql = "SELECT e.courseid, e.currency, c.fullname, c.shortname,\n COUNT(e.courseid) AS cnt, SUM(e.amount) as ttl\n FROM {enrol_authorize} e\n INNER JOIN {course} c ON c.id = e.courseid\n WHERE (e.status = ?)\n AND (e.timecreated < ?)\n AND (e.timecreated > ?)\n GROUP BY e.courseid\n ORDER BY {$sorttype} DESC"; $params = array(AN_STATUS_AUTH, $timediffem, $timediff30); $rs = $DB->get_recordset_sql($sql, $params); foreach ($rs as $courseinfo) { $lastcourse = $courseinfo->courseid; $context = get_context_instance(CONTEXT_COURSE, $lastcourse); if ($paymentmanagers = get_users_by_capability($context, 'enrol/authorize:managepayments')) { $a = new stdClass(); $a->course = $courseinfo->shortname; $a->pending = $courseinfo->cnt; $a->days = $CFG->an_emailexpired; $subject = get_string('pendingorderssubject', 'enrol_authorize', $a); $a = new stdClass(); $a->course = $courseinfo->fullname; $a->pending = $courseinfo->cnt; $a->currency = $courseinfo->currency; $a->sumcost = $courseinfo->ttl; $a->days = $CFG->an_emailexpired; $a->url = $CFG->wwwroot . '/enrol/authorize/index.php?course=' . $lastcourse . '&status=' . AN_STATUS_AUTH; $message = get_string('pendingordersemailteacher', 'enrol_authorize', $a); foreach ($paymentmanagers as $paymentmanager) { $eventdata = new object(); $eventdata->modulename = 'moodle'; $eventdata->userfrom = $adminuser; $eventdata->userto = $paymentmanager; $eventdata->subject = $subject; $eventdata->fullmessage = $message; $eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessagehtml = ''; $eventdata->smallmessage = ''; events_trigger('message_send', $eventdata); } } } $rs->close(); }