From a6fb93c1c70c76781b668d739a9c1e4a1cc95ba5 Mon Sep 17 00:00:00 2001 From: mprahl Date: Nov 06 2017 14:24:34 +0000 Subject: Clean up the issue sorting links --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index fc36cdb..882dafe 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -41,7 +41,7 @@ import six import sqlalchemy import sqlalchemy.schema from sqlalchemy import func -from sqlalchemy import asc +from sqlalchemy import asc, desc from sqlalchemy.orm import aliased from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import scoped_session @@ -2373,13 +2373,35 @@ def search_issues( ) column = model.Issue.date_created - if order_key and order_key in model.Issue.__table__.columns.keys(): - column = getattr(model.Issue, order_key) - - if order == 'asc': - query = query.order_by(column.asc()) + if order_key: + # If we are ordering by assignee, then order by the assignees' + # usernames + if order_key == 'assignee': + # We must do a LEFT JOIN on model.Issue.assignee because there are + # two foreign keys on model.Issue tied to model.User. This tells + # SQLAlchemy which foreign key on model.User to order on. + query = query.join(model.User, model.Issue.assignee, isouter=True) + column = model.User.user + # If we are ordering by user, then order by reporters' usernames + elif order_key == 'user': + # We must do a LEFT JOIN on model.Issue.user because there are + # two foreign keys on model.Issue tied to model.User. This tells + # SQLAlchemy which foreign key on model.User to order on. + query = query.join(model.User, model.Issue.user, isouter=True) + column = model.User.user + elif order_key in model.Issue.__table__.columns.keys(): + column = getattr(model.Issue, order_key) + + if str(column.type) == 'TEXT': + column = func.lower(column) + + # The priority is sorted differently because it is by weight and the lower + # the number, the higher the priority + if (order_key != 'priority' and order == 'asc') or \ + (order_key == 'priority' and order == 'desc'): + query = query.order_by(asc(column)) else: - query = query.order_by(column.desc()) + query = query.order_by(desc(column)) if issueid is not None or issueuid is not None: output = query.first() diff --git a/pagure/templates/issues.html b/pagure/templates/issues.html index 76e2f1b..dadb503 100644 --- a/pagure/templates/issues.html +++ b/pagure/templates/issues.html @@ -151,80 +151,46 @@ {% endfor %} - +{% set base_url_for = dict( + repo=repo.name, username=username,namespace=repo.namespace, tags=tags, + author=author, assignee=assignee, priority=priority) %}
- - - {% if status and status|lower != 'open' %} - - {% else %} - - {% endif %} - - - {% if not status or status|lower == 'open' %} - - {% endif %} + + + {% if status and status|lower != 'open' %} + + {% else %} + + {% endif %} + + + {% if not status or status|lower == 'open' %} + + {% endif %} diff --git a/pagure/ui/filters.py b/pagure/ui/filters.py index dd154a4..66b342a 100644 --- a/pagure/ui/filters.py +++ b/pagure/ui/filters.py @@ -623,3 +623,32 @@ def add_or_remove(item, items): else: items.append(item) return items + + +@APP.template_filter('table_sort_arrow') +def table_sort_arrow(column, order_key, order): + """ Outputs an arrow icon if the column is currently being sorted on + """ + arrow_html = ('') + if column == order_key: + if order == 'desc': + return arrow_html.format('bottom') + else: + return arrow_html.format('top') + return '' + + +@APP.template_filter('table_get_link_order') +def table_get_link_order(column, order_key, order): + """ Get the correct order parameter value for the table heading link + """ + if column == order_key: + # If the user is clicking on the column again, they want the + # oposite order + if order == 'desc': + return 'asc' + else: + return 'desc' + else: + # Default to descending + return 'desc' diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py index 34db516..916629d 100644 --- a/pagure/ui/issues.py +++ b/pagure/ui/issues.py @@ -745,7 +745,8 @@ def view_issues(repo, username=None, namespace=None): total_page=total_page, add_report_form=pagure.forms.AddReportForm(), search_pattern=search_string, - order=order + order=order, + order_key=order_key )
IssueOpenedClosedModifiedPriority -  (reset) - Reporter -  (reset) - Assignee -  (reset) - Issue + {{ 'title' | table_sort_arrow(order_key, order) | safe }}Opened + {{ 'date_created' | table_sort_arrow(order_key, order) | safe }}Closed + {{ 'closed_at' | table_sort_arrow(order_key, order) | safe }}Modified + {{ 'last_updated' | table_sort_arrow(order_key, order) | safe }}Priority + {{ 'priority' | table_sort_arrow(order_key, order) | safe }}Reporter + {{ 'user' | table_sort_arrow(order_key, order) | safe }}Assignee + {{ 'assignee' | table_sort_arrow(order_key, order) | safe }}