diff --git a/metatag.install b/metatag.install index 73cfaa9..ab7dd56 100644 --- a/metatag.install +++ b/metatag.install @@ -1549,3 +1549,98 @@ function metatag_update_7034() { } function metatag_update_7035() { } + +/** + * Migrate data from the page_title module, if available. + */ +function metatag_update_7036() { + 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()) { + // Load any possible existing meta tags for this object. + $existing_data = metatag_metatags_load_multiple($pt_data->type, array($pt_data->id)); + if (!empty($existing_data)) { + foreach ($existing_data[$pt_data->id] as $tag => $value) { + $existing_data[$pt_data->id] = array( + $tag => array( + 'value' => $value, + ), + ); + } + } + + // Set metatag page title as per settings. + $entity = entity_load($pt_data->type, array($pt_data->id)); + + $revision_id = NULL; + $langcode = NULL; + + switch ($pt_data->type) { + case 'node': + $metatag_config_node_type = metatag_config_load('node:' . $entity[$pt_data->id]->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); + $node = node_load($pt_data->id); + $revision_id = $node->vid; + $langcode = $node->language; + break; + + case 'taxonomy_term': + $metatag_config_vocabulary_type = metatag_config_load('taxonomy_term:' . $entity[$pt_data->id]->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']; + } + else if (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[$pt_data->id]['title']['value'] = $metatag_title; + + metatag_metatags_save($pt_data->type, $pt_data->id, $revision_id, $existing_data[$pt_data->id], $langcode); + $converted += db_delete('page_title') + ->condition('type', $pt_data->type) + ->condition('id', $pt_data->id) + ->execute(); + } + drupal_set_message(t('Meta tag: Migrated !count record(s) from the Page Title module.', array('!count' => $converted))); + } +}