function shorten_url in Shorten URLs 6
Same name and namespace in other branches
- 8.2 shorten.module \shorten_url()
- 8 shorten.module \shorten_url()
- 7.2 shorten.module \shorten_url()
- 7 shorten.module \shorten_url()
Retrieves and beautifies the abbreviated URL. This is the main API function of this module.
Parameters
$original: The URL of the page for which to create the abbreviated URL. If not passed uses the current page.
$service: The service to use to abbreviate the URL. For services available by default, see shorten_shorten_service().
Return value
An abbreviated URL.
4 calls to shorten_url()
- shorten_current in ./shorten.module 
- Builds a textfield to show the short URL for the current page.
- shorten_form_shorten_submit in ./shorten.module 
- Submit function for the Shorten form.
- shorten_token_values in ./shorten.module 
- Implementation of hook_token_values().
- _shortener_url_behavior in shortener/shortener.module 
- Determines the link caption based on the filter behavior setting.
File
- ./shorten.module, line 124 
- Shortens URLs via external services.
Code
function shorten_url($original = '', $service = '') {
  if (!$original) {
    $original = url($_GET['q'], array(
      'absolute' => TRUE,
      'alias' => !variable_get('shorten_use_alias', 1),
    ));
  }
  if (!$service) {
    $service = variable_get('shorten_service', 'is.gd');
  }
  if ($service != 'Drupal ShortURL module' && $service != 'ShURLy') {
    // https://www.drupal.org/node/2324925
    $original = urlencode($original);
  }
  //First try to retrieve a value from the cache.
  $cached = cache_get($original, 'cache_shorten');
  if (!empty($cached->data) && time() < $cached->expire) {
    return $cached->data;
  }
  //We don't have anything cached for this URL, so try the primary service (or the one explicitly requested in the $service parameter).
  $services = module_invoke_all('shorten_service');
  if (isset($services[$service])) {
    $url = _shorten_get_url($original, $services[$service], $service);
  }
  //If the primary service fails, try the secondary service.
  if (empty($url)) {
    $service = variable_get('shorten_service_backup', 'TinyURL');
    if (isset($services[$service])) {
      $url = _shorten_get_url($original, $services[$service], $service);
    }
    //If the secondary service fails, use the original URL.
    if (empty($url)) {
      $url = $original;
    }
  }
  $url = trim($url);
  //Redundant for most services.
  //Replace "http://" with "www." if the URL is abbreviated because it's shorter.
  if ($url != $original && variable_get('shorten_www', TRUE)) {
    if (strpos($url, 'http://') === 0) {
      $url = drupal_substr($url, 7);
      if (strpos($url, 'www.') !== 0) {
        $url = 'www.' . $url;
      }
    }
    elseif (strpos($url, 'https://') === 0) {
      $url = drupal_substr($url, 8);
      if (strpos($url, 'www.') !== 0) {
        $url = 'www.' . $url;
      }
    }
  }
  //Cache the result for a limited time.
  $cache_duration = variable_get('shorten_cache_duration', 1814400);
  if ($url == $original) {
    $expire = time() + variable_get('shorten_cache_fail_duration', 1800);
  }
  elseif (is_numeric($cache_duration)) {
    $expire = time() + $cache_duration;
  }
  else {
    $expire = CACHE_PERMANENT;
  }
  cache_set($original, $url, 'cache_shorten', $expire);
  //Announce that we have a new short URL and return it.
  module_invoke_all('shorten_create', $original, $url, $service);
  return $url;
}