124 lines
4.1 KiB
PHP
124 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace Komponent\Component\Testquestions\Administrator\Controller;
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\MVC\Controller\BaseController;
|
|
use Joomla\CMS\Router\Route;
|
|
use Joomla\CMS\Session\Session;
|
|
|
|
class ResultController extends BaseController
|
|
{
|
|
public function save(): void
|
|
{
|
|
$this->saveAssessment();
|
|
$id = Factory::getApplication()->getInput()->post->getInt('id');
|
|
|
|
$this->setRedirect(
|
|
Route::_('index.php?option=com_testquestions&view=result&id=' . $id, false),
|
|
Text::_('COM_TESTQUESTIONS_RESULT_SAVED')
|
|
);
|
|
}
|
|
|
|
public function save2close(): void
|
|
{
|
|
$this->saveAssessment();
|
|
$this->setRedirect(
|
|
Route::_('index.php?option=com_testquestions&view=results', false),
|
|
Text::_('COM_TESTQUESTIONS_RESULT_SAVED')
|
|
);
|
|
}
|
|
|
|
public function ai(): void
|
|
{
|
|
if (!Session::checkToken()) {
|
|
throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
|
}
|
|
|
|
$input = Factory::getApplication()->getInput();
|
|
$id = $input->post->getInt('id');
|
|
$questionId = $input->post->getInt('ai_question_id');
|
|
$message = Text::_('COM_TESTQUESTIONS_AI_RESULT');
|
|
$type = 'message';
|
|
|
|
try {
|
|
$this->getModel('Result')->evaluateWithAi($id, $questionId);
|
|
} catch (\Throwable $error) {
|
|
$errorMessage = $error->getMessage();
|
|
$message = str_starts_with($errorMessage, 'AI_KEY_EMPTY|')
|
|
? 'Diagnostyka konfiguracji AI (1.42.8): ' . substr($errorMessage, strlen('AI_KEY_EMPTY|'))
|
|
: ($errorMessage === 'AI_NOT_CONFIGURED'
|
|
? Text::_('COM_TESTQUESTIONS_AI_NOT_CONFIGURED')
|
|
: Text::sprintf('COM_TESTQUESTIONS_AI_ERROR', $errorMessage));
|
|
$type = 'error';
|
|
}
|
|
|
|
$this->setRedirect(
|
|
Route::_('index.php?option=com_testquestions&view=result&id=' . $id, false),
|
|
$message,
|
|
$type
|
|
);
|
|
}
|
|
|
|
public function aiAll(): void
|
|
{
|
|
if (!Session::checkToken()) {
|
|
throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
|
}
|
|
|
|
$input = Factory::getApplication()->getInput();
|
|
$id = $input->post->getInt('id');
|
|
$message = '';
|
|
$type = 'message';
|
|
|
|
try {
|
|
$summary = $this->getModel('Result')->evaluateAllWithAi($id);
|
|
if ($summary['failed'] > 0) {
|
|
$message = Text::sprintf(
|
|
'COM_TESTQUESTIONS_AI_BULK_PARTIAL',
|
|
$summary['evaluated'],
|
|
$summary['failed'],
|
|
$summary['first_error']
|
|
);
|
|
$type = 'warning';
|
|
} else {
|
|
$message = Text::sprintf('COM_TESTQUESTIONS_AI_BULK_DONE', $summary['evaluated']);
|
|
}
|
|
} catch (\Throwable $error) {
|
|
$errorMessage = $error->getMessage();
|
|
$message = $errorMessage === 'AI_NO_OPEN_QUESTIONS'
|
|
? Text::_('COM_TESTQUESTIONS_AI_NO_OPEN_QUESTIONS')
|
|
: ($errorMessage === 'AI_NOT_CONFIGURED'
|
|
? Text::_('COM_TESTQUESTIONS_AI_NOT_CONFIGURED')
|
|
: Text::sprintf('COM_TESTQUESTIONS_AI_ERROR', $errorMessage));
|
|
$type = 'error';
|
|
}
|
|
|
|
$this->setRedirect(
|
|
Route::_('index.php?option=com_testquestions&view=result&id=' . $id, false),
|
|
$message,
|
|
$type
|
|
);
|
|
}
|
|
|
|
private function saveAssessment(): void
|
|
{
|
|
if (!Session::checkToken()) {
|
|
throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
|
}
|
|
|
|
$input = Factory::getApplication()->getInput();
|
|
$id = $input->post->getInt('id');
|
|
$points = (array) $input->post->get('awarded_points', [], 'array');
|
|
$comments = (array) $input->post->get('comments', [], 'array');
|
|
$model = $this->getModel('Result');
|
|
|
|
if (!$model->saveAssessment($id, $points, $comments)) {
|
|
throw new \RuntimeException(Text::_('COM_TESTQUESTIONS_RESULT_NOT_FOUND'));
|
|
}
|
|
}
|
|
}
|