123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <?php
- /**
- * @file
- * Convert data from Metatags Quick to Metatag.
- */
- /**
- * Import all data from Metatags Quick and delete it.
- */
- function metatag_importer_metatags_quick_import() {
- // Get a list of Metatags Quick fields.
- $fields = metatag_importer_get_quick_fields();
- $message = 'Converting records from @count Metatags Quick field(s).';
- $vars = array('@count' => count($data));
- if (drupal_is_cli() && function_exists('drush_print')) {
- drush_print(dt($message, $vars));
- }
- else {
- drupal_set_message(t($message, $vars));
- }
- // Get all of the data for these fields.
- $data = metatag_importer_get_quick_data($fields);
- // Process the data.
- foreach ($data as $quick) {
- $message = 'Converting @count records from Metatags Quick..';
- $vars = array('@count' => count($quick));
- if (drupal_is_cli() && function_exists('drush_print')) {
- drush_print(dt($message, $vars));
- }
- else {
- drupal_set_message(t($message, $vars));
- }
- metatag_importer_metatags_quick_process($quick);
- }
- if (drupal_is_cli() && function_exists('drush_print')) {
- drush_print(dt('All done!'));
- }
- else {
- drupal_set_message(t('All done!'));
- }
- }
- /**
- * Process a row from Metatags Quick.
- *
- * Imports data into metatag structure, and deletes Metatags Quick data.
- *
- * @param array $quick
- * Row of data from Metatags Quick.
- */
- function metatag_importer_metatags_quick_process(array $quick) {
- // Identify which Metatag meta tags will be filled by Metatags Quick values.
- $tag_map = array(
- 'title' => 'title',
- 'keywords' => 'keywords',
- 'abstract' => 'abstract',
- 'description' => 'description',
- 'canonical' => 'canonical',
- );
- if (module_exists('metatag_opengraph')) {
- $tag_map['og:title'] = 'title';
- $tag_map['og:description'] = 'description';
- }
- if (module_exists('metatag_twitter_cards')) {
- $tag_map['twitter:title'] = 'title';
- $tag_map['twitter:description'] = 'description';
- }
- $entity_type = $quick['entity_type'];
- $entity_id = $quick['entity_id'];
- $revision_id = $quick['revision_id'];
- $langcode = $quick['language'];
- // Fallback to entity language if no field language is set.
- if (LANGUAGE_NONE == $langcode) {
- $entities = entity_load($entity_type, array($entity_id));
- if (!empty($entities[$entity_id])) {
- $langcode = entity_language($entity_type, $entities[$entity_id]);
- }
- }
- // Check for an existing record.
- $data = metatag_metatags_load($entity_type, $entity_id);
- // Drop back one level because the results will be keyed by revision_id.
- if (!empty($data)) {
- $data = reset($data);
- }
- // Map the Quick meta tags.
- foreach ($tag_map as $dest => $source) {
- if (!empty($quick['fields'][$source]['value'])) {
- $data[$langcode][$dest] = array('value' => $quick['fields'][$source]['value']);
- // Add the default suffix to the page title.
- if ($dest == 'title') {
- $data[$langcode][$dest]['value'] .= ' | [site:name]';
- }
- }
- }
- // Create or update the {metatag} record.
- if (!empty($data)) {
- metatag_metatags_save($entity_type, $entity_id, $revision_id, $data);
- }
- if (!empty($quick['fields'])) {
- metatag_importer_delete_quick_data($quick['fields']);
- }
- // Reset the entity cache. If entitycache module is used, this also resets
- // its permanent cache.
- entity_get_controller($entity_type)->resetCache(array($entity_id));
- }
- /**
- * Get all fields from Metatags Quick.
- *
- * @return array
- * Array of field names, keyed by name.
- */
- function metatag_importer_get_quick_fields() {
- $fields = array();
- // Get a list of all entities that use a Metatags Quick field.
- foreach (field_info_instances() as $entity_type => $bundles) {
- // Skip the custon entity type provided by Metatags Quick.
- if ($entity_type == 'metatags_path_based') {
- continue;
- }
- foreach ($bundles as $bundle_name => $bundle) {
- foreach ($bundle as $field_name => $field) {
- if ($field['widget']['module'] == 'metatags_quick') {
- $fields[$field_name] = $field_name;
- }
- }
- }
- }
- return $fields;
- }
- /**
- * Get metatags_quick data from the database.
- *
- * @param array $fields
- * Array of field names.
- *
- * @return array
- * Metadata
- */
- function metatag_importer_get_quick_data(array $fields) {
- $data = array();
- foreach ($fields as $field_name) {
- $meta_tag = str_replace('meta_', '', str_replace('field_', '', $field_name));
- $results = db_select('field_data_' . $field_name, 'f')
- ->fields('f', array(
- 'entity_type',
- 'bundle',
- 'entity_id',
- 'revision_id',
- 'language',
- $field_name . '_metatags_quick',
- ))
- ->condition('f.entity_type', array('metatags_path_based'), '<>')
- ->orderBy('f.entity_type', 'ASC')
- ->orderBy('f.entity_id', 'ASC')
- ->orderBy('f.revision_id', 'ASC')
- ->execute();
- foreach ($results as $result) {
- $id = implode(':', array(
- $result->entity_type,
- $result->entity_id,
- $result->revision_id,
- $result->language,
- ));
- if (!isset($data[$id])) {
- $data[$id] = array(
- 'entity_type' => $result->entity_type,
- 'bundle' => $result->bundle,
- 'entity_id' => $result->entity_id,
- 'revision_id' => $result->revision_id,
- 'language' => $result->language,
- 'fields' => array(),
- );
- }
- $data[$id]['fields'][$meta_tag] = array(
- 'field_name' => $field_name,
- 'value' => $result->{$field_name . '_metatags_quick'},
- 'meta_tag' => $meta_tag,
- );
- }
- }
- return $data;
- }
- /**
- * Delete the old metatags_quick records.
- *
- * @param array $quick
- * Records to delete.
- */
- function metatag_importer_delete_quick_data(array $quick) {
- foreach ($quick as $field) {
- db_delete('field_data_' . $field['field_name'])
- ->condition('entity_type', $quick['entity_type'])
- ->condition('entity_id', $quick['entity_id'])
- ->condition('language', $quick['language'])
- ->execute();
- db_delete('field_revision_' . $field['field_name'])
- ->condition('entity_type', $quick['entity_type'])
- ->condition('entity_id', $quick['entity_id'])
- ->condition('language', $quick['language'])
- ->execute();
- }
- }
|