![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/dceprojects.corals.io/Corals/modules/Survey/Traits/ |
<?php namespace Corals\Modules\Survey\Traits; use Corals\Foundation\Models\BaseModel; use Corals\Modules\Survey\Facades\Surveys; use Corals\Modules\Survey\Models\Answer; use Corals\Modules\Survey\Models\Question; use Corals\Modules\Survey\Models\SurveyResponse; use Corals\Modules\Survey\Services\SurveyService; use Illuminate\Http\Request; trait SurveyCommon { /** * @var BaseModel */ protected $surveyModelClass = null; /** * @var SurveyService */ protected SurveyService $surveyService; /** * */ protected function setCommonVariables() { $this->surveyModelClass = null; } /** * @param Request $request * @param Question $question * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function renderQuestion(Request $request, Question $question) { $question = Surveys::getQuestion($question); return view("Survey::submission_views.partials.question") ->with(compact('question')); } /** * @param Request $request * @param $modelHashedId * @return \Illuminate\Http\JsonResponse */ public function submitSurvey(Request $request, $modelHashedId) { try { $responses = []; $totalScore = 0; $totalAnswersScore = 0; $defaultSurvey = Surveys::getDefaultSurvey(); $surveyModel = $this->resolveSurveyModel($modelHashedId); //delete all old responses for this survey, this is in-case of update . $surveyModel->surveyResponses() ->where('survey_id', $defaultSurvey->id) ->delete(); foreach ($request->get('answers') as $questionId => $attr) { $question = Question::findByHash($questionId); $answer = optional(Answer::findByHash(data_get($attr, 'answer_hashed_id'))); $totalScore += $question->answers()->sum('score'); $totalAnswersScore += $answer->score; $responses[] = [ 'score' => $answer->score, 'survey_id' => $defaultSurvey->id, 'user_id' => $surveyModel->id, 'user_type' => getMorphAlias($surveyModel), 'question_id' => $question->id, 'answer_id' => $answer->id, 'answer_text' => data_get($attr, 'answer_value', $answer->text), 'question_title' => $question->title, ]; } SurveyResponse::query()->insert($responses); $surveyModel->update(['status' => 'survey_submitted']); event('notifications.survey.survey_submitted', [ 'survey' => $defaultSurvey, 'user' => $surveyModel->getSubmissionUser(), ]); $message = [ 'message' => 'submitted!', 'level' => 'success' ]; } catch (\Exception $exception) { $message = [ 'message' => $exception->getMessage(), 'level' => 'error' ]; $code = 400; } return response()->json($message, $code ?? 200); } /** * @param string $modelHashedId * @return mixed */ protected function resolveSurveyModel(string $modelHashedId) { return $this->surveyModelClass::findByHash($modelHashedId); } }