function og2list_cron() {
$time_begin = time();
$lockfile = og2list_lockfile();
// obtain lock to prevent corruption
$fp = @fopen(file_create_path($lockfile), 'w');
if (flock($fp, LOCK_EX)) {
// initialize random number generator
mt_srand((double)microtime()*1000000);
// store the original cron user
og2list_switch_user();
$result = db_query_range('SELECT c.* FROM {og2list_incoming_groups} g INNER JOIN {og2list_incoming_content} c ON g.mid = c.mid WHERE g.oid != 0 ORDER BY c.mid ASC', 0, variable_get('og2list_incoming_number', 10));
while ($mail = db_fetch_object($result)) {
$result2 = db_query('SELECT oid FROM {og2list_incoming_groups} WHERE mid = %d', $mail->mid);
$mail->og_nids = array();
while ($group_id = db_fetch_object($result2)) {
$mail->og_nids[] = $group_id->oid;
}
if (count($mail->og_nids)) {
$status = og2list_process_mail($mail);
watchdog('debug', serialize($status));
if ($status) {
db_query('DELETE FROM {og2list_incoming_content} WHERE mid = %d', $mail->mid);
db_query('DELETE FROM {og2list_incoming_groups} WHERE mid = %d', $mail->mid);
}
}
}
if (module_exist('mailcommand')) {
$result = db_query_range('SELECT c.* FROM {og2list_incoming_groups} g INNER JOIN {og2list_incoming_content} c ON g.mid = c.mid WHERE g.oid = 0 ORDER BY c.mid ASC', 0, 10);
while ($mail = db_fetch_object($result)) {
$status = mailcommand_process_mail($mail);
if ($status) {
db_query('DELETE FROM {og2list_incoming_content} WHERE mid = %d', $mail->mid);
db_query('DELETE FROM {og2list_incoming_groups} WHERE mid = %d', $mail->mid);
}
}
}
// revert to the original cron user
og2list_switch_user();
$time_end = time();
$time_diff = $time_end - $time_begin;
watchdog('og2list', 'og2list took this long: ' . $time_diff);
og2list_unlock($fp);
}
else {
watchdog('og2list', t('Could not obtain og2list lock.'), WATCHDOG_ERROR);
}
}