You are here

function node_privacy_byrole_nodeapi_prepare in node privacy byrole 6

Same name and namespace in other branches
  1. 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);
      }
    }
  }
}