--- computed_field.module	2006-10-18 02:47:47.422349968 -0500
+++ modules/cck/computed_field.module	2006-10-18 02:46:23.509106720 -0500
@@ -107,6 +107,15 @@ function computed_field_field_settings($
         '#title' => t('Sortable'),
         '#default_value' => isset($field['data_sortable']) ? $field['data_sortable'] : true,
       );
+      $period = drupal_map_assoc(array(0, 3600, 10800, 21600, 32400, 43200, 86400), 'format_interval');
+      $period[0] = t('none');
+      $form['recompute'] = array(
+        '#type' => 'select',
+        '#title' => t('Recompute interval using cron'),
+        '#default_value' => isset($field['recompute']) ? $field['recompute'] : 0,
+        '#options' => $period,
+        '#description' => t('Only useful when not storing database.'),
+      );     
       return $form;
     case 'validate':
       if ($field['store']) {
@@ -119,7 +128,7 @@ function computed_field_field_settings($
       }
       break;
     case 'save':
-      return array('code', 'display', 'display_format', 'store', 'data_type', 'data_length', 'data_not_null', 'data_default', 'data_sortable');
+      return array('code', 'display', 'display_format', 'store', 'data_type', 'data_length', 'data_not_null', 'data_default', 'data_sortable', 'recompute');
     case 'database columns':
       if ($field['store']) {
         $columns = array('value' => array());
@@ -274,3 +283,24 @@ function computed_field_field_formatter(
       return $display;
   }
 }
+
+function computed_field_cron(){
+  $fields = content_fields();
+  $time = variable_get('computed_time', '');
+  foreach($fields as $fname => $f){
+    $cname = $f['type_name'];
+    if(!$f['store'] && $f['type'] == 'computed' && $f['recompute'] > 0){
+      if(time() - $time[$fname][$cname] > $f['recompute']){
+        $result = db_query("SELECT * FROM {node_$cname} n");
+        while($n = db_fetch_object($result)){
+          $cid = 'content:'. $n->nid .':'. $n->vid;
+          cache_clear_all($cid);
+          $node = node_load($n->nid);
+        }
+        $time[$fname][$cname] = time();
+      }
+    }
+  }
+  variable_set('computed_time', $time);
+}
