You are here

function node_privacy_byrole_nodeapi in node privacy byrole 5

Same name and namespace in other branches
  1. 6 node_privacy_byrole.module \node_privacy_byrole_nodeapi()

Implementation of hook_nodeapi().

File

./node_privacy_byrole.module, line 109

Code

function node_privacy_byrole_nodeapi(&$node, $op, $arg = 0) {
  $roles = array_keys(user_roles());
  switch ($op) {
    case 'load':
    case 'prepare':
      node_privacy_byrole_nodeapi_prepare($node);
      break;
    case 'delete':
      db_query('DELETE FROM {node_privacy_byrole} WHERE nid = %d', $node->nid);
      break;
    case 'insert':
      node_privacy_byrole_nodeapi_prepare($node);

      // http://drupal.org/node/256396
      foreach ($roles as $rid) {
        db_query("INSERT INTO {node_privacy_byrole} (nid, gid, realm, grant_view, grant_update, grant_delete)\n          VALUES (%d, %d, '%s', %d, %d, %d)", $node->nid, $rid, 'node_privacy_byrole_role', $node->node_privacy_byrole['roles'][$rid]['view'], $node->node_privacy_byrole['roles'][$rid]['edit'], $node->node_privacy_byrole['roles'][$rid]['delete']);
      }
      db_query("INSERT INTO {node_privacy_byrole} (nid, gid, realm, grant_view, grant_update, grant_delete)\n        VALUES (%d, %d, '%s', %d, %d, %d)", $node->nid, $node->uid, 'node_privacy_byrole_user', 1, 1, 1);
      break;
    case 'update':
      node_privacy_byrole_nodeapi_prepare($node);

      // http://drupal.org/node/153588
      // As a new role might have been added since creation of the node, we cannot simply "update" and so delete and reinsert
      db_query("DELETE FROM {node_privacy_byrole} WHERE nid = %d AND realm = 'node_privacy_byrole_role'", $node->nid);
      foreach ($roles as $rid) {
        db_query("INSERT INTO {node_privacy_byrole} (nid, gid, realm, grant_view, grant_update, grant_delete)\n          VALUES (%d, %d, '%s', %d, %d, %d)", $node->nid, $rid, 'node_privacy_byrole_role', $node->node_privacy_byrole['roles'][$rid]['view'], $node->node_privacy_byrole['roles'][$rid]['edit'], $node->node_privacy_byrole['roles'][$rid]['delete']);
      }
      if (isset($node->node_privacy_byrole['author'])) {

        // this section was added to support author permission changes for actions
        db_query("UPDATE {node_privacy_byrole} SET grant_view = %d, grant_update = %d, grant_delete = %d\n          WHERE nid = %d AND gid = %d AND realm = 'node_privacy_byrole_user'", (int) $node->node_privacy_byrole['author']['view'], (int) $node->node_privacy_byrole['author']['edit'], (int) $node->node_privacy_byrole['author']['delete'], $node->nid, $node->uid);
      }
      else {

        // Record for owner exists for sure, so we can simply update it
        db_query("UPDATE {node_privacy_byrole} SET grant_view = %d, grant_update = %d, grant_delete = %d\n          WHERE nid = %d AND gid = %d AND realm = 'node_privacy_byrole_user'", 1, 0, 0, $node->nid, $node->uid);
      }
      break;
  }
}