Community Documentation

Six monthly review script for content using workflow and triggered rules

Last updated December 7, 2010. Created by scarer on November 2, 2010.
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:

<?php
//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>");
  }
}
?>

Page status

About this page

Drupal version
Drupal 6.x
Audience
Programmers

Site Building Guide

Drupal’s online documentation is © 2000-2013 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License. Comments on documentation pages are used to improve content and then deleted.
nobody click here