Beispiel #1
0
 /**
  * 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 . '&amp;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();
 }