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 @@ - - - + + + 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 @@
IdNameSlugIdNameSlug Active  
- - - - + + + + - - + +
IdentifierFirst NameSurnameEmailIdentifierFirst NameSurnameEmail ActiveLast Login DateSpam TypeLast Login DateSpam Type