You are here

function advagg_get_remote_libraries_version in Advanced CSS/JS Aggregation 7.2

Get the latest version number for the remote version.

Parameters

string $name: Name of the library.

array $library: An associative array containing all information about the library.

bool $use_cache: TRUE try the cache first.

Return value

string The latest version number as a string or 0 on failure.

5 calls to advagg_get_remote_libraries_version()
advagg_font_admin_settings_form in advagg_font/advagg_font.admin.inc
Form builder; Configure advagg settings.
advagg_font_libraries_info in advagg_font/advagg_font.module
Implements hook_libraries_info().
advagg_get_remote_libraries_versions in ./advagg.module
Update github version numbers to the latest.
advagg_mod_libraries_info in advagg_mod/advagg_mod.module
Implements hook_libraries_info().
advagg_validator_libraries_info in advagg_validator/advagg_validator.module
Implements hook_libraries_info().

File

./advagg.module, line 5753
Advanced CSS/JS aggregation module.

Code

function advagg_get_remote_libraries_version($name, array $library, $use_cache = TRUE) {
  if ($use_cache) {
    $cid = 'advagg_get_remote_libraries_versions';
    $versions = advagg_get_remote_libraries_versions_cache($cid);
    if (isset($versions[$name]['remote'])) {
      return $versions[$name]['remote'];
    }
  }

  // Remote url is not set, see if we can generate it given the current data.
  if (empty($library['remote']['url']) && !empty($library['version arguments'])) {
    if (!isset($library['version arguments']['file']) && isset($library['version arguments']['variants'])) {

      // Use the first variant.
      $file = reset($library['version arguments']['variants']);
      $library['version arguments']['file'] = $file['file'];
      $library['version arguments']['pattern'] = $file['pattern'];
    }
    if (!empty($library['version arguments']['file'])) {
      if (!empty($library['vendor url'])) {

        // Use vendor url if it's a github one.
        if (strpos($library['vendor url'], 'https://github.com/') === 0) {
          $parsed_vendor = @parse_url($library['vendor url']);

          // Previously: https://rawgit.com{$parsed_vendor['path']}/master/{$library['version arguments']['file']} .
          $library['remote']['url'] = "https://cdn.jsdelivr.net/gh{$parsed_vendor['path']}@master/{$library['version arguments']['file']}";
        }
      }
      if (empty($library['remote']['url']) && !empty($library['download url'])) {

        // Use download url if it's a github one.
        if (strpos($library['download url'], 'https://github.com/') === 0) {
          $parsed_download = @parse_url($library['download url']);
          $paths = explode('/', $parsed_download['path']);
          $parsed_download['path'] = "/{$paths[1]}/{$paths[2]}";

          // Previously: https://rawgit.com{$parsed_download['path']}/master/{$library['version arguments']['file']} .
          $library['remote']['url'] = "https://cdn.jsdelivr.net/gh{$parsed_download['path']}@master/{$library['version arguments']['file']}";
        }
      }
    }
  }

  // Remote callback is not set, try to generate it given the current data.
  if (empty($library['remote']['callback']) && isset($library['version arguments']['file'])) {
    if (!empty($library['version callback'])) {

      // Use defined parser.
      $library['remote']['callback'] = $library['version callback'];
    }
    else {
      if ($library['version arguments']['file'] === 'package.json') {

        // JSON parser.
        $library['remote']['callback'] = 'advagg_get_github_version_json';
      }
      else {

        // Text parser.
        $library['remote']['callback'] = 'advagg_get_github_version_txt';
      }
    }
  }

  // Get remote version.
  $return = 0;
  if (!empty($library['remote']) && !empty($library['remote']['callback']) && !empty($library['remote']['url']) && isset($library['version arguments']) && is_callable($library['remote']['callback']) && variable_get('advagg_remote_version_check', ADVAGG_REMOTE_VERSION_CHECK)) {
    $return = $library['remote']['callback']($library, $library['version arguments'], $library['remote']['url']);

    // Try package.json on failure.
    if (empty($return) && $library['version arguments']['file'] !== 'package.json') {
      $pos = strrpos($library['remote']['url'], $library['version arguments']['file']);
      $library['remote']['url'] = substr($library['remote']['url'], 0, $pos) . 'package.json';
      $library['remote']['callback'] = 'advagg_get_github_version_json';
      $return = $library['remote']['callback']($library, $library['version arguments'], $library['remote']['url']);
    }
  }
  if (empty($return) && !empty($library['version arguments']['default_version'])) {
    $return = $library['version arguments']['default_version'];
  }
  return $return;
}