function node_privacy_byrole_nodeapi_prepare in node privacy byrole 6
Same name and namespace in other branches
- 5 node_privacy_byrole.module \node_privacy_byrole_nodeapi_prepare()
2 calls to node_privacy_byrole_nodeapi_prepare()
- node_privacy_byrole_nodeapi in ./
node_privacy_byrole.module - Implementation of hook_nodeapi().
- node_privacy_byrole_node_access_records in ./
node_privacy_byrole.module - Implementation of hook_node_access_records().
File
- ./
node_privacy_byrole.module, line 146 - Set node access permissions by role.
Code
function node_privacy_byrole_nodeapi_prepare(&$node) {
if (!isset($node->node_privacy_byrole)) {
$roles = array_keys(user_roles());
$perms = array(
'view',
'edit',
'delete',
);
if (isset($node->nid) && empty($node->is_new)) {
// this is an existing node, get current permissions
$result = db_query("SELECT gid, grant_view, grant_update, grant_delete FROM {node_privacy_byrole} " . "WHERE nid = %d AND realm = 'node_privacy_byrole_role'", $node->nid);
$current_perms = array();
while ($role = db_fetch_object($result)) {
$current_perms[$role->gid]['view'] = $role->grant_view;
$current_perms[$role->gid]['edit'] = $role->grant_update;
$current_perms[$role->gid]['delete'] = $role->grant_delete;
}
while (list(, $rid) = each($roles)) {
// if the role exists in node_privacy_byrole table, fill its perm with the database ones
if (isset($current_perms[$rid])) {
while (list(, $perm) = each($perms)) {
$node->node_privacy_byrole['roles'][$rid][$perm] = $current_perms[$rid][$perm] ? 1 : 0;
}
}
else {
// else : the role doesn't exist in node_privacy_byrole table (it has been recently added).
// In this case, fill perms with default ones
while (list(, $perm) = each($perms)) {
$default_roles = _node_privacy_byrole_get_default_roles($node->type, $perm);
$node->node_privacy_byrole['roles'][$rid][$perm] = in_array($rid, $default_roles) ? 1 : 0;
}
}
reset($perms);
}
}
else {
// case where node is being created
while (list(, $rid) = each($roles)) {
while (list(, $perm) = each($perms)) {
$default_roles = _node_privacy_byrole_get_default_roles($node->type, $perm);
$node->node_privacy_byrole['roles'][$rid][$perm] = in_array($rid, $default_roles) ? 1 : 0;
}
reset($perms);
}
}
}
}