Last updated 7 June 2014. Created on 2 November 2010.
Edited by acabouet, scarer. Log in to edit this page.

I needed to create a six monthly review for content to change the content to a different work state and to send an email to the author letting them know their content is due for review.

I accomplished this task using workflow and triggered rules.

Firstly I created a workflow that I applied to a list of content types. I added a state to this workflow called 'Due for review'. This state had an sid value of 7. So changed the sid value to whatever is appropriate for you. I created a new rule and scheduled it to occur on cron job events. Then I added a custom PHP script with the following code:


//get every node in the database that has been assigned a workflow
$result = db_query("SELECT n.nid, n.uid, n.changed, wn.sid FROM {node} n JOIN {workflow_node} wn ON n.nid = wn.nid");
while($row = db_fetch_object($result))
{
  $nid = $row->nid;
  $changedate = $row->changed;
  $sid = $row->sid;
  $user = $row->uid;
  //call function to see if notification should be sent
  notify_author($nid, $changedate, $sid, $user);
}

//this function notifies the author if their node is due for updating
function notify_author($nid, $c, $sid, $u)
{
  $changeddate = date("d/m/Y", $c);
  $revdateone = strtotime("+6 months", $c);
  $revdate = date("d/m/Y", $revdateone);
  //current timestamp
  $currentdate = date('d/m/Y');
  //drupal_set_message('Changed date = ' . $changeddate);
  //drupal_set_message('Review date = ' . $revdate);
  //drupal_set_message('Current date = ' . $currentdate);
  //if review date is here and workflow state is not marked for review send email
  if ($revdate <= $currentdate && $sid != '7')
  {
    //drupal_set_message('Current sid = ' . $sid . ' for node nid ' . $nid . 'Author uid = ' . $u);
    include('./sites/all/modules/workflow/workflow.module');
    //update workflow_node
    $new_state = 7;
    workflow_execute_transition($nid, $new_state);
    //send email
    sendemail($u, $nid);
  }
}

//sends email to required user
function sendemail($u, $nid)
{
 //drupal_set_message('Got to the send email function!');
 $author = user_load($u);
 $currentnode = node_load($nid);
 $to = $author->mail;
 $subject = "Your content is due for review!";
 $body = "Hi,\n\nHow are you $author->name? Your content $currentnode->title is due for review! 
 Please log in and visit http://yoursite.com/node/$currentnode->nid to edit your node. When you've 
 finished editing your node please change the workflow to submit for review. The publications 
 moderator will review your content as soon as possible.";
 $headers = "From: yoursite@yoursite.com\r\nReply-To: yoursite@yoursite.com";
 if (mail($to, $subject, $body, $headers)) {
   drupal_set_message("

Message successfully sent!

"); } else { drupal_set_message("

Message delivery failed...

"); } }

Looking for support? Visit the Drupal.org forums, or join #drupal-support in IRC.