'checkbox', '#title' => t('Enable anonymous user view'), '#default_value' => $form['#node']->dojo8_1, '#weight' => -100, ); } } /** * Implementation of hook_nodeapi() */ function dojo8_1_nodeapi(&$node, $op, $teaser, $page) { global $user; switch ($op) { case 'load': $r = db_query('SELECT nid FROM {dojo8_1} WHERE nid = %d', $node->nid); return (db_num_rows($r) > 0) ? array('dojo8_1' => TRUE) : array('dojo8_1' => FALSE); break; case 'submit': db_query('DELETE FROM {dojo8_1} WHERE nid = %d', $node->nid); if (isset($node->dojo8_1) && $node->dojo8_1 == 1) { db_query('INSERT INTO {dojo8_1} SET nid = %d', $node->nid); } break; case 'view': if ($page && _apply_access_rules() && !$node->dojo8_1) { drupal_access_denied(); module_invoke_all('exit'); exit(); } break; } } /** * Implementation of hook_db_rewrite_sql() */ function dojo8_1_db_rewrite_sql($query, $primary_table, $primary_field, $args) { if (!_apply_access_rules()) return array(); switch ($primary_field) { case 'nid': return array('join' => 'INNER JOIN {dojo8_1} ON dojo8_1.nid = n.nid'); break; } } /* helper function */ function _apply_access_rules() { global $user; return ($user->uid == 0) ? TRUE : FALSE; // Sample rule 1 }