function _revision_scheduler_override__node_revision_access in Revision scheduler 7
1 call to _revision_scheduler_override__node_revision_access()
- _revision_scheduler_override_diff_node_revision_access in ./revision_scheduler.module
File
- ./revision_scheduler.module, line 101
Code
function _revision_scheduler_override__node_revision_access($node, $op = 'view', $account = NULL) {
$access =& drupal_static(__FUNCTION__, array());
$map = array(
'view' => 'view revisions',
'update' => 'revert revisions',
'delete' => 'delete revisions',
);
if (!$node || !isset($map[$op])) {
return FALSE;
}
if (!isset($account)) {
$account = $GLOBALS['user'];
}
$cid = $node->vid . ':' . $account->uid . ':' . $op;
if (!isset($access[$cid])) {
if (!user_access($map[$op], $account) && !user_access('administer nodes', $account)) {
return $access[$cid] = FALSE;
}
$node_current_revision = node_load($node->nid);
$is_current_revision = $node_current_revision->vid == $node->vid;
if ($is_current_revision && (db_query('SELECT COUNT(vid) FROM {node_revision} WHERE nid = :nid', array(
':nid' => $node->nid,
))
->fetchField() == 1 && !db_query("SELECT COUNT(revision_id) FROM {revision_scheduler} WHERE entity_type = 'node' AND entity_id = :nid", array(
':nid' => $node->nid,
))
->fetchField() || $op == 'update' || $op == 'delete')) {
$access[$cid] = FALSE;
}
elseif (user_access('administer nodes', $account)) {
$access[$cid] = TRUE;
}
else {
$access[$cid] = node_access($op, $node_current_revision, $account) && ($is_current_revision || node_access($op, $node, $account));
}
}
return $access[$cid];
}