? cache.patch
Index: google_analytics_api.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/google_analytics_api/google_analytics_api.module,v
retrieving revision 1.23
diff -u -p -r1.23 google_analytics_api.module
--- google_analytics_api.module	17 Nov 2009 17:35:31 -0000	1.23
+++ google_analytics_api.module	8 Jan 2010 13:57:32 -0000
@@ -119,7 +119,7 @@ function google_analytics_api_account_da
   return $data;
 }
 
-/*
+/**
  * Request report data.
  * @param $request['#dimensions']  required
  * @param $request['#metrics']     required
@@ -129,41 +129,59 @@ function google_analytics_api_account_da
  * @param $request['#end_date']    optional [default=today]
  * @param $request['#start_index'] optional [default=1]
  * @param $request['#max_results'] optional [default=10,000]
+ * 
+ * @param $cid                     required 
+ *   A unique cid for this request, you can re-use the same
+ *   cid if you are making the same query in more than
+ *   one place and want to re-use the results.
+ * @param $expire                  optional
+ *   The time to expire this cid, defaults to CACHE_NORMAL.
+ * @param $refresh                 optional
+ *   Use to force a fresh request even if there is cached data.
  */
-function google_analytics_api_report_data($request) {
-  // Make sure parameters are all there with a default value.
-  $params = array(
-    '#dimension' => NULL,
-    '#metrics' => NULL,
-    '#sort_metric' => NULL,
-    '#filter' => NULL,
-    '#start_date' => NULL,
-    '#end_date' => NULL,
-    '#start_index' => 1,
-    '#max_results' => 10000,
-  );
-  foreach ($params as $name => $value) {
-    if (!isset($request[$name])) {
-      $request[$name] = $value;
-    }
-  }
+function google_analytics_api_report_data($request, $cid, $expire = NULL, $refresh = FALSE) {
 
   $gapi = google_analytics_api_gapi();
   if (!$gapi) {
     return FALSE;
   }
 
-  // TODO: Insert a check to see if we have this query cached.
-  try {
-    $data = google_analytics_api_gapi()->requestReportData(
-      variable_get('google_analytics_api_profile_id', 0),
-      $request['#dimensions'], $request['#metrics'], $request['#sort_metric'],
-      $request['#filter'], $request['#start_date'], $request['#end_date'],
-      $request['#start_index'], $request['#max_results']);
+  if (!$refresh && $cache = cache_get($cid) && !empty($cache->data)) {
+    $data = $cache->data;
   }
-  catch (Exception $e) {
-    drupal_set_message(t('Google Analytics API: @message', array('@message' => $e->getMessage())));
-    return FALSE;
+  else {  
+    try {
+      // Make sure parameters are all there with a default value.
+      $params = array(
+        '#dimension' => null,
+        '#metrics' => null,
+        '#sort_metric' => null,
+        '#filter' => null,
+        '#start_date' => null,
+        '#end_date' => null,
+        '#start_index' => 1,
+        '#max_results' => 10000,
+      );
+      foreach ($params as $name => $value) {
+        if (!isset($request[$name])) {
+          $request[$name] = $value;
+        }
+      }
+      $data = google_analytics_api_gapi()->requestReportData(
+        variable_get('google_analytics_api_profile_id', 0),
+        $request['#dimensions'], $request['#metrics'], $request['#sort_metric'],
+        $request['#filter'], $request['#start_date'], $request['#end_date'],
+        $request['#start_index'], $request['#max_results']);
+        if (empty($expire)) {
+          $expire = CACHE_NORMAL;
+        }
+        cache_set($cid, $data, 'cache', $expire);
+    }
+    catch (Exception $e) {
+      watchdog('google_analytics_api', t('Google Analytics API: cid @cid @message', array('@cid' => $cid, '@message' => $e->getMessage())));
+      return FALSE;
+    }
   }
   return $data;
 }
+
