From f25b418aae60548098a19b7e18eae2c1172a2b02 Mon Sep 17 00:00:00 2001 From: Chaoyi Zha Date: Sat, 1 Oct 2016 20:38:35 -0400 Subject: [PATCH] Create AdminPaginationController for Datatables pagination --- app/Http/Controllers/AdminController.php | 68 +--------------- .../Controllers/AdminPaginationController.php | 81 +++++++++++++++++++ app/Http/routes.php | 6 +- public/js/AdminCtrl.js | 13 ++- 4 files changed, 96 insertions(+), 72 deletions(-) create mode 100644 app/Http/Controllers/AdminPaginationController.php diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 04e88dd..7c61976 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -10,77 +10,11 @@ use App\Helpers\UserHelper; class AdminController extends Controller { /** - * Show the admin panel, and process admin AJAX requests. + * Show the admin panel, and process setting changes. * * @return Response */ - public function paginateAdminUsers(Request $request) { - self::ensureAdmin(); - - $admin_users = User::select(['username', 'email', 'created_at', 'active', 'api_key', 'api_active', 'api_quota', 'id']); - return Datatables::of($admin_users) - ->addColumn('api_action', function ($user) { - // Add "API Info" action button - return ' - API info - '; - }) - ->addColumn('delete', function ($user) { - // Add "Delete" action button - $btn_class = ''; - if (session('username') == $user->username) { - $btn_class = 'disabled'; - } - return ' - Delete - '; - }) - ->make(true); - } - - public function paginateAdminLinks(Request $request) { - self::ensureAdmin(); - - $admin_links = Link::select(['short_url', 'long_url', 'clicks', 'created_at', 'creator', 'is_disabled']); - return Datatables::of($admin_links) - ->addColumn('disable', function ($link) { - // Add "Disable/Enable" action buttons - $btn_class = 'btn-danger'; - $btn_text = 'Disable'; - - if ($link->is_disabled) { - $btn_class = 'btn-success'; - $btn_text = 'Enable'; - } - - return ' - ' . $btn_text . ' - '; - }) - ->addColumn('delete', function ($link) { - // Add "Delete" action button - return ' - Delete - '; - }) - ->make(true); - } - - public function paginateUserLinks(Request $request) { - self::ensureLoggedIn(); - - $username = session('username'); - $user_links = Link::where('creator', $username) - ->select(['short_url', 'long_url', 'clicks', 'created_at']); - - return Datatables::of($user_links) - ->make(true); - } - public function displayAdminPage(Request $request) { if (!$this->isLoggedIn()) { return redirect(route('login'))->with('error', 'Please login to access your dashboard.'); diff --git a/app/Http/Controllers/AdminPaginationController.php b/app/Http/Controllers/AdminPaginationController.php new file mode 100644 index 0000000..701c015 --- /dev/null +++ b/app/Http/Controllers/AdminPaginationController.php @@ -0,0 +1,81 @@ +addColumn('api_action', function ($user) { + // Add "API Info" action button + return ' + API info + '; + }) + ->addColumn('delete', function ($user) { + // Add "Delete" action button + $btn_class = ''; + if (session('username') == $user->username) { + $btn_class = 'disabled'; + } + return ' + Delete + '; + }) + ->make(true); + } + + public function paginateAdminLinks(Request $request) { + self::ensureAdmin(); + + $admin_links = Link::select(['short_url', 'long_url', 'clicks', 'created_at', 'creator', 'is_disabled']); + return Datatables::of($admin_links) + ->addColumn('disable', function ($link) { + // Add "Disable/Enable" action buttons + $btn_class = 'btn-danger'; + $btn_text = 'Disable'; + + if ($link->is_disabled) { + $btn_class = 'btn-success'; + $btn_text = 'Enable'; + } + + return ' + ' . $btn_text . ' + '; + }) + ->addColumn('delete', function ($link) { + // Add "Delete" action button + return ' + Delete + '; + }) + ->make(true); + } + + public function paginateUserLinks(Request $request) { + self::ensureLoggedIn(); + + $username = session('username'); + $user_links = Link::where('creator', $username) + ->select(['short_url', 'long_url', 'clicks', 'created_at']); + + return Datatables::of($user_links) + ->make(true); + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index 6d1d474..ec99006 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -48,9 +48,9 @@ $app->group(['prefix' => '/api/v2', 'namespace' => 'App\Http\Controllers'], func $app->post('admin/toggle_link', ['as' => 'api_toggle_link', 'uses' => 'AjaxController@toggleLink']); $app->post('admin/delete_link', ['as' => 'api_delete_link', 'uses' => 'AjaxController@deleteLink']); - $app->get('admin/get_admin_users', ['as' => 'api_get_admin_users', 'uses' => 'AdminController@paginateAdminUsers']); - $app->get('admin/get_admin_links', ['as' => 'api_get_admin_links', 'uses' => 'AdminController@paginateAdminLinks']); - $app->get('admin/get_user_links', ['as' => 'api_get_user_links', 'uses' => 'AdminController@paginateUserLinks']); + $app->get('admin/get_admin_users', ['as' => 'api_get_admin_users', 'uses' => 'AdminPaginationController@paginateAdminUsers']); + $app->get('admin/get_admin_links', ['as' => 'api_get_admin_links', 'uses' => 'AdminPaginationController@paginateAdminLinks']); + $app->get('admin/get_user_links', ['as' => 'api_get_user_links', 'uses' => 'AdminPaginationController@paginateUserLinks']); /* API shorten endpoints */ diff --git a/public/js/AdminCtrl.js b/public/js/AdminCtrl.js index 28a80de..4bd9748 100644 --- a/public/js/AdminCtrl.js +++ b/public/js/AdminCtrl.js @@ -6,8 +6,8 @@ polr.controller('AdminCtrl', function($scope, $compile) { } }; + // Initialise Datatables elements $scope.initTables = function () { - // Initialise Datatables elements var datatables_config = { 'autoWidth': false, 'processing': true, @@ -63,6 +63,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { }, datatables_config)); }; + // Append modals to Angular root $scope.appendModal = function(html, id) { id = esc_selector(id); @@ -78,11 +79,13 @@ polr.controller('AdminCtrl', function($scope, $compile) { }); }; + // Hide table rows $scope.hideRow = function(el, msg) { el.text(msg); el.parent().parent().slideUp(); }; + // Delete user $scope.deleteUser = function($event) { var el = $($event.target); var user_id = el.data('user-id'); @@ -94,6 +97,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { }); }; + // Delete link $scope.deleteLink = function($event, link_ending) { var el = $($event.target); @@ -104,6 +108,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { }); }; + // Generate new API key for user_id $scope.generateNewAPIKey = function($event, user_id, is_dev_tab) { var el = $($event.target); var status_display_elem = el.prevAll('.status-display'); @@ -123,6 +128,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { }); }; + // Toggle API access status $scope.toggleAPIStatus = function($event, user_id) { var el = $($event.target); var status_display_elem = el.prevAll('.status-display'); @@ -135,6 +141,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { }); }; + // Disable and enable links $scope.toggleLink = function($event, link_ending) { var el = $($event.target); var curr_action = el.text(); @@ -155,6 +162,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { }); }; + // Update user API quotas $scope.updateAPIQuota = function($event, user_id) { var el = $($event.target); var new_quota = el.prevAll('.api-quota').val(); @@ -167,7 +175,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { }); }; - + // Open user API settings menu $scope.openAPIModal = function($event, username, api_key, api_active, api_quota, user_id) { var el = $($event.target); @@ -189,6 +197,7 @@ polr.controller('AdminCtrl', function($scope, $compile) { $scope.appendModal(mt_html, modal_id); }; + // Initialise AdminCtrl $scope.init = function() { var modal_source = $("#modal-template").html(); $scope.modal_template = Handlebars.compile(modal_source);