diff options
Diffstat (limited to 'app/Http/Controllers/AdminPaginationController.php')
-rw-r--r-- | app/Http/Controllers/AdminPaginationController.php | 230 |
1 files changed, 122 insertions, 108 deletions
diff --git a/app/Http/Controllers/AdminPaginationController.php b/app/Http/Controllers/AdminPaginationController.php index 156bea4..01297ab 100644 --- a/app/Http/Controllers/AdminPaginationController.php +++ b/app/Http/Controllers/AdminPaginationController.php @@ -14,75 +14,126 @@ class AdminPaginationController extends Controller { * @return Response */ + /* Cell rendering functions */ + + public function renderLongUrlCell($link) { + return '<a target="_blank" title="' . e($link->long_url) . '" href="'. $link->long_url .'">' . str_limit($link->long_url, 50) . '</a> + <a class="btn btn-primary btn-xs edit-long-link-btn" ng-click="editLongLink(\'' . $link->short_url . '\', \'' . $link->long_url . '\')"><i class="fa fa-edit edit-link-icon"></i></a>'; + } + + public function renderClicksCell($link) { + if (env('SETTING_ADV_ANALYTICS')) { + return $link->clicks . ' <a target="_blank" class="stats-icon" href="/admin/stats/' . e($link->short_url) . '"> + <i class="fa fa-area-chart" aria-hidden="true"></i> + </a>'; + } + else { + return $link->clicks; + } + } + + public function renderDeleteUserCell($user) { + // Add "Delete" action button + $btn_class = ''; + if (session('username') === $user->username) { + $btn_class = 'disabled'; + } + return '<a ng-click="deleteUser($event, \''. $user->id .'\')" class="btn btn-sm btn-danger ' . $btn_class . '"> + Delete + </a>'; + } + + public function renderDeleteLinkCell($link) { + // Add "Delete" action button + return '<a ng-click="deleteLink($event, \'' . e($link->short_url) . '\')" + class="btn btn-sm btn-warning delete-link"> + Delete + </a>'; + } + + public function renderAdminApiActionCell($user) { + // Add "API Info" action button + return '<a class="activate-api-modal btn btn-sm btn-info" + ng-click="openAPIModal($event, \'' . e($user->username) . '\', \'' . $user->api_key . '\', \'' . $user->api_active . '\', \'' . e($user->api_quota) . '\', \'' . $user->id . '\')"> + API info + </a>'; + } + + public function renderToggleUserActiveCell($user) { + // Add user account active state toggle buttons + $btn_class = ''; + if (session('username') === $user->username) { + $btn_class = ' disabled'; + } + + if ($user->active) { + $active_text = 'Active'; + $btn_color_class = ' btn-success'; + } + else { + $active_text = 'Inactive'; + $btn_color_class = ' btn-danger'; + } + + return '<a class="btn btn-sm status-display' . $btn_color_class . $btn_class . '" ng-click="toggleUserActiveStatus($event, ' . $user->id . ')">' . $active_text . '</a>'; + } + + public function renderChangeUserRoleCell($user) { + // Add "change role" select box + // <select> field does not use Angular bindings + // because of an issue affecting fields with duplicate names. + + $select_role = '<select ng-init="changeUserRole.u' . $user->id . ' = \'' . e($user->role) . '\'" + ng-model="changeUserRole.u' . $user->id . '" ng-change="changeUserRole(changeUserRole.u' . $user->id . ', '.$user->id.')" + class="form-control"'; + + if (session('username') === $user->username) { + // Do not allow user to change own role + $select_role .= ' disabled'; + } + $select_role .= '>'; + + foreach (UserHelper::$USER_ROLES as $role_text => $role_val) { + // Iterate over each available role and output option + $select_role .= '<option value="' . e($role_val) . '"'; + + if ($user->role === $role_val) { + $select_role .= ' selected'; + } + + $select_role .= '>' . e($role_text) . '</option>'; + } + + $select_role .= '</select>'; + return $select_role; + } + + public function renderToggleLinkActiveCell($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 '<a ng-click="toggleLink($event, \'' . e($link->short_url) . '\')" class="btn btn-sm ' . $btn_class . '"> + ' . $btn_text . ' + </a>'; + } + + /* DataTables bindings */ + public function paginateAdminUsers(Request $request) { self::ensureAdmin(); $admin_users = User::select(['username', 'email', 'created_at', 'active', 'api_key', 'api_active', 'api_quota', 'role', 'id']); return Datatables::of($admin_users) - ->addColumn('api_action', function ($user) { - // Add "API Info" action button - return '<a class="activate-api-modal btn btn-sm btn-info" - ng-click="openAPIModal($event, \'' . e($user->username) . '\', \'' . $user->api_key . '\', \'' . $user->api_active . '\', \'' . e($user->api_quota) . '\', \'' . $user->id . '\')"> - API info - </a>'; - }) - ->addColumn('toggle_active', function ($user) { - // Add user account active state toggle buttons - $btn_class = ''; - if (session('username') == $user->username) { - $btn_class = ' disabled'; - } - - if ($user->active) { - $active_text = 'Active'; - $btn_color_class = ' btn-success'; - } - else { - $active_text = 'Inactive'; - $btn_color_class = ' btn-danger'; - } - - return '<a class="btn btn-sm status-display' . $btn_color_class . $btn_class . '" ng-click="toggleUserActiveStatus($event, ' . $user->id . ')">' . $active_text . '</a>'; - }) - ->addColumn('change_role', function ($user) { - // Add "change role" select box - // FIXME <select> field does not use Angular bindings - // because of an issue affecting fields with duplicate names. - - $select_role = '<select ng-init="changeUserRole.u' . $user->id . ' = \'' . e($user->role) . '\'" - ng-model="changeUserRole.u' . $user->id . '" ng-change="changeUserRole(changeUserRole.u' . $user->id . ', '.$user->id.')" - class="form-control"'; - - if (session('username') == $user->username) { - // Do not allow user to change own role - $select_role .= ' disabled'; - } - $select_role .= '>'; - - foreach (UserHelper::$USER_ROLES as $role_text => $role_val) { - // Iterate over each available role and output option - $select_role .= '<option value="' . e($role_val) . '"'; - - if ($user->role == $role_val) { - $select_role .= ' selected'; - } - - $select_role .= '>' . e($role_text) . '</option>'; - } - - $select_role .= '</select>'; - return $select_role; - }) - ->addColumn('delete', function ($user) { - // Add "Delete" action button - $btn_class = ''; - if (session('username') == $user->username) { - $btn_class = 'disabled'; - } - return '<a ng-click="deleteUser($event, \''. $user->id .'\')" class="btn btn-sm btn-danger ' . $btn_class . '"> - Delete - </a>'; - }) + ->addColumn('api_action', [$this, 'renderAdminApiActionCell']) + ->addColumn('toggle_active', [$this, 'renderToggleUserActiveCell']) + ->addColumn('change_role', [$this, 'renderChangeUserRoleCell']) + ->addColumn('delete', [$this, 'renderDeleteUserCell']) ->escapeColumns(['username', 'email']) ->make(true); } @@ -92,38 +143,10 @@ class AdminPaginationController extends Controller { $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 '<a ng-click="toggleLink($event, \'' . e($link->short_url) . '\')" class="btn btn-sm ' . $btn_class . '"> - ' . $btn_text . ' - </a>'; - }) - ->addColumn('delete', function ($link) { - // Add "Delete" action button - return '<a ng-click="deleteLink($event, \'' . e($link->short_url) . '\')" - class="btn btn-sm btn-warning delete-link"> - Delete - </a>'; - }) - ->editColumn('clicks', function ($link) { - if (env('SETTING_ADV_ANALYTICS')) { - return $link->clicks . ' <a target="_blank" class="stats-icon" href="/admin/stats/' . e($link->short_url) . '"> - <i class="fa fa-area-chart" aria-hidden="true"></i> - </a>'; - } - else { - return $link->clicks; - } - }) - ->editColumn('long_url', '<a target="_blank" title="{{ $long_url }}" href="{{ $long_url }}">{{ str_limit($long_url, 50) }}</a>') + ->addColumn('disable', [$this, 'renderToggleLinkActiveCell']) + ->addColumn('delete', [$this, 'renderDeleteLinkCell']) + ->editColumn('clicks', [$this, 'renderClicksCell']) + ->editColumn('long_url', [$this, 'renderLongUrlCell']) ->escapeColumns(['short_url', 'creator']) ->make(true); } @@ -133,20 +156,11 @@ class AdminPaginationController extends Controller { $username = session('username'); $user_links = Link::where('creator', $username) - ->select(['short_url', 'long_url', 'clicks', 'created_at']); + ->select(['id', 'short_url', 'long_url', 'clicks', 'created_at']); return Datatables::of($user_links) - ->editColumn('clicks', function ($link) { - if (env('SETTING_ADV_ANALYTICS')) { - return $link->clicks . ' <a target="_blank" class="stats-icon" href="/admin/stats/' . e($link->short_url) . '"> - <i class="fa fa-area-chart" aria-hidden="true"></i> - </a>'; - } - else { - return $link->clicks; - } - }) - ->editColumn('long_url', '<a target="_blank" title="{{ $long_url }}" href="{{ $long_url }}">{{ str_limit($long_url, 50) }}</a>') + ->editColumn('clicks', [$this, 'renderClicksCell']) + ->editColumn('long_url', [$this, 'renderLongUrlCell']) ->escapeColumns(['short_url']) ->make(true); } |