Auto Delete Content In Drupal

I have a client that wants to have content posted on his site automatically deleted when it reaches 30 days. His site is built using Drupal and using the hook_cron() will let the scheduled cron job process the node deletions.

I created a Drupal module and in the .module file added function profeng_cron() as the hook and it calls deleteagednodes with the type of content to be removed. The function deleteagednodes does all of the work. I created a query to return all of the nodes that have the desired content types and then using a where clause to filter on the created date. In this example I am setting $expired_time to be now minus 30 days and in the query I am getting records that were created before the $expired_time.

I then take the results from the query and loop through all results. Because the cron job runs as the anonymous user I select the user that owns the node and set the current user to the owner of the node. I then call the Drupal node_delete. When calling node_delete all of the heavy lifting of the delete like writing to the logs and sending notifications are executed.

//cron hook
function profeng_cron()
{
deleteagednodes(’inspectionreport’);
}
//function to delete content by tyoe that is over 30 days old
function deleteagednodes($contenttype)
{
$expired_time = strtotime(’-30 days’);
$query = db_query(”SELECT nid, uid FROM {node} AS n WHERE type = ‘%s’ and created <= ‘%s’”, $contenttype, $expired_time);
while($del = db_fetch_object($query))
{
global $user;
$owner_account = user_load(array(’uid’ => $del->uid));
$temp_user = $user;
$user = $owner_account;
$this_edit['nid'] = $del->nid;
node_delete($this_edit);
$user = $temp_user;
}
}