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
Comment #1
wmostrey commentedAsset 5.x-2 has been discontinued, please use 5.x-1.