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;
}