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