From f7c75fa1f903f6aefff1858ae641f6c93b7a99d9 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Wed, 17 Dec 2025 14:01:50 -0600 Subject: [PATCH] Etude upload form working. --- .../Controllers/AuditionEtudeController.php | 19 +++++++- app/Http/Requests/EtudeUploadRequest.php | 44 +++++++++++++++++++ .../admin/audition_etude/create.blade.php | 39 +++++++++++++--- .../views/components/form/button.blade.php | 2 +- .../views/components/form/select.blade.php | 26 +++++++---- 5 files changed, 112 insertions(+), 18 deletions(-) create mode 100644 app/Http/Requests/EtudeUploadRequest.php diff --git a/app/Http/Controllers/AuditionEtudeController.php b/app/Http/Controllers/AuditionEtudeController.php index 7bb98b7..d521676 100644 --- a/app/Http/Controllers/AuditionEtudeController.php +++ b/app/Http/Controllers/AuditionEtudeController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Http\Requests\EtudeUploadRequest; use App\Models\AuditionedEnsemble; use App\Models\AuditionEtude; use App\Models\Instrument; @@ -24,6 +25,7 @@ class AuditionEtudeController extends Controller { $instruments = Instrument::orderBy('score_order')->get(); $ensembles = AuditionedEnsemble::all(); + return view('admin.audition_etude.create', [ 'instruments' => $instruments, 'ensembles' => $ensembles, @@ -33,9 +35,22 @@ class AuditionEtudeController extends Controller /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(EtudeUploadRequest $request) { - // + $path = $request->file('file_upload')->store('etudes', 'public'); + $originalFilename = $request->file('file_upload')->getClientOriginalName(); + $fileSize = $request->file('file_upload')->getSize(); + + AuditionEtude::create([ + 'instrument_id' => $request->instrument_id, + 'auditioned_ensemble_id' => $request->auditioned_ensemble_id, + 'set' => $request->set, + 'file_path' => $path, + 'original_filename' => $originalFilename, + 'file_size' => $fileSize, + ]); + + return redirect()->route('admin.etudes.index')->with('success', 'Etude uploaded successfully.'); } /** diff --git a/app/Http/Requests/EtudeUploadRequest.php b/app/Http/Requests/EtudeUploadRequest.php new file mode 100644 index 0000000..5df0f62 --- /dev/null +++ b/app/Http/Requests/EtudeUploadRequest.php @@ -0,0 +1,44 @@ +|string> + */ + public function rules(): array + { + + return [ + 'auditioned_ensemble_id' => ['required', 'exists:auditioned_ensembles,id'], + 'instrument_id' => ['required', 'exists:instruments,id'], + 'set' => [ + 'required', + 'numeric', + 'min:1', + function ($attribute, $value, $fail) { + /** @noinspection PhpUndefinedFieldInspection */ + $ensemble = AuditionedEnsemble::find($this->audtioned_ensemble_id); + if ($ensemble && $value > $ensemble->set_count) { + $fail("The set number cannot exceed {$ensemble->set_count} for this ensemble."); + } + }, + ], + 'file_upload' => ['required', 'file', 'mimes:pdf', 'mimetypes:application/pdf', 'max:10240'], + ]; + } +} diff --git a/resources/views/admin/audition_etude/create.blade.php b/resources/views/admin/audition_etude/create.blade.php index ac1da12..ef5c65f 100644 --- a/resources/views/admin/audition_etude/create.blade.php +++ b/resources/views/admin/audition_etude/create.blade.php @@ -2,13 +2,35 @@ New Etude - + @if($errors->any()) +
+
+
+ + + +
+
+

There were {{ $errors->count() }} error(s) with your submission

+
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+
+
+
+ @endif + +
Ensemble @foreach($ensembles as $ensemble) - + @endforeach
@@ -17,15 +39,18 @@ Instrument @foreach($instruments as $instrument) - + @endforeach -
- +
+
-
- +
+ +
+
+ Save Etude
diff --git a/resources/views/components/form/button.blade.php b/resources/views/components/form/button.blade.php index d525733..f6e45e5 100644 --- a/resources/views/components/form/button.blade.php +++ b/resources/views/components/form/button.blade.php @@ -2,7 +2,7 @@ @php $classes = [ - 'bg-brand-600 font-semibold text-white shadow-xs hover:bg-brand-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand-600 dark:bg-brand-500 dark:shadow-none dark:hover:bg-brand-400 dark:focus-visible:outline-brand-500', + 'bg-brand-600 font-semibold text-white shadow-xs hover:bg-brand-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand-600 dark:bg-brand-500 dark:shadow-none dark:hover:bg-brand-400 dark:focus-visible:outline-brand-500 disabled:bg-brand-200 disabled:cursor-not-allowed', 'rounded-sm px-2 py-1 text-xs' => $size == 1, 'rounded-sm px-2 py-1 text-sm' => $size == 2, 'rounded-md px-2.5 py-1.5 text-sm' => $size == 3, diff --git a/resources/views/components/form/select.blade.php b/resources/views/components/form/select.blade.php index bd2a2a2..64a5b74 100644 --- a/resources/views/components/form/select.blade.php +++ b/resources/views/components/form/select.blade.php @@ -1,10 +1,20 @@ @props(['id', 'name', 'label']) - -
- - +
+ +
+ + +
+ @error($name) +

{{ $message }}

+ @enderror