Sometimes the asset_load function gets a macro as param. Currently this isn't handled.

Here is the fix:

function asset_load($param = array(), $reset = NULL) {
  static $assets = array();

  if ($reset) {
    $assets = array();
  }

  $arguments = array();
  if (is_numeric($param)) {
    if (isset ($assets[$param])) {
      return is_object($assets[$param]) ? drupal_clone($assets[$param]) : $assets[$param];
    }
    if ($param == 0) {
      $assets[$param] = asset_load_root();
      return $assets[$param];
    }
    $cond = 'a.aid = %d';
    $arguments[] = $param;
  }
  elseif (is_array($param)) {
    // Turn the conditions into a query.
    foreach ($param as $key => $value) {
      $cond[] = 'a.'. db_escape_string($key) ." = '%s'";
      $arguments[] = $value;
    }
    $cond = implode(' AND ', $cond);
  }
  //BEGIN FIX - handle macro
  else  {
    $macros = asset_get_macros($param);
    $macro = $macros[$param];        
    $aid = $macro['aid'];
    
    if (isset ($assets[$aid])) {
      return is_object($assets[$aid]) ? drupal_clone($assets[$aid]) : $assets[$aid];
    }
    if ($aid == 0) {
      $assets[$aid] = asset_load_root();
      return $assets[$aid];
    }
    $cond = 'a.aid = %d';
    $arguments[] = $aid;
  }
  //END FIX

  // Retrieve the asset.
  $asset = db_fetch_object(db_query('SELECT a.* FROM {asset} a WHERE '. $cond, $arguments));
  if (!$asset) {
    return false;
  }

  if ($asset->aid) {
    if ($extra = asset_type_invoke($asset, 'load')) {
      foreach ($extra as $key => $value) {
        $asset->$key = $value;
      }
    }

    if ($extra = module_invoke_all('assetapi', 'load', $asset)) {
      foreach ($extra as $key => $value) {
        $asset->$key = $value;
      }
    }

    // load the permissions
    $result = db_query('SELECT * FROM {asset_role} WHERE aid=%d', $asset->aid);
    while ($role = db_fetch_array($result)) {
      $asset->roles[$role['rid']] = $role['status'] ? $role['rid'] : 0;
    }
    
    // get formatters
    $asset->formatters = asset_get_formatters($asset);
  
    $assets[$asset->aid] = is_object($asset) ? drupal_clone($asset) : $asset;
  }

  return $asset;
}

Comments

wmostrey’s picture

Status: Active » Closed (fixed)

Asset 5.x-2 has been discontinued, please use 5.x-1.