Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
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("<p>Message successfully sent!</p>");
} else {
drupal_set_message("<p>Message delivery failed...</p>");
}
}