diff --git a/include/staff/tasks.inc.php b/include/staff/tasks.inc.php index 49cdd5e22ac9ece74a17b58a9c7f6d3a8c1ecaa9..9dbd1c3c4fbc3bccd1db790375e7ecdeb131ab07 100644 --- a/include/staff/tasks.inc.php +++ b/include/staff/tasks.inc.php @@ -129,30 +129,35 @@ $tasks->values('id', 'number', 'created', 'staff_id', 'team_id', $queue_sort_key = sprintf(':Q%s:%s:sort', ObjectModel::OBJECT_TYPE_TASK, $queue_name); if (isset($_GET['sort'])) { - $_SESSION[$queue_sort_key] = $_GET['sort']; + $_SESSION[$queue_sort_key] = array($_GET['sort'], $_GET['dir']); } elseif (!isset($_SESSION[$queue_sort_key])) { - $_SESSION[$queue_sort_key] = $queue_sort_options[0]; + $_SESSION[$queue_sort_key] = array($queue_sort_options[0], 0); } -switch ($_SESSION[$queue_sort_key]) { +list($sort_cols, $sort_dir) = $_SESSION[$queue_sort_key]; +$orm_dir = $sort_dir ? QuerySet::ASC : QuerySet::DESC; +$orm_dir_r = $sort_dir ? QuerySet::DESC : QuerySet::ASC; + +switch ($sort_cols) { case 'number': $tasks->extra(array( - 'order_by'=>array(SqlExpression::times(new SqlField('number'), 1)) + 'order_by'=>array( + array(SqlExpression::times(new SqlField('number'), 1), $orm_dir) + ) )); break; case 'due': $date_header = __('Due Date'); $date_col = 'duedate'; $tasks->values('duedate'); - $tasks->filter(array('duedate__isnull'=>false)); - $tasks->order_by('duedate'); + $tasks->order_by(SqlFunction::COALESCE(new SqlField('duedate'), 'zzz'), $orm_dir_r); break; case 'updated': $date_header = __('Last Updated'); $date_col = 'updated'; $tasks->values('updated'); - $tasks->order_by('-updated'); + $tasks->order_by($sort_dir ? 'updated' : '-updated'); break; case 'hot': $tasks->order_by('-thread_count'); @@ -162,7 +167,7 @@ case 'hot': break; case 'created': default: - $tasks->order_by('-created'); + $tasks->order_by($sort_dir ? 'created' : '-created'); break; } @@ -211,28 +216,10 @@ if ($thisstaff->hasPerm(Task::PERM_DELETE, false)) { <div id='basic_search'> <div class="pull-right" style="height:25px"> <span class="valign-helper"></span> - <span class="action-button muted" data-dropdown="#sort-dropdown"> - <i class="icon-caret-down pull-right"></i> - <span><i class="icon-sort-by-attributes-alt"></i> <?php echo __('Sort');?></span> - </span> - <div id="sort-dropdown" class="action-dropdown anchor-right" - onclick="javascript: $.pjax({ - url:'?' + addSearchParam('sort', $(event.target).data('mode')), - timeout: 2000, - container: '#pjax-container'});"> - <ul class="bleed-left"> - <?php foreach ($queue_sort_options as $mode) { - $desc = $sort_options[$mode]; - $selected = $mode == $_SESSION[$queue_sort_key]; ?> - <li <?php if ($selected) echo 'class="active"'; ?>> - <a href="#" data-mode="<?php echo $mode; ?>"><i class="icon-fixed-width <?php - if ($selected) echo 'icon-hand-right'; - ?>"></i> <?php echo Format::htmlchars($desc); ?></a> - </li> -<?php } ?> - </ul> - </div> - </div> + <?php + require STAFFINC_DIR.'templates/queue-sort.tmpl.php'; + ?> + </div> <form action="tasks.php" method="get" onsubmit="javascript: $.pjax({ url:$(this).attr('action') + '?' + $(this).serialize(), @@ -250,6 +237,7 @@ return false;"> </button> </div> </form> + </div> <!-- SEARCH FORM END --> <div class="clear"></div> @@ -453,5 +441,7 @@ $(function() { return false; }); + + $('[data-toggle=tooltip]').tooltip(); }); </script> diff --git a/include/staff/templates/queue-sort.tmpl.php b/include/staff/templates/queue-sort.tmpl.php new file mode 100644 index 0000000000000000000000000000000000000000..42b56437057c208450bfbc3c29ffc89e2732ced6 --- /dev/null +++ b/include/staff/templates/queue-sort.tmpl.php @@ -0,0 +1,33 @@ + +<span class="action-button muted" data-dropdown="#sort-dropdown" data-toggle="tooltip" title="<?php echo $sort_options[$sort_cols]; ?>"> + <i class="icon-caret-down pull-right"></i> + <span><i class="icon-sort-by-attributes-alt <?php if ($sort_dir) echo 'icon-flip-vertical'; ?>"></i> <?php echo __('Sort');?></span> +</span> +<div id="sort-dropdown" class="action-dropdown anchor-right" +onclick="javascript: +var query = addSearchParam({'sort': $(event.target).data('mode'), 'dir': $(event.target).data('dir')}); +$.pjax({ + url: '?' + query, + timeout: 2000, + container: '#pjax-container'});"> + <ul class="bleed-left"> + <?php foreach ($queue_sort_options as $mode) { + $desc = $sort_options[$mode]; + $icon = ''; + $dir = '0'; + $selected = $sort_cols == $mode; ?> + <li <?php + if ($selected) { + echo 'class="active"'; + $dir = ($sort_dir == '1') ? '0' : '1'; // Flip the direction + $icon = ($sort_dir == '1') ? 'icon-hand-up' : 'icon-hand-down'; + } + ?>> + <a href="#" data-mode="<?php echo $mode; ?>" data-dir="<?php echo $dir; ?>"> + <i class="icon-fixed-width <?php echo $icon; ?>" + ></i> <?php echo Format::htmlchars($desc); ?></a> + </li> + <?php } ?> + </ul> +</div> + diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php index db70a46699ad191833dd3b2d83c1993080a6ab5d..a47ba72662cbabfed2f2e48a2dfa165483541adb 100644 --- a/include/staff/tickets.inc.php +++ b/include/staff/tickets.inc.php @@ -325,38 +325,10 @@ $tickets->annotate(array( <div id='basic_search'> <div class="pull-right" style="height:25px"> <span class="valign-helper"></span> - <span class="action-button muted" data-dropdown="#sort-dropdown" data-toggle="tooltip" title="<?php echo $sort_options[$sort_cols]; ?>"> - <i class="icon-caret-down pull-right"></i> - <span><i class="icon-sort-by-attributes-alt <?php if ($sort_dir) echo 'icon-flip-vertical'; ?>"></i> <?php echo __('Sort');?></span> - </span> - <div id="sort-dropdown" class="action-dropdown anchor-right" - onclick="javascript: - var query = addSearchParam({'sort': $(event.target).data('mode'), 'dir': $(event.target).data('dir')}); - $.pjax({ - url: '?' + query, - timeout: 2000, - container: '#pjax-container'});"> - <ul class="bleed-left"> -<?php foreach ($queue_sort_options as $mode) { -$desc = $sort_options[$mode]; -$icon = ''; -$dir = '0'; -$selected = $sort_cols == $mode; ?> - <li <?php -if ($selected) { - echo 'class="active"'; - $dir = ($sort_dir == '1') ? '0' : '1'; // Flip the direction - $icon = ($sort_dir == '1') ? 'icon-hand-up' : 'icon-hand-down'; -} -?>> - <a href="#" data-mode="<?php echo $mode; ?>" data-dir="<?php echo $dir; ?>"> - <i class="icon-fixed-width <?php echo $icon; ?>" - ></i> <?php echo Format::htmlchars($desc); ?></a> - </li> -<?php } ?> - </div> + <?php + require STAFFINC_DIR.'templates/queue-sort.tmpl.php'; + ?> </div> - <form action="tickets.php" method="get" onsubmit="javascript: $.pjax({ url:$(this).attr('action') + '?' + $(this).serialize(),