Path: blob/1.0-develop/app/Http/Controllers/Api/Client/Servers/ActivityLogController.php
10280 views
<?php12namespace Pterodactyl\Http\Controllers\Api\Client\Servers;34use Pterodactyl\Models\User;5use Pterodactyl\Models\Server;6use Pterodactyl\Models\Permission;7use Pterodactyl\Models\ActivityLog;8use Spatie\QueryBuilder\QueryBuilder;9use Spatie\QueryBuilder\AllowedFilter;10use Illuminate\Database\Eloquent\Builder;11use Illuminate\Database\Query\JoinClause;12use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;13use Pterodactyl\Transformers\Api\Client\ActivityLogTransformer;14use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;1516class ActivityLogController extends ClientApiController17{18/**19* Returns the activity logs for a server.20*/21public function __invoke(ClientApiRequest $request, Server $server): array22{23$this->authorize(Permission::ACTION_ACTIVITY_READ, $server);2425$activity = QueryBuilder::for($server->activity())26->with('actor')27->allowedSorts(['timestamp'])28->allowedFilters([AllowedFilter::partial('event')])29->whereNotIn('activity_logs.event', ActivityLog::DISABLED_EVENTS)30->when(config('activity.hide_admin_activity'), function (Builder $builder) use ($server) {31// We could do this with a query and a lot of joins, but that gets pretty32// painful so for now we'll execute a simpler query.33$subusers = $server->subusers()->pluck('user_id')->merge($server->owner_id);3435$builder->select('activity_logs.*')36->leftJoin('users', function (JoinClause $join) {37$join->on('users.id', 'activity_logs.actor_id')38->where('activity_logs.actor_type', (new User())->getMorphClass());39})40->where(function (Builder $builder) use ($subusers) {41$builder->whereNull('users.id')42->orWhere('users.root_admin', 0)43->orWhereIn('users.id', $subusers);44});45})46->paginate(min($request->query('per_page', 25), 100))47->appends($request->query());4849return $this->fractal->collection($activity)50->transformWith($this->getTransformer(ActivityLogTransformer::class))51->toArray();52}53}545556