diff --git a/lib/WebGUI/Shop/Tax.pm b/lib/WebGUI/Shop/Tax.pm index e4500bc3e..82805b36e 100644 --- a/lib/WebGUI/Shop/Tax.pm +++ b/lib/WebGUI/Shop/Tax.pm @@ -422,14 +422,20 @@ sub www_getTaxesAsJson { my ($db, $form) = $session->quick(qw(db form)); my $startIndex = $form->get('startIndex') || 0; my $numberOfResults = $form->get('results') || 25; + my $sortKey = $form->get('sortKey') || 'country'; + my $sortDir = $form->get('sortDir') || 'desc'; my @placeholders = (); my $sql = 'select SQL_CALC_FOUND_ROWS * from tax'; my $keywords = $form->get("keywords"); if ($keywords ne "") { ($sql, @placeholders) = $db->buildSearchQuery($sql, $keywords, [qw{country state city code}]) } - push(@placeholders, $startIndex, $numberOfResults); - $sql .= ' order by country desc limit ?,?'; + push(@placeholders, $sortKey, $sortDir, $startIndex, $numberOfResults); + $sql .= ' order by ? ? limit ?,?'; + $session->errorHandler->warn("numberOfResults : $numberOfResults"); + $session->errorHandler->warn("startIndex: $startIndex"); + $session->errorHandler->warn("sortKey : $sortKey"); + $session->errorHandler->warn("sortDir : $sortDir"); my %results = (); my @records = (); my $sth = $db->read($sql, \@placeholders); @@ -569,25 +575,57 @@ EODSURL //Tell YUI how to get back to the site var buildQueryString = function (state,dt) { return ";startIndex=" + state.pagination.recordOffset + - ";keywords=" + Dom.get('keywordsField').value + - ";results=" + state.pagination.rowsPerPage; + ";keywords=" + Dom.get('keywordsField').value + + ";sortKey=" + state.sorting.key + + ";sortDir=" + ((state.sorting.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc") + + ";results=" + state.pagination.rowsPerPage; }; //Build and configure a paginator - var myPaginator = new Paginator({ - containers : ['paging'], - pageLinks : 5, - rowsPerPage : 25, - rowsPerPageOptions : [10,25,50,100], - template : "{CurrentPageReport} {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}" - }); +// var myPaginator = new Paginator({ +// containers : ['paging'], +// pageLinks : 5, +// rowsPerPage : 25, +// rowsPerPageOptions : [10,25,50,100], +// template : "{CurrentPageReport} {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}" +// }); + + // Custom function to handle pagination requests + var handlePagination = function (state,dt) { + var sortedBy = dt.get('sortedBy'); + + // Define the new state + var newState = { + startIndex: state.recordOffset, + sorting: { + key: sortedBy.key, + dir: ((sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc") + }, + pagination : { // Pagination values + recordOffset: state.recordOffset, // Default to first page when sorting + rowsPerPage: dt.get("paginator").getRowsPerPage() // Keep current setting + } + }; + + // Create callback object for the request + var oCallback = { + success: dt.onDataReturnSetRows, + failure: dt.onDataReturnSetRows, + scope: dt, + argument: newState // Pass in new state as data payload for callback function to use + }; + + // Send the request + dt.getDataSource().sendRequest(buildQueryString(newState), oCallback); + }; //Configure the table to use the paginator. var myTableConfig = { - initialRequest : ';startIndex=0', + initialRequest : ';startIndex=0;results=25', generateRequest : buildQueryString, - paginationEventHandler : DataTable.handleDataSourcePagination, - paginator : myPaginator + paginationEventHandler : handlePagination, + //paginator : myPaginator + paginator : new YAHOO.widget.Paginator({rowsPerPage:25}) }; STOP @@ -611,6 +649,42 @@ EOCHJS //Now, finally, the table var myTable = new DataTable('dt', taxColumnDefs, mySource, myTableConfig); + // Override function for custom server-side sorting + myTable.sortColumn = function(oColumn) { + // Default ascending + var sDir = "asc"; + + // If already sorted, sort in opposite direction + if(oColumn.key === this.get("sortedBy").key) { + sDir = (this.get("sortedBy").dir === YAHOO.widget.DataTable.CLASS_ASC) ? + "desc" : "asc"; + } + + // Define the new state + var newState = { + startIndex: 0, + sorting: { // Sort values + key: oColumn.key, + dir: (sDir === "desc") ? YAHOO.widget.DataTable.CLASS_DESC : YAHOO.widget.DataTable.CLASS_ASC + }, + pagination : { // Pagination values + recordOffset: 0, // Default to first page when sorting + rowsPerPage: this.get("paginator").getRowsPerPage() // Keep current setting + } + }; + + // Create callback object for the request + var oCallback = { + success: this.onDataReturnSetRows, + failure: this.onDataReturnSetRows, + scope: this, + argument: newState // Pass in new state as data payload for callback function to use + }; + + // Send the request + this.getDataSource().sendRequest(buildQueryString(newState), oCallback); + }; + //Setup the form to submit an AJAX request back to the site. Dom.get('keywordSearchForm').onsubmit = function () { mySource.sendRequest(';keywords=' + Dom.get('keywordsField').value + ';startIndex=0',