diff --git a/metatag.install b/metatag.install index 0b65e59..37d4faf 100644 --- a/metatag.install +++ b/metatag.install @@ -1682,3 +1682,95 @@ function metatag_update_7036() { function metatag_update_7037() { variable_set('menu_rebuild_needed', TRUE); } + +/** + * Migrate data from the page_title module, if available. + */ +function metatag_update_7038() { + if (db_table_exists('page_title')) { + $converted = 0; + $page_titles = db_select('page_title', 'pt') + ->fields('pt', array('type', 'id', 'page_title')) + ->execute(); + + // Get general metatag config settings. + $metatag_config_global = metatag_config_load('global'); + $metatag_config_node = metatag_config_load('node'); + $metatag_config_taxonomy_term = metatag_config_load('taxonomy_term'); + $metatag_config_user = metatag_config_load('user'); + + // Loop over each of the page_title records. + while ($pt_data = $page_titles->fetchObject()) { + $entity_type = $pt_data->type; + $entity_id = $pt_data->id; + + // Load the entity. + $entity = entity_load($entity_type, array($entity_id)); + if (empty($entity)) { + continue; + } + + $entity = reset($entity); + + // Extract additional values from the entity. + $langcode = metatag_entity_get_language($entity_type, $entity); + list($entity_id, $revision_id) = entity_extract_ids($entity_type, $entity); + + // Load any possible existing meta tags for this object. + $existing_data = metatag_metatags_load_multiple($entity_type, array($entity_id)); + + switch ($entity_type) { + case 'node': + $metatag_config_node_type = metatag_config_load('node:' . $entity->type); + + if (!empty($metatag_config_node_type) && isset($metatag_config_node_type->config['title'])) { + $title_setting = $metatag_config_node_type->config['title']['value']; + } + else if (isset($metatag_config_node->config['title'])) { + $title_setting = $metatag_config_node->config['title']['value']; + } + else { + $title_setting = $metatag_config_global->config['title']['value']; + } + $metatag_title = str_replace('[current-page:title]', trim($pt_data->page_title), $title_setting); + $metatag_title = str_replace('[node:title]', trim($pt_data->page_title), $metatag_title); + break; + + case 'taxonomy_term': + $metatag_config_vocabulary_type = metatag_config_load('taxonomy_term:' . $entity->vocabulary_machine_name); + + if (!empty($metatag_config_vocabulary_type) && isset($metatag_config_vocabulary_type->config['title'])) { + $title_setting = $metatag_config_vocabulary_type->config['title']['value']; + } + elseif (isset($metatag_config_taxonomy_term->config['title'])) { + $title_setting = $metatag_config_taxonomy_term->config['title']['value']; + } + else { + $title_setting = $metatag_config_global->config['title']['value']; + } + $metatag_title = str_replace('[current-page:title]', trim($pt_data->page_title), $title_setting); + $metatag_title = str_replace('[term:name]', trim($pt_data->page_title), $metatag_title); + break; + + case 'user': + if (isset($metatag_config_user->config['title'])) { + $title_setting = $metatag_config_user->config['title']['value']; + } + else { + $title_setting = $metatag_config_global->config['title']['value']; + } + $metatag_title = str_replace('[current-page:title]', trim($pt_data->page_title), $title_setting); + $metatag_title = str_replace('[user:name]', trim($pt_data->page_title), $metatag_title); + break; + } + $existing_data[$entity_id][$langcode]['title']['value'] = $metatag_title; + + metatag_metatags_save($entity_type, $entity_id, $revision_id, $existing_data[$entity_id], $langcode); + $converted += db_delete('page_title') + ->condition('type', $entity_type) + ->condition('id', $entity_id) + ->execute(); + } + drupal_set_message(t('Meta tag: Migrated !count record(s) from the Page Title module.', array('!count' => $converted))); + } +}