diff --git a/file_entity.info b/file_entity.info index 670c038..62f966f 100644 --- a/file_entity.info +++ b/file_entity.info @@ -10,6 +10,7 @@ files[] = views/views_handler_argument_file_type.inc files[] = views/views_handler_field_file_rendered.inc files[] = views/views_handler_field_file_type.inc files[] = views/views_handler_filter_file_type.inc +files[] = views/views_handler_filter_schema_type.inc files[] = views/views_handler_field_file_filename.inc files[] = views/views_handler_field_file_link.inc files[] = views/views_handler_field_file_link_edit.inc diff --git a/file_entity.views.inc b/file_entity.views.inc index ea8b5a1..cd46130 100644 --- a/file_entity.views.inc +++ b/file_entity.views.inc @@ -27,6 +27,16 @@ function file_entity_views_data() { 'handler' => 'views_handler_argument_file_type', ), ); + + // File schema type. + $data['file_managed']['schema_type'] = array( + 'title' => t('Schema type'), + 'help' => t('Filter files by schema, such as public or private.'), + 'filter' => array( + 'handler' => 'views_handler_filter_schema_type', + ), + ); + // Rendered file. $data['file_managed']['rendered'] = array( 'title' => t('Rendered'), diff --git a/views/views_handler_filter_schema_type.inc b/views/views_handler_filter_schema_type.inc new file mode 100644 index 0000000..21ca05c --- /dev/null +++ b/views/views_handler_filter_schema_type.inc @@ -0,0 +1,44 @@ +value_options)) { + $this->value_title = t('File Schema types'); + $types = file_get_stream_wrappers(STREAM_WRAPPERS_VISIBLE); + $options = array(); + foreach ($types as $type => $info) { + $options[$type] = t($info['name']); + } + asort($options); + $this->value_options = $options; + } + } + + function op_simple() { + if (empty($this->value)) { + return; + } + $this->ensure_my_table(); + + // We use array_values() because the checkboxes keep keys and that can cause + // array addition problems. + $statements = array(); + if ($this->operator == 'not in') { + $nope = 'NOT '; + $composite = ' AND '; + } + else { + $nope = ''; + $composite = ' OR '; + } + foreach ($this->value as $schema) { + $statements[] = 'uri '.$nope.'LIKE \''.db_like($schema).'://%\''; + } + + $this->query->add_where_expression($this->options['group'], implode($composite, $statements)); + } +}