function auto_expire_cron in Auto Expire 5
Same name and namespace in other branches
- 7 auto_expire.module \auto_expire_cron()
File
- ./
auto_expire.module, line 243
Code
function auto_expire_cron() {
foreach (node_get_types() as $type => $name) {
$code = AUTO_EXPIRE_NODE_TYPE . $type;
if (variable_get($code . '_e', 0)) {
$days = variable_get($code . '_d', AUTO_EXPIRE_DAYS);
$warn = variable_get($code . '_w', AUTO_EXPIRE_WARN);
$purge = variable_get($code . '_p', AUTO_EXPIRE_PURGE);
// Send out expiration warnings
if ($warn > 0) {
$subject = variable_get(AUTO_EXPIRE_EMAIL . 'warn_subject', '');
$body = variable_get(AUTO_EXPIRE_EMAIL . 'warn_body', '');
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$result = db_query('SELECT n.nid, n.title FROM {auto_expire} e, {node} n WHERE n.nid = e.nid AND n.status = 1 AND e.warned = 0 AND (FROM_UNIXTIME(e.expire) - INTERVAL %d DAY) <= NOW()', $warn);
break;
case 'pgsql':
$result = db_query('SELECT n.nid, n.title FROM {auto_expire} e, {node} n WHERE n.nid = e.nid AND n.status = 1 AND e.warned = 0 AND ((e.expire::ABSTIME::TIMESTAMP) - INTERVAL \'%d DAYS\') <= NOW()', $warn);
break;
}
while ($node = db_fetch_object($result)) {
_auto_expire_notify_warning($node->nid, $node->title, $name->name, $days, $subject, $body);
db_query('UPDATE {auto_expire} SET warned = 1 WHERE nid = %d', $node->nid);
watchdog('auto_expire', 'Auto expire warning for node ' . $node->nid, WATCHDOG_NOTICE);
}
}
// Expire
$subject = variable_get(AUTO_EXPIRE_EMAIL . 'expired_subject', '');
$body = variable_get(AUTO_EXPIRE_EMAIL . 'expired_body', '');
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$result = db_query('SELECT n.nid, n.title FROM {auto_expire} e, {node} n WHERE n.nid = e.nid AND n.status = 1 AND FROM_UNIXTIME(e.expire) <= NOW()');
break;
case 'pgsql':
$result = db_query('SELECT n.nid, n.title FROM {auto_expire} e, {node} n WHERE n.nid = e.nid AND n.status = 1 AND (e.expire::ABSTIME::TIMESTAMP) <= NOW()');
break;
}
while ($node = db_fetch_object($result)) {
db_query('UPDATE {node} SET status = 0 WHERE nid = %d', $node->nid);
_auto_expire_notify_expired($node->nid, $node->title, $name->name, $subject, $body);
watchdog('auto_expire', 'Unpublishing node ' . $node->nid, WATCHDOG_NOTICE);
}
// Purge
if ($purge > 0) {
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$result = db_query('SELECT e.nid FROM {auto_expire} e, {node} n WHERE n.nid = e.nid AND n.status = 0 AND (FROM_UNIXTIME(e.expire) + INTERVAL %d DAY) <= NOW()', $purge);
break;
case 'pgsql':
$result = db_query('SELECT e.nid FROM {auto_expire} e, {node} n WHERE n.nid = e.nid AND n.status = 0 AND ((e.expire::ABSTIME::TIMESTAMP) + INTERVAL \'%d DAYS\') <= NOW()', $purge);
break;
}
$cntPurged = 0;
while ($nid = db_result($result)) {
$node = node_load($nid);
/* copied from node_delete - to bypass node_access - cache_clear_all moved outside the loop */
db_query('DELETE FROM {node} WHERE nid = %d', $nid);
db_query('DELETE FROM {node_revisions} WHERE nid = %d', $nid);
// Call the node-specific callback (if any):
node_invoke($node, 'delete');
node_invoke_nodeapi($node, 'delete');
// Remove this node from the search index if needed.
if (function_exists('search_wipe')) {
search_wipe($nid, 'node');
}
/* end of copy */
watchdog('auto_expire', "Auto expire purged node: {$nid}", WATCHDOG_NOTICE);
$cntPurged++;
}
if ($cntPurged > 0) {
// Clear the cache so an anonymous poster can see the node being deleted.
cache_clear_all();
watchdog('auto_expire', "Auto expire purged {$cntPurged} node(s).", WATCHDOG_NOTICE);
}
}
}
}
}