1.20.x file.pages.inc | file_usage_page($file) |
Page callback to show file usage information.
File
- modules/
file/ file.pages.inc, line 998 - Supports file operations including Manage and Delete.
Code
function file_usage_page($file) {
$rows = array();
$occured_entities = array();
// Determine all of the locations where a file is used, then loop through the
// occurrences and filter out any duplicates.
foreach (file_usage_list($file) as $module => $type) {
foreach ($type as $entity_type => $entity_ids) {
// There are cases where the actual entity doesn't exist.
// We have to handle this.
$entity_info = entity_get_info($entity_type);
$entities = empty($entity_info) ? NULL : entity_load($entity_type, array_keys($entity_ids));
foreach ($entity_ids as $entity_id => $count) {
// If this entity has already been listed in the table, just add any
// additional usage to the total count column in the table row and
// continue on to the next iteration of the loop.
if (isset($occured_entities[$entity_type][$entity_id])) {
$rows[$occured_entities[$entity_type][$entity_id]][2] += $count;
continue;
}
// Retrieve the label and the URI of the entity.
$label = empty($entities[$entity_id]) ? $module : entity_label($entity_type, $entities[$entity_id]);
$entity_uri = empty($entities[$entity_id]) ? NULL : entity_uri($entity_type, $entities[$entity_id]);
// Link the label to the URI when possible.
if (!empty($entity_uri['path'])) {
// Unlike Node or Term entities File entities have a stream wrapper
// to the file set as their path, but the path to the entities' page
// is "path/[fid]".
// @todo Fix in https://github.com/backdrop/backdrop-issues/issues/2300
if ($entity_type == 'file') {
$uri = 'file/' . $entity_id;
}
else {
$uri = $entity_uri['path'];
}
$entity_label = l($label, $uri);
}
else {
$entity_label = check_plain($label);
}
$rows[] = array($entity_label, $entity_type, $count);
// Record the occurrence of the entity to ensure that it isn't listed in
// the table again.
$occured_entities[$entity_type][$entity_id] = count($rows) - 1;
}
}
}
$header = array(t('Entity'), t('Entity type'), t('Use count'));
$build['caption'] = array(
'#type' => 'help',
'#markup' => t('This table lists all of the places where @filename is used.', array('@filename' => $file->filename)),
);
$build['usage_table'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
'#empty' => t('This file is not currently used.'),
);
return $build;
}