diff --git a/app/Http/Controllers/Api/GroupApiController.php b/app/Http/Controllers/Api/GroupApiController.php
index e037af41..539e3822 100644
--- a/app/Http/Controllers/Api/GroupApiController.php
+++ b/app/Http/Controllers/Api/GroupApiController.php
@@ -69,6 +69,7 @@ final class GroupApiController extends APICRUDController
*/
protected function getOrderRules():array{
return [
+ 'id',
'name',
'slug'
];
diff --git a/app/Http/Controllers/Api/UserApiController.php b/app/Http/Controllers/Api/UserApiController.php
index ee5ad304..d2252aa0 100644
--- a/app/Http/Controllers/Api/UserApiController.php
+++ b/app/Http/Controllers/Api/UserApiController.php
@@ -85,6 +85,20 @@ final class UserApiController extends APICRUDController
];
}
+ /**
+ * @return array
+ */
+ protected function getOrderRules():array{
+ return [
+ 'first_name',
+ 'last_name',
+ 'email',
+ 'identifier',
+ 'last_login_date',
+ 'spam_type'
+ ];
+ }
+
/**
* @param $id
* @return mixed
diff --git a/app/Repositories/DoctrineGroupRepository.php b/app/Repositories/DoctrineGroupRepository.php
index ce06765d..fe10538d 100644
--- a/app/Repositories/DoctrineGroupRepository.php
+++ b/app/Repositories/DoctrineGroupRepository.php
@@ -13,10 +13,6 @@
**/
use App\libs\Auth\Repositories\IGroupRepository;
use Auth\Group;
-use utils\Filter;
-use utils\Order;
-use utils\PagingInfo;
-use utils\PagingResponse;
/**
* Class DoctrineGroupRepository
* @package App\Repositories
@@ -30,6 +26,7 @@ final class DoctrineGroupRepository extends ModelDoctrineRepository implements I
protected function getOrderMappings()
{
return [
+ 'id' => 'e.id',
'name' => 'e.name',
'slug' => 'e.slug',
];
diff --git a/app/Repositories/DoctrineUserRepository.php b/app/Repositories/DoctrineUserRepository.php
index 1aff1096..0711f41b 100644
--- a/app/Repositories/DoctrineUserRepository.php
+++ b/app/Repositories/DoctrineUserRepository.php
@@ -15,15 +15,30 @@ use Auth\Repositories\IUserRepository;
use Auth\User;
use utils\DoctrineFilterMapping;
use utils\DoctrineJoinFilterMapping;
-use utils\DoctrineLeftJoinFilterMapping;
-
/**
* Class DoctrineUserRepository
* @package App\Repositories
*/
-final class DoctrineUserRepository extends ModelDoctrineRepository implements IUserRepository
+final class DoctrineUserRepository
+ extends ModelDoctrineRepository implements IUserRepository
{
+ /**
+ * @return array
+ */
+ protected function getOrderMappings()
+ {
+ return [
+ 'first_name' => 'e.first_name',
+ 'last_name' => 'e.last_name',
+ 'email' => 'e.email',
+ 'active' => 'e.active',
+ 'identifier' => 'e.identifier',
+ 'last_login_date' => 'e.last_login_date',
+ 'spam_type' => 'e.spam_type',
+ ];
+ }
+
/**
* @return array
*/
diff --git a/public/assets/css/main.css b/public/assets/css/main.css
index 314c87f4..b6575860 100644
--- a/public/assets/css/main.css
+++ b/public/assets/css/main.css
@@ -347,4 +347,26 @@ span.help-block::before {
width: 1%;
vertical-align: middle;
display:table-cell;
+}
+
+.sort-header{
+ cursor: pointer;
+}
+
+.sort-header.current.desc:after{
+ content: '\f0dd';
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ margin:0px 0px 0px 10px;
+ text-decoration:none;
+}
+
+.sort-header.current.asc:after{
+ content: '\f0de';
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ margin:0px 0px 0px 10px;
+ text-decoration:none;
}
\ No newline at end of file
diff --git a/public/assets/js/admin/groups.js b/public/assets/js/admin/groups.js
index cc1ae2a6..fd32dd36 100644
--- a/public/assets/js/admin/groups.js
+++ b/public/assets/js/admin/groups.js
@@ -57,6 +57,8 @@ GroupsCrud.prototype._buildFilters = function () {
GroupsCrud.prototype.init = function () {
BasicCrud.prototype.init.call(this);
var _this = this;
+ // default sort
+ this.orderBy= encodeURI('+name');
var add_item_form = $('#form-add-item');
var add_item_dialog = $("#dialog-form-add-item");
diff --git a/public/assets/js/admin/users.js b/public/assets/js/admin/users.js
index d941d4e7..cbb801e8 100644
--- a/public/assets/js/admin/users.js
+++ b/public/assets/js/admin/users.js
@@ -68,6 +68,8 @@ UsersCrud.prototype.init = function () {
// Chain parent method
BasicCrud.prototype.init.call(this);
var _this = this;
+ // default sort
+ this.orderBy= encodeURI('+email');
$("body").on('click', ".user-active-checkbox", function (event) {
var active = $(this).is(':checked');
diff --git a/public/assets/js/basic-crud.js b/public/assets/js/basic-crud.js
index 336a24b2..b73a3965 100644
--- a/public/assets/js/basic-crud.js
+++ b/public/assets/js/basic-crud.js
@@ -28,6 +28,26 @@ BasicCrud.prototype = {
$('#btn-do-search-clear').hide();
+ $("body").on('click',".sort-header",function (event) {
+ $(".sort-header").removeClass("current");
+ $(this).addClass('current');
+ var dir = '+';
+ if($(this).hasClass('asc')){
+ $(this).removeClass('asc');
+ $(this).addClass('desc');
+ dir = '-';
+ }
+ else {
+ dir = '+';
+ $(this).removeClass('desc');
+ $(this).addClass('asc');
+ }
+
+ var field = $(this).data('field');
+ _this.orderBy = encodeURI(dir+field);
+ _this.loadPage();
+ });
+
var currentTermFromDeepLink = $(window).url_fragment('getParam', 'term');
if (currentTermFromDeepLink != null) {
$('#search-term').val(currentTermFromDeepLink);
@@ -136,7 +156,6 @@ BasicCrud.prototype = {
var url = this.urls.load + '?page=' + parseInt(this.currentPage) + '&per_page=' + this.perPage;
if (this.searchTerm != null && this.searchTerm != '') {
-
url += '&' + this._buildFilters();
}
diff --git a/resources/views/admin/groups.blade.php b/resources/views/admin/groups.blade.php
index 365dc539..58f1e0ec 100644
--- a/resources/views/admin/groups.blade.php
+++ b/resources/views/admin/groups.blade.php
@@ -24,9 +24,9 @@
- Id |
- Name |
- Slug |
+
+
+
Active |
|
diff --git a/resources/views/admin/users.blade.php b/resources/views/admin/users.blade.php
index e5f81082..925cdaee 100644
--- a/resources/views/admin/users.blade.php
+++ b/resources/views/admin/users.blade.php
@@ -24,13 +24,13 @@
- Identifier |
- First Name |
- Surname |
- Email |
+
+
+
+
Active |
- Last Login Date |
- Spam Type |
+
+
|