--- videofield.module.orig 2007-02-10 10:18:04.000000000 -0500 +++ videofield.module 2008-01-23 17:38:44.000000000 -0500 @@ -38,6 +38,21 @@ 'playtime' => array('type' => 'varchar', length => 10, 'not null' => FALSE), ); return $columns; + + case 'filters': + return array( + 'default' => array( + 'list' => '_audiofield_filter_handler', + 'list-type' => 'list', + 'operator' => 'views_handler_operator_or', + 'value-type' => 'array', + 'extra' => array('field' => $field), + ), + 'null' => array( + 'handler' => 'views_handler_filter_null', + 'operator' => array('IS NOT' => t('Not null'), 'IS' => t('Null')), + ), + ); } } @@ -325,6 +340,7 @@ * Implementation of hook_field_formatter(). */ function videofield_field_formatter($field, $item, $formatter) { + require_once(drupal_get_path('module', 'videofield') .'/multimediafile.inc'); if (!isset($item['fid'])) { return ''; } @@ -459,3 +475,40 @@ return theme('table', array(), $rows); } } + +function _videofield_potential_files($field) { + + $rows = array(); + $field_name = $field['field_name']; + + if ($field['multiple']) { + $result = db_query("SELECT f.fid AS fid, f.filename AS filename FROM {files} f INNER JOIN {content_" . $field_name . "} field ON field." . $field_name . "_fid = f.fid"); + if (db_num_rows($result) == 0) { + return array(); + } + + while ($file = db_fetch_object($result)) { + $rows[$file->fid] = $file->filename; + } + } else { + $result = db_query("SELECT i.type_name AS type_name FROM {node_field_instance} i WHERE field_name = '$field_name'"); + while ($inst = db_fetch_object($result)) { + $type = $inst->type_name; + $result2 = db_query("SELECT f.fid AS fid, f.filename AS filename FROM {files} f INNER JOIN {content_type_".$type."} t ON t.".$field_name."_fid = f.fid"); + while ($file = db_fetch_object($result2)) { + $rows[$file->fid] = $file->filename; + } + } + } + + return $rows; +} + +/** + * Provide a list of audio files to filter on. + */ +function _videofield_filter_handler($op, $filterinfo) { + $options = array(0 => t('')); + $options = $options + _videofield_potential_files($filterinfo['extra']['field']); + return $options; +} \ No newline at end of file