Fix server owner filtering; improve searching for servers; closes #2581
This commit is contained in:
parent
39dddba1d6
commit
092c942764
4 changed files with 48 additions and 4 deletions
40
app/Models/Filters/AdminServerFilter.php
Normal file
40
app/Models/Filters/AdminServerFilter.php
Normal file
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace Pterodactyl\Models\Filters;
|
||||
|
||||
use BadMethodCallException;
|
||||
use Spatie\QueryBuilder\Filters\Filter;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class AdminServerFilter implements Filter
|
||||
{
|
||||
/**
|
||||
* A multi-column filter for the servers table that allows an administrative user to search
|
||||
* across UUID, name, owner username, and owner email.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param string $value
|
||||
* @param string $property
|
||||
*/
|
||||
public function __invoke(Builder $query, $value, string $property)
|
||||
{
|
||||
if ($query->getQuery()->from !== 'servers') {
|
||||
throw new BadMethodCallException(
|
||||
'Cannot use the AdminServerFilter against a non-server model.'
|
||||
);
|
||||
}
|
||||
$query
|
||||
->select('servers.*')
|
||||
->leftJoin('users', 'users.id', '=', 'servers.owner_id')
|
||||
->where(function (Builder $builder) use ($value) {
|
||||
$builder->where('servers.uuid', $value)
|
||||
->orWhere('servers.uuid', 'LIKE', "$value%")
|
||||
->orWhere('servers.uuidShort', $value)
|
||||
->orWhere('servers.external_id', $value)
|
||||
->orWhereRaw('LOWER(users.username) LIKE ?', ["%$value%"])
|
||||
->orWhereRaw('LOWER(users.email) LIKE ?', ["$value%"])
|
||||
->orWhereRaw('LOWER(servers.name) LIKE ?', ["%$value%"]);
|
||||
})
|
||||
->groupBy('servers.id');
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue