function apachesolr_update_7012 in Apache Solr Search 7
Same name and namespace in other branches
- 8 apachesolr.install \apachesolr_update_7012()
Rename some variables and update the database tables
File
- ./
apachesolr.install, line 650 - Install and related hooks for apachesolr_search.
Code
function apachesolr_update_7012() {
if (variable_get('apachesolr_update_from_6303', FALSE)) {
return NULL;
}
// @see: drupal_load()
if (!function_exists('apachesolr_default_environment')) {
include_once dirname(__FILE__) . '/apachesolr.module';
}
$env_id = apachesolr_default_environment();
// Variable changed from integer to array with environment integers
$stored = variable_get('apachesolr_index_last', array());
if (isset($stored['apachesolr'])) {
$stored[$env_id]['node']['last_entity_id'] = $stored['apachesolr']['last_nid'];
$stored[$env_id]['node']['last_changed'] = $stored['apachesolr']['last_change'];
unset($stored['apachesolr']);
variable_set('apachesolr_index_last', $stored);
}
$last = variable_get('apachesolr_index_updated', NULL);
if (isset($last)) {
variable_set('apachesolr_index_updated', array(
$env_id => (int) $last,
));
}
// Change namespace to environment id
$excluded_types = apachesolr_environment_variable_get('apachesolr', 'apachesolr_search_excluded_types', array());
if (!empty($excluded_types)) {
apachesolr_environment_variable_set($env_id, 'apachesolr_search_excluded_types', $excluded_types);
apachesolr_environment_variable_del('apachesolr', 'apachesolr_search_excluded_types');
}
// Install the new schema
//Predefine an amount of types that get their own table
$types = array(
'other' => 'apachesolr_index_entities',
'node' => 'apachesolr_index_entities_node',
);
foreach ($types as $type => $table) {
$schema[$table] = array(
'description' => 'Stores a record of when an entity changed to determine if it needs indexing by Solr.',
'fields' => array(
'entity_type' => array(
'description' => 'The type of entity.',
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
),
'entity_id' => array(
'description' => 'The primary identifier for an entity.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'bundle' => array(
'description' => 'The bundle to which this entity belongs.',
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
),
'status' => array(
'description' => 'Boolean indicating whether the entity is visible to non-administrators (eg, published for nodes).',
'type' => 'int',
'not null' => TRUE,
'default' => 1,
),
'changed' => array(
'description' => 'The Unix timestamp when an entity was changed.',
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
),
'indexes' => array(
'changed' => array(
'bundle',
'status',
'changed',
),
),
'primary key' => array(
'entity_id',
),
);
if ($type == 'other') {
// Need the entity type also in the pkey for multiple entities in one table.
$schema[$table]['primary key'][] = 'entity_type';
}
// Create the table
db_create_table($table, $schema[$table]);
}
$schema['apachesolr_index_bundles'] = array(
'description' => 'Records what bundles we should be indexing for a given environment.',
'fields' => array(
'env_id' => array(
'description' => 'The name of the environment.',
'type' => 'varchar',
'length' => 64,
'not null' => TRUE,
),
'entity_type' => array(
'description' => 'The type of entity.',
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
),
'bundle' => array(
'description' => 'The bundle to index.',
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
),
),
'primary key' => array(
'env_id',
'entity_type',
'bundle',
),
);
db_create_table('apachesolr_index_bundles', $schema['apachesolr_index_bundles']);
// Move the data from apachesolr_search_node to apachesolr_index_entities_node
$select = db_select('apachesolr_search_node', 'asn');
$select
->join('node', 'n', 'asn.nid = n.nid');
$select
->addField('n', 'nid', 'entity_id');
$select
->addField('n', 'type', 'bundle');
$select
->addField('asn', 'status', 'status');
$select
->addField('asn', 'changed', 'changed');
$select
->addExpression("'node'", 'entity_type');
$return_value = db_insert('apachesolr_index_entities_node')
->fields(array(
'entity_id',
'bundle',
'status',
'changed',
'entity_type',
))
->from($select)
->execute();
// Drop the table apachesolr_search_node
db_drop_table('apachesolr_search_node');
$environments = apachesolr_load_all_environments();
foreach ($environments as $env_id => $environment) {
$excluded_types = apachesolr_environment_variable_get($env_id, 'apachesolr_search_excluded_types', array());
// Get indexable entity types
$options = array();
foreach (entity_get_info() as $entity_type => $entity_info) {
if ($entity_type == 'node') {
foreach ($entity_info['bundles'] as $key => $info) {
// See if it was excluded & only of entity node. We will not enable
// other entity types by default
if (empty($excluded_types[$key])) {
$options[$entity_type][$key] = $key;
}
}
}
}
// Set all except the excluded types
// @see apachesolr_index_set_bundles()
foreach ($options as $entity_type => $bundles) {
db_delete('apachesolr_index_bundles')
->condition('env_id', $env_id)
->condition('entity_type', $entity_type)
->execute();
if ($bundles) {
$insert = db_insert('apachesolr_index_bundles')
->fields(array(
'env_id',
'entity_type',
'bundle',
));
foreach ($bundles as $bundle) {
$insert
->values(array(
'env_id' => $env_id,
'entity_type' => $entity_type,
'bundle' => $bundle,
));
}
$insert
->execute();
}
}
// Remove the excluded types
apachesolr_environment_variable_del($env_id, 'apachesolr_search_excluded_types');
}
}