From 514f1cb48307e1b9107fc81cf7055699b5f07c99 Mon Sep 17 00:00:00 2001 From: Jonathan van Rij Date: Mon, 16 Feb 2026 15:34:30 +0100 Subject: [PATCH] excel export works --- app/Nova/Actions/DownloadExcel.php | 72 ++++++++++++++++++++++++++++++ app/Nova/AnswerResource.php | 2 +- app/Nova/CategoryResource.php | 2 +- app/Nova/LogResource.php | 2 +- app/Nova/QuestionGroupResource.php | 2 +- app/Nova/QuestionResource.php | 4 +- app/Nova/ScreeningResource.php | 2 +- app/Nova/SessionResource.php | 2 +- 8 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 app/Nova/Actions/DownloadExcel.php diff --git a/app/Nova/Actions/DownloadExcel.php b/app/Nova/Actions/DownloadExcel.php new file mode 100644 index 0000000..b70f4c1 --- /dev/null +++ b/app/Nova/Actions/DownloadExcel.php @@ -0,0 +1,72 @@ +getOnly()); + $except = $this->getExcept(); + + if ($row instanceof Model) { + if (!$this->onlyIndexFields && $except === null && (!is_array($only) || count($only) === 0)) { + $except = $row->getHidden(); + } + + $row->setHidden([]); + $row = $this->replaceFieldValuesWhenOnResource($row, $only); + } + + if (is_array($only) && count($only) > 0) { + $row = Arr::only($row, $only); + } + + if (is_array($except) && count($except) > 0) { + $row = Arr::except($row, $except); + } + + return $row; + } + + protected function replaceFieldValuesWhenOnResource(Model $model, array $only = []): array + { + $resource = $this->resolveResource($model); + $fields = $this->resourceFields($resource); + + $row = []; + foreach ($fields as $field) { + if (!$this->isExportableField($field)) { + continue; + } + + if (\in_array($field->attribute, $only, true)) { + $row[$field->attribute] = $field->value; + } elseif (\in_array((string) $field->name, $only, true)) { + $row[(string) $field->name] = $field->value; + } + } + + foreach (array_diff($only, array_keys($row)) as $attribute) { + if ($model->{$attribute}) { + $row[$attribute] = $model->{$attribute}; + } else { + $row[$attribute] = ''; + } + } + + $row = array_merge(array_flip($only), $row); + + return $row; + } +} diff --git a/app/Nova/AnswerResource.php b/app/Nova/AnswerResource.php index 14afaaa..47599ad 100644 --- a/app/Nova/AnswerResource.php +++ b/app/Nova/AnswerResource.php @@ -10,7 +10,7 @@ use Laravel\Nova\Fields\Text; use Laravel\Nova\Fields\Textarea; use Laravel\Nova\Http\Requests\NovaRequest; -use Maatwebsite\LaravelNovaExcel\Actions\DownloadExcel; +use App\Nova\Actions\DownloadExcel; final class AnswerResource extends Resource { diff --git a/app/Nova/CategoryResource.php b/app/Nova/CategoryResource.php index e69235b..a6e0fb7 100644 --- a/app/Nova/CategoryResource.php +++ b/app/Nova/CategoryResource.php @@ -10,7 +10,7 @@ use Laravel\Nova\Fields\Number; use Laravel\Nova\Fields\Text; use Laravel\Nova\Http\Requests\NovaRequest; -use Maatwebsite\LaravelNovaExcel\Actions\DownloadExcel; +use App\Nova\Actions\DownloadExcel; final class CategoryResource extends Resource { diff --git a/app/Nova/LogResource.php b/app/Nova/LogResource.php index 84c47e4..897a1a0 100644 --- a/app/Nova/LogResource.php +++ b/app/Nova/LogResource.php @@ -10,7 +10,7 @@ use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Text; use Laravel\Nova\Http\Requests\NovaRequest; -use Maatwebsite\LaravelNovaExcel\Actions\DownloadExcel; +use App\Nova\Actions\DownloadExcel; final class LogResource extends Resource { diff --git a/app/Nova/QuestionGroupResource.php b/app/Nova/QuestionGroupResource.php index dc7c011..c741916 100644 --- a/app/Nova/QuestionGroupResource.php +++ b/app/Nova/QuestionGroupResource.php @@ -12,7 +12,7 @@ use Laravel\Nova\Fields\Text; use Laravel\Nova\Fields\Textarea; use Laravel\Nova\Http\Requests\NovaRequest; -use Maatwebsite\LaravelNovaExcel\Actions\DownloadExcel; +use App\Nova\Actions\DownloadExcel; final class QuestionGroupResource extends Resource { diff --git a/app/Nova/QuestionResource.php b/app/Nova/QuestionResource.php index ba6eac4..f71a150 100644 --- a/app/Nova/QuestionResource.php +++ b/app/Nova/QuestionResource.php @@ -15,7 +15,7 @@ use Laravel\Nova\Fields\Text; use Laravel\Nova\Fields\Textarea; use Laravel\Nova\Http\Requests\NovaRequest; -use Maatwebsite\LaravelNovaExcel\Actions\DownloadExcel; +use App\Nova\Actions\DownloadExcel; final class QuestionResource extends Resource { @@ -89,7 +89,7 @@ public function fields(NovaRequest $request): array ->sortable() ->filterable(), - + Textarea::make('Text') ->rules('required') diff --git a/app/Nova/ScreeningResource.php b/app/Nova/ScreeningResource.php index a82a323..f5cdee2 100644 --- a/app/Nova/ScreeningResource.php +++ b/app/Nova/ScreeningResource.php @@ -11,7 +11,7 @@ use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Number; use Laravel\Nova\Http\Requests\NovaRequest; -use Maatwebsite\LaravelNovaExcel\Actions\DownloadExcel; +use App\Nova\Actions\DownloadExcel; final class ScreeningResource extends Resource { diff --git a/app/Nova/SessionResource.php b/app/Nova/SessionResource.php index a9fbd85..b52fa19 100644 --- a/app/Nova/SessionResource.php +++ b/app/Nova/SessionResource.php @@ -12,7 +12,7 @@ use Laravel\Nova\Fields\Select; use Laravel\Nova\Fields\Textarea; use Laravel\Nova\Http\Requests\NovaRequest; -use Maatwebsite\LaravelNovaExcel\Actions\DownloadExcel; +use App\Nova\Actions\DownloadExcel; final class SessionResource extends Resource {