You are here

function _media_retrieve_xml in D7 Media 7

A wrapper around simplexml to retrieve a given XML file.

Parameters

$url: The URL to the XML to retrieve. @param $display_errors Optional; if TRUE, then we'll display errors to the end user. They'll be logged to the watchdog in any case. @param $refresh Optional; if TRUE, then we'll force a new load of the XML. Otherwise, a cached version will be retrieved if possible. @return A fully populated object, or FALSE on an error.

1 call to _media_retrieve_xml()
media_retrieve_xml in ./media.module
A wrapper around simplexml to retrieve a given XML file.

File

includes/media.xml.inc, line 22
XML data retrieval and storage API for Media.

Code

function _media_retrieve_xml($url, $display_errors = FALSE, $refresh = FALSE) {
  $xmls =& drupal_static(__FUNCTION__, array());

  // Return our cached XML if allowed, and it exists.
  if (!$refresh && isset($xmls[$url])) {
    return $xmls[$url];
  }
  elseif (!$refresh && ($cache = cache_get('media:xml:' . $url, 'cache_media_xml'))) {
    $xmls[$url] = $cache->data;
    return $xmls[$url];
  }

  // Enable user error handling.
  libxml_use_internal_errors(TRUE);

  // Load the document
  $result = drupal_http_request($url);
  $xml = simplexml_load_string($result->data);
  if (!$xml) {
    foreach (libxml_get_errors() as $error) {
      $params = array(
        '%url' => $url,
        '%error' => $error->message,
      );

      // Handle errors here.
      if ($display_errors) {
        drupal_set_message(t('Error retrieving XML from %url: %error', $params), 'error');
      }
      watchdog('media', 'Error retrieving XML from %url: %error', $params, WATCHDOG_WARNING);
    }

    // Clear our error cache.
    libxml_clear_errors();

    // Set the static cache, but not Drupal's cache, so we can attempt to
    // retrieve the file another time if possible.
    $xmls[$url] = FALSE;
  }
  else {
    $xmls[$url] = _media_unserialize_xml($xml);
    cache_set('media:xml:' . $url, $xmls[$url], 'cache_media_xml', media_variable_get('xml_cache_expire', 3600));
  }
  return $xmls[$url];
}