You are here

function globallink_entity_reference_generate_xml_document in GlobalLink Connect for Drupal 7.7

1 call to globallink_entity_reference_generate_xml_document()
globallink_entity_reference_get_xml in globallink_custom_entity/globallink_custom_entity.inc

File

globallink_custom_entity/globallink_custom_entity.inc, line 15

Code

function globallink_entity_reference_generate_xml_document($entity, $target_arr, $tnid = NULL, $for_display = FALSE, $source_lang = '', $entity_type) {
  $entityref = array();
  $is_hook_enabled = variable_get('globallink_implementation_type', 0);
  try {
    $dom = new DOMDocument('1.0', 'UTF-8');
    $dom->formatOutput = TRUE;
    $root = $dom
      ->createElement('content');
    $eid = $dom
      ->createAttribute('eid');
    if ($tnid != NULL) {
      $eid->value = $tnid;
    }
    else {
      $eid->value = $entity->id;
    }
    $root
      ->appendChild($eid);
    $type = $dom
      ->createAttribute('entityType');
    $type->value = $entity_type;
    $root
      ->appendChild($type);
    $entity_bundle = $dom
      ->createAttribute('entityBundle');
    $entity_bundle->value = $entity->type;
    $root
      ->appendChild($entity_bundle);
    $url = $dom
      ->createAttribute('pageUrl');
    $root
      ->appendChild($url);
    $dom
      ->appendChild($root);
    $field_arr = field_info_instances($entity_type, $entity->type);

    //check if fields are added to field config table.

    //globallink_custom_entity_add_fields_config($field_arr, $entity, $entity_type);
    $keys = array_keys($field_arr);
    foreach ($keys as $field) {
      $field_def = field_read_field($field);
      $items = field_get_items($entity_type, $entity, $field, $source_lang);
      if ($items) {
        $parent_fc = '';
        if ($field_def['type'] == 'field_collection') {
          $parent_fc = $field;
          if (isset($items[0]['revision_id'])) {
            entity_load('field_collection_item', array(
              $items[0]['value'],
            ), array(
              'revision_id' => $items[0]['revision_id'],
            ));
          }
        }
        $entityref[] = globallink_entity_traverse_fields_and_field_collections($entity_type, $entity->type, $parent_fc, $entity->type, $entity->id, $items, $field, $field_def, $dom, $root, $entity, $target_arr, 0);
      }
    }
    if (module_exists('metatag')) {
      if (isset($entity->metatags)) {
        $ignore_metatags = [
          'geo.position',
          'icbm',
          'rating',
          'referrer',
          'revisit-after',
          'content-language',
        ];
        if ($for_display) {
          if (!empty($entity->metatags[$entity->language])) {
            $metatags = $entity->metatags[$entity->language];
            foreach ($metatags as $name => $value) {
              if (isset($value['value']) && !is_array($value['value'])) {
                if (in_array($name, $ignore_metatags)) {
                  continue;
                }
                globallink_insert_child_element($dom, $root, 'metatag', $value['value'], array(
                  'entity_type' => GLOBALLINK_ENTITY_TYPE_NODE,
                  'name' => $name,
                  'label' => 'Metatag - ' . ucwords($name),
                ));
              }
            }
          }
        }
        elseif (globallink_is_field_configured_for_translation(GLOBALLINK_ENTITY_TYPE_NODE, $entity->type, 'metatags', $entity->type)) {
          if (!empty($entity->metatags[$entity->language])) {
            $metatags = $entity->metatags[$entity->language];
            foreach ($metatags as $name => $value) {
              if (isset($value['value']) && !is_array($value['value'])) {
                if (in_array($name, $ignore_metatags)) {
                  continue;
                }
                globallink_insert_child_element($dom, $root, 'metatag', $value['value'], array(
                  'entity_type' => GLOBALLINK_ENTITY_TYPE_NODE,
                  'name' => $name,
                  'label' => 'Metatag - ' . ucwords($name),
                ));
              }
            }
          }
        }
      }
    }
  } catch (Exception $e) {
    watchdog(GLOBALLINK_MODULE, 'Exception - %function - File[%file], Line[%line], Code[%code], Message[%message]', array(
      '%function' => __FUNCTION__,
      '%file' => $e
        ->getFile(),
      '%line' => $e
        ->getLine(),
      '%code' => $e
        ->getCode(),
      '%message' => $e
        ->getMessage(),
    ), WATCHDOG_ERROR);
    throw $e;
  }
  $root_element = $dom
    ->getElementsByTagName('content')
    ->item(0);
  if (!$root_element
    ->hasChildNodes()) {
    return FALSE;
  }
  $result = array(
    $dom
      ->saveXML(),
    $entityref,
  );
  return $result;
}