function workflow_nodeapi in Workflow 6
Same name and namespace in other branches
- 5.2 workflow.module \workflow_nodeapi()
- 5 workflow.module \workflow_nodeapi()
- 6.2 workflow.module \workflow_nodeapi()
Implementation of hook_nodeapi().
File
- ./
workflow.module, line 96 - Support workflows made up of arbitrary states.
Code
function workflow_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
switch ($op) {
case 'load':
$node->_workflow = workflow_node_current_state($node);
// Add scheduling information.
$res = db_query('SELECT * FROM {workflow_scheduled_transition} WHERE nid = %d', $node->nid);
if ($row = db_fetch_object($res)) {
$node->_workflow_scheduled_sid = $row->sid;
$node->_workflow_scheduled_timestamp = $row->scheduled;
$node->_workflow_scheduled_comment = $row->comment;
}
break;
case 'insert':
// If the state is not specified, use first valid state.
// For example, a new node must move from (creation) to some
// initial state.
if (empty($node->workflow)) {
$choices = workflow_field_choices($node);
$keys = array_keys($choices);
$sid = array_shift($keys);
}
// Note no break; fall through to 'update' case.
case 'update':
// Do nothing if there is no workflow for this node type.
$wid = workflow_get_workflow_for_type($node->type);
if (!$wid) {
break;
}
// Get new state from value of workflow form field, stored in $node->workflow.
if (!isset($sid)) {
$sid = $node->workflow;
}
workflow_transition($node, $sid);
break;
case 'delete':
$node->workflow_stamp = time();
db_query("DELETE FROM {workflow_node} WHERE nid = %d", $node->nid);
_workflow_write_history($node, WORKFLOW_DELETION, t('Node deleted'));
// Delete any scheduled transitions for this node.
db_query("DELETE FROM {workflow_scheduled_transition} WHERE nid = %d", $node->nid);
break;
}
}