popsu-d7/sites/all/modules/uuid/uuid.install
Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

233 lines
7.4 KiB
Plaintext

<?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 of 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();
}