| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 | <?php/** * @file * Install, update and uninstall functions for the uuid module. */define('UUID_UPGRADE_VAR', 'uuid_upgrade_in_progress');/** * Include some helper functions for the Entity API. */module_load_include('inc', 'uuid', 'uuid.entity');/** * Helper function that returns a schema field definition for UUID fields. * * @see uuid_schema_alter() * @see uuid_install() */function uuid_schema_field_definition() {  return array(    'type' => 'char',    'length' => 36,    'not null' => TRUE,    'default' => '',    'description' => 'The Universally Unique Identifier.',  );}/** * Implements hook_schema_alter(). */function uuid_schema_alter(&$schema = array()) {  $field = uuid_schema_field_definition();  foreach (uuid_get_core_entity_info() as $entity_type => $info) {    $schema[$info['base table']]['fields'][$info['entity keys']['uuid']] = $field;    if (!empty($info['revision table']) && !empty($info['entity keys']['revision uuid'])) {      $schema[$info['revision table']]['fields'][$info['entity keys']['revision uuid']] = $field;    }  }}/** * Implements hook_install(). */function uuid_install() {  _uuid_install_uuid_fields();  uuid_sync_all();}/** * Install the 'uuid' and 'vuuid' fields into Drupal core entity tables where needed. * * IMPORTANT:  This function is called both at install and update time.  If this method * is modified to add additional fields in the future, the update strategy must be * considered.  See the comment in uuid_update_7102. */function _uuid_install_uuid_fields() {  $field = uuid_schema_field_definition();  foreach (uuid_get_core_entity_info() as $entity_type => $info) {    if (!db_field_exists($info['base table'], $info['entity keys']['uuid'])) {      db_add_field($info['base table'], $info['entity keys']['uuid'], $field);      db_add_index($info['base table'], $info['entity keys']['uuid'], array($info['entity keys']['uuid']));    }    if (!empty($info['revision table']) && !empty($info['entity keys']['revision uuid'])) {      if (!db_field_exists($info['revision table'], $info['entity keys']['revision uuid'])) {        db_add_field($info['revision table'], $info['entity keys']['revision uuid'], $field);        db_add_index($info['revision table'], $info['entity keys']['revision uuid'], array($info['entity keys']['revision uuid']));      }    }  }}/** * Implements hook_uninstall(). */function uuid_uninstall() {  foreach (uuid_get_core_entity_info() as $entity_type => $info) {    if (db_field_exists($info['base table'], $info['entity keys']['uuid'])) {      db_drop_field($info['base table'], $info['entity keys']['uuid']);      db_drop_index($info['base table'], $info['entity keys']['uuid']);    }    if (!empty($info['revision table']) && !empty($info['entity keys']['revision uuid'])) {      if (db_field_exists($info['revision table'], $info['entity keys']['revision uuid'])) {        db_drop_field($info['revision table'], $info['entity keys']['revision uuid']);        db_drop_index($info['revision table'], $info['entity keys']['revision uuid']);      }    }  }}/** * Implements hook_modules_installed(). */function uuid_modules_installed($modules) {  // Run the installation hook. This makes sure that the schema for all  // supported core entity types is set correct.  uuid_install();}/** * Create uuid_vocabulary and uuid_term_data tables. */function uuid_update_6001() {  $ret = array();  db_create_table($ret, 'uuid_vocabulary', uuid_table_schema('vocabulary', 'vid'));  db_create_table($ret, 'uuid_term_data', uuid_table_schema('term_data', 'tid'));  return $ret;}/** * For each of out tables, drop the indexe on the UUID column and add a unique * key on that column. */function uuid_update_6002() {  $ret = array();  foreach (uuid_schema() as $table => $schema) {    db_drop_index($ret, $table, $table . '_uuid_idx');    db_add_unique_key($ret, $table, $table . '_uuid_key', array('uuid'));  }  return $ret;}/** * Create uuid_comment table. */function uuid_update_6003() {  $ret = array();  db_create_table($ret, 'uuid_comments', uuid_table_schema('comments', 'cid'));  return $ret;}/** * Fix the column definitions for uuid columns in all tables * to use the more efficient char spec. */function uuid_update_6004() {  $ret = array();  // Use what's in uuid_table_schema in order to be consistent.  $tables = uuid_schema();  $spec = $tables['uuid_node']['fields']['uuid'];  foreach ($tables as $tablename => $schema) {    if (db_table_exists($tablename)) {      db_change_field($ret, $tablename, 'uuid', 'uuid', $spec);    }  }  return $ret;}/** * Modify existing uuid_node_revisions table to support revision deletion, and * add in as much legacy data as possible. */function uuid_update_6005() {  $ret = array();  if (db_table_exists('uuid_node_revisions')) {    // Use what's already defined in uuid schema in order to be consistent.    $schema = uuid_schema();    $spec = $schema['uuid_node_revisions']['fields']['nid'];    db_add_field($ret, 'uuid_node_revisions', 'nid', $spec);    // Add node ids to the new column, for revisions that exist, but now have a    // default value of 0 in uuid_node_revisions.    $result = db_query('SELECT nr.nid, nr.vid FROM {node_revisions} AS nr LEFT JOIN {uuid_node_revisions} AS unr ON unr.vid=nr.vid WHERE unr.nid=%d', 0);    while ($item = db_fetch_object($result)) {      $ret[] = update_sql('UPDATE {uuid_node_revisions} SET nid=' . (int) $item->nid . ' WHERE vid=' . (int) $item->vid);    }    // Add uuid_node_revision rows for rows that don't exist, but should.    $result = db_query('SELECT nr.nid, nr.vid FROM {node_revisions} AS nr LEFT JOIN {uuid_node_revisions} AS unr ON unr.vid=nr.vid WHERE unr.nid IS NULL');    while ($item = db_fetch_object($result)) {      $ret[] = update_sql(sprintf("INSERT INTO {uuid_node_revisions} (vid, uuid, nid) VALUES(%d, '%s', %d)", $item->vid, uuid_uuid(), $item->nid));    }    // Delete any orphaned revision vid, uuid pairs.    $ret[] = update_sql('DELETE FROM {uuid_node_revisions} WHERE nid=0');  }  return $ret;}/** * Remove old variables. */function uuid_update_7100() {  $types = array(    'nodes',    'users',    'taxonomy',    'comments',  );  foreach ($types as $type) {    variable_del('uuid_automatic_for_' . $type);  }  return array();}/** * Clear cache for installations that used alpha1. Modules that previously was * enabled in uuid_update_7100() doesn't exist anymore. */function uuid_update_7101() {  drupal_flush_all_caches();}/** * Insure that the uuid and vuuid fields are added where needed. * * Note that update 7102 calls _uuid_install_uuid_fields(), which is an * idempotent function.  If _uuid_install_uuid_fields() is changed at some * point in the future (but remains idempotent), then some uuid users * will have run update 7102, and some will not.  A new uuid_update_7103() * function would would therefore be necessary to update all users to * the latest schema.  At the same time, uuid_update_7102() could become * an empty function, as it would not be necessary to call _uuid_install_uuid_fields() * twice. */function uuid_update_7102() {  // If the user have disabled the UUID module during upgrade (as UPGRADE.txt  // instructs), some functions will be missing. So include the module file.  module_load_include('module', 'uuid', 'uuid');  _uuid_install_uuid_fields();  uuid_sync_all();}/** * Modify the labels of all example entities created by the now removed * uuid_default_entities_example.module to make it clear they're examples. * Also remove the administrator role of any example user. */function uuid_update_7103() {  // These are UUIDs of all the example entities that might exist after having  // installed uuid_default_entities_example.module.  $info = entity_get_info();  $uuids = array(    'node' => array(      'b0558664-c94b-3674-d9df-3e1696b2e471',      '5e3d8bbe-a1f2-f2d4-fdc0-71e6c23aa837',    ),    'user' => array(      '7cf875e6-dc15-4404-f190-5a7c3e91d14c',    ),  );  // we can't assume taxonomy is enabled  if (isset($info['taxonomy_term'])) {    $uuids['taxonomy_term'] = array(      'bcb92ce8-2236-e264-65c8-0c163ae716d1',      '4293a15c-531a-6164-7d1b-668ed019a6bd',      'af738a46-f278-cf84-d94d-9e03879fd71e',    );  }  foreach (array_keys($uuids) as $entity_type) {    $info = entity_get_info($entity_type);    $entity_ids = entity_get_id_by_uuid($entity_type, $uuids[$entity_type]);    $entities = entity_load($entity_type, $entity_ids);    foreach ($entities as $entity) {      // Update the label to make it clear this is example content.      $entity->{$info['entity keys']['label']} = $entity->{$info['entity keys']['label']} . ' (UUID example)';      // Remove the administrator role from any user.      if ($entity_type == 'user' && $rid = array_search('administrator', $entity->roles)) {        unset($entity->roles[$rid]);      }      entity_save($entity);    }  }}
 |