Files
site/app/Nova/Complaint.php
2025-04-21 16:03:20 +02:00

141 lines
3.5 KiB
PHP

<?php
namespace App\Nova;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\MorphTo;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Textarea;
use Laravel\Nova\Http\Requests\NovaRequest;
class Complaint extends Resource
{
/**
* The model the resource corresponds to.
*
* @var string
*/
public static $model = \App\Domain\Complaints\Models\Complaint::class;
public static $group = 'Complaints';
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'id';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'id',
];
public static function indexQuery(NovaRequest $request, $query)
{
if ($request->user()->hasRole('moderator')) {
$resourceRelationship = $request->get('viaResource');
if (empty($resourceRelationship)) {
return $query->where(function ($query) use ($request) {
$query->where('moderator_checking_id', $request->user()->id)->orWhere('moderator_checking_id', null);
});
}
}
}
public static function relatableUsers(NovaRequest $request, $query)
{
return $query->whereHas('roles', function ($query) {
$query->where('name', 'moderator');
});
}
public static $with = ['reason', 'user', 'moderator'];
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
ID::make(__('ID'), 'id')->sortable(),
BelongsTo::make('User')
->onlyOnIndex(),
BelongsTo::make('Moderator', 'moderator', 'App\Nova\User')
//->readonly(optional($this->resource)->user_checking_id !== null)
->readonly()
->withoutTrashed(),
BelongsTo::make('Reason')
->readonly(),
BelongsTo::make('Feed')
->readonly()->sortable(),
Select::make('Status')->options([
'pending' => 'Pending',
'reviewed_bad' => 'Reviewed Bad',
'reviewed_ok' => 'Reviewed Ok',
]),
Textarea::make('Message')->alwaysShow()->rules('required'),
DateTime::make('Created At')->format('DD MMM YYYY')->onlyOnIndex(),
];
}
/**
* Get the cards available for the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [];
}
/**
* Get the filters available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function filters(Request $request)
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function lenses(Request $request)
{
return [];
}
/**
* Get the actions available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function actions(Request $request)
{
return [];
}
}