Several changes need to be made to the OGR module for new TAC/OG integration. The new TAC/OG Integration instructions are here: http://groups.drupal.org/node/3700

  • New TAC/OG integration requires node.module.multinode.patch to node.module: http://drupal.org/node/196922
  • og_users_roles table modified: New column "ogr_id" added.
  • OGR now uses this table to create it's own node grants realm: ogr_access

  • Added new table: multinode_access
  • Removed tac_og_value clause from hook_nodeapi('access')
  • In fact, hook_nodeapi('access') no longer used for TAC/OG Integration.

  • og_user_roles.nodeapi_access.patch no longer required for TAC/OG Integration
  • Removed these functions:
  • ogr_db_rewrite_sql
    ogr_node_access_join_sql
    ogr_node_access_where_sql
    ogr_tac_db_rewrite_sql

  • og_forum no longer needed for TAC/OG settings in OGR. However, TAC does need to be installed. Made that change.
  • Added these node grant functions:
/*
 * Implementation of hook_node_grants
 */
function og_user_roles_node_grants($account, $op) {
  $array = array('ogr_access' => array());
  $result = db_query("SELECT ogr_id FROM {og_users_roles} WHERE uid = %d", $account->uid);
  while ($row = db_fetch_object($result)) {
    $array['ogr_access'][] = $row->ogr_id;
  }
  return !empty($array['ogr_access']) ? $array : NULL;
}

/*
 * Implementation of hook_node_access_records
 */
function og_user_roles_node_access_records($node) {

  $grants = array();

  if (variable_get('og_user_roles_tac_og_value', 0) == 1) {

    // we need to explicitly label public nodes it seems. OG doesn't label nodes
    // of types it doesn't apply to, or the "implicitly public" nodes created by
    // leaving all the audience checkboxes blank.
    // From: http://drupal.org/node/234087#comment-788876

    if (og_is_omitted_type($node->type) || (is_array($node->og_groups) && count($node->og_groups) === 0) || (!is_array($node->og_groups) && !og_is_group_type($node->type))) {
      $grants[] = array (
        'realm' => 'og_public',
        'gid' => 0,
        'grant_view' => 1,
        'grant_update' => 0,
        'grant_delete' => 0 );
    }
    
	// This creates all ogr grants
    
    $where = "WHERE ta.rid = ogr.rid AND n.nid = ".$node->nid;
    $result = db_query("SELECT n.nid, ta.rid, ogr.ogr_id, BIT_OR(ta.grant_view) AS grant_view, BIT_OR(ta.grant_update) AS grant_update, BIT_OR(ta.grant_delete) AS grant_delete FROM {term_node} n INNER JOIN {term_access} ta ON n.tid = ta.tid INNER JOIN {og_ancestry} oa ON n.nid = oa.nid INNER JOIN {og_users_roles} ogr ON oa.group_nid = ogr.gid $where GROUP BY n.nid, ta.rid");
    
    while($row = db_fetch_object($result)) {
      if ($row) {
        $grant_view = ($row->grant_view == 1) ? 1 : 0;
        $grant_update = ($row->grant_update == 1) ? 1 : 0;
        $grant_delete = ($row->grant_delete == 1) ? 1 : 0;

        $grants[] = array(
          'realm' => 'ogr_access',
           'gid' => $row->ogr_id,
           'grant_view' => $grant_view,
           'grant_update' => $grant_update,
           'grant_delete' => $grant_delete,
          'priority' => 0,
        );
      }
    }

    return $grants;
  }
}

Comments

Anonymous’s picture

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for two weeks with no activity.