Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/dceprojects.corals.io/Corals/modules/Survey/Traits/SurveyCommon.php
<?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);
    }


}

Spamworldpro Mini