uploadDocumentForProcessor = $uploadDocumentForProcessor; } /** * @return QAUserAnswerSelected|\Illuminate\Database\Eloquent\Model */ public function execute($userId, $sourceId, $questionId, $questionType, $questionMetadata, $answerInText, $answerOptionId, $filesUpload, $timeUsedSeconds, $isPrevious, $reference = null){ $answer = null; $attachments = []; if(is_null($answer)) { $answer = new QAUserAnswerSelected; } $answer->user_id = $userId; $answer->source_id = $sourceId; $answer->question_id = $questionId; $answer->question_metadata = json_encode($questionMetadata); $answer->answer_option_id = $answerOptionId; $answer->time_used_seconds = $timeUsedSeconds; $answer->is_previous = $isPrevious; if($reference){ $answer->reference = $reference; } $answer->save(); //cief todo: why 2 save() in this file, this is wrong if($filesUpload){ if (isset($filesUpload['filesA'])) { foreach ($filesUpload as $key => $files) { if($key === 'filesA'){ $attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::ECOMMERCE_PURCHASE_ORDER_EN); } else if($key === "filesB"){ $attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::ECOMMERCE_PURCHASE_ORDER_CH); } else if($key === "filesC"){ $attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::CURRENCY_VENDOR_PAYMENT_PROOF); } } } else if (isset($filesUpload['files']) && $filesUpload['files']) { $attachments = $this->saveFile($answer, $filesUpload['files']); } } if(!$isPrevious) { if($questionType === QAType::SUBMIT_1688_3_TYPES_DOCUMENTS){ $structuredAnswer = [ 'text' => "3_DOCUMENTS_UPLOADED", 'files' => $attachments, ]; $answer->answer = json_encode($structuredAnswer); } else if($questionType === QAType::REMARKS_WITH_DOCUMENT_UPLOAD){ $structuredAnswer = [ 'text' => $answerInText, 'files' => $attachments, ]; $answer->answer = json_encode($structuredAnswer); } else if($questionType === QAType::DOCUMENT_UPLOAD){ $structuredAnswer = [ 'files' => $attachments, ]; $answer->answer = json_encode($structuredAnswer); } else { $answer->answer = $answerInText; } } else { $answer->answer = $answerInText; } $answer->save(); return $answer; } private function saveFile(QAUserAnswerSelected $answer, array $files, string $path = 'questionnaires', string $documentType = DocumentType::ADMIN_WORK_FLOW){ $result = $this->uploadDocumentForProcessor->execute($answer, $files, $path, $documentType); $attachment = array_map(function ($item) use($documentType) { return [ 'name' => $item->document_id, 'file_id' => $item->id, 'document_type'=> $documentType, ]; }, $result); return $attachment; } }