*/ public static $model = \App\Models\User::class; /** * Get the value that should be displayed to represent the resource. */ public function title(): string { return $this->name.sprintf(' (%s)', $this->username); } /** * Get the search result subtitle for the resource. */ public function subtitle(): string { return $this->phone ?: '-'; } /** * The columns that should be searched. * * @var array */ public static $search = [ 'id', 'name', 'email', 'phone', 'username', ]; /** * Build an "index" query for the given resource. * * @param \Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model> $query * @return \Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model> */ public static function indexQuery(NovaRequest $request, mixed $query): Builder { return $query; } /** * Get the displayable label of the resource. */ public static function label(): string { return __('Users'); } /** * Get the displayable singular label of the resource. */ public static function singularLabel(): string { return __('User'); } /** * Register a callback to be called after the resource is created. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public static function afterCreate(NovaRequest $request, Model $model): void { /** @var UserModel */ $usermodel = $model; sendSMSVerification($usermodel->phone); } /** * Get the fields displayed by the resource. * * @return array */ public function fields(NovaRequest $request): array { return [ ID::make()->sortable(), Text::make(__('Username'), 'username') ->sortable() ->rules('required', 'string', 'alpha_dash:ascii', 'max:250') ->creationRules('unique:users,username') ->updateRules('unique:users,username,{{resourceId}}'), Text::make(__('Name'), 'name') ->sortable() ->rules('required', 'max:255'), Number::make(__('Phone'), 'phone') ->rules('required', 'integer', 'between:61000000,71999999', 'unique:users,phone'), Text::make(__('Email'), 'email') ->sortable() ->rules('nullable', 'email', 'max:254') ->creationRules('unique:users,email') ->updateRules('unique:users,email,{{resourceId}}'), Password::make(__('Password'), 'password') ->onlyOnForms() ->creationRules('required', Rules\Password::defaults()) ->updateRules('nullable', Rules\Password::defaults()), Hidden::make('password_must_be_changed') ->default(true) ->hideWhenUpdating(), Boolean::make(__('Phone verified'), 'phone_verified_at') ->default(false) ->fillUsing(function (NovaRequest $request, $model, string $attribute, string $requestAttribute) { if ($request->boolean('phone_verified_at')) { /** @var UserModel $model */ $model->phone_verified_at = now(); } }) ->onlyOnForms() ->canSeeWhen('isAdmin', $this), Boolean::make(__('Active'), 'active') ->default(true) ->canSeeWhen('isAdmin', $this), MorphToMany::make(__('Roles'), 'roles', Role::class) ->canSeeWhen('isAdmin', $this), MorphToMany::make(__('Permissions'), 'permissions', Permission::class) ->canSeeWhen('isAdmin', $this), BelongsToMany::make(__('Branches'), 'branches', Branch::class) ->canSeeWhen('isAdmin', $this), ]; } /** * Get the cards available for the request. * * @return array */ public function cards(NovaRequest $request): array { return []; } /** * Get the filters available for the resource. * * @return array */ public function filters(NovaRequest $request): array { return []; } /** * Get the lenses available for the resource. * * @return array */ public function lenses(NovaRequest $request): array { return []; } /** * Get the actions available for the resource. * * @return array */ public function actions(NovaRequest $request): array { return []; } }