Merge pull request #92 from apuc/update_user_answers
Update user answers
This commit is contained in:
commit
120cf406c3
@ -33,11 +33,11 @@ $this->params['breadcrumbs'][] = $this->title;
|
|||||||
'id',
|
'id',
|
||||||
[
|
[
|
||||||
'attribute' => 'field_id',
|
'attribute' => 'field_id',
|
||||||
'value' => ArrayHelper::getValue($model, 'field.title') // AnswerHelper::answerFlagLabel($model->answer_flag),
|
'value' => ArrayHelper::getValue($model, 'field.title')
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'attribute' => 'document_id',
|
'attribute' => 'document_id',
|
||||||
'value' => ArrayHelper::getValue($model, 'document.title') // AnswerHelper::answerFlagLabel($model->answer_flag),
|
'value' => ArrayHelper::getValue($model, 'document.title')
|
||||||
],
|
],
|
||||||
'value',
|
'value',
|
||||||
],
|
],
|
||||||
|
@ -4,7 +4,7 @@ namespace backend\modules\questionnaire\controllers;
|
|||||||
|
|
||||||
use backend\modules\questionnaire\models\Questionnaire;
|
use backend\modules\questionnaire\models\Questionnaire;
|
||||||
use backend\modules\questionnaire\models\QuestionnaireCategory;
|
use backend\modules\questionnaire\models\QuestionnaireCategory;
|
||||||
use common\helpers\ScoreCalculatorHelper;
|
use common\services\ScoreCalculatorService;
|
||||||
use Yii;
|
use Yii;
|
||||||
use backend\modules\questionnaire\models\UserQuestionnaire;
|
use backend\modules\questionnaire\models\UserQuestionnaire;
|
||||||
use backend\modules\questionnaire\models\UserQuestionnaireSearch;
|
use backend\modules\questionnaire\models\UserQuestionnaireSearch;
|
||||||
@ -169,7 +169,7 @@ class UserQuestionnaireController extends Controller
|
|||||||
public function actionRateResponses($id)
|
public function actionRateResponses($id)
|
||||||
{
|
{
|
||||||
$user_questionnaire = $this->findModel($id);
|
$user_questionnaire = $this->findModel($id);
|
||||||
ScoreCalculatorHelper::rateResponses($user_questionnaire);
|
ScoreCalculatorService::rateResponses($user_questionnaire);
|
||||||
|
|
||||||
return $this->actionView($id);
|
return $this->actionView($id);
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ class UserQuestionnaireController extends Controller
|
|||||||
public function actionCalculateScore($id)
|
public function actionCalculateScore($id)
|
||||||
{
|
{
|
||||||
$user_questionnaire = $this->findModel($id);
|
$user_questionnaire = $this->findModel($id);
|
||||||
ScoreCalculatorHelper::calculateScore($user_questionnaire);
|
ScoreCalculatorService::calculateScore($user_questionnaire);
|
||||||
|
|
||||||
return $this->actionView($id);
|
return $this->actionView($id);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use common\helpers\ScoreCalculatorHelper;
|
use common\services\ScoreCalculatorService;
|
||||||
use common\helpers\AnswerHelper;
|
use common\helpers\AnswerHelper;
|
||||||
use common\helpers\StatusHelper;
|
use common\helpers\StatusHelper;
|
||||||
use yii\bootstrap\Modal;
|
use yii\bootstrap\Modal;
|
||||||
@ -23,20 +23,8 @@ $this->params['breadcrumbs'][] = ['label' => 'User Questionnaires', 'url' => ['i
|
|||||||
$this->params['breadcrumbs'][] = $this->title;
|
$this->params['breadcrumbs'][] = $this->title;
|
||||||
YiiAsset::register($this);
|
YiiAsset::register($this);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<?php
|
|
||||||
//$this->registerJs(
|
|
||||||
// '$("document").ready(function(){
|
|
||||||
// $("#new_note").on("pjax:end", function() {
|
|
||||||
// $.pjax.reload({container:"#user_responses"}); //Reload GridView
|
|
||||||
// });
|
|
||||||
// });'
|
|
||||||
//);
|
|
||||||
?>
|
|
||||||
<div class="user-questionnaire-view">
|
<div class="user-questionnaire-view">
|
||||||
|
|
||||||
<!-- --><?php //var_dump($model->setPercentCorrectAnswers(4)); die();?>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<?= Html::a('Список', ['index'], ['class' => 'btn btn-primary']) ?>
|
<?= Html::a('Список', ['index'], ['class' => 'btn btn-primary']) ?>
|
||||||
<?= Html::a('Изменить', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
|
<?= Html::a('Изменить', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
|
||||||
@ -98,7 +86,7 @@ YiiAsset::register($this);
|
|||||||
'class' => 'btn btn-success',
|
'class' => 'btn btn-success',
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
if(ScoreCalculatorHelper::checkAnswerFlagsForNull($model))
|
if(ScoreCalculatorService::checkAnswerFlagsForNull($model))
|
||||||
{
|
{
|
||||||
echo 'Ответы проверены. Посчитать баллы?';
|
echo 'Ответы проверены. Посчитать баллы?';
|
||||||
echo Html::a('Посчитать баллы', ['calculate-score', 'id' => $model->id], [
|
echo Html::a('Посчитать баллы', ['calculate-score', 'id' => $model->id], [
|
||||||
@ -141,7 +129,7 @@ YiiAsset::register($this);
|
|||||||
'attribute' => 'answer_flag',
|
'attribute' => 'answer_flag',
|
||||||
'format' => 'raw',
|
'format' => 'raw',
|
||||||
'value' => function ($model) {
|
'value' => function ($model) {
|
||||||
return AnswerHelper::answerStatusLabel($model->answer_flag);
|
return AnswerHelper::userResponseLabel($model->answer_flag);
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -169,5 +157,4 @@ YiiAsset::register($this);
|
|||||||
]);
|
]);
|
||||||
?>
|
?>
|
||||||
<?php Pjax::end(); ?>
|
<?php Pjax::end(); ?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -38,12 +38,19 @@ use yii\widgets\ActiveForm;
|
|||||||
|
|
||||||
<?= $form->field($model, 'response_body')->textInput(['maxlength' => true]) ?>
|
<?= $form->field($model, 'response_body')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
<?= $form->field($model, 'answer_flag')->dropDownList(
|
<?= $form->field($model, 'answer_flag')->dropDownList([
|
||||||
AnswerHelper::answerFlagsList(),
|
'0.0' => 'Ошибочный',
|
||||||
[
|
'0.1' => '10%',
|
||||||
'prompt' => 'Выберите'
|
'0.2' => '20%',
|
||||||
]
|
'0.3' => '30%',
|
||||||
) ?>
|
'0.4' => '40%',
|
||||||
|
'0.5' => '50%',
|
||||||
|
'0.6' => '60%',
|
||||||
|
'0.7' => '70%',
|
||||||
|
'0.8' => '80%',
|
||||||
|
'0.9' => '90%',
|
||||||
|
'1' => '100%',
|
||||||
|
]); ?>
|
||||||
|
|
||||||
<?= $form->field($model, 'user_questionnaire_uuid')->textInput(['maxlength' => true]) ?>
|
<?= $form->field($model, 'user_questionnaire_uuid')->textInput(['maxlength' => true]) ?>
|
||||||
|
|
||||||
|
@ -20,13 +20,6 @@ $this->params['breadcrumbs'][] = $this->title;
|
|||||||
<?= Html::a('Новый ответ пользователя', ['create'], ['class' => 'btn btn-success']) ?>
|
<?= Html::a('Новый ответ пользователя', ['create'], ['class' => 'btn btn-success']) ?>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<?php
|
|
||||||
//echo $this->render('_search_by_questionnaire', [
|
|
||||||
// 'model' => $searchModel,
|
|
||||||
// ])
|
|
||||||
?>
|
|
||||||
|
|
||||||
|
|
||||||
<?= GridView::widget([
|
<?= GridView::widget([
|
||||||
'dataProvider' => $dataProvider,
|
'dataProvider' => $dataProvider,
|
||||||
'filterModel' => $searchModel,
|
'filterModel' => $searchModel,
|
||||||
@ -50,7 +43,7 @@ $this->params['breadcrumbs'][] = $this->title;
|
|||||||
'format' => 'raw',
|
'format' => 'raw',
|
||||||
'filter' => AnswerHelper::answerFlagsList(),
|
'filter' => AnswerHelper::answerFlagsList(),
|
||||||
'value' => function ($model) {
|
'value' => function ($model) {
|
||||||
return AnswerHelper::answerStatusLabel($model->answer_flag);
|
return AnswerHelper::userResponseLabel($model->answer_flag);
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@ -44,7 +44,7 @@ YiiAsset::register($this);
|
|||||||
[
|
[
|
||||||
'attribute' => 'answer_flag',
|
'attribute' => 'answer_flag',
|
||||||
'format' => 'raw',
|
'format' => 'raw',
|
||||||
'value' => AnswerHelper::answerFlagLabel($model->answer_flag),
|
'value' => AnswerHelper::userResponseLabel($model->answer_flag),
|
||||||
],
|
],
|
||||||
'user_questionnaire_uuid',
|
'user_questionnaire_uuid',
|
||||||
],
|
],
|
||||||
|
@ -40,7 +40,7 @@ class AnswerHelper
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function answerStatusLabel($answer_flag): string
|
public static function userResponseLabel($answer_flag): string
|
||||||
{
|
{
|
||||||
$class = 'label label-warning';
|
$class = 'label label-warning';
|
||||||
$content = 'Не проверен';
|
$content = 'Не проверен';
|
||||||
|
@ -150,8 +150,8 @@ class UserQuestionnaire extends ActiveRecord
|
|||||||
*/
|
*/
|
||||||
public function numCorrectAnswersWithoutOpenQuestions()
|
public function numCorrectAnswersWithoutOpenQuestions()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Answer::className(), ['question_id' => 'question_id'])
|
return $this->hasMany(Answer::className(), ['question_id' => 'id'])
|
||||||
->viaTable('user_response', ['user_questionnaire_uuid' => 'uuid'])
|
->viaTable('question', ['questionnaire_id' => 'questionnaire_id'])
|
||||||
->where(['answer_flag' => '1'])
|
->where(['answer_flag' => '1'])
|
||||||
->andWhere(['status' => '1'])
|
->andWhere(['status' => '1'])
|
||||||
->count();
|
->count();
|
||||||
@ -162,9 +162,10 @@ class UserQuestionnaire extends ActiveRecord
|
|||||||
*/
|
*/
|
||||||
public function numOpenQuestionsAnswers()
|
public function numOpenQuestionsAnswers()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Question::className(), ['id' => 'question_id'])
|
return $this->hasMany(Question::className(), ['questionnaire_id' => 'id'])
|
||||||
->viaTable('user_response', ['user_questionnaire_uuid' => 'uuid'])
|
->viaTable('questionnaire', ['id' => 'questionnaire_id'])
|
||||||
->where(['question_type_id' => '1'])
|
->where(['question_type_id' => '1'])
|
||||||
|
->andWhere(['status' => '1'])
|
||||||
->count();
|
->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace common\helpers;
|
namespace common\services;
|
||||||
|
|
||||||
use backend\modules\questionnaire\models\Answer;
|
use backend\modules\questionnaire\models\Answer;
|
||||||
//use backend\modules\questionnaire\models\UserQuestionnaire;
|
|
||||||
use common\models\UserQuestionnaire;
|
use common\models\UserQuestionnaire;
|
||||||
use common\models\UserResponse;
|
use common\models\UserResponse;
|
||||||
|
use yii\base\InvalidConfigException;
|
||||||
use yii\helpers\ArrayHelper;
|
use yii\helpers\ArrayHelper;
|
||||||
|
|
||||||
class ScoreCalculatorHelper
|
class ScoreCalculatorService
|
||||||
{
|
{
|
||||||
public static function rateResponses(UserQuestionnaire $user_questionnaire)
|
public static function rateResponses(UserQuestionnaire $user_questionnaire)
|
||||||
{
|
{
|
||||||
@ -45,6 +45,9 @@ class ScoreCalculatorHelper
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws InvalidConfigException
|
||||||
|
*/
|
||||||
public static function calculateScore(UserQuestionnaire $userQuestionnaire)
|
public static function calculateScore(UserQuestionnaire $userQuestionnaire)
|
||||||
{
|
{
|
||||||
$responses_questions = $userQuestionnaire->hasMany(UserResponse::className(), ['user_questionnaire_uuid' => 'uuid'])
|
$responses_questions = $userQuestionnaire->hasMany(UserResponse::className(), ['user_questionnaire_uuid' => 'uuid'])
|
||||||
@ -72,11 +75,9 @@ class ScoreCalculatorHelper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if($score !== null) {
|
|
||||||
self::setPercentCorrectAnswers($user_correct_answers_num, $userQuestionnaire);
|
self::setPercentCorrectAnswers($user_correct_answers_num, $userQuestionnaire);
|
||||||
$userQuestionnaire->score = round($score);
|
$userQuestionnaire->score = round($score);
|
||||||
$userQuestionnaire->save();
|
$userQuestionnaire->save();
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static function isCorrect($answer_flag): bool
|
protected static function isCorrect($answer_flag): bool
|
||||||
@ -92,6 +93,9 @@ class ScoreCalculatorHelper
|
|||||||
return Answer::numCorrectAnswers($question_id);
|
return Answer::numCorrectAnswers($question_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws InvalidConfigException
|
||||||
|
*/
|
||||||
protected static function setPercentCorrectAnswers($user_correct_answers_num, UserQuestionnaire $userQuestionnaire)
|
protected static function setPercentCorrectAnswers($user_correct_answers_num, UserQuestionnaire $userQuestionnaire)
|
||||||
{
|
{
|
||||||
if($user_correct_answers_num !== null) {
|
if($user_correct_answers_num !== null) {
|
@ -19,11 +19,7 @@ class TemplateService
|
|||||||
public static function getTemplateWithFields($template_id): array
|
public static function getTemplateWithFields($template_id): array
|
||||||
{
|
{
|
||||||
return Template::find()
|
return Template::find()
|
||||||
// ->select('title')
|
|
||||||
->joinWith('templateDocumentFields.field')
|
->joinWith('templateDocumentFields.field')
|
||||||
// ->with([
|
|
||||||
// 'fields' => function ($query) { $query->select(['id', 'title', 'field_template']); }
|
|
||||||
// ])
|
|
||||||
->where(['template.id' => $template_id])
|
->where(['template.id' => $template_id])
|
||||||
->asArray()
|
->asArray()
|
||||||
->one();
|
->one();
|
||||||
|
37
common/services/UserQuestionnaireService.php
Normal file
37
common/services/UserQuestionnaireService.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace common\services;
|
||||||
|
|
||||||
|
use common\models\UserQuestionnaire;
|
||||||
|
use yii\web\NotFoundHttpException;
|
||||||
|
|
||||||
|
class UserQuestionnaireService
|
||||||
|
{
|
||||||
|
public static function getQuestionnaireList($user_id): array
|
||||||
|
{
|
||||||
|
$userQuestionnaireModels = UserQuestionnaire::findActiveUserQuestionnaires($user_id);
|
||||||
|
array_walk($userQuestionnaireModels, function (&$arr) {
|
||||||
|
unset(
|
||||||
|
$arr['questionnaire_id'],
|
||||||
|
$arr['created_at'],
|
||||||
|
$arr['updated_at'],
|
||||||
|
$arr['id'],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
return $userQuestionnaireModels;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws NotFoundHttpException
|
||||||
|
*/
|
||||||
|
public static function calculateScore($user_questionnaire_uuid)
|
||||||
|
{
|
||||||
|
$userQuestionnaireModel = UserQuestionnaire::findOne(['uuid' => $user_questionnaire_uuid]);
|
||||||
|
if(empty($userQuestionnaireModel)) {
|
||||||
|
throw new NotFoundHttpException('The questionnaire with this uuid does not exist');
|
||||||
|
}
|
||||||
|
ScoreCalculatorService::rateResponses($userQuestionnaireModel);
|
||||||
|
ScoreCalculatorService::calculateScore($userQuestionnaireModel);
|
||||||
|
return $userQuestionnaireModel;
|
||||||
|
}
|
||||||
|
}
|
74
common/services/UserResponseService.php
Normal file
74
common/services/UserResponseService.php
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace common\services;
|
||||||
|
|
||||||
|
use common\models\UserResponse;
|
||||||
|
use Yii;
|
||||||
|
use yii\web\BadRequestHttpException;
|
||||||
|
use yii\web\ServerErrorHttpException;
|
||||||
|
|
||||||
|
class UserResponseService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @throws BadRequestHttpException
|
||||||
|
* @throws ServerErrorHttpException
|
||||||
|
*/
|
||||||
|
public static function createUserResponse($userResponseParams): UserResponse
|
||||||
|
{
|
||||||
|
$userResponse = new UserResponse();
|
||||||
|
$userResponse->load($userResponseParams, '');
|
||||||
|
(new UserResponseService)->validateResponseModel($userResponse);
|
||||||
|
(new UserResponseService)->saveModel($userResponse);
|
||||||
|
return $userResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws BadRequestHttpException
|
||||||
|
* @throws ServerErrorHttpException
|
||||||
|
*/
|
||||||
|
public static function createUserResponses($userResponsesParams): array
|
||||||
|
{
|
||||||
|
$userResponseModels = array();
|
||||||
|
foreach ($userResponsesParams['userResponses'] as $userResponseParams) {
|
||||||
|
$model = new UserResponse();
|
||||||
|
$model->load($userResponseParams, '');
|
||||||
|
(new UserResponseService)->validateResponseModel($model);
|
||||||
|
|
||||||
|
array_push($userResponseModels, $model);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($userResponseModels as $responseModel) {
|
||||||
|
(new UserResponseService)->saveModel($responseModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $userResponseModels;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws BadRequestHttpException
|
||||||
|
*/
|
||||||
|
protected function validateResponseModel($model)
|
||||||
|
{
|
||||||
|
if (!$model->validate()) {
|
||||||
|
throw new BadRequestHttpException(json_encode($model->errors));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($model->user_id) or empty($model->question_id) or empty($model->user_questionnaire_uuid)) {
|
||||||
|
throw new BadRequestHttpException(json_encode('One of the parameters is empty!'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws ServerErrorHttpException
|
||||||
|
*/
|
||||||
|
protected function saveModel($model)
|
||||||
|
{
|
||||||
|
if ($model->save()) {
|
||||||
|
ScoreCalculatorService::rateOneResponse($model);
|
||||||
|
$response = Yii::$app->getResponse();
|
||||||
|
$response->setStatusCode(201);
|
||||||
|
} elseif (!$model->hasErrors()) {
|
||||||
|
throw new ServerErrorHttpException('Failed to create the object for unknown reason.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1083,7 +1083,7 @@
|
|||||||
answer_flag
|
answer_flag
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
Флаг ответа(1 - верно, 0 - ложно)
|
Флаг ответа(1 - верно, 0 - ложно). Если отправлен ответ на открытый вопрос, флаг ответа не будет возвращаться до момента проверки в админ панели.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
@ -97005,3 +97005,29 @@
|
|||||||
127.0.0.1 - - [11/Mar/2022:10:48:38 +0300] "GET /reports/ajax/get-reports-for-day-by-date?date=2022-01-31 HTTP/1.1" 200 456 "http://backend.guild.loc/reports/reports" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
127.0.0.1 - - [11/Mar/2022:10:48:38 +0300] "GET /reports/ajax/get-reports-for-day-by-date?date=2022-01-31 HTTP/1.1" 200 456 "http://backend.guild.loc/reports/reports" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
127.0.0.1 - - [11/Mar/2022:10:48:38 +0300] "GET /reports/ajax/get-reports-for-month-by-id-year-month?&month=01&year=2022 HTTP/1.1" 200 12 "http://backend.guild.loc/reports/reports" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
127.0.0.1 - - [11/Mar/2022:10:48:38 +0300] "GET /reports/ajax/get-reports-for-month-by-id-year-month?&month=01&year=2022 HTTP/1.1" 200 12 "http://backend.guild.loc/reports/reports" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
127.0.0.1 - - [11/Mar/2022:10:48:38 +0300] "GET /reports/ajax/get-reports-for-day-by-date?date=2022-01-31 HTTP/1.1" 200 456 "http://backend.guild.loc/reports/reports" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
127.0.0.1 - - [11/Mar/2022:10:48:38 +0300] "GET /reports/ajax/get-reports-for-day-by-date?date=2022-01-31 HTTP/1.1" 200 456 "http://backend.guild.loc/reports/reports" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:51 +0300] "GET /questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5 HTTP/1.1" 200 13709 "http://backend.guild.loc/questionnaire/user-questionnaire/view?id=1" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/39b83f70/css/select2.css HTTP/1.1" 200 17358 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/71772193/css/bootstrap.css HTTP/1.1" 200 145933 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/5b57ee2f/css/select2-addl.css HTTP/1.1" 200 994 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/5b57ee2f/css/select2-krajee.css HTTP/1.1" 200 20817 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/bae3a4f/css/kv-widgets.css HTTP/1.1" 200 813 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /css/site.css HTTP/1.1" 200 805 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/ccdf1f3a/css/font-awesome.min.css HTTP/1.1" 200 31000 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/cd83ad4b/css/AdminLTE.min.css HTTP/1.1" 200 106548 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/cd83ad4b/css/skins/_all-skins.min.css HTTP/1.1" 200 41635 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/cd83ad4b/img/user2-160x160.jpg HTTP/1.1" 200 7070 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/5aa3f20b/jquery.js HTTP/1.1" 200 288580 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/27128343/yii.js HTTP/1.1" 200 20934 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/39b83f70/js/i18n/ru.js HTTP/1.1" 200 1171 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/39b83f70/js/select2.full.js HTTP/1.1" 200 173566 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/5b57ee2f/js/select2-krajee.js HTTP/1.1" 200 7344 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/bae3a4f/js/kv-widgets.js HTTP/1.1" 200 1061 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/27128343/yii.validation.js HTTP/1.1" 200 16405 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/27128343/yii.activeForm.js HTTP/1.1" 200 36765 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /js/site.js HTTP/1.1" 200 1214 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/71772193/js/bootstrap.js HTTP/1.1" 200 75484 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/cd83ad4b/js/adminlte.min.js HTTP/1.1" 200 13611 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /debug/default/toolbar?tag=6231a1a376864 HTTP/1.1" 200 3426 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/bae3a4f/img/loading-plugin.gif HTTP/1.1" 200 847 "http://backend.guild.loc/assets/bae3a4f/css/kv-widgets.css" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:52 +0300] "GET /assets/ccdf1f3a/fonts/fontawesome-webfont.woff2?v=4.7.0 HTTP/1.1" 200 77160 "http://backend.guild.loc/assets/ccdf1f3a/css/font-awesome.min.css" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
127.0.0.1 - - [16/Mar/2022:11:36:53 +0300] "GET /favicon.ico HTTP/1.1" 200 318 "http://backend.guild.loc/questionnaire/user-response/update?id=218&user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5" "Mozilla/5.0 (X11; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0"
|
||||||
|
@ -2,26 +2,12 @@
|
|||||||
|
|
||||||
namespace frontend\modules\api\controllers;
|
namespace frontend\modules\api\controllers;
|
||||||
|
|
||||||
use common\helpers\ScoreCalculatorHelper;
|
use common\services\UserQuestionnaireService;
|
||||||
use common\models\UserQuestionnaire;
|
|
||||||
use Yii;
|
|
||||||
use yii\filters\auth\HttpBearerAuth;
|
|
||||||
use yii\rest\Controller;
|
|
||||||
use yii\web\NotFoundHttpException;
|
use yii\web\NotFoundHttpException;
|
||||||
|
use yii\web\ServerErrorHttpException;
|
||||||
|
|
||||||
class UserQuestionnaireController extends ApiController
|
class UserQuestionnaireController extends ApiController
|
||||||
{
|
{
|
||||||
public function behaviors()
|
|
||||||
{
|
|
||||||
$behaviors = parent::behaviors();
|
|
||||||
|
|
||||||
$behaviors['authenticator']['authMethods'] = [
|
|
||||||
HttpBearerAuth::className(),
|
|
||||||
];
|
|
||||||
|
|
||||||
return $behaviors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function verbs()
|
public function verbs()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -33,51 +19,28 @@ class UserQuestionnaireController extends ApiController
|
|||||||
/**
|
/**
|
||||||
* @throws NotFoundHttpException
|
* @throws NotFoundHttpException
|
||||||
*/
|
*/
|
||||||
public function actionQuestionnairesList()//: array
|
public function actionQuestionnairesList($user_id): array
|
||||||
{
|
|
||||||
$user_id = Yii::$app->request->get('user_id');
|
|
||||||
|
|
||||||
if(empty($user_id) or !is_numeric($user_id))
|
|
||||||
{
|
{
|
||||||
|
if (empty($user_id) or !is_numeric($user_id)) {
|
||||||
throw new NotFoundHttpException('Incorrect user ID');
|
throw new NotFoundHttpException('Incorrect user ID');
|
||||||
}
|
}
|
||||||
|
$userQuestionnaireModels = UserQuestionnaireService::getQuestionnaireList($user_id);
|
||||||
$userQuestionnaireModels = UserQuestionnaire::findActiveUserQuestionnaires($user_id);
|
|
||||||
if(empty($userQuestionnaireModels)) {
|
if(empty($userQuestionnaireModels)) {
|
||||||
throw new NotFoundHttpException('Active questionnaire not found');
|
throw new NotFoundHttpException('Active questionnaire not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
array_walk( $userQuestionnaireModels, function(&$arr){
|
|
||||||
unset(
|
|
||||||
$arr['questionnaire_id'],
|
|
||||||
// $arr['created_at'],
|
|
||||||
// $arr['updated_at'],
|
|
||||||
$arr['id'],
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
return $userQuestionnaireModels;
|
return $userQuestionnaireModels;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionQuestionnaireCompleted()
|
/**
|
||||||
|
* @throws NotFoundHttpException
|
||||||
|
* @throws ServerErrorHttpException
|
||||||
|
*/
|
||||||
|
public function actionQuestionnaireCompleted($user_questionnaire_uuid)
|
||||||
{
|
{
|
||||||
// return Yii::$app->request;
|
$userQuestionnaireModel = UserQuestionnaireService::calculateScore($user_questionnaire_uuid);
|
||||||
$user_questionnaire_uuid = Yii::$app->request->get('user_questionnaire_uuid');
|
if ($userQuestionnaireModel->errors) {
|
||||||
|
throw new ServerErrorHttpException(json_encode($userQuestionnaireModel->errors));
|
||||||
if(empty($user_questionnaire_uuid))
|
|
||||||
{
|
|
||||||
throw new NotFoundHttpException('Incorrect user ID');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$userQuestionnaireModel = UserQuestionnaire::findOne(['uuid' => $user_questionnaire_uuid]);
|
|
||||||
|
|
||||||
if(empty($userQuestionnaireModel)) {
|
|
||||||
throw new NotFoundHttpException('Active questionnaire not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
ScoreCalculatorHelper::rateResponses($userQuestionnaireModel);
|
|
||||||
ScoreCalculatorHelper::calculateScore($userQuestionnaireModel);
|
|
||||||
|
|
||||||
return $userQuestionnaireModel;
|
return $userQuestionnaireModel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,31 +2,15 @@
|
|||||||
|
|
||||||
namespace frontend\modules\api\controllers;
|
namespace frontend\modules\api\controllers;
|
||||||
|
|
||||||
use common\helpers\ScoreCalculatorHelper;
|
|
||||||
use common\models\UserResponse;
|
use common\models\UserResponse;
|
||||||
use Exception;
|
use common\services\UserResponseService;
|
||||||
use Yii;
|
use Yii;
|
||||||
use yii\base\InvalidConfigException;
|
use yii\base\InvalidConfigException;
|
||||||
use yii\filters\auth\HttpBearerAuth;
|
|
||||||
use yii\rest\ActiveController;
|
|
||||||
use yii\web\BadRequestHttpException;
|
use yii\web\BadRequestHttpException;
|
||||||
use yii\web\ServerErrorHttpException;
|
use yii\web\ServerErrorHttpException;
|
||||||
|
|
||||||
class UserResponseController extends ApiController
|
class UserResponseController extends ApiController
|
||||||
{
|
{
|
||||||
public $modelClass = 'common\models\UserResponse';
|
|
||||||
|
|
||||||
// public function behaviors(): array
|
|
||||||
// {
|
|
||||||
// $behaviors = parent::behaviors();
|
|
||||||
//
|
|
||||||
// $behaviors['authenticator']['authMethods'] = [
|
|
||||||
// HttpBearerAuth::className(),
|
|
||||||
// ];
|
|
||||||
//
|
|
||||||
// return $behaviors;
|
|
||||||
// }
|
|
||||||
|
|
||||||
public function verbs(): array
|
public function verbs(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -35,82 +19,31 @@ class UserResponseController extends ApiController
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// public function actions()
|
|
||||||
// {
|
|
||||||
// $actions = parent::actions();
|
|
||||||
// unset($actions['create']);
|
|
||||||
// return $actions;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws InvalidConfigException
|
* @throws InvalidConfigException
|
||||||
* @throws BadRequestHttpException
|
* @throws ServerErrorHttpException|BadRequestHttpException
|
||||||
* @throws ServerErrorHttpException
|
|
||||||
*/
|
*/
|
||||||
public function actionSetResponse()
|
public function actionSetResponse(): UserResponse
|
||||||
{
|
{
|
||||||
$request = Yii::$app->getRequest()->getBodyParams();
|
$userResponseModel = UserResponseService::createUserResponse(Yii::$app->getRequest()->getBodyParams());
|
||||||
|
if ($userResponseModel->errors) {
|
||||||
$model = new UserResponse();
|
throw new ServerErrorHttpException(json_encode($userResponseModel->errors));
|
||||||
$model->load($request, '');
|
}
|
||||||
|
return $userResponseModel;
|
||||||
$this->validateResponseModel($model);
|
|
||||||
$this->saveModel($model);
|
|
||||||
|
|
||||||
return $model;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws InvalidConfigException
|
* @throws InvalidConfigException
|
||||||
* @throws ServerErrorHttpException
|
* @throws ServerErrorHttpException|BadRequestHttpException
|
||||||
* @throws BadRequestHttpException
|
|
||||||
*/
|
*/
|
||||||
public function actionSetResponses(): array
|
public function actionSetResponses(): array
|
||||||
{
|
{
|
||||||
$requests = Yii::$app->getRequest()->getBodyParams();
|
$userResponseModels = UserResponseService::createUserResponses(Yii::$app->getRequest()->getBodyParams());
|
||||||
|
foreach ($userResponseModels as $model) {
|
||||||
$responseModels = array();
|
if ($model->errors) {
|
||||||
|
throw new ServerErrorHttpException(json_encode($model->errors));
|
||||||
foreach ($requests['userResponses'] as $request) {
|
|
||||||
$model = new UserResponse();
|
|
||||||
$model->load($request, '');
|
|
||||||
$this->validateResponseModel($model);
|
|
||||||
|
|
||||||
array_push($responseModels, $model);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($responseModels as $responseModel) {
|
|
||||||
$this->saveModel($responseModel);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $responseModels;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws BadRequestHttpException
|
|
||||||
*/
|
|
||||||
protected function validateResponseModel($model)
|
|
||||||
{
|
|
||||||
if(!$model->validate()) {
|
|
||||||
throw new BadRequestHttpException(json_encode($model->errors));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($model->user_id) or empty($model->question_id) or empty($model->user_questionnaire_uuid)) {
|
|
||||||
throw new BadRequestHttpException(json_encode($model->errors));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $userResponseModels;
|
||||||
/**
|
|
||||||
* @throws ServerErrorHttpException
|
|
||||||
*/
|
|
||||||
protected function saveModel($model)
|
|
||||||
{
|
|
||||||
if ($model->save()) {
|
|
||||||
ScoreCalculatorHelper::rateOneResponse($model);
|
|
||||||
$response = Yii::$app->getResponse();
|
|
||||||
$response->setStatusCode(201);
|
|
||||||
} elseif (!$model->hasErrors()) {
|
|
||||||
throw new ServerErrorHttpException('Failed to create the object for unknown reason.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user