58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace frontend\modules\api\services;
 | 
						|
 | 
						|
use common\helpers\UserQuestionnaireStatusHelper;
 | 
						|
use common\services\ScoreCalculatorService;
 | 
						|
use frontend\modules\api\models\questionnaire\UserQuestionnaire;
 | 
						|
use yii\base\InvalidConfigException;
 | 
						|
use yii\web\BadRequestHttpException;
 | 
						|
use yii\web\NotFoundHttpException;
 | 
						|
 | 
						|
class UserQuestionnaireService
 | 
						|
{
 | 
						|
    public static function getQuestionnaireList($user_id): array
 | 
						|
    {
 | 
						|
        return UserQuestionnaire::findActiveUserQuestionnaires($user_id);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @throws NotFoundHttpException
 | 
						|
     * @throws InvalidConfigException
 | 
						|
     */
 | 
						|
    public static function calculateScore($user_questionnaire_uuid): UserQuestionnaire
 | 
						|
    {
 | 
						|
        $userQuestionnaireModel = UserQuestionnaire::findOne(['uuid' => $user_questionnaire_uuid]);
 | 
						|
        if (empty($userQuestionnaireModel)) {
 | 
						|
            throw new NotFoundHttpException('The questionnaire with this uuid does not exist');
 | 
						|
        }
 | 
						|
 | 
						|
       if (!in_array($userQuestionnaireModel->status, UserQuestionnaireStatusHelper::listCompleteStatuses() )) {
 | 
						|
           ScoreCalculatorService::rateResponses($userQuestionnaireModel);
 | 
						|
           if (ScoreCalculatorService::checkAnswerFlagsForNull($userQuestionnaireModel)) {
 | 
						|
               ScoreCalculatorService::calculateScore($userQuestionnaireModel);
 | 
						|
           } else {
 | 
						|
               $userQuestionnaireModel->status = 3;
 | 
						|
               $userQuestionnaireModel->save();
 | 
						|
           }
 | 
						|
       }
 | 
						|
        return $userQuestionnaireModel;
 | 
						|
    }
 | 
						|
 | 
						|
    public function checkTimeLimit(UserQuestionnaire $userQuestionnaire): bool
 | 
						|
    {
 | 
						|
        if (!$userQuestionnaire->start_testing) {
 | 
						|
            $userQuestionnaire->start_testing = date('Y:m:d H:i:s');
 | 
						|
            $userQuestionnaire->save();
 | 
						|
        } elseif ($userQuestionnaire->questionnaire->time_limit) {
 | 
						|
            $limitTime = strtotime($userQuestionnaire->questionnaire->time_limit) - strtotime("00:00:00");
 | 
						|
            $currentTime = strtotime(date('Y-m-d H:i:s'));
 | 
						|
            $startTesting = strtotime($userQuestionnaire->start_testing);
 | 
						|
 | 
						|
            if ($currentTime - $startTesting > $limitTime) {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
} |