Skip to content

Commit

Permalink
orderable datatatable
Browse files Browse the repository at this point in the history
  • Loading branch information
agungsugiarto committed May 13, 2020
1 parent 65abe7f commit 03389d8
Show file tree
Hide file tree
Showing 10 changed files with 185 additions and 105 deletions.
9 changes: 8 additions & 1 deletion src/Controllers/Users/PermissionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,19 @@ public function __construct()
public function index()
{
if ($this->request->isAJAX()) {
$columns = [
1 => 'name',
2 => 'description',
];

$start = $this->request->getGet('start');
$length = $this->request->getGet('length');
$search = $this->request->getGet('search[value]');
$order = $columns[$this->request->getGet('order[0][column]')];
$dir = $this->request->getGet('order[0][dir]');

return $this->respond(Collection::datatable(
model(PermissionModel::class)->findPaginatedData($length, $start, $search),
model(PermissionModel::class)->findPaginatedData($order, $dir, $length, $start, $search),
model(PermissionModel::class)->countAllResults(),
model(PermissionModel::class)->countFindData($search)
));
Expand Down
9 changes: 8 additions & 1 deletion src/Controllers/Users/RoleController.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,19 @@ class RoleController extends BaseController
public function index()
{
if ($this->request->isAJAX()) {
$columns = [
1 => 'name',
2 => 'description',
];

$start = $this->request->getGet('start');
$length = $this->request->getGet('length');
$search = $this->request->getGet('search[value]');
$order = $columns[$this->request->getGet('order[0][column]')];
$dir = $this->request->getGet('order[0][dir]');

return $this->respond(Collection::datatable(
model(GroupModel::class)->findPaginatedData($length, $start, $search),
model(GroupModel::class)->findPaginatedData($order, $dir, $length, $start, $search),
model(GroupModel::class)->countAllResults(),
model(GroupModel::class)->countFindData($search)
));
Expand Down
10 changes: 9 additions & 1 deletion src/Controllers/Users/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,20 @@ public function __construct()
public function index()
{
if ($this->request->isAJAX()) {
$columns = [
1 => 'username',
2 => 'email',
5 => 'created_at',
];

$start = $this->request->getGet('start');
$length = $this->request->getGet('length');
$search = $this->request->getGet('search[value]');
$order = $columns[$this->request->getGet('order[0][column]')];
$dir = $this->request->getGet('order[0][dir]');

return $this->respond(Collection::datatable(
model(UserModel::class)->findPaginatedData($length, $start, $search),
model(UserModel::class)->findPaginatedData($order, $dir, $length, $start, $search),
model(UserModel::class)->countAllResults(),
model(UserModel::class)->countFindData($search)
));
Expand Down
5 changes: 4 additions & 1 deletion src/Models/GroupModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,21 @@ public function getGroupsForUser(int $userId)
*
* @param int $length
* @param int $start
* @param string $order
* @param string $dir
* @param string $keyword
*
* @return array
*/
public function findPaginatedData(int $length, int $start, string $keyword = ''): array
public function findPaginatedData(string $order, string $dir, int $length, int $start, string $keyword = ''): array
{
return $this->builder()
->select('id, name, description')
->groupStart()
->like('name', $keyword)
->orLike('description', $keyword)
->groupEnd()
->orderBy($order, $dir)
->limit($length, $start)
->get()
->getResultObject();
Expand Down
5 changes: 4 additions & 1 deletion src/Models/PermissionModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,21 @@ class PermissionModel extends BaseModel
*
* @param int $length
* @param int $start
* @param string $order
* @param string $dir
* @param string $keyword
*
* @return array
*/
public function findPaginatedData(int $length, int $start, string $keyword = ''): array
public function findPaginatedData(string $order, string $dir, int $length, int $start, string $keyword = ''): array
{
return $this->builder()
->select('id, name, description')
->groupStart()
->like('name', $keyword)
->orLike('description', $keyword)
->groupEnd()
->orderBy($order, $dir)
->limit($length, $start)
->get()
->getResultObject();
Expand Down
28 changes: 23 additions & 5 deletions src/Models/UserModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace agungsugiarto\boilerplate\Models;

use Myth\Auth\Entities\User;
use Myth\Auth\Models\UserModel as BaseModel;

class UserModel extends BaseModel
Expand All @@ -11,22 +12,39 @@ class UserModel extends BaseModel
*
* @param int $length
* @param int $start
* @param string $order
* @param string $dir
* @param string $keyword
*
* @return array
*/
public function findPaginatedData(int $length, int $start, string $keyword = ''): array
public function findPaginatedData(string $order, string $dir, int $length, int $start, string $keyword = ''): array
{
return $this->builder()
$this->builder()
->select('id, username, email, active, created_at')
->groupStart()
->like('username', $keyword)
->orLike('email', $keyword)
->groupEnd()
->where('deleted_at', null)
->limit($length, $start)
->get()
->getResultObject();
->orderBy($order, $dir)
->limit($length, $start);

$results = $this->asObject(User::class)->findAll();

foreach ($results as $result) {
$data[] = [
'id' => $result->id,
'active' => $result->active,
'username' => $result->username,
'email' => $result->email,
'created_at' => $result->created_at,
'roles' => $result->getRoles(),
'permissions' => $result->getPermissions(),
];
}

return $data;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Views/Permission/create.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><?= lang('boilerplate.permission.fields.edit') ?></h5>
<h5 class="modal-title"><?= lang('boilerplate.permission.edit') ?></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
Expand Down
22 changes: 13 additions & 9 deletions src/Views/Permission/index.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<!-- Include -->
<?= $this->include('agungsugiarto\boilerplate\Views\load\datatables') ?>
<?= $this->include('agungsugiarto\boilerplate\Views\load\datatables') ?>
<!-- Extend from layout index -->
<?= $this->extend('agungsugiarto\boilerplate\Views\layout\index') ?>
<?= $this->extend('agungsugiarto\boilerplate\Views\layout\index') ?>

<!-- Section content -->
<?= $this->section('content') ?>
<?= $this->include('agungsugiarto\boilerplate\Views\Permission\create') ?>
<?= $this->section('content') ?>
<?= $this->include('agungsugiarto\boilerplate\Views\Permission\create') ?>
<div class="row">
<div class="col-12">
<div class="card">
Expand All @@ -14,7 +14,7 @@
<div class="btn-group">
<button type="button" class="btn btn-sm btn-block btn-primary" id="create-book"
data-toggle="modal" data-target="#modal-create-permission"><i class="fa fa-plus"></i>
<?= lang('boilerplate.permission.add') ?>
<?= lang('boilerplate.permission.add') ?>
</button>
</div>
</div>
Expand All @@ -38,22 +38,26 @@
</div>
</div>
</div>
<?= $this->endSection() ?>
<?= $this->endSection() ?>

<!-- Push section js -->
<?= $this->section('js') ?>
<?= $this->section('js') ?>
<script>

var tablePermission = $('#table-permission').DataTable({
processing: true,
serverSide: true,
ordering: false,
autoWidth: false,
order: [[1, 'asc']],

ajax : {
url: '<?= route_to('admin/permission') ?>',
method: 'GET'
},
columnDefs: [{
orderable: false,
targets: [0,3]
}],
columns : [
{ 'data': null },
{ 'data': 'name' },
Expand Down Expand Up @@ -214,4 +218,4 @@ function slugify(text) {
}
</script>

<?= $this->endSection() ?>
<?= $this->endSection() ?>
20 changes: 12 additions & 8 deletions src/Views/Role/index.php
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
<!-- Include datatables -->
<?= $this->include('agungsugiarto\boilerplate\Views\load\datatables') ?>
<?= $this->include('agungsugiarto\boilerplate\Views\load\datatables') ?>
<!-- Extend from layout index -->
<?= $this->extend('agungsugiarto\boilerplate\Views\layout\index') ?>
<?= $this->extend('agungsugiarto\boilerplate\Views\layout\index') ?>

<!-- Section content -->
<?= $this->section('content') ?>
<?= $this->section('content') ?>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<div class="float-right">
<div class="btn-group">
<a href="<?= route_to('admin/role/new') ?>" class="btn btn-sm btn-block btn-primary"><i class="fa fa-plus"></i>
<?= lang('boilerplate.role.add') ?>
<?= lang('boilerplate.role.add') ?>
</a>
</div>
</div>
Expand All @@ -36,21 +36,25 @@
</div>
</div>
</div>
<?= $this->endSection() ?>
<?= $this->endSection() ?>

<!-- Push section js -->
<?= $this->section('js') ?>
<?= $this->section('js') ?>
<script>
var tableRole = $('#table-role').DataTable({
processing: true,
serverSide: true,
ordering: false,
autoWidth: false,
order: [[1, 'asc']],

ajax : {
url: '<?= route_to('admin/role') ?>',
method: 'GET'
},
columnDefs: [{
orderable: false,
targets: [0,3]
}],
columns : [
{ 'data': null },
{ 'data': 'name' },
Expand Down Expand Up @@ -106,4 +110,4 @@
})
})
</script>
<?= $this->endSection() ?>
<?= $this->endSection() ?>
Loading

0 comments on commit 03389d8

Please sign in to comment.