'required|string|min:6', 'medicalEducations.*.date' => 'required|date', 'vkLink' => 'required|url', 'instagramLink' => 'required|url', 'facebookLink' => 'required|url', 'telegramLink' => 'required|url', 'hasMedicalEducation' => 'required|boolean', 'tmpCertPhotos.*' => 'image|max:4024' ]; public function mount() { $this->user = Auth::user(); $consultant_request = $this->user->consultant_request; if ($consultant_request) { $this->medicalEducations = json_decode($consultant_request->completed_courses, true); $this->vkLink = $consultant_request->vk_link; $this->instagramLink = $consultant_request->insta_link; $this->facebookLink= $consultant_request->fb_link; $this->telegramLink = $consultant_request->tg_link; $this->hasMedicalEducation = $consultant_request->has_medical_education; } $photos = $this->user->attachments()->certs()->get(); if ($photos) { $this->certPhotos = collect($photos); } } public function render() { return view('livewire.consultant.registration-form'); } public function addEducation() { $this->validate(); $medicalEducations = $this->medicalEducations; $this->resetExcept( [ 'user', 'vkLink', 'instagramLink', 'facebookLink', 'telegramLink', 'hasMedicalEducation', 'certPhotos', 'tmpCertPhotos' ] ); $this->medicalEducations = $medicalEducations; } public function remove($index) { $filteredEducations = array_filter( $this->medicalEducations, function($val, $key) use ($index) { return $key != $index; }, ARRAY_FILTER_USE_BOTH ); $this->medicalEducations = array_values($filteredEducations); } public function save() { $data = [ 'user_id' => $this->user->id, 'completed_courses' => json_encode($this->medicalEducations), 'vk_link' => $this->vkLink, 'insta_link' => $this->instagramLink, 'fb_link' => $this->facebookLink, 'tg_link' => $this->telegramLink, 'has_medical_education' => $this->hasMedicalEducation, 'request_state' => 'created', ]; $this->validate(); $consultantEducation = ConsultantEducation::updateOrCreate( [ 'user_id' => $this->user->id ], $data ); /* $newConsultantRequest->save(); */ $attachmentGroup = "user_certs"; foreach($this->tmpCertPhotos as $photo) { $curCert = $photo->storePublicly("public/" . $attachmentGroup . "/" . $this->user->id); $fileData = [ 'user_id' => $this->user->id, 'group' => $attachmentGroup, 'original_name' => $photo->getClientOriginalName(), 'size' => $photo->getSize(), ]; $newFile = UserAttachment::updateOrCreate( $fileData, [ 'path' => preg_replace("/public\//xi", "/storage/", $curCert), 'specs' => json_encode( [ 'ext' => $photo->extension(), 'original_path' => $curCert, ] ) ] ); $newFile->save(); $this->certPhotos = collect($this->user->attachments()->certs()->get()); $this->reset('tmpCertPhotos'); } $this->user->notify(new ConsultantRequestStarted($consultantEducation)); } public function deleteImg($id) { $file = UserAttachment::find($id); $fileSpecs = json_decode($file->specs, true); Storage::delete($fileSpecs['original_path']); $file->delete(); $this->certPhotos = $this->certPhotos->whereNotIn('id', [$id]); } }