You are here

function nodeaccess_update_1 in Nodeaccess 5

Same name and namespace in other branches
  1. 6.2 nodeaccess.install \nodeaccess_update_1()
  2. 6 nodeaccess.install \nodeaccess_update_1()

Implementations of hook_update_N().

File

./nodeaccess.install, line 66

Code

function nodeaccess_update_1() {

  // Create new nodeaccess table.
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      db_query("CREATE TABLE {nodeaccess} (\n        nid int(10) unsigned NOT NULL default '0',\n        gid int(10) unsigned NOT NULL default '0',\n        realm varchar(255) NOT NULL default '',\n        grant_view tinyint(1) unsigned NOT NULL default '0',\n        grant_update tinyint(1) unsigned NOT NULL default '0',\n        grant_delete tinyint(1) unsigned NOT NULL default '0',\n        PRIMARY KEY (nid,gid,realm)\n      )");

      /*!40100 DEFAULT CHARACTER SET utf8 */
      break;
    case 'pgsql':
      db_query("CREATE TABLE {nodeaccess} (\n        nid int_unsigned NOT NULL default '0',\n        gid int_unsigned NOT NULL default '0',\n        realm varchar(255) NOT NULL default '',\n        grant_view smallint_unsigned NOT NULL default '0',\n        grant_update smallint_unsigned NOT NULL default '0',\n        grant_delete smallint_unsigned NOT NULL default '0',\n        PRIMARY KEY (nid,gid,realm)\n      )");
      break;
  }

  // Update format of content type specific variables.
  foreach (node_get_types() as $type => $name) {
    $perm = variable_get('nodeaccess_' . $type, array());
    if (count($perm) > 0) {
      foreach ($perm['rid'] as $role => $grants) {
        $new[] = array(
          'gid' => $grants[0],
          'realm' => 'nodeaccess_rid',
          'grant_view' => $grants['grant_view'],
          'grant_update' => $grants['grant_update'],
          'grant_delete' => $grants['grant_delete'],
        );
      }
      variable_set('nodeaccess_' . $type, $new);
    }
  }

  // Populate the new nodeaccess table with data from node_access.
  $result = db_query("SELECT na.nid, na.gid, na.realm, na.grant_view, na.grant_update, na.grant_delete, n.type FROM {node_access} na LEFT JOIN {node} n ON n.nid = na.nid WHERE na.realm = 'nodeaccess_uid' OR na.realm = 'nodeaccess_rid'");
  while ($row = db_fetch_object($result)) {
    $default = variable_get('nodeaccess_' . $row->type, array());
    if ($default['grant_view'] != $row->grant_view && $default['grant_update'] != $row->grant_update && $default['grant_delete'] != $row->grant_delete) {
      db_query("INSERT INTO {nodeaccess} (nid, gid, realm, grant_view, grant_update, grant_delete) VALUES (%d, %d, '%s', %d, %d, %d)", $row->nid, $row->gid, $row->realm, $row->grant_view, $row->grant_update, $row->grant_delete);
    }
  }
}