mirror of
https://github.com/librenms/librenms.git
synced 2024-09-22 02:48:37 +00:00
Implement filter helpers for ajax table controllers (#9660)
Reduces boiler plate code.
This commit is contained in:
parent
33c886247c
commit
394c40e541
@ -65,7 +65,7 @@ abstract class PaginatedAjaxController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines search fields will be searched in order
|
||||
* Defines search fields. They will be searched in order.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
@ -76,6 +76,18 @@ abstract class PaginatedAjaxController extends Controller
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines filter fields. Request and table fields must match.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
|
||||
*/
|
||||
protected function filterFields($request)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Format an item for display. Default is pass-through
|
||||
*
|
||||
@ -88,7 +100,7 @@ abstract class PaginatedAjaxController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string
|
||||
* @param string $search
|
||||
* @param Builder $query
|
||||
* @param array $fields
|
||||
* @return Builder
|
||||
@ -107,6 +119,23 @@ abstract class PaginatedAjaxController extends Controller
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Builder $query
|
||||
* @param array $fields
|
||||
*/
|
||||
protected function filter($request, $query, $fields)
|
||||
{
|
||||
foreach ($fields as $target => $field) {
|
||||
if ($value = $request->get($field)) {
|
||||
if (is_string($target)) {
|
||||
$query->where($target, $value);
|
||||
} else {
|
||||
$query->where($field, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the given request with the given rules.
|
||||
|
@ -45,6 +45,14 @@ class EventlogController extends TableController
|
||||
return ['message'];
|
||||
}
|
||||
|
||||
protected function filterFields($request)
|
||||
{
|
||||
return [
|
||||
'device_id' => 'device',
|
||||
'type' => 'eventtype',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the base query for this resource
|
||||
*
|
||||
@ -53,17 +61,7 @@ class EventlogController extends TableController
|
||||
*/
|
||||
public function baseQuery($request)
|
||||
{
|
||||
$query = Eventlog::hasAccess($request->user())->with('device');
|
||||
|
||||
if ($device_id = $request->get('device')) {
|
||||
$query->where('device_id', $device_id);
|
||||
}
|
||||
|
||||
if ($type = $request->get('eventtype')) {
|
||||
$query->where('type', $type);
|
||||
}
|
||||
|
||||
return $query;
|
||||
return Eventlog::hasAccess($request->user())->with('device');
|
||||
}
|
||||
|
||||
public function formatItem($eventlog)
|
||||
|
@ -30,11 +30,6 @@ use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class SyslogController extends TableController
|
||||
{
|
||||
public function searchFields($request)
|
||||
{
|
||||
return ['msg'];
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
@ -46,6 +41,20 @@ class SyslogController extends TableController
|
||||
];
|
||||
}
|
||||
|
||||
public function searchFields($request)
|
||||
{
|
||||
return ['msg'];
|
||||
}
|
||||
|
||||
public function filterFields($request)
|
||||
{
|
||||
return [
|
||||
'device_id' => 'device',
|
||||
'program' => 'program',
|
||||
'priority' => 'priority',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the base query for this resource
|
||||
*
|
||||
@ -57,18 +66,6 @@ class SyslogController extends TableController
|
||||
/** @var Builder $query */
|
||||
$query = Syslog::hasAccess($request->user())->with('device');
|
||||
|
||||
if ($device_id = $request->get('device')) {
|
||||
$query->where('device_id', $device_id);
|
||||
}
|
||||
|
||||
if ($program = $request->get('program')) {
|
||||
$query->where('program', $program);
|
||||
}
|
||||
|
||||
if ($priority = $request->get('priority')) {
|
||||
$query->where('priority', $priority);
|
||||
}
|
||||
|
||||
if ($from = $request->get('from')) {
|
||||
$query->where('timestamp', '>=', $from);
|
||||
}
|
||||
|
@ -32,6 +32,8 @@ use Illuminate\Http\Request;
|
||||
|
||||
abstract class TableController extends PaginatedAjaxController
|
||||
{
|
||||
protected $default_sort = [];
|
||||
|
||||
final protected function baseRules()
|
||||
{
|
||||
return SimpleTableController::$base_rules;
|
||||
@ -49,8 +51,9 @@ abstract class TableController extends PaginatedAjaxController
|
||||
$query = $this->baseQuery($request);
|
||||
|
||||
$this->search($request->get('searchPhrase'), $query, $this->searchFields($request));
|
||||
$this->filter($request, $query, $this->filterFields($request));
|
||||
|
||||
$sort = $request->get('sort', []);
|
||||
$sort = $request->get('sort', $this->default_sort);
|
||||
foreach ($sort as $column => $direction) {
|
||||
$query->orderBy($column, $direction);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user