'.t('This experimental module allows you to create private nodes that can only be viewed by a particular user. On node setup page, select the user ID or -1 for public.This module allows you to restrict access to site content. It uses a simple scheme based on Taxonomy, Users and Roles.')."

\n"; return $output; break; } } function ac1_form_alter($form_id, &$form) { // if this is a form (?) if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { // get the node record $node = $form['#node']; drupal_set_message( "FORM ALTER, ac1 = " . $node->ac1 ); if( ! isset( $node->ac1 ) ) { drupal_set_message( "AC1 not set" ); // Load the grants from the database for this node $result = db_query('SELECT na.gid FROM {node_access} na WHERE na.nid = %d AND na.realm = \'ac1\' AND na.grant_view = 1', $node->nid ); $grant = db_fetch_object($result); $str = "grant = " . $grant->gid; drupal_set_message( $str ); // load ac1 with gid if( $grant ) {//&& $grant->gid == 0) { // The "public" grant was set. $node->ac1 = $grant->gid; drupal_set_message( "AC1 assigned from grants " . $node->ac1 ); } // default to 0 else { $node->ac1 = 0; drupal_set_message( "AC1 defaulted to 0" ); } } //$str = "ac1 = " . $node->ac1; //drupal_set_message($str); // create a new section in the edit node form called access control $form['access'] = array('#type' => 'fieldset', '#title' => t('Access Control'), '#collapsible' => TRUE, '#collapsed' => empty($item['title']), '#tree' => TRUE, '#weight' => 30, ); // we need to build an array of user names and another with matching user id's // we need to figure out based on nodes owner, which name to select in menu /* $form['access']['ac1_userid'] = array( '#type' => 'select', '#title' => t('Specify owner for private nodes'), '#default_value' => variable_get('ac1_userid','user 1'), '#options' => array( 'title' => t('user 0'), 'teaser' => t('user 1'), 'fulltext' => t('user 2'), ), '#description' => t('Owner of this node that has sole viewing privledges'), ); */ $form['access']['ac1'] = array( '#type' => 'textfield', '#title' => t('Access ID -1, 0, or UID'), '#default_value' => $node->ac1, '#size' => 5, '#maxlength' => 128, '#required' => TRUE, ); // the final return is not needed because $form is a reference. } } function ac1_nodeapi(&$node, $op, $arg = 0) { // $str = "nodeapi op = " . $op . " ac1 = " . $node->ac1; drupal_set_message( "nodeapi op = " . $op . " ac1 = " . $node->ac1 ); switch ($op) { case 'delete': // When a node is deleted, delete any relevant grants for this node db_query('DELETE FROM {node_access} WHERE nid = %d AND realm = \'ac1\'', $node->nid ); break; case 'load': $result = db_query('SELECT na.gid FROM {node_access} na WHERE na.nid = %d AND na.realm = \'ac1\' AND na.grant_view = 1', $node->nid ); $grant = db_fetch_object($result); // load ac1 with gid if( $grant ) {//&& $grant->gid == 0) { // The "public" grant was set. $node->ac1 = $grant->gid; drupal_set_message( "AC1 set from grant in nodeapi load " . $node->ac1 ); } // default to 0 else { $node->ac1 = 0; drupal_set_message( "AC1 defaulted to 0 in nodeapi load" ); } break; case 'insert': case 'update': drupal_set_message( "storing ac1 as gid nodeapi " . $node->ac1 ); // Clear out any existing grants for the node, and set new ones. db_query('DELETE FROM {node_access} WHERE nid = %d AND realm = \'ac1\'', $node->nid ); // for testing node_grants, I am hardwiring in a uid (or -1 registered user only, 0 everyone) db_query('INSERT INTO {node_access} (nid, gid, realm, grant_view, grant_update, grant_delete) VALUES (%d, %d, \'ac1\', %d, %d, %d)', $node->nid, $node->ac1, 1, 0, 0); //} break; } } function ac1_node_grants( $account, $op ) { $grants = array(); // this appears to override drupals default node access entry that allows everyone access to // everything (without destructively deleting it) $all = array(-1); //everyone gets access to nodes that have gid 0 (don't need an account) $grants[0] = 0; // if user has an account they get access to gid -1 nodes (for clients only) if( $account->uid > 0 ) $grants[1] = -1; // users can also view private nodes (ones set with gid == users uid) if( $op == 'view' ) $grants[2] = $account->uid; // only the admin can edit/delete nodes with this system (I think) return array( 'all' => $all, 'ac1' => $grants ); }