--- states_views.inc.orig 2008-05-28 00:12:55.000000000 +0200 +++ states_views.inc 2008-05-28 00:35:31.000000000 +0200 @@ -113,3 +113,43 @@ $machines = states_get_machines('labels'); return $machines[$value]; } + +function states_views_arguments() { + $arguments = array( + 'statename' => array( + 'name' => t('States: State name for specified machine'), + 'handler' => 'views_handler_argument_statename', + 'help' => t('The argument will filter for the indicated state'), + 'option' => array( + '#type' => 'select', + '#options' => array_keys(states_get_machines('all')), + ), + ), + ); + return $arguments; +} + +function views_handler_argument_statename($op, &$query, $argtype, $arg = null) { + switch($op) { + case 'summary': + $query->ensure_table('node_state'); + $query->add_field('machine','node_state'); + $query->add_field('state','node_state'); + $fieldinfo['field'] = "node_state.state"; + return $fieldinfo; + break; + case 'sort': + $query->add_orderby('node_state', 'machine', $argtype); + $query->add_orderby('node_state', 'state', $argtype); + break; + case 'filter': + $query->ensure_table('node_state'); + $where = db_escape_string($arg); + $query->add_where("node_state.state = '%s'", $arg); + break; + case 'link': + return l($query->name,$arg."/".$query->name); + case 'title': + return $query; + } +}