From 41ccbd594015afffc3e9dc581c897afdba743546 Mon Sep 17 00:00:00 2001
From: DjebbZ <khalid.jebbari@gmail.com>
Date: Sat, 13 Aug 2011 18:57:52 +0200
Subject: [PATCH] #101506 : Added a Reports page with fields usage in views

---
 includes/admin.inc |   55 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 views_ui.module    |    7 ++++++
 2 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/includes/admin.inc b/includes/admin.inc
index b85cbc3..61a5bc3 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -5055,3 +5055,58 @@ function views_ui_default_button($element, &$form_state, $form) {
   $element['#attached']['js'][] = array('type' => 'setting', 'data' => $setting);
   return $element;
 }
+
+/**
+ * List all instances of fields on any views.
+ *
+ * Therefore it builds up a table of each field which is used in any view.
+ *
+ * @see field_ui_fields_list
+ */
+function views_ui_field_list() {
+  $views = views_get_all_views();
+
+  // Fetch all fieldapi fields which are used in views
+  // Therefore search in all views, displays and handler-types.
+  $fields = array();
+  foreach ($views as $view) {
+    foreach ($view->display as $display_id => $display) {
+      if ($view->set_display($display_id)) {
+        foreach (views_object_types() as $type => $info) {
+          foreach ($view->get_items($type, $display_id) as $item) {
+            $data = views_fetch_data($item['table']);
+            if (isset($data[$item['field']]) && isset($data[$item['field']][$type])
+              && $data = $data[$item['field']][$type]) {
+              // The final check that we have a fieldapi field now.
+              if (isset($data['field_name'])) {
+                $fields[$data['field_name']][$view->name] = $view->name;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  $header = array(t('Field name'), t('Used in'));
+  $rows = array();
+  foreach ($fields as $field_name => $views) {
+
+    $rows[$field_name]['data'][0] = check_plain($field_name);
+    foreach ($views as $view) {
+      $rows[$field_name]['data'][1][] = l($view, "admin/structure/views/view/$view");
+    }
+    $rows[$field_name]['data'][1] = implode(', ', $rows[$field_name]['data'][1]);
+  }
+
+  // Sort rows by field name.
+  ksort($rows);
+  $output = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#empty' => t('No fields have been used in views yet.'),
+  );
+
+  return $output;
+}
diff --git a/views_ui.module b/views_ui.module
index 73d1a90..ea618f0 100644
--- a/views_ui.module
+++ b/views_ui.module
@@ -145,6 +145,13 @@ function views_ui_menu() {
     'type' => MENU_CALLBACK,
   ) + $base;
 
+  // A page in the Reports section to show usage of fields in all views
+  $items['admin/reports/views-fields'] = array(
+    'title' => 'Fields used in views',
+    'description' => 'Overview of fields used in all views.',
+    'page callback' => 'views_ui_field_list',
+  ) + $base;
+
   return $items;
 }
 
-- 
1.7.4.1

