diff --git a/flag.info b/flag.info index bf64556..d921c28 100644 --- a/flag.info +++ b/flag.info @@ -20,6 +20,7 @@ files[] = flag.rules.inc files[] = includes/views/flag_handler_argument_entity_id.inc files[] = includes/views/flag_handler_field_ops.inc files[] = includes/views/flag_handler_filter_flagged.inc +files[] = includes/views/flag_handler_sort_flagged.inc files[] = includes/views/flag_handler_relationships.inc files[] = includes/views/flag_plugin_argument_validate_flaggability.inc files[] = tests/flag.test diff --git a/includes/views/flag.views.inc b/includes/views/flag.views.inc index e8ab965..31a7ebc 100644 --- a/includes/views/flag.views.inc +++ b/includes/views/flag.views.inc @@ -95,11 +95,16 @@ function flag_views_data() { // Specialized is null/is not null filter. $data['flagging']['flagged'] = array( 'title' => t('Flagged'), - 'help' => t('Filter to ensure content has or has not been flagged.'), 'real field' => 'uid', 'filter' => array( 'handler' => 'flag_handler_filter_flagged', 'label' => t('Flagged'), + 'help' => t('Filter to ensure content has or has not been flagged.'), + ), + 'sort' => array( + 'handler' => 'flag_handler_sort_flagged', + 'label' => t('Flagged'), + 'help' => t('Sort by whether entities have or have not been flagged.'), ), ); diff --git a/includes/views/flag_handler_sort_flagged.inc b/includes/views/flag_handler_sort_flagged.inc new file mode 100644 index 0000000..414dba7 --- /dev/null +++ b/includes/views/flag_handler_sort_flagged.inc @@ -0,0 +1,55 @@ + t('Unflagged first'), + 'DESC' => t('Flagged first'), + ); + } + + /** + * Display whether or not the sort order is ascending or descending + */ + function admin_summary() { + if (!empty($this->options['exposed'])) { + return t('Exposed'); + } + switch ($this->options['order']) { + case 'ASC': + case 'asc': + default: + return t('Unflagged first'); + break; + case 'DESC'; + case 'desc'; + return t('Flagged first'); + break; + } + } + + + function query() { + $this->ensure_my_table(); + // Add the ordering. + // Using IS NOT NULL means that the ASC/DESC ordering work in the same + // direction as sorting by flagging date: empty results come first. + $this->query->add_orderby(NULL, "($this->table_alias.uid IS NOT NULL)", $this->options['order']); + } + +}